class DescStats(GenericStruct): """Information available from the OFPST_DESC stats request. Information about the switch manufacturer, hardware revision, software revision, serial number and a description field. """ #: Manufacturer description mfr_desc = Char(length=DESC_STR_LEN) #: Hardware description hw_desc = Char(length=DESC_STR_LEN) #: Software description sw_desc = Char(length=DESC_STR_LEN) #: Serial number serial_num = Char(length=SERIAL_NUM_LEN) def __init__(self, mfr_desc=None, hw_desc=None, sw_desc=None, serial_num=None): """The constructor just assings parameters to object attributes. Args: mfr_desc (str): Manufacturer description hw_desc (str): Hardware description sw_desc (str): Software description serial_num (str): Serial number """ super().__init__() self.mfr_desc = mfr_desc self.hw_desc = hw_desc self.sw_desc = sw_desc self.serial_num = serial_num
class DescStats(GenericStruct): """Information available from the OFPST_DESC stats request. Information about the switch manufacturer, hardware revision, software revision, serial number and a description field. """ mfr_desc = Char(length=DESC_STR_LEN) hw_desc = Char(length=DESC_STR_LEN) sw_desc = Char(length=DESC_STR_LEN) serial_num = Char(length=SERIAL_NUM_LEN) dp_desc = Char(length=DESC_STR_LEN) def __init__(self, mfr_desc=None, hw_desc=None, sw_desc=None, serial_num=None, dp_desc=None): """Create a DescStats with the optional parameters below. Args: mfr_desc (str): Manufacturer description hw_desc (str): Hardware description sw_desc (str): Software description serial_num (str): Serial number dp_desc (str): Human readable description of datapath """ super().__init__() self.mfr_desc = mfr_desc self.hw_desc = hw_desc self.sw_desc = sw_desc self.serial_num = serial_num self.dp_desc = dp_desc
class PhyPort(GenericStruct): """Description of a physical port. The port_no field is a value the datapath associates with a physical port. The hw_addr field typically is the MAC address for the port; :data:`.OFP_ETH_ALEN` is 6. The name field is a null-terminated string containing a human-readable name for the interface. The value of :data:`.OFP_MAX_PORT_NAME_LEN` is 16. :attr:`curr`, :attr:`advertised`, :attr:`supported` and :attr:`peer` are bitmaps of :class:`PortFeatures` enum values that describe features. If unsupported or unavailable, set all bits to zero. """ port_no = UBInt16() hw_addr = HWAddress() name = Char(length=OFP_MAX_PORT_NAME_LEN) config = UBInt32(enum_ref=PortConfig) state = UBInt32(enum_ref=PortState) curr = UBInt32(enum_ref=PortFeatures) advertised = UBInt32(enum_ref=PortFeatures) supported = UBInt32(enum_ref=PortFeatures) peer = UBInt32(enum_ref=PortFeatures) def __init__(self, port_no=None, hw_addr=None, name=None, config=None, state=None, curr=None, advertised=None, supported=None, peer=None): """The constructor takes the optional parameters below. Args: port_no (int): Port number. hw_addr (HWAddress): Hardware address. name(str): Null-terminated name. config (PortConfig): Bitmap of OFPPC* flags. state (PortState): Bitmap of OFPPS* flags. curr (PortFeatures): Current features. advertised (PortFeatures): Features being advertised by the port. supported (PortFeatures): Features supported by the port. peer (PortFeatures): Features advertised by peer. """ super().__init__() self.port_no = port_no self.hw_addr = hw_addr self.name = name self.config = config self.state = state self.curr = curr self.advertised = advertised self.supported = supported self.peer = peer
class TableStats(GenericStruct): """Body of reply to OFPST_TABLE request.""" table_id = UBInt8() #: Align to 32-bits. pad = Pad(3) name = Char(length=OFP_MAX_TABLE_NAME_LEN) wildcards = UBInt32(enum_ref=FlowWildCards) max_entries = UBInt32() active_count = UBInt32() count_lookup = UBInt64() count_matched = UBInt64() def __init__(self, table_id=None, name=None, wildcards=None, max_entries=None, active_count=None, count_lookup=None, count_matched=None): """Create a TableStats with the optional parameters below. Args: table_id (int): Identifier of table. Lower numbered tables are consulted first. name (str): Table name. wildcards (:class:`~pyof.v0x01.common.flow_match.FlowWildCards`): Bitmap of OFPFW_* wildcards that are supported by the table. max_entries (int): Max number of entries supported. active_count (int): Number of active entries. count_lookup (int): Number of packets looked up in table. count_matched (int): Number of packets that hit table. """ super().__init__() self.table_id = table_id self.name = name self.wildcards = wildcards self.max_entries = max_entries self.active_count = active_count self.count_lookup = count_lookup self.count_matched = count_matched
class TableFeatures(GenericStruct): """Abstraction of common class Table Features. Body for MultipartRequest of type OFPMP_TABLE_FEATURES. Body of reply to OFPMP_TABLE_FEATURES request. """ length = UBInt16() # /* Identifier of table. Lower numbered tables are consulted first. */ table_id = UBInt8() # /* Align to 64-bits. */ pad = Pad(5) name = Char(length=OFP_MAX_TABLE_NAME_LEN) # /* Bits of metadata table can match. */ metadata_match = UBInt64() # /* Bits of metadata table can write. */ metadata_write = UBInt64() # /* Bitmap of OFPTC_* values */ config = UBInt32() # /* Max number of entries supported. */ max_entries = UBInt32() # /* Table Feature Property list */ properties = ListOfProperty() def __init__(self, table_id=Table.OFPTT_ALL, name="", metadata_match=0xFFFFFFFFFFFFFFFF, metadata_write=0xFFFFFFFFFFFFFFFF, config=0, max_entries=0, properties=None): """Create a TableFeatures with the optional parameters below. Args: table_id(int): Indetifier of table.The default value OFPTT_ALL(``0xff``) will apply the configuration to all tables in the switch. name(Char): Characters representing the table name. metadata_match(int): Indicate the bits of the metadata field that the table can match on.The default value ``0xFFFFFFFFFFFFFFFF`` indicates that the table can match the full metadata field. metadata_write(int): Indicates the bits of the metadata field that the table can write using the OFPIT_WRITE_METADATA instruction. The default value ``0xFFFFFFFFFFFFFFFF`` indicates that the table can write the full metadata field. config(int): Field reseved for future use. max_entries(int): Describe the maximum number of flow entries that can be inserted into that table. properties(~pyof.v0x04.controller2switch.common.ListOfProperty): List of Property intances. """ super().__init__() self.table_id = table_id self.name = name self.metadata_match = metadata_match self.metadata_write = metadata_write self.config = config self.max_entries = max_entries self.properties = (ListOfProperty() if properties is None else properties) self.update_length() def pack(self, value=None): """Pack method used to update the length of instance and packing. Args: value: Structure to be packed. """ self.update_length() return super().pack(value) def update_length(self): """Update the length of current instance.""" self.length = self.get_size() def unpack(self, buff=None, offset=0): """Unpack *buff* into this object. This method will convert a binary data into a readable value according to the attribute format. Args: buff (bytes): Binary buffer. offset (int): Where to begin unpacking. Raises: :exc:`~.exceptions.UnpackException`: If unpack fails. """ length = UBInt16() length.unpack(buff, offset) super().unpack(buff[:offset+length.value], offset)
class Port(GenericStruct): """Description of a port. The port_no field uniquely identifies a port within a switch. The hw_addr field typically is the MAC address for the port; :data:`.OFP_MAX_ETH_ALEN` is 6. The name field is a null-terminated string containing a human-readable name for the interface. The value of :data:`.OFP_MAX_PORT_NAME_LEN` is 16. :attr:`curr`, :attr:`advertised`, :attr:`supported` and :attr:`peer` fields indicate link modes (speed and duplexity), link type (copper/fiber) and link features (autonegotiation and pause). They are bitmaps of :class:`PortFeatures` enum values that describe features. Multiple of these flags may be set simultaneously. If none of the port speed flags are set, the :attr:`max_speed` or :attr:`curr_speed` are used. """ port_no = UBInt32() length = UBInt16() pad = Pad(2) hw_addr = HWAddress() pad2 = Pad(2) # Align to 64 bits name = Char(length=OFP_MAX_PORT_NAME_LEN) # Null terminated config = UBInt32(enum_ref=PortConfig) # Bitmap of OFPPC_* flags state = UBInt32(enum_ref=PortState) # Bitmap of OFPPS_* flags #pad = Pad(4) #hw_addr = HWAddress() #pad2 = Pad(2) """ These are not existed in version 1.4 specifications curr = UBInt32(enum_ref=PortFeatures) advertised = UBInt32(enum_ref=PortFeatures) supported = UBInt32(enum_ref=PortFeatures) peer = UBInt32(enum_ref=PortFeatures) curr_speed = UBInt32() max_speed = UBInt32() """ def __init__(self, port_no=None, hw_addr=None, name=None, config=None, state=None): """Create a Port with the optional parameters below. Args: port_no (int): Port number. hw_addr (HWAddress): Hardware address. name (str): Null-terminated name. config (~pyof.v0x05.common.port.PortConfig): Bitmap of OFPPC* flags. state (~pyof.v0x05.common.port.PortState): Bitmap of OFPPS* flags. """ super().__init__() self.port_no = port_no self.hw_addr = hw_addr self.name = name self.config = config self.state = state
class Port(GenericStruct): """Description of a port. The port_no field uniquely identifies a port within a switch. The hw_addr field typically is the MAC address for the port; :data:`.OFP_MAX_ETH_ALEN` is 6. The name field is a null-terminated string containing a human-readable name for the interface. The value of :data:`.OFP_MAX_PORT_NAME_LEN` is 16. :attr:`curr`, :attr:`advertised`, :attr:`supported` and :attr:`peer` fields indicate link modes (speed and duplexity), link type (copper/fiber) and link features (autonegotiation and pause). They are bitmaps of :class:`PortFeatures` enum values that describe features. Multiple of these flags may be set simultaneously. If none of the port speed flags are set, the :attr:`max_speed` or :attr:`curr_speed` are used. """ port_no = UBInt32() pad = Pad(4) hw_addr = HWAddress() pad2 = Pad(2) name = Char(length=OFP_MAX_PORT_NAME_LEN) config = UBInt32(enum_ref=PortConfig) state = UBInt32(enum_ref=PortState) curr = UBInt32(enum_ref=PortFeatures) advertised = UBInt32(enum_ref=PortFeatures) supported = UBInt32(enum_ref=PortFeatures) peer = UBInt32(enum_ref=PortFeatures) curr_speed = UBInt32() max_speed = UBInt32() def __init__(self, port_no=None, hw_addr=None, name=None, config=None, state=None, curr=None, advertised=None, supported=None, peer=None, curr_speed=None, max_speed=None): """The constructor takes the optional parameters below. Args: port_no (int): Port number. hw_addr (HWAddress): Hardware address. name (str): Null-terminated name. config (PortConfig): Bitmap of OFPPC* flags. state (PortState): Bitmap of OFPPS* flags. curr (PortFeatures): Current features. advertised (PortFeatures): Features being advertised by the port. supported (PortFeatures): Features supported by the port. peer (PortFeatures): Features advertised by peer. curr_speed (int): Current port bitrate in kbps. max_speed (int): Max port bitrate in kbps. """ super().__init__() self.port_no = port_no self.hw_addr = hw_addr self.name = name self.config = config self.state = state self.curr = curr self.advertised = advertised self.supported = supported self.peer = peer self.curr_speed = curr_speed self.max_speed = max_speed