Skip to content
Snippets Groups Projects
Commit 6d2efe37 authored by Pierre Lalet's avatar Pierre Lalet
Browse files

Merged in lobo/scapy-vxlan (pull request #26)

Added a layer for VXLAN
parents 2e776b79 7efcc29f
No related branches found
No related tags found
No related merge requests found
...@@ -168,10 +168,6 @@ class EigrpIP6Field(StrField, IP6Field, EigrpIPField): ...@@ -168,10 +168,6 @@ class EigrpIP6Field(StrField, IP6Field, EigrpIPField):
def getfield(self, pkt, s): def getfield(self, pkt, s):
return EigrpIPField.getfield(self, pkt, s) return EigrpIPField.getfield(self, pkt, s)
class ThreeBytesField(X3BytesField, ByteField):
def i2repr(self, pkt, x):
return ByteField.i2repr(self, pkt, x)
class EIGRPGeneric(Packet): class EIGRPGeneric(Packet):
name = "EIGRP Generic TLV" name = "EIGRP Generic TLV"
......
# RFC 7348 - Virtual eXtensible Local Area Network (VXLAN):
# A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks
# http://tools.ietf.org/html/rfc7348
# scapy.contrib.description = VXLAN
# scapy.contrib.status = loads
from scapy.packet import Packet, bind_layers
from scapy.layers.l2 import Ether
from scapy.layers.inet import UDP
from scapy.fields import FlagsField, XByteField, ThreeBytesField
_VXLAN_FLAGS = ['R' for i in range(0, 24)] + ['R', 'R', 'R', 'I', 'R', 'R', 'R', 'R', 'R']
class VXLAN(Packet):
name = "VXLAN"
fields_desc = [FlagsField("flags", 0x08000000, 32, _VXLAN_FLAGS),
ThreeBytesField("vni", 0),
XByteField("reserved", 0x00)]
def mysummary(self):
return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
bind_layers(UDP, VXLAN, dport=4789)
bind_layers(VXLAN, Ether)
% VXLAN Tests
* Tests for the Scapy VXLAN layer
+ Basic Layer Tests
= Build a VXLAN packet with VNI of 42
str(UDP(sport=1024, dport=4789, len=None, chksum=None)/VXLAN(flags=0x08000000, vni=42)) == "\x04\x00\x12\xb5\x00\x10\x00\x00\x08\x00\x00\x00\x00\x00\x2a\x00"
= Verify VXLAN Ethernet Binding
str(VXLAN(vni=23)/Ether(dst="11:11:11:11:11:11", src="11:11:11:11:11:11", type=0x800)) == "\x08\x00\x00\x00\x00\x00\x17\x00\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x08\x00"
...@@ -275,6 +275,9 @@ class X3BytesField(XByteField): ...@@ -275,6 +275,9 @@ class X3BytesField(XByteField):
def getfield(self, pkt, s): def getfield(self, pkt, s):
return s[3:], self.m2i(pkt, struct.unpack(self.fmt, "\x00"+s[:3])[0]) return s[3:], self.m2i(pkt, struct.unpack(self.fmt, "\x00"+s[:3])[0])
class ThreeBytesField(X3BytesField, ByteField):
def i2repr(self, pkt, x):
return ByteField.i2repr(self, pkt, x)
class ShortField(Field): class ShortField(Field):
def __init__(self, name, default): def __init__(self, name, default):
......
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