diff --git a/scapy/layers/lltd.py b/scapy/layers/lltd.py index b0ea571831298b28c42db916b890a4ced67b0db7..a98e874c82f410feb1f6e6115b1b203748247678 100644 --- a/scapy/layers/lltd.py +++ b/scapy/layers/lltd.py @@ -13,7 +13,8 @@ import struct from scapy.fields import BitField, FlagsField, ByteField, ByteEnumField, \ ShortField, IntField, IntEnumField, LongField, MultiEnumField, \ - FieldLenField, StrLenField, MACField, StrLenFieldUtf16, ConditionalField + FieldLenField, FieldListField, StrLenField, MACField, StrLenFieldUtf16, \ + ConditionalField from scapy.packet import Packet, Padding, bind_layers from scapy.layers.l2 import Ether from scapy.layers.inet import IPField @@ -95,6 +96,18 @@ class LLTDHello(Packet): MACField("apparent_mapper_address", ETHER_ANY), ] +class LLTDDiscover(Packet): + name = "LLTD - Discover" + fields_desc = [ + ShortField("gen_number", 0), + FieldLenField("stations_count", None, count_of="stations_list", + fmt="H"), + FieldListField("stations_list", [], MACField("", ETHER_ANY), + count_from=lambda pkt: pkt.stations_count) + ] + def mysummary(self): + return self.sprintf("%stations_list%"), [LLTD] + class LLTDAttribute(Packet): name = "LLTD Attribute" show_indent = False @@ -551,6 +564,8 @@ class LLTDAttributeSeesList(LLTDAttribute): ] bind_layers(Ether, LLTD, type=0x88d9) +bind_layers(LLTD, LLTDDiscover, tos=0, function=0) +bind_layers(LLTD, LLTDDiscover, tos=1, function=0) bind_layers(LLTD, LLTDHello, tos=0, function=1) bind_layers(LLTD, LLTDHello, tos=1, function=1) bind_layers(LLTDHello, LLTDAttribute)