diff options
-rw-r--r-- | src/vnet/gre/node.c | 2 | ||||
-rw-r--r-- | test/patches/scapy-2.3.3/inet6.py.patch | 9 | ||||
-rw-r--r-- | test/test_gre.py | 25 |
3 files changed, 35 insertions, 1 deletions
diff --git a/src/vnet/gre/node.c b/src/vnet/gre/node.c index e10f116fa6d..1a5fc87b116 100644 --- a/src/vnet/gre/node.c +++ b/src/vnet/gre/node.c @@ -398,7 +398,7 @@ gre_input (vlib_main_t * vm, int verr0; u32 i0, next0; u32 ip4_tun_src0, ip4_tun_dst0; - u32 ip6_tun_src0[4], ip6_tun_dst0[4]; + u64 ip6_tun_src0[2], ip6_tun_dst0[2]; bi0 = from[0]; to_next[0] = bi0; diff --git a/test/patches/scapy-2.3.3/inet6.py.patch b/test/patches/scapy-2.3.3/inet6.py.patch index f98e70915ca..cf3217eb672 100644 --- a/test/patches/scapy-2.3.3/inet6.py.patch +++ b/test/patches/scapy-2.3.3/inet6.py.patch @@ -183,3 +183,12 @@ diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py ########################### Fragmentation Header ############################ class IPv6ExtHdrFragment(_IPv6ExtHdr): +diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py +index 20afedf..ae3c4dd 100644 +--- a/scapy/layers/inet6.py ++++ b/scapy/layers/inet6.py +@@ -3888,3 +3888,4 @@ bind_layers(IPv6, UDP, nh = socket.IPPROTO_UDP ) + bind_layers(IP, IPv6, proto = socket.IPPROTO_IPV6 ) + bind_layers(IPv6, IPv6, nh = socket.IPPROTO_IPV6 ) + bind_layers(IPv6, IP, nh = socket.IPPROTO_IPIP ) ++bind_layers(IPv6, GRE, nh = socket.IPPROTO_GRE ) diff --git a/test/test_gre.py b/test/test_gre.py index 9046b05f2f6..5cdc0637a1a 100644 --- a/test/test_gre.py +++ b/test/test_gre.py @@ -507,6 +507,9 @@ class TestGRE(VppTestCase): def test_gre6(self): """ GRE IPv6 tunnel Tests """ + self.pg1.config_ip6() + self.pg1.resolve_ndp() + # # Create an L3 GRE tunnel. # - set it admin up @@ -571,6 +574,27 @@ class TestGRE(VppTestCase): self.pg2.local_ip6, "1002::1") # + # Test decap. decapped packets go out pg1 + # + tx = self.create_tunnel_stream_6o6(self.pg2, + "1002::1", + self.pg2.local_ip6, + "2001::1", + self.pg1.remote_ip6) + self.vapi.cli("clear trace") + self.pg2.add_stream(tx) + + self.pg_enable_capture(self.pg_interfaces) + self.pg_start() + rx = self.pg1.get_capture(len(tx)) + + # + # RX'd packet is UDP over IPv6, test the GRE header is gone. + # + self.assertFalse(rx[0].haslayer(GRE)) + self.assertEqual(rx[0][IPv6].dst, self.pg1.remote_ip6) + + # # test case cleanup # route_tun_dst.remove_vpp_config() @@ -578,6 +602,7 @@ class TestGRE(VppTestCase): gre_if.remove_vpp_config() self.pg2.unconfig_ip6() + self.pg1.unconfig_ip6() def test_gre_vrf(self): """ GRE tunnel VRF Tests """ |