From 300298d1c37216599fbb91f9bf675114dfd1501f Mon Sep 17 00:00:00 2001 From: Pierre LALET <pierre.lalet@cea.fr> Date: Sat, 6 Feb 2016 23:54:22 +0100 Subject: [PATCH] LLTD: support LLTD Emit messages --- scapy/layers/lltd.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/scapy/layers/lltd.py b/scapy/layers/lltd.py index 5d19cf52..ed886fbd 100644 --- a/scapy/layers/lltd.py +++ b/scapy/layers/lltd.py @@ -13,8 +13,8 @@ import struct from scapy.fields import BitField, FlagsField, ByteField, ByteEnumField, \ ShortField, IntField, IntEnumField, LongField, MultiEnumField, \ - FieldLenField, FieldListField, StrLenField, MACField, StrLenFieldUtf16, \ - ConditionalField + FieldLenField, FieldListField, PacketListField, StrLenField, \ + StrLenFieldUtf16, ConditionalField, MACField from scapy.packet import Packet, Padding, bind_layers from scapy.layers.l2 import Ether from scapy.layers.inet import IPField @@ -122,6 +122,30 @@ class LLTDDiscover(Packet): if self.stations_list else "No station", [LLTD]) +class LLTDEmiteeDesc(Packet): + name = "LLTD - Emitee Desc" + fields_desc = [ + ByteEnumField("type", 0, {0: "Train", 1: "Probe"}), + ByteField("pause", 0), + MACField("src", None), + MACField("dst", ETHER_ANY), + ] + + +class LLTDEmit(Packet): + name = "LLTD - Emit" + fields_desc = [ + FieldLenField("descs_count", None, count_of="descs_list", + fmt="H"), + PacketListField("descs_list", [], LLTDEmiteeDesc, + count_from=lambda pkt: pkt.descs_count), + ] + + def mysummary(self): + return ", ".join(desc.sprintf("%src% > %dst%") + for desc in self.descs_list), [LLTD] + + class LLTDAttribute(Packet): name = "LLTD Attribute" show_indent = False @@ -607,6 +631,7 @@ 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(LLTD, LLTDEmit, tos=0, function=2) bind_layers(LLTDHello, LLTDAttribute) bind_layers(LLTDAttribute, LLTDAttribute) bind_layers(LLTDAttribute, Padding, type=0) -- GitLab