class ECMP(Packet): name = "ECMP" fields_desc = [ ShortField("enable", 0), ShortField("prot_id", 0), IntField("pkt_num",0) ]
class MetadataHeader(Packet): name = 'Metadata Header' fields_desc = [ IntField('SwitchID', 0), ShortField('IngressPort', 0), ShortField('EgressPort', 0) ]
class SrcRoute(Packet): name = "SrcRoute" fields_desc = [ ShortField("preamble", 0), ShortField("group_id", 0), IntField("sequence_number", 0) ]
class FLOWLET(Packet): name = "FLOWLET" fields_desc = [ ShortField("enable", 0), ShortField("prot_id", 0), IntField("pkt_num",0) ]
class CustomTLV(Packet): """ Custom TLV protocol layer for scapy """ fields_desc = [ ShortField("type", 0), ShortField("length", 4), StrField("value", "") ]
class STATS(Packet): name = "STATS" fields_desc = [ IntField("port2", 0), IntField("port3", 0), ShortField("enable",0), ShortField("prot_id", 0) ]
class ECMP(Packet): name = "ECMP" fields_desc = [ ShortField("is_load_balance", 1), ShortField("type", 0), ShortField("is_track", 0), IntField("port2_bytes", 0), IntField("port3_bytes", 0) ]
class IPFIX(Packet): name = "IPFIX" fields_desc = [ ShortField("version", 10), ShortField("length", None), IntField("exportTime", None), IntField("sequenceNumber", 1), IntField("observationDomainID", 1), ]
class Pegasus(Packet): name = "PEGASUS" fields_desc = [ ShortField("id", 0x5047), ByteField("op", None), IntField("keyhash", None), ByteField("node", 0), ShortField("load", 0) ]
class Migration(Packet): name = "Migration" fields_desc = [BitField("protocol", 0, 8), BitField("stage", 0, 8), ShortField("index", 0), IntField("state", 0), BitField("mac", 0, 64), IntField("verify", 0), ShortField("mainProg", 0), ShortField("deltaProg", 0)]
class MetadataHeader(Packet): name = 'Metadata Header' fields_desc = [ IntField('SwitchID', 0), ShortField('IngressPort', 0), ShortField('EgressPort', 0), # ShortField means 16 bytes IntField('Hop_Latency', 0), ByteField('Qid', 0), BitField('Qdepth', 0, 24) ]
class Set(Packet): name = "Set" fields_desc = [ShortField("setID", 256), ShortField("length", None)] def guess_payload_class(self, payload): if self.setID == 2: return Template elif self.setID > 255: return Data else: return Packet.guess_payload_class(self, payload)
class SwitchTrace2(Packet): fields_desc = [ BitField("swid", 0, 8), BitField("in_port", 0, 8), BitField("out_port", 0, 8), ShortField("in_qdepth", 0), ShortField("out_qdepth", 0), BitField("in_time", 0, 48), BitField("out_time", 0, 48), BitField("queue_time", 0, 32)] def extract_padding(self, p): return "", p
class ActionDescriptorField_v1_3(Packet): """ OpenFlow Action Descriptor Field """ name = 'ActionDescriptorField_v1_3' fields_desc = [ ShortField('Type', None), ShortField('Length', None), XByteField('Pad', None), ]
class OpenFlowQueueProprieties_v1_3(Packet): """ OpenFlow Queue Properties Field """ name = 'OpenFlowBucket_v1_3' fields_desc = [ ShortField('Property', None), ShortField('Length', None), XByteField('Pad', None), ]
class CoLoR_Get(Packet): name = "CoLoR_Get" fields_desc = [ BitField("Version", 7, 4, tot_size=1), BitField("Package", 2, 4, end_tot_size=1), ByteField("TTL", 64), LEShortField("pkg_length", None), XShortField("checksum", None), ShortField("MTU", None), FieldLenField("PID_num", None, fmt="B", count_of="PIDs"), FlagsField("Flags", 8, 8, "rrrASQKF"), ShortField("Minimal_PID_CP", None), StrFixedLenField("N_sid", "", 16), StrFixedLenField("L_sid", "", 20), StrFixedLenField("nid", "", 16), ConditionalField( FieldLenField("Public_key_len", None, fmt="H", length_of="Public_key"), lambda pkt: pkt.Flags.K == True), ConditionalField( StrLenField("Public_key", "", length_from=lambda pkt: pkt.Public_key_len), lambda pkt: pkt.Flags.K == True), ConditionalField( FieldLenField("QoS_len", None, fmt="B", length_of="QoS_requirements"), lambda pkt: pkt.Flags.Q == True), ConditionalField( StrLenField("QoS_requirements", "", length_from=lambda pkt: pkt.QoS_len), lambda pkt: pkt.Flags.Q == True), ConditionalField(IntField("Seg_ID", None), lambda pkt: pkt.Flags.S == True), FieldListField("PIDs", None, StrFixedLenField("", "", 4), count_from=lambda pkt: pkt.PID_num) ] def post_build(self, pkt, pay): if self.pkg_length is None: self.pkg_length = len(pkt) pkt = pkt[:2] + int2BytesLE(self.pkg_length, 2) + pkt[4:] if self.checksum is None: self.checksum = CalcChecksum(pkt) pkt = pkt[:4] + int2Bytes(self.checksum, 2) + pkt[6:] return pkt + pay
class OpenFlowMeterBand_v1_3(Packet): """ OpenFlow Meter Band Field """ name = 'OpenFlowMeterBand_v1_3' fields_desc = [ ShortField('Type', None), ShortField('Length', None), IntField('Rate', None), IntField('BurstSize', None), ]
class INT(Packet): name = "int" fields_desc = [ BitField("version", 1, 4), BitField("rep", 0, 2), BitField("c", 0, 1), BitField("e", 0, 1), BitField("m", 0, 1), BitField("reserved1", 0, 10), BitField("hop_ml", None, 5), ByteField("rem_hop_cnt", None), ShortField("ins_map", 0), ShortField("reserved2", 0), ]
class TailHeader(Packet): name = 'Tail Header' fields_desc = [ ByteField('next_proto', 0), ShortField('dest_port', 0), ByteField('dscp', 0), ]
class Perf(Packet): name = "Perf" fields_desc = [ ShortField('seqno', 0), BitField('tss',0x0,32), BitField('tse',0x0,32) ]
class MRI(Packet): fields_desc = [ ShortField("count", 0), PacketListField("swtraces", [], SwitchTrace, count_from=lambda pkt: (pkt.count * 1)) ]
class OpenFlowBucket_v1_3(Packet): """ OpenFlow Bucket Field """ name = 'OpenFlowBucket_v1_3' fields_desc = [ ShortField('Length', None), ShortField('Weight', None), IntField('WatchPort', None), IntField('WatchGroup', None), XByteField('Pad', None), _PacketField('PacketOutput<ActionDescriptors>', None, ActionDescriptorField_v1_3, 5), ]
class HulappProtocol(Packet): name = "HulappProtocol" fields_desc = [ShortField("dst_tor", 0), IntField("seq_no", 0)] @classmethod def add_IntField(cls, name, value): cls.fields_desc.append(IntField(name, value))
class StatsRequestBody_v1_0(Packet): """ OpenFlow Stats Request Body """ name = 'StatsRequestBody_v1_0' fields_desc = [ ShortEnumField('Type', None, ofp_v1_0_stats_requestreply_type), ShortField('Flags', None), _PacketField('<FlowMatchDescriptor>', None, FlowMatchDescriptorField_v1_0, 40), ByteField('TableID', None), XByteField('Reserved', None), ShortField('EgressPortNumber', None) ]
class PTP(Packet): """Precision Time Protocol""" name = "PTP protocol" fields_desc = [ XBitField('type_', 0x10, 8), XBitField('version', 0x02, 8), ShortField('messageLength', 0x36), XBitField('subdomain', 0x00, 8), ShortField('flags', 0), XBitField('correction', 0x00, 48), XBitField('clockIdentity', 0x008063FFFF0009BA, 64), ShortField('sourcePortID', 1), ShortField('sequenceID', 0x9E48), XBitField('control', 0x05, 8), XBitField('logMessagePeriod', 0x0F, 8), XBitField('originTimestamp', 0x000045B111510472F9C1, 80) ]
class nodeCount(Packet): name = "nodeCount" fields_desc = [ ShortField("count", 0), PacketListField("INT", [], InBandNetworkTelemetry, count_from=lambda pkt: (pkt.count * 1)) ]
class UDP(Packet): name = "UDP" fields_desc = [ ShortEnumField("sport", 53, UDP_SERVICES), #standard UDP ShortEnumField("dport", 53, UDP_SERVICES), ShortField("len", None), XShortField("chksum", None), XByteField("ack",0), #Acknowlegment number - 8bit X3BytesField("pkg",1)] #pakcage number -24 bit
class IPOption_QUERY(IPOption): name = "QUERY" option = 31 fields_desc = [ _IPOption_HDR, ShortField("count", 0), ByteField("flow_proto", 0) ]
class FieldSpecifier(Packet): name = "Field Specifier" fields_desc = [ ShortEnumField("informationElement", None, information_elements), ShortField("fieldLength", None), ] def extract_padding(self, s): return "", s
class Template(Packet): name = "Template" fields_desc = [ ShortField("templateID", 256), FieldLenField("fieldCount", None, count_of="fields"), PacketListField( "templateFields", [], FieldSpecifier, count_from=lambda p: p.fieldCount ), ]