Skip to content
Snippets Groups Projects
Commit eea93509 authored by Pierre LALET's avatar Pierre LALET
Browse files

VXLAN: clean ConditionalField flag-based conditions

parent 3e99428d
No related branches found
No related tags found
No related merge requests found
...@@ -1153,6 +1153,11 @@ class FlagsField(BitField): ...@@ -1153,6 +1153,11 @@ class FlagsField(BitField):
return type(x)(None if v is None else FlagValue(v, self.names) return type(x)(None if v is None else FlagValue(v, self.names)
for v in x) for v in x)
return None if x is None else FlagValue(x, self.names) 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): def i2repr(self, pkt, x):
if isinstance(x, (list, tuple)): if isinstance(x, (list, tuple)):
return repr(type(x)( return repr(type(x)(
......
...@@ -26,7 +26,7 @@ class VXLAN(Packet): ...@@ -26,7 +26,7 @@ class VXLAN(Packet):
'V1', 'V2', 'R', 'G']), 'V1', 'V2', 'R', 'G']),
ConditionalField( ConditionalField(
ShortField("reserved0", 0), ShortField("reserved0", 0),
lambda pkt: pkt.flags & 0x04, lambda pkt: pkt.flags.NextProtocol,
), ),
ConditionalField( ConditionalField(
ByteEnumField('NextProtocol', 0, ByteEnumField('NextProtocol', 0,
...@@ -35,22 +35,22 @@ class VXLAN(Packet): ...@@ -35,22 +35,22 @@ class VXLAN(Packet):
2: 'IPv6', 2: 'IPv6',
3: 'Ethernet', 3: 'Ethernet',
4: 'NSH'}), 4: 'NSH'}),
lambda pkt: pkt.flags & 0x04, lambda pkt: pkt.flags.NextProtocol,
), ),
ConditionalField( ConditionalField(
ThreeBytesField("reserved1", 0x000000), ThreeBytesField("reserved1", 0),
lambda pkt: (not pkt.flags & 0x80) and (not pkt.flags & 0x04), lambda pkt: (not pkt.flags.G) and (not pkt.flags.NextProtocol),
), ),
ConditionalField( ConditionalField(
FlagsField("gpflags", 0x0, 8, _GP_FLAGS), FlagsField("gpflags", 0, 8, _GP_FLAGS),
lambda pkt: pkt.flags & 0x80, lambda pkt: pkt.flags.G,
), ),
ConditionalField( ConditionalField(
ShortField("gpid", 0), ShortField("gpid", 0),
lambda pkt: pkt.flags & 0x80, lambda pkt: pkt.flags.G,
), ),
X3BytesField("vni", 0), X3BytesField("vni", 0),
XByteField("reserved2", 0x00), XByteField("reserved2", 0),
] ]
# Use default linux implementation port # Use default linux implementation port
...@@ -59,7 +59,7 @@ class VXLAN(Packet): ...@@ -59,7 +59,7 @@ class VXLAN(Packet):
} }
def mysummary(self): def mysummary(self):
if self.flags & 0x80: if self.flags.G:
return self.sprintf("VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)") return self.sprintf("VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)")
else: else:
return self.sprintf("VXLAN (vni=%VXLAN.vni%)") return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment