class NextTablesProperty(Property): """Next Tables Property. This class represents Property with the following types: OFPTFPT_NEXT_TABLES OFPTFPT_NEXT_TABLES_MISS """ next_table_ids = ListOfInstruction() def __init__(self, property_type=TableFeaturePropType.OFPTFPT_NEXT_TABLES, next_table_ids=None): """Create a NextTablesProperty with the optional parameters below. Args: type(|TableFeaturePropType_v0x04|): Property Type value of this instance. next_table_ids (|ListOfInstruction_v0x04|): List of InstructionGotoTable instances. """ super().__init__(property_type) self.next_table_ids = (ListOfInstruction() if next_table_ids is None else next_table_ids) self.update_length()
class InstructionsProperty(Property): """Instructions property. This class represents Property with the following types: OFPTFPT_INSTRUCTIONS OFPTFPT_INSTRUCTIONS_MISS """ instruction_ids = ListOfInstruction() def __init__(self, property_type=TableFeaturePropType.OFPTFPT_INSTRUCTIONS, instruction_ids=None): """Create a InstructionsProperty with the optional parameters below. Args: type(|TableFeaturePropType_v0x04|): Property Type value of this instance. next_table_ids(|ListOfInstruction_v0x04|): List of InstructionGotoTable instances. """ super().__init__(property_type=property_type) self.instruction_ids = instruction_ids if instruction_ids else [] self.update_length()
def __init__(self, xid=None, cookie=0, cookie_mask=0, table_id=0, command=None, idle_timeout=0, hard_timeout=0, priority=0, buffer_id=OFP_NO_BUFFER, out_port=PortNo.OFPP_ANY, out_group=Group.OFPG_ANY, flags=FlowModFlags.OFPFF_SEND_FLOW_REM, match=None, instructions=None): """Create a FlowMod with the optional parameters below. Args: xid (int): xid to be used on the message header. cookie (int): Opaque controller-issued identifier. cookie_mask (int): Mask used to restrict the cookie bits that must match when the command is OFPFC_MODIFY* or OFPFC_DELETE*. A value of 0 indicates no restriction. table_id (int): ID of the table to put the flow in. For OFPFC_DELETE_* commands, OFPTT_ALL can also be used to delete matching flows from all tables. command (~pyof.v0x04.controller2switch.flow_mod.FlowModCommand): One of OFPFC_*. idle_timeout (int): Idle time before discarding (seconds). hard_timeout (int): Max time before discarding (seconds). priority (int): Priority level of flow entry. buffer_id (int): Buffered packet to apply to, or OFP_NO_BUFFER. Not meaningful for OFPFC_DELETE*. out_port (int): For OFPFC_DELETE* commands, require matching entries to include this as an output port. A value of OFPP_ANY indicates no restriction. out_group (int): For OFPFC_DELETE* commands, require matching entries to include this as an output group. A value of OFPG_ANY indicates no restriction. flags (~pyof.v0x04.controller2switch.flow_mod.FlowModFlags): One of OFPFF_*. match (~pyof.v0x04.common.flow_match.Match): Fields to match. Variable size. """ super().__init__(xid) self.cookie = cookie self.cookie_mask = cookie_mask self.table_id = table_id self.command = command self.idle_timeout = idle_timeout self.hard_timeout = hard_timeout self.priority = priority self.buffer_id = buffer_id self.out_port = out_port self.out_group = out_group self.flags = flags self.match = Match() if match is None else match self.instructions = instructions or ListOfInstruction()
def _new_list_of_instructions(): """Crate new ListOfInstruction.""" output = ActionOutput(port=PortNo.OFPP_CONTROLLER) loa = ListOfActions([output]) instruction = InstructionApplyAction(loa) return ListOfInstruction([instruction])
class FlowStats(GenericStruct): """Body of reply to OFPST_FLOW request.""" length = UBInt16() table_id = UBInt8() #: Align to 32 bits. pad = Pad(1) duration_sec = UBInt32() duration_nsec = UBInt32() priority = UBInt16() idle_timeout = UBInt16() hard_timeout = UBInt16() flags = UBInt16() #: Align to 64-bits pad2 = Pad(4) cookie = UBInt64() packet_count = UBInt64() byte_count = UBInt64() match = Match() instructions = ListOfInstruction() def __init__(self, length=None, table_id=None, duration_sec=None, duration_nsec=None, priority=None, idle_timeout=None, hard_timeout=None, flags=None, cookie=None, packet_count=None, byte_count=None, match=None, instructions=None): """Create a FlowStats with the optional parameters below. Args: length (int): Length of this entry. table_id (int): ID of table flow came from. duration_sec (int): Time flow has been alive in seconds. duration_nsec (int): Time flow has been alive in nanoseconds in addition to duration_sec. priority (int): Priority of the entry. Only meaningful when this is not an exact-match entry. idle_timeout (int): Number of seconds idle before expiration. hard_timeout (int): Number of seconds before expiration. cookie (int): Opaque controller-issued identifier. packet_count (int): Number of packets in flow. byte_count (int): Number of bytes in flow. match (~pyof.v0x04.common.flow_match.Match): Description of fields. """ super().__init__() self.length = length self.table_id = table_id self.duration_sec = duration_sec self.duration_nsec = duration_nsec self.priority = priority self.idle_timeout = idle_timeout self.hard_timeout = hard_timeout self.flags = flags self.cookie = cookie self.packet_count = packet_count self.byte_count = byte_count self.match = match self.instructions = instructions or [] def unpack(self, buff, offset=0): """Unpack a binary message into this object's attributes. Pass the correct length for list unpacking. Args: buff (bytes): Binary data package to be unpacked. offset (int): Where to begin unpacking. """ unpack_length = UBInt16() unpack_length.unpack(buff, offset) super().unpack(buff[:offset+unpack_length], offset)