diff --git a/scapy/contrib/ospf.py b/scapy/contrib/ospf.py index 7dbd3ea1881..44a538a1c66 100644 --- a/scapy/contrib/ospf.py +++ b/scapy/contrib/ospf.py @@ -396,13 +396,17 @@ class OSPF_AS_Scope_Opaque_LSA(OSPF_Link_Scope_Opaque_LSA): class OSPF_DBDesc(Packet): name = "OSPF Database Description" - fields_desc = [ShortField("mtu", 1500), - OSPFOptionsField(), - FlagsField("dbdescr", 0, 8, ["MS", "M", "I", "R", "4", "3", "2", "1"]), # noqa: E501 - IntField("ddseq", 1), - PacketListField("lsaheaders", None, OSPF_LSA_Hdr, - count_from=lambda pkt: None, - length_from=lambda pkt: pkt.underlayer.len - 24 - 8)] # noqa: E501 + fields_desc = [ + ShortField("mtu", 1500), + OSPFOptionsField(), + FlagsField("dbdescr", 0, 8, ["MS", "M", "I", "R", "4", "3", "2", "1"]), + IntField("ddseq", 1), + PacketListField( + "lsaheaders", None, OSPF_LSA_Hdr, + count_from=lambda pkt: None, + length_from=lambda pkt: pkt.underlayer and pkt.underlayer.len - 24 - 8, + ) + ] def guess_payload_class(self, payload): # check presence of LLS data block flag @@ -424,24 +428,36 @@ def extract_padding(self, s): class OSPF_LSReq(Packet): name = "OSPF Link State Request (container)" - fields_desc = [PacketListField("requests", None, OSPF_LSReq_Item, - count_from=lambda pkt:None, - length_from=lambda pkt:pkt.underlayer.len - 24)] # noqa: E501 + fields_desc = [ + PacketListField( + "requests", None, OSPF_LSReq_Item, + count_from=lambda pkt: None, + length_from=lambda pkt: pkt.underlayer and pkt.underlayer.len - 24, + ) + ] class OSPF_LSUpd(Packet): name = "OSPF Link State Update" - fields_desc = [FieldLenField("lsacount", None, fmt="!I", count_of="lsalist"), # noqa: E501 - PacketListField("lsalist", None, _LSAGuessPayloadClass, - count_from=lambda pkt: pkt.lsacount, - length_from=lambda pkt: pkt.underlayer.len - 24)] # noqa: E501 + fields_desc = [ + FieldLenField("lsacount", None, fmt="!I", count_of="lsalist"), + PacketListField( + "lsalist", None, _LSAGuessPayloadClass, + count_from=lambda pkt: pkt.lsacount, + length_from=lambda pkt: pkt.underlayer and pkt.underlayer.len - 24, + ) + ] class OSPF_LSAck(Packet): name = "OSPF Link State Acknowledgement" - fields_desc = [PacketListField("lsaheaders", None, OSPF_LSA_Hdr, - count_from=lambda pkt: None, - length_from=lambda pkt: pkt.underlayer.len - 24)] # noqa: E501 + fields_desc = [ + PacketListField( + "lsaheaders", None, OSPF_LSA_Hdr, + count_from=lambda pkt: None, + length_from=lambda pkt: pkt.underlayer and pkt.underlayer.len - 24, + ) + ] def answers(self, other): if isinstance(other, OSPF_LSUpd): diff --git a/test/contrib/ospf.uts b/test/contrib/ospf.uts index 081d180e64c..9b76bc8e0c9 100644 --- a/test/contrib/ospf.uts +++ b/test/contrib/ospf.uts @@ -80,3 +80,11 @@ p = OSPF_AS_Scope_Opaque_LSA(seq=0x80000005,data=opaque_data) assert (p.type == 11) assert (p.seq == 0x80000005) assert (len(p) == 132) + += OSPF - build/dissect without header + +OSPF_DBDesc().show2() +OSPF_LSReq().show2() +OSPF_LSUpd().show2() +OSPF_LSAck().show2() +