diff options
author | Marco Varlese <marco.varlese@suse.com> | 2017-09-19 14:25:28 +0200 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-10-06 08:51:09 +0000 |
commit | b598f1d3d7d4ace9a29c01d93a8d1ba616a91e15 (patch) | |
tree | 25f408f1255c61138499d146f66da27d390c7cbd /test/patches/scapy-2.3.3/geneve.patch | |
parent | 4e5ceefb5522cfde1e916d84b56c318ec1ea614e (diff) |
Initial GENEVE TUNNEL implementation and tests.
Notes on this first implementation:
* First version of the implementation does NOT support GENEVE OPTIONS
HEADER: it isn't well understood what the purpose of the OPTIONS will be and/or
what content would be placed in the variable option data;
Once the IETF work will evolve and further information will be available
it could be possible to modify the frame rewrite to contemplate the
actual GENEVE OPTIONS.
Change-Id: Iddfe6f408cc45bb0800f00ce6a3e302e48a4ed52
Signed-off-by: Marco Varlese <marco.varlese@suse.com>
Diffstat (limited to 'test/patches/scapy-2.3.3/geneve.patch')
-rw-r--r-- | test/patches/scapy-2.3.3/geneve.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/patches/scapy-2.3.3/geneve.patch b/test/patches/scapy-2.3.3/geneve.patch new file mode 100644 index 00000000000..92752f1196e --- /dev/null +++ b/test/patches/scapy-2.3.3/geneve.patch @@ -0,0 +1,56 @@ +diff --git a/scapy/layers/geneve.py b/scapy/layers/geneve.py +new file mode 100644 +index 0000000..e2ca888 +--- /dev/null ++++ b/scapy/layers/geneve.py +@@ -0,0 +1,50 @@ ++#! /usr/bin/env python ++# (GENEVE): ++# A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks ++ ++from scapy.packet import Packet, bind_layers ++from scapy.layers.l2 import Ether ++from scapy.layers.inet import IP, UDP ++from scapy.layers.inet6 import IPv6 ++from scapy.fields import FlagsField, XByteField, ThreeBytesField, \ ++ ConditionalField, ShortField, ByteEnumField, X3BytesField ++ ++# ++# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++# |Ver| Opt Len |O|C| Rsvd. | Protocol Type | ++# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++# | Virtual Network Identifier (VNI) | Reserved | ++# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++# | Variable Length Options | ++# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++# ++ ++class GENEVE(Packet): ++ name = "GENEVE" ++ ++ fields_desc = [ ++ # INIT = ver + optlen + o + c + rsvd (all zeros) ++ ShortField("init", 0x0), ++ # PROTOCOL is a 2-bytes field ++ ShortField("protocol", 0x6558), ++ ThreeBytesField("vni", 0), ++ XByteField("reserved2", 0), ++ ] ++ ++ def mysummary(self): ++ return self.sprintf("GENEVE (vni=%GENEVE.vni%)") ++ ++bind_layers(UDP, GENEVE, dport=6081) # RFC standard port ++bind_layers(UDP, GENEVE, dport=6081) # New IANA assigned port for use with NSH ++bind_layers(UDP, GENEVE, dport=8472) # Linux implementation port ++# By default, set both ports to the RFC standard ++bind_layers(UDP, GENEVE, sport=6081, dport=6081) ++ ++bind_layers(GENEVE, Ether) ++bind_layers(GENEVE, IP, NextProtocol=1) ++bind_layers(GENEVE, IPv6, NextProtocol=2) ++bind_layers(GENEVE, Ether, flags=4, NextProtocol=0) ++bind_layers(GENEVE, IP, flags=4, NextProtocol=1) ++bind_layers(GENEVE, IPv6, flags=4, NextProtocol=2) ++bind_layers(GENEVE, Ether, flags=4, NextProtocol=3) ++ |