From eea93509ba16843852444bd6f11ed001bf5130d7 Mon Sep 17 00:00:00 2001 From: Pierre LALET <pierre.lalet@cea.fr> Date: Sat, 16 Sep 2017 20:28:47 +0200 Subject: [PATCH] VXLAN: clean ConditionalField flag-based conditions --- scapy/fields.py | 5 +++++ scapy/layers/vxlan.py | 18 +++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/scapy/fields.py b/scapy/fields.py index e97e485c..4a5411ac 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -1153,6 +1153,11 @@ class FlagsField(BitField): return type(x)(None if v is None else FlagValue(v, self.names) for v in x) return None if x is None else FlagValue(x, self.names) + def i2h(self, pkt, x): + if isinstance(x, (list, tuple)): + return type(x)(None if v is None else FlagValue(v, self.names) + for v in x) + return None if x is None else FlagValue(x, self.names) def i2repr(self, pkt, x): if isinstance(x, (list, tuple)): return repr(type(x)( diff --git a/scapy/layers/vxlan.py b/scapy/layers/vxlan.py index 1d1d9ae4..1a715534 100644 --- a/scapy/layers/vxlan.py +++ b/scapy/layers/vxlan.py @@ -26,7 +26,7 @@ class VXLAN(Packet): 'V1', 'V2', 'R', 'G']), ConditionalField( ShortField("reserved0", 0), - lambda pkt: pkt.flags & 0x04, + lambda pkt: pkt.flags.NextProtocol, ), ConditionalField( ByteEnumField('NextProtocol', 0, @@ -35,22 +35,22 @@ class VXLAN(Packet): 2: 'IPv6', 3: 'Ethernet', 4: 'NSH'}), - lambda pkt: pkt.flags & 0x04, + lambda pkt: pkt.flags.NextProtocol, ), ConditionalField( - ThreeBytesField("reserved1", 0x000000), - lambda pkt: (not pkt.flags & 0x80) and (not pkt.flags & 0x04), + ThreeBytesField("reserved1", 0), + lambda pkt: (not pkt.flags.G) and (not pkt.flags.NextProtocol), ), ConditionalField( - FlagsField("gpflags", 0x0, 8, _GP_FLAGS), - lambda pkt: pkt.flags & 0x80, + FlagsField("gpflags", 0, 8, _GP_FLAGS), + lambda pkt: pkt.flags.G, ), ConditionalField( ShortField("gpid", 0), - lambda pkt: pkt.flags & 0x80, + lambda pkt: pkt.flags.G, ), X3BytesField("vni", 0), - XByteField("reserved2", 0x00), + XByteField("reserved2", 0), ] # Use default linux implementation port @@ -59,7 +59,7 @@ class VXLAN(Packet): } def mysummary(self): - if self.flags & 0x80: + if self.flags.G: return self.sprintf("VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)") else: return self.sprintf("VXLAN (vni=%VXLAN.vni%)") -- GitLab