class SCTPChunkParamErrorIndication(_SCTPChunkParam, Packet): fields_desc = [ShortEnumField("type", 0xc003, sctpchunkparamtypes), FieldLenField("len", None, length_of="error_causes", adjust=lambda pkt, x:x + 8), XIntField("correlation_id", None), PadField(StrLenField("error_causes", "", length_from=lambda pkt: pkt.len - 4), 4, padwith=b"\x00"), ]
class GMLAN_RMBA(Packet): name = 'ReadMemoryByAddress' fields_desc = [ MultipleTypeField([ (XShortField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(2)), (X3BytesField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(3)), (XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4)) ], XIntField('memoryAddress', 0)), XShortField('memorySize', 0), ] @staticmethod def get_log(pkt): return pkt.sprintf("%GMLAN.service%"), \ pkt.sprintf("%GMLAN_RMBA.memoryAddress%")
class PPTPEchoRequest(PPTP): name = "PPTP Echo Request" fields_desc = [LenField("len", 16), ShortEnumField("type", 1, _PPTP_msg_type), XIntField("magic_cookie", _PPTP_MAGIC_COOKIE), ShortEnumField("ctrl_msg_type", 5, _PPTP_ctrl_msg_type), XShortField("reserved_0", 0x0000), IntField("identifier", None)]
class PHYPayload(Packet): name = "PHYPayload" fields_desc = [ MHDR, MACPayload, ConditionalField( XIntField("MIC", 0), lambda pkt: (pkt.MType != 0b001 or LoRa.encrypted is False)) ]
class PROFIsafeControlCRCSeed(PROFIsafeCRCSeed): name = "PROFISafe Control Message with F_CRC_Seed=1" fields_desc = [ StrFixedLenField("data", '', length_from=lambda p: p.get_data_length()), FlagsField("control", 0, 8, profisafe_control_flags), XIntField("crc", 0) ]
class CARP(Packet): name = "CARP" fields_desc = [ BitField("version", 4, 4), BitField("type", 4, 4), ByteField("vhid", 1), ByteField("advskew", 0), ByteField("authlen", 0), ByteField("demotion", 0), ByteField("advbase", 0), XShortField("chksum", 0), XIntField("counter1", 0), XIntField("counter2", 0), XIntField("hmac1", 0), XIntField("hmac2", 0), XIntField("hmac3", 0), XIntField("hmac4", 0), XIntField("hmac5", 0) ] def post_build(self, pkt, pay): if self.chksum == None: pkt = pkt[:6] + struct.pack("!H", checksum(pkt)) + pkt[8:] return pkt
class PPTPCallClearRequest(PPTP): name = "PPTP Call Clear Request" fields_desc = [LenField("len", 16), ShortEnumField("type", 1, _PPTP_msg_type), XIntField("magic_cookie", _PPTP_MAGIC_COOKIE), ShortEnumField("ctrl_msg_type", 12, _PPTP_ctrl_msg_type), XShortField("reserved_0", 0x0000), ShortField("call_id", 1), XShortField("reserved_1", 0x0000)]
class GMLAN_DPBA(Packet): name = 'DefinePIDByAddress' fields_desc = [ XShortField('parameterIdentifier', 0), MultipleTypeField([ (XShortField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(2)), (X3BytesField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(3)), (XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4)) ], XIntField('memoryAddress', 0)), XByteField('memorySize', 0), ] @staticmethod def get_log(pkt): return pkt.sprintf("%GMLAN.service%"), \ (pkt.parameterIdentifier, pkt.memoryAddress, pkt.memorySize)
class Pktgen(Packet): name = 'PKTGEN' fields_desc = [ XIntField('magic', 0xbe9be955), IntField('seq', 0), IntField('tvsec', 0), IntField('tvusec', 0), StrFixedLenField('data', '\x00\x00\x00\x00\x00\x00', length=6) ]
class OFPQTMinRate(_ofp_header): name = "OFPQT_MIN_RATE" fields_desc = [ ShortEnumField("type", 1, ofp_queue_property_types), ShortField("len", 16), XIntField("pad", 0), ShortField("rate", 0), XBitField("pad2", 0, 48) ]
class LLS_Crypto_Auth(LLS_Generic_TLV): name = "LLS Cryptographic Authentication" fields_desc = [ ShortField("type", 2), FieldLenField("len", 20, fmt="B", length_of=lambda x: x.authdata + 4), # noqa: E501 XIntField("sequence", 0), StrLenField("authdata", b"\x00" * 16, length_from=lambda x: x.len - 4) ] # noqa: E501
class DiagnosisItem(AlarmItem): fields_desc = [ XShortField("UserStructureIdentifier", 0), XShortField("ChannelNumber", 0), XShortField("ChannelProperties", 0), XShortField("ChannelErrorType", 0), ConditionalField( cond=lambda p: p.getfieldval("UserStructureIdentifier") in [ 0x8002, 0x8003], fld=XShortField("ExtChannelErrorType", 0)), ConditionalField( cond=lambda p: p.getfieldval("UserStructureIdentifier") in [ 0x8002, 0x8003], fld=XIntField("ExtChannelAddValue", 0)), ConditionalField( cond=lambda p: p.getfieldval("UserStructureIdentifier") == 0x8003, fld=XIntField("QualifiedChannelQualifier", 0)), ]
class ISIS_LspEntry(Packet): name = "ISIS LSP Entry" fields_desc = [ShortField("lifetime", 1200), ISIS_LspIdField("lspid", "0102.0304.0506.07-08"), XIntField("seqnum", 0x00000001), XShortField("checksum", None)] def extract_padding(self, s): return "", s
class RPC(Packet): name = 'RPC' fields_desc = [ XIntField('xid', 0), IntEnumField('mtype', 0, { 0: 'CALL', 1: 'REPLY' }), ]
class IntL45DropReport(Packet): name = "INT_L45_DROP_REPORT" fields_desc = [ XIntField("switch_id", 0), XShortField("ingress_port_id", 0), XShortField("egress_port_id", 0), BitField("queue_id", 0, 8), BitField("pad", 0, 24), ]
class LocatorPacket(Packet): name = "RTPS Locator" fields_desc = [ XIntField("locatorKind", 0), LEIntField("port", 0), ReversePadField(IPField("address", "0.0.0.0"), 20), ] def extract_padding(self, p): return b"", p
class BuildChecksum(Packet): # Build checksum over memory range fields_desc = [ # specification says: position 1-3 type byte The example(Part 5 # Example Communication Sequences ) shows 3 bytes for "reserved" # http://read.pudn.com/downloads192/doc/comm/903802/XCP%20-Part%205-%20Example%20Communication%20Sequences%20-1.0.pdf # noqa: E501 # --> 3 bytes XCPEndiannessField(ThreeBytesField("reserved", 0)), XCPEndiannessField(XIntField("block_size", 0)) ]
class ACCESS_Reply(Packet): name = 'ACCESS Reply' fields_desc = [ IntEnumField('status', 0, nfsstat3), IntField('attributes_follow', 0), ConditionalField(PacketField('attributes', Fattr3(), Fattr3), lambda pkt: pkt.attributes_follow == 1), ConditionalField(XIntField('access_rights', 0), lambda pkt: pkt.status == 0) ]
class ExpectedSubmoduleAPI(Packet): """Description of an API in the expected submodules blocks""" name = "API" fields_desc = [ XIntField("API", 0), XShortField("SlotNumber", 0), XIntField("ModuleIdentNumber", 0), XShortField("ModuleProperties", 0), FieldLenField("NumberOfSubmodules", None, fmt="H", count_of="Submodules"), PacketListField("Submodules", [], ExpectedSubmodule, count_from=lambda p: p.NumberOfSubmodules), ] def extract_padding(self, s): return None, s # No extra payload
class RM_Header(Packet): name = 'RM Header' fields_desc = [XIntField('rm', None)] def post_build(self, pkt, pay): """Override of post_build to set the rm header == len(payload)""" if self.rm is None: new_rm = 0x80000000 + len(self.payload) pkt = struct.pack('!I', new_rm) return Packet.post_build(self, pkt, pay)
class OSPF_External_LSA(OSPF_BaseLSA): name = "OSPF External LSA (ASBR)" fields_desc = [ShortField("age", 1), OSPFOptionsField(), ByteField("type", 5), IPField("id", "192.168.0.0"), IPField("adrouter", "2.2.2.2"), XIntField("seq", 0x80000001), XShortField("chksum", None), ShortField("len", None), IPField("mask", "255.255.255.0"), FlagsField("ebit", 0, 1, ["E"]), BitField("reserved", 0, 7), X3BytesField("metric", 20), IPField("fwdaddr", "0.0.0.0"), XIntField("tag", 0), # TODO: Define correct conditions ConditionalField(ByteField("tos", 0), lambda pkt:False), ConditionalField(X3BytesField("tosmetric", 0), lambda pkt:False)] # noqa: E501
class NSH(Packet): """Network Service Header. NSH MD-type 1 if there is no ContextHeaders""" name = "NSH" fields_desc = [ BitField('Ver', 0, 2), BitField('OAM', 0, 1), BitField('Critical', 0, 1), BitField('Reserved', 0, 6), BitFieldLenField('Len', None, 6, count_of='ContextHeaders', adjust=lambda pkt, x: 6 if pkt.MDType == 1 else x + 2), ByteEnumField('MDType', 1, { 1: 'Fixed Length', 2: 'Variable Length' }), ByteEnumField('NextProto', 3, { 1: 'IPv4', 2: 'IPv6', 3: 'Ethernet', 4: 'NSH', 5: 'MPLS' }), X3BytesField('NSP', 0), ByteField('NSI', 1), ConditionalField(XIntField('NPC', 0), lambda pkt: pkt.MDType == 1), ConditionalField(XIntField('NSC', 0), lambda pkt: pkt.MDType == 1), ConditionalField(XIntField('SPC', 0), lambda pkt: pkt.MDType == 1), ConditionalField(XIntField('SSC', 0), lambda pkt: pkt.MDType == 1), ConditionalField( PacketListField("ContextHeaders", None, NSHTLV, count_from="Length"), lambda pkt: pkt.MDType == 2) ] def mysummary(self): return self.sprintf("NSP: %NSP% - NSI: %NSI%")
class PPTPStopControlConnectionRequest(PPTP): name = "PPTP Stop Control Connection Request" fields_desc = [LenField("len", 16), ShortEnumField("type", 1, _PPTP_msg_type), XIntField("magic_cookie", _PPTP_MAGIC_COOKIE), ShortEnumField("ctrl_msg_type", 3, _PPTP_ctrl_msg_type), XShortField("reserved_0", 0x0000), ByteEnumField("reason", 1, _PPTP_stop_control_connection_reason), XByteField("reserved_1", 0x00), XShortField("reserved_2", 0x0000)]
class GMLAN_RMBA(Packet): name = 'ReadMemoryByAddress' fields_desc = [ ConditionalField(XShortField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(2)), ConditionalField(X3BytesField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(3)), ConditionalField(XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4)), XShortField('memorySize', 0), ]
class GMLAN_RMBAPR(Packet): name = 'ReadMemoryByAddressPositiveResponse' fields_desc = [ ConditionalField(XShortField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(2)), ConditionalField(X3BytesField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(3)), ConditionalField(XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4)), StrField('dataRecord', None, fmt="B") ]
class GMLAN_RD(Packet): name = 'RequestDownload' fields_desc = [ XByteField('dataFormatIdentifier', 0), ConditionalField(XShortField('memorySize', 0), lambda pkt: GMLAN.determine_len(2)), ConditionalField(X3BytesField('memorySize', 0), lambda pkt: GMLAN.determine_len(3)), ConditionalField(XIntField('memorySize', 0), lambda pkt: GMLAN.determine_len(4)), ]
class UnassocSTALinkMetricsResponse_STA(Packet): name = "Unassociated STA" fields_desc = [ MACField("mac", None), XByteField("chnl_num", None), XIntField("time_delta", None), XByteField("uplink_rcpi", None) ] def extract_padding(self, s): return "", s
class GMLAN_TD(Packet): subfunctions = {0x00: "download", 0x80: "downloadAndExecuteOrExecute"} name = 'TransferData' fields_desc = [ ByteEnumField('subfunction', 0, subfunctions), MultipleTypeField([(XShortField( 'startingAddress', 0), lambda pkt: GMLAN.determine_len(2)), (X3BytesField('startingAddress', 0), lambda pkt: GMLAN.determine_len(3)), (XIntField('startingAddress', 0), lambda pkt: GMLAN.determine_len(4))], XIntField('startingAddress', 0)), StrField("dataRecord", b"") ] @staticmethod def get_log(pkt): return pkt.sprintf("%GMLAN.service%"), \ (pkt.sprintf("%GMLAN_TD.subfunction%"), pkt.startingAddress, pkt.dataRecord)
class GRE(Packet): name = "GRE" deprecated_fields = { "seqence_number": ("sequence_number", "2.4.4"), } fields_desc = [ BitField("chksum_present", 0, 1), BitField("routing_present", 0, 1), BitField("key_present", 0, 1), BitField("seqnum_present", 0, 1), BitField("strict_route_source", 0, 1), BitField("recursion_control", 0, 3), BitField("flags", 0, 5), BitField("version", 0, 3), XShortEnumField("proto", 0x0000, ETHER_TYPES), ConditionalField( XShortField("chksum", None), lambda pkt: pkt.chksum_present == 1 or pkt.routing_present == 1), # noqa: E501 ConditionalField( XShortField("offset", None), lambda pkt: pkt.chksum_present == 1 or pkt.routing_present == 1), # noqa: E501 ConditionalField(XIntField("key", None), lambda pkt: pkt.key_present == 1), # noqa: E501 ConditionalField(XIntField("sequence_number", None), lambda pkt: pkt.seqnum_present == 1), # noqa: E501 ] @classmethod def dispatch_hook(cls, _pkt=None, *args, **kargs): # type: (Optional[Any], *Any, **Any) -> Type[Packet] if _pkt and struct.unpack("!H", _pkt[2:4])[0] == 0x880b: return GRE_PPTP return cls def post_build(self, p, pay): # type: (bytes, bytes) -> bytes p += pay if self.chksum_present and self.chksum is None: c = checksum(p) p = p[:4] + chb((c >> 8) & 0xff) + chb(c & 0xff) + p[6:] return p
class SCTP(_SCTPChunkGuessPayload, Packet): fields_desc = [ShortField("sport", None), ShortField("dport", None), XIntField("tag", None), XIntField("chksum", None), ] def answers(self, other): if not isinstance(other, SCTP): return 0 if conf.checkIPsrc: if not ((self.sport == other.dport) and (self.dport == other.sport)): return 0 return 1 def post_build(self, p, pay): p += pay if self.chksum is None: crc = crc32c(raw(p)) p = p[:8] + struct.pack(">I", crc) + p[12:] return p