From bd0832936ec90513d3a381cca07de4bf4c932462 Mon Sep 17 00:00:00 2001
From: Pierre LALET <pierre.lalet@cea.fr>
Date: Sat, 6 Feb 2016 21:47:30 +0100
Subject: [PATCH] LLTD: support for LLTD Discover messages

---
 scapy/layers/lltd.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/scapy/layers/lltd.py b/scapy/layers/lltd.py
index b0ea5718..a98e874c 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)
-- 
GitLab