| 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 python3 |
| +# (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) |
| + |