예제 #1
0
class SrcRoute(Packet):
    name = "SrcRoute"
    fields_desc = [
        LongField("preamble", 0),
        IntField("num_valid", 2),
        IntField("packet_size", 256),
    ]
예제 #2
0
파일: kv.py 프로젝트: yeya24/course-adv-net
class KeyValue(Packet):
    name = "KeyValue"
    fields_desc = [
        LongField("preamble", 1),
        ByteField("mtype", 0),
        IntField("key", 0),
        IntField("value", 0),
    ]
예제 #3
0
파일: send.py 프로젝트: buck5060/tutorials
class AxonRoute(Packet):
    name = "AxonRoute"
    fields_desc = [
        LongField("preamble", 0),
        ByteField("axonType", 0),
        ShortField("axonLength", 0),
        ByteField("fwdHopCount", 0),
        ByteField("revHopCount", 0)
    ]
예제 #4
0
파일: kv.py 프로젝트: Wasdns/NetChain
class NetChain(Packet):
    name = "KeyValue"
    fields_desc = [
        LongField("preamble", 2),
        ByteField("mtype", 0),
        ByteField("dest", 0),
        IntField("key", 0),
        IntField("value", 0),
    ]
예제 #5
0
class KeyValue(Packet):
    name = "KeyValue"
    fields_desc = [
        LongField("preamble", 1),  #set to 1
        IntField("num_valid", 1),
        ByteField("port", 0),
        ByteField("mtype", 0),
        IntField("key", 0),
        IntField("value", 0),
    ]
예제 #6
0
class LoadBalancePkt(Packet):
	name = "LoadBalancePkt"
	fields_desc = [
		LongField("preamble", 0),
		IntField("syn", 0),
		IntField("fin", 0),
		IntField("fid",0),
		IntField("hash",0),
		IntField("count",0),
		IntField("swid", 0),
		IntField("flow_num", 0)
	]
예제 #7
0
class TWAMPTestResponse(Packet):
    """A packet representing a TWAMP response"""

    name = "TWAMPResponse"
    fields_desc = [
        IntField("SequenceNumber", 0),
        LongField("TransmitCounter", 0),
        BitField("X", 0, 1),
        BitField("B", 0, 1),
        BitField("MBZ", 0, 6),
        XByteField("BlockNumber", 0),
        ShortField("MBZ", 0),
        LongField("ReceiveCounter", 0),
        IntField("SenderSequenceNumber", 0),
        LongField("SenderCounter", 0),
        BitField("X2", 0, 1),
        BitField("B2", 0, 1),
        BitField("MBZ", 0, 6),
        XByteField("SenderBlockNumber", 0),
        XByteField("MBZ", 0),
        ByteEnumField("ReceverControlCode", 0, {1: "Error - Invalid Message"}),
        XByteField("SenderTTL", 0)
    ]  # manca il padding
예제 #8
0
class OpenFlowFeaturesReply(Packet):
    name = "OpenFlowFeaturesReply"
    fields_desc = [
        LongField("dpid", 1),
        IntField("nbuffers", 256),
        ByteField("ntables", 254),
        ByteField("auxilaryid", 0),
        ShortField("padding", 0),
        # the following will be bit fields set for each capability
        # supported by the switch. As of 1.3.2 (0x04), 7 flags are
        # supported (out of 32 available)
        # default here value is what mininet switch sends
        BitField("capabilities", 0x47, 32),
        IntField("reserved", 0),  # reserved 32 bit field
    ]
예제 #9
0
class TWAMPTestQuery(Packet):
    """A packet representing a TWAMP query"""

    name = "TWAMPQuery"
    fields_desc = [
        IntField("SequenceNumber", 0),
        LongField("TransmitCounter", 0),
        BitEnumField("X", 1, 1, {
            0: "32bit Counter",
            1: "64bit Counter"
        }),
        BitEnumField("B", 0, 1, {
            0: "Packet Counter",
            1: "Octet Counter"
        }),
        BitField("MBZ", 0, 6),
        ByteField("BlockNumber", 0),
        ShortField("MBZ", 0),
        ThreeBytesField("MBZ", 0),
        ByteEnumField("SenderControlCode", 0, {
            0: "Out-of-band Response Requested",
            1: "In-band Response Requested"
        })
    ]  # manca il padding
예제 #10
0
class StatsReplyBody_v1_0(Packet):
    """
    OpenFlow Stats Reply Body
    """

    name = 'StatsReplyBody_v1_0'

    fields_desc = [
        ShortEnumField('Type', None, ofp_v1_0_stats_requestreply_type),
        ShortField('Flags', None),

        # Description of this OpenFlow switch
        ConditionalField(
            StrFixedLenField('ManufacturerDescription', None, 256),
            lambda pkt: pkt.Type == 0),
        ConditionalField(StrFixedLenField('HardwareDescription', None, 256),
                         lambda pkt: pkt.Type == 0),
        ConditionalField(StrFixedLenField('SoftwareDescription', None, 256),
                         lambda pkt: pkt.Type == 0),
        ConditionalField(IntField('SerialNumberDescription', None),
                         lambda pkt: pkt.Type == 0),  ## ??

        # Individual flow statistical information /
        # Aggregate flow statistical information
        ConditionalField(ShortField('Length', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ByteField('TableID', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(XByteField('Reserved', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(
            _PacketField('<FlowMatchDescriptor>', None,
                         FlowMatchDescriptorField_v1_0, 40),
            lambda pkt: pkt.Type == 1),
        ConditionalField(IntField('LifetimeDuration', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('Priority', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('SoftLifetime', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('HardLifetime', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('Reserved', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(LongField('NumberOfPacketsTransferred', None),
                         lambda pkt: pkt.Type in [1, 2]),
        ConditionalField(LongField('NumberOfOctetsTransferred', None),
                         lambda pkt: pkt.Type in [1, 2]),
        ConditionalField(
            _PacketField('<ActionDescriptors>', None,
                         ActionDescriptorField_v1_0),  ## ???? bytes
            lambda pkt: pkt.Type == 1),
        ConditionalField(IntField('NumberOfFlows', None),
                         lambda pkt: pkt.Type == 2),
        ConditionalField(IntField('Reserved', None),
                         lambda pkt: pkt.Type == 2),

        # Flow table statistical information
        ConditionalField(ByteField('Table_ID', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(X3BytesField('Reserved', None),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(StrFixedLenField('TableDescriptionString', None, 16),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(IntField('<FlowWildcard>', None),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(IntField('MaximumNumberOfFlowsSupported', None),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(IntField('NumberOfFlowsInstalled', None),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(IntField('NumberOfPacketsLookedUp', None),
                         lambda pkt: pkt.Type == 3),
        ConditionalField(IntField('NumberOfPacketsMatched', None),
                         lambda pkt: pkt.Type == 3),

        # Port statistical information
        ConditionalField(LongField('NumberOfPakctesReceived', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfPakctesTransmitted', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfOctetsReceived', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfOctetsTransmitted', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfPacketsDroppedInReception', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(
            LongField('NumberOfPacketsDroppedInTransmittion', None),
            lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfErrorsInReception', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfErrorsInTransmittion', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfAlignmentErrors', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfOverrunErrors', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfCRCErrors', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(LongField('NumberOfCollisionErrors', None),
                         lambda pkt: pkt.Type == 4),
    ]
예제 #11
0
class DDoSDPayload(Packet):
    name = "DDoSD Payload"
    fields_desc = [LongField('ts_sec',0), 
    LongField('ts_usec',0), 
    ByteField('is_attack',0)]
예제 #12
0
class HyPer4Test(Packet):
    name = "HyPer4Test"
    fields_desc = [LongField("preamble", 0)]
예제 #13
0
class P4wifi(Packet):
    name = "P4wifi"
    fields_desc = [LongField("rssi", 0)]
예제 #14
0
class Agri(Packet):
    fields_desc = [IntField("id", 0), LongField("pH", 0), LongField("temp", 0)]
예제 #15
0
class OpenFlowBody_v1_0(Packet):
    """
    OpenFlow Packet v1.0
    """

    name = 'OpenFlowBody_v1_0'

    fields_desc = [
        # Header
        ByteEnumField('Type', None, ofp_v1_0_message_type),
        ShortField('Length', None),
        IntField('ID', None),

        # Error message body
        ConditionalField(ShortField('ErrorType', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('ErrorCode', None),
                         lambda pkt: pkt.Type == 1),

        # Echo Request / Echo Reply message body
        ConditionalField(StrField('Data', None),
                         lambda pkt: pkt.Type in [2, 3]),

        # Vendor message body
        ConditionalField(IntField('VendorID', None),
                         lambda pkt: pkt.Type == 4),

        # Features Reply message body
        ConditionalField(XLongField('DatapathID', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(IntField('AvailableNumberOfPacketsCanBeHeld', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(ByteField('NumberOfFlowTabs', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(X3BytesField('FeaturesReplyReserved', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(XIntField('<SwitchCapabilityFlags>', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(XIntField('ActionCapabilityFlags', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(
            _PacketField('FeaturesReply<PortDescriptors>', None,
                         PortDescriptorField_v1_0, 48),
            lambda pkt: pkt.Type == 6),

        # Get Config Reply / Set Config message body
        ConditionalField(XShortField('SwitchConfigurationFlags', None),
                         lambda pkt: pkt.Type in [8, 9]),
        ConditionalField(ShortField('MissSendLength', None),
                         lambda pkt: pkt.Type in [8, 9]),

        # Packet Input Notification message body
        ConditionalField(
            IntField('PacketInputNotificationPacketBufferID', None),
            lambda pkt: pkt.Type == 10),
        ConditionalField(ShortField('EthernetFrameLength', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(
            ShortField('PacketInputNotificationIngresss<PortNumber>', None),
            lambda pkt: pkt.Type == 10),
        ConditionalField(ByteField('PacketInputNotificationReason', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(XByteField('PacketInputNotificationReserved', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(
            StrLenField('EthenretFrame',
                        None,
                        length_from=lambda pkt: pkt.EthernetFrameLength),
            lambda pkt: pkt.Type == 10),

        # Flow Removed Notification message body
        ConditionalField(
            _PacketField('FlowRemovedNotification<FlowMatchDescriptor>', None,
                         FlowMatchDescriptorField_v1_0, 40),
            lambda pkt: pkt.Type == 11),
        ConditionalField(ShortField('FlowRemovedNotificationPriority', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(ByteField('FlowRemovedNotificationReason', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(XByteField('FlowRemovedNotificationReserved', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(IntField('LifetimeDuration', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(
            ShortField('FlowRemovedNotificationSoftLifetime', None),
            lambda pkt: pkt.Type == 11),
        ConditionalField(
            StrFixedLenField('FlowRemovedNotification_Reserved', None, 48),
            lambda pkt: pkt.Type == 11),
        ConditionalField(LongField('NumberOfPacketsTransferred', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(LongField('NumberOfOctetsTransferred', None),
                         lambda pkt: pkt.Type == 11),

        # Port Status Notification message body
        ConditionalField(ByteField('PortStatusNotificationReason', None),
                         lambda pkt: pkt.Type == 12),
        ConditionalField(
            StrFixedLenField('PortStatusNotificationReserved', None, 64),
            lambda pkt: pkt.Type == 12),
        ConditionalField(
            _PacketField('PortStatusNotification<PortDescriptors>', None,
                         PortDescriptorField_v1_0, 48),
            lambda pkt: pkt.Type == 12),

        # Packet Output message body
        ConditionalField(IntField('PacketOutputPacketBufferID', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(ShortField('PacketOutputIngress<PortNumber>', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(ShortField('LengthOfActionDescriptors', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(
            _PacketField('PacketOutput<ActionDescriptors>', None,
                         ActionDescriptorField_v1_0),  ## ???? bytes  ##
            lambda pkt: pkt.Type == 13),
        ConditionalField(StrField('<PacketData>', None),
                         lambda pkt: pkt.Type == 13),

        # Flow Modification message body
        ConditionalField(
            _PacketField('FlowModification<FlowMatchDescriptor>', None,
                         FlowMatchDescriptorField_v1_0, 40),
            lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('Command', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('FlowModificationSoftLifetime', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('HardLifetime', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('FlowModificationPriority', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(IntField('FlowModificationPacketBufferID', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(
            ShortField('FlowModificationEgress<PortNumber>', None),
            lambda pkt: pkt.Type == 14),
        ConditionalField(XShortField('FlowModificationCU', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(XIntField('FlowModificationReserved', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(
            _PacketField('FlowModification<ActionDescriptors>', None,
                         ActionDescriptorField_v1_0),  ## ???? bytes
            lambda pkt: pkt.Type == 14),

        # Port Modification message body
        ConditionalField(ShortField('PortModification<PortNumber>', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(MACField('Ethernet Address', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(XIntField('<PortConfigurationFlags>', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(XIntField('<PortConfigurationFlags>Mask', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(XIntField('<PortFeatureFlags>', None),
                         lambda pkt: pkt.Type == 15),

        # Stats Request message body
        ConditionalField(
            _PacketField('StatsRequest', None, StatsRequestBody_v1_0, 48),
            lambda pkt: pkt.Type == 16),

        # Stats Reply message body
        ConditionalField(
            _PacketField('StatsReply', None,
                         StatsReplyBody_v1_0),  ## ???? bytes
            lambda pkt: pkt.Type == 17),
        StrField('Payload', None),
    ]
예제 #16
0
class OpenFlowBody_v1_3(Packet):
    """
    OpenFlow Packet v1.3
    """

    name = 'OpenFlowBody_v1_3'

    fields_desc = [
        # Header
        ByteEnumField('Type', None, ofp_v1_3_message_type),
        ShortField('Length', None),
        IntField('ID', None),

        # Error message body
        ConditionalField(ShortField('ErrorType', None),
                         lambda pkt: pkt.Type == 1),
        ConditionalField(ShortField('ErrorCode', None),
                         lambda pkt: pkt.Type == 1),

        # Echo Request / Echo Reply message body
        ConditionalField(StrField('Data', None),
                         lambda pkt: pkt.Type in [1, 2, 3]),

        # Vendor message body
        #ConditionalField(IntField('VendorID', None), lambda pkt: pkt.Type == 4), # type ????

        # Experimenter
        ConditionalField(XIntField('ExperimenterID', None),
                         lambda pkt: pkt.Type == 4),
        ConditionalField(IntField('ExperimenterType', None),
                         lambda pkt: pkt.Type == 4),

        # Features Reply message body
        ConditionalField(XLongField('DatapathID', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(IntField('MaxBuffers', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(ByteField('MaxTables', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(ByteField('AuxiliaryID', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(XByteField('FeaturesReplyPad', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(XIntField('Capabilities', None),
                         lambda pkt: pkt.Type == 6),
        ConditionalField(IntField('FeaturesReplyReserved', None),
                         lambda pkt: pkt.Type == 6),

        # Set Config message body
        ConditionalField(XShortField('SwitchConfigurationFlags', None),
                         lambda pkt: pkt.Type == 9),
        ConditionalField(ShortField('MissSendLength', None),
                         lambda pkt: pkt.Type == 9),

        # Packet Input Notification message body
        ConditionalField(
            IntField('PacketInputNotificationPacketBufferID', None),
            lambda pkt: pkt.Type == 10),
        ConditionalField(ShortField('EthernetFrameLength', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(ByteField('PacketInputNotificationReason', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(ByteField('PacketInputNotificationTableID', None),
                         lambda pkt: pkt.Type == 10),
        ConditionalField(XLongField('PacketInputNotificationCookie', None),
                         lambda pkt: pkt.Type == 10),

        # Flow Removed Notification message body
        ConditionalField(XLongField('FlowRemovedNotificationCookie', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(ShortField('FlowRemovedNotificationPriority', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(ByteField('FlowRemovedNotificationReason', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(ByteField('FlowRemovedNotificationTableID', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(IntField('Duration_sec', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(IntField('Duration_nsec', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(
            ShortField('FlowRemovedNotificationIdleTimeout', None),
            lambda pkt: pkt.Type == 11),
        ConditionalField(ShortField('HardTimeout', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(LongField('NumberOfPacketsTransferred', None),
                         lambda pkt: pkt.Type == 11),
        ConditionalField(LongField('NumberOfOctetsTransferred', None),
                         lambda pkt: pkt.Type == 11),

        # Port Status Notification message body
        ConditionalField(ByteField('PortStatusNotificationReason', None),
                         lambda pkt: pkt.Type == 12),
        ConditionalField(XByteField('PortStatusNotificationPad', None),
                         lambda pkt: pkt.Type == 12),
        ConditionalField(
            _PacketField('PortStatusNotification<PortDescriptors>', None,
                         PortDescriptorField_v1_3, 39),
            lambda pkt: pkt.Type == 12),

        # Packet Output message body
        ConditionalField(IntField('PacketOutputPacketBufferID', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(IntField('PacketOutputIngress<PortNumber>', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(ShortField('LengthOfActionDescriptors', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(XByteField('PacketOutputPad', None),
                         lambda pkt: pkt.Type == 13),
        ConditionalField(
            _PacketField('PacketOutput<ActionDescriptors>', None,
                         ActionDescriptorField_v1_3, 5),
            lambda pkt: pkt.Type == 13),

        # Flow Modification message body
        ConditionalField(LongField('FlowModificationCookie', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(XLongField('FlowModificationCookieMask', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ByteField('FlowModificationTableID', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ByteField('FlowModificationCommand', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('FlowModificationIdleTimeout', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('FlowModificationHardTimeout', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(ShortField('FlowModificationPriority', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(IntField('FlowModificationPacketBufferID', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(IntField('FlowModificationOutputPort', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(IntField('FlowModificationOutputGroup', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(XShortField('FlowModificationFlags', None),
                         lambda pkt: pkt.Type == 14),
        ConditionalField(XByteField('FlowModificationPad', None),
                         lambda pkt: pkt.Type == 14),

        # Group Modification message body
        ConditionalField(ShortField('GroupModificationCommand', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(ByteField('GroupModificationType', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(ByteField('GroupModificationPad', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(IntField('GroupModificationGroupID', None),
                         lambda pkt: pkt.Type == 15),
        ConditionalField(
            _PacketField('GroupModificationBucket', None, OpenFlowBucket_v1_3,
                         18), lambda pkt: pkt.Type == 15),

        # Port Modification message body
        ConditionalField(ShortField('PortModification<PortNumber>', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XByteField('PortModificationPad', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(MACField('PortModificationEthernetAddress', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XByteField('PortModificationPad2', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XIntField('<PortConfigurationFlags>', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XIntField('<PortConfigurationFlags>Mask', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XIntField('<PortConfigurationFlags>Advertise', None),
                         lambda pkt: pkt.Type == 16),
        ConditionalField(XByteField('PortModificationPad3', None),
                         lambda pkt: pkt.Type == 16),

        # Table Modification message body
        ConditionalField(ByteField('TableModificationTableID', None),
                         lambda pkt: pkt.Type == 17),
        ConditionalField(XByteField('TableModificationPad', None),
                         lambda pkt: pkt.Type == 17),
        ConditionalField(XIntField('TableModificationConfiguration', None),
                         lambda pkt: pkt.Type == 17),

        # Multipart Request / Multipart Reply message body
        ConditionalField(ShortField('MultipartType', None),
                         lambda pkt: pkt.Type in [18, 19]),
        ConditionalField(XShortField('MultipartFlags', None),
                         lambda pkt: pkt.Type in [18, 19]),
        ConditionalField(XByteField('MultipartPad', None),
                         lambda pkt: pkt.Type in [18, 19]),
        ConditionalField(ByteField('MultipartBody', None),
                         lambda pkt: pkt.Type in [18, 19]),

        # Barrier Reply message body
        ConditionalField(IntField('BarrierReplyID', None),
                         lambda pkt: pkt.Type == 21),

        # Queue Get Config Request / Queue Get Config Reply message body
        ConditionalField(IntField('QueueGetConfigRequestPort', None),
                         lambda pkt: pkt.Type in [22, 23]),
        ConditionalField(ByteField('QueueGetConfigRequestPad', None),
                         lambda pkt: pkt.Type in [22, 23]),
        ConditionalField(
            _PacketField('OpenFlowPacketQueue', None, OpenFlowPacketQueue_v1_3,
                         16), lambda pkt: pkt.Type == 23),

        # Role Request / Role Reply message body
        ConditionalField(IntField('RoleRequestRole', None),
                         lambda pkt: pkt.Type in [24, 25]),
        ConditionalField(ByteField('RoleRequestPad', None),
                         lambda pkt: pkt.Type in [24, 25]),
        ConditionalField(LongField('RoleRequestGenerationID', None),
                         lambda pkt: pkt.Type in [24, 25]),

        # Get Async Reply / Set Async messages body
        ConditionalField(XIntField('GetAsyncReplyPacketInMask', None),
                         lambda pkt: pkt.Type in [27, 28]),
        ConditionalField(XIntField('GetAsyncReplyPortStatusMask', None),
                         lambda pkt: pkt.Type in [27, 28]),
        ConditionalField(XIntField('GetAsyncReplyFlowRemovedMask', None),
                         lambda pkt: pkt.Type in [27, 28]),

        # Meter Modification message body
        ConditionalField(ShortField('MeterModificationCommand', None),
                         lambda pkt: pkt.Type == 29),
        ConditionalField(XShortField('MeterModificationFlags', None),
                         lambda pkt: pkt.Type == 29),
        ConditionalField(IntField('MeterModificationMeterID', None),
                         lambda pkt: pkt.Type == 29),
        ConditionalField(
            _PacketField('MeterModificationMeterBand', None,
                         OpenFlowMeterBand_v1_3, 12),
            lambda pkt: pkt.Type == 29),
        StrField('Payload', None),
    ]
예제 #17
0
파일: send.py 프로젝트: li-ch/p4mr
class SrcRoute(Packet):
    name = "SrcRoute"
    fields_desc = [
        LongField("preamble", 0),
    ]