From 375311479461e91a52f0c9e97455d0af8b45f5d5 Mon Sep 17 00:00:00 2001
From: Gabriel Ganne <gabriel.ganne@enea.com>
Date: Wed, 12 Apr 2017 14:24:56 +0200
Subject: [PATCH] add bindings for NSH over GRE

Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>
---
 scapy/contrib/nsh.py  | 2 ++
 scapy/contrib/nsh.uts | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/scapy/contrib/nsh.py b/scapy/contrib/nsh.py
index 39ad3c05..fd6778b1 100644
--- a/scapy/contrib/nsh.py
+++ b/scapy/contrib/nsh.py
@@ -9,6 +9,7 @@ from scapy.layers.inet import Ether, IP
 from scapy.layers.inet6 import IPv6
 from scapy.layers.vxlan import VXLAN
 from scapy.packet import Packet
+from scapy.layers.l2 import GRE
 
 from scapy.contrib.mpls import MPLS
 
@@ -71,6 +72,7 @@ class NSH(Packet):
 
 bind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F)
 bind_layers(VXLAN, NSH, {'flags': 0xC, 'NextProtocol': 4}, NextProtocol=4)
+bind_layers(GRE, NSH, {'proto': 0x894F}, proto=0x894F)
 
 bind_layers(NSH, IP, {'NextProto': 1}, NextProto=1)
 bind_layers(NSH, IPv6, {'NextProto': 2}, NextProto=2)
diff --git a/scapy/contrib/nsh.uts b/scapy/contrib/nsh.uts
index 246d74f4..f25d7924 100644
--- a/scapy/contrib/nsh.uts
+++ b/scapy/contrib/nsh.uts
@@ -12,3 +12,6 @@ str(NSH(Len=2, NSP=42, NSI=1)/NSH()) == b'\x00\x02\x01\x04\x00\x00*\x01\x00\x00\
 
 = Build a Ethernet over NSH over Ethernet packet (NSH over Ethernet encapsulating the original packet) and verify Ethernet Bindings
 str(Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02")/NSH()/Ether(src="00:00:00:00:00:03", dst="00:00:00:00:00:04")/ARP(psrc="10.0.0.1", hwsrc="00:00:00:00:00:01")) == b'\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x89O\x00\x00\x01\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x03\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\x00\x00\x00\x00\x00\x01\n\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+
+= Build a NSH over GRE packet, and verify GRE Bindings
+str(Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/NSH()/Ether(src="00:00:00:00:00:03", dst="00:00:00:00:00:04")/ARP(psrc="10.0.0.1", hwsrc="00:00:00:00:00:01")) == '\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x08\x00\x45\x00\x00\x5a\x00\x01\x00\x00\x40\x2f\x74\x6f\x01\x01\x01\x01\x02\x02\x02\x02\x00\x00\x89\x4f\x00\x00\x01\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x03\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\x00\x00\x00\x00\x00\x01\x0a\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-- 
GitLab