diff --git a/scapy/contrib/ospf.py b/scapy/contrib/ospf.py index 8b316ca55e96ed93a065c8c24a6cdf8a458f6c2e..fe79886253fd1602e340e4415b9a69915709bc96 100644 --- a/scapy/contrib/ospf.py +++ b/scapy/contrib/ospf.py @@ -260,7 +260,7 @@ class OSPF_Link(Packet): def _LSAGuessPayloadClass(p, **kargs): """ Guess the correct LSA class for a given payload """ # This is heavily based on scapy-cdp.py by Nicolas Bareil and Arnaud Ebalard - # XXX: This only works if all payload + cls = conf.raw_layer if len(p) >= 4: typ = struct.unpack("!B", p[3])[0] @@ -410,7 +410,7 @@ class OSPF_LSReq(Packet): class OSPF_LSUpd(Packet): name = "OSPF Link State Update" fields_desc = [FieldLenField("lsacount", None, fmt="!I", count_of="lsalist"), - PacketListField("lsalist", [], _LSAGuessPayloadClass, + PacketListField("lsalist", None, _LSAGuessPayloadClass, count_from = lambda pkt: pkt.lsacount, length_from = lambda pkt: pkt.underlayer.len - 24)] diff --git a/scapy/contrib/ospf.uts b/scapy/contrib/ospf.uts new file mode 100644 index 0000000000000000000000000000000000000000..0dc1d6e1f731d7beec7cb23ce57a50cd08a8f66c --- /dev/null +++ b/scapy/contrib/ospf.uts @@ -0,0 +1,28 @@ +# OSPF Related regression tests +# +# Type the following command to launch start the tests: +# $ test/run_tests -P "load_contrib('ospf')" -t scapy/contrib/ospf.uts + ++ OSPF + += OSPF, basic instanciation + +data = '\x01\x00^\x00\x00\x05\x00\xe0\x18\xb1\x0c\xad\x08\x00E\xc0\x00T\x08\x19\x00\x00\x01Ye\xc2\xc0\xa8\xaa\x08\xe0\x00\x00\x05\x02\x04\x00@\xc0\xa8\xaa\x08\x00\x00\x00\x01\x96\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\xe2\x02\x01\xc0\xa8\xaa\x08\xc0\xa8\xaa\x08\x80\x00\r\xc3%\x06\x00$\x02\x00\x00\x01\xc0\xa8\xaa\x00\xff\xff\xff\x00\x03\x00\x00\n' + +p = Ether(data) + +assert (p[OSPF_LSUpd][OSPF_Router_LSA].age == 994) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].type == 1) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].id == '192.168.170.8') +assert (p[OSPF_LSUpd][OSPF_Router_LSA].adrouter == '192.168.170.8') +assert (p[OSPF_LSUpd][OSPF_Router_LSA].seq == 0x80000dc3) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].chksum == 0x2506) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].len == 36) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].reserved == 0) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linkcount == 1) + +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linklist[0][OSPF_Link].id == '192.168.170.0') +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linklist[0][OSPF_Link].data == '255.255.255.0') +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linklist[0][OSPF_Link].type == 3) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linklist[0][OSPF_Link].toscount == 0) +assert (p[OSPF_LSUpd][OSPF_Router_LSA].linklist[0][OSPF_Link].metric == 10)