class SrcRoute(Packet): name = "SrcRoute" fields_desc = [ LongField("preamble", 0), IntField("num_valid", 2), IntField("packet_size", 256), ]
class KeyValue(Packet): name = "KeyValue" fields_desc = [ LongField("preamble", 1), ByteField("mtype", 0), IntField("key", 0), IntField("value", 0), ]
class AxonRoute(Packet): name = "AxonRoute" fields_desc = [ LongField("preamble", 0), ByteField("axonType", 0), ShortField("axonLength", 0), ByteField("fwdHopCount", 0), ByteField("revHopCount", 0) ]
class NetChain(Packet): name = "KeyValue" fields_desc = [ LongField("preamble", 2), ByteField("mtype", 0), ByteField("dest", 0), IntField("key", 0), IntField("value", 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), ]
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) ]
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
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 ]
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
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), ]
class DDoSDPayload(Packet): name = "DDoSD Payload" fields_desc = [LongField('ts_sec',0), LongField('ts_usec',0), ByteField('is_attack',0)]
class HyPer4Test(Packet): name = "HyPer4Test" fields_desc = [LongField("preamble", 0)]
class P4wifi(Packet): name = "P4wifi" fields_desc = [LongField("rssi", 0)]
class Agri(Packet): fields_desc = [IntField("id", 0), LongField("pH", 0), LongField("temp", 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), ]
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), ]
class SrcRoute(Packet): name = "SrcRoute" fields_desc = [ LongField("preamble", 0), ]