def add_output(self, port=pyof.OFPP_CONTROLLER, max_len=pyof.OFP_DEFAULT_MISS_SEND_LEN): """Add output action to list """ oao = pyof.ofp_action_output() oao.max_len = max_len oao.port = port self.add(oao)
def __init__(self, server, ofconn, sendinterval=10, linktimeout=30): """Initialize @param server yapc core """ if (sendinterval > linktimeout): output.warn("Probe interval of "+str(sendinterval)+\ "is smaller than timeout of "+str(linktimeout), self.__class__.__name__) ##Interval to send LLDP per switch/port self.interval = sendinterval self.__minterval = sendinterval ##Time to wait before timing out link self.link_maintain = link_maintain(server, linktimeout) ##Reference to core self.server = server ##Reference to OpenFlow connections self.conn = ofconn ##Current list of switch/port LLDP is sent self.__sw_port = [] ##Packet out template self.__po = pyof.ofp_packet_out() oao = pyof.ofp_action_output() self.__po.in_port = pyof.OFPP_NONE self.__po.actions_len = oao.len self.__po.actions.append(oao) mc.get_client() server.register_event_handler(ofevents.pktin.name, self) server.register_event_handler(ofevents.port_status.name, self) server.register_event_handler(ofevents.features_reply.name, self) server.post_event(yapc.priv_callback(self, True), self.interval)
def unpack_action(self, string): """Unpack action @param string binary string of actions @return (action, remaining) """ remaining = string action = None ah = pyof.ofp_action_header() ah.unpack(string) if (ah.type == pyof.OFPAT_OUTPUT): action = pyof.ofp_action_output() remaining = action.unpack(string) elif (ah.type == pyof.OFPAT_SET_NW_SRC) or (ah.type == pyof.OFPAT_SET_NW_DST): action = pyof.ofp_action_nw_addr() remaining = action.unpack(string) else: output.warn("Unhandled action type "+str(ah.type)+"!", self.__class__.__name__) return (None, remaining[ah.len:]) return (action, remaining)