From 4c16d80067b35973ebc5a86d685db52fea2fd052 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Tue, 17 Dec 2019 20:15:03 +0000 Subject: gre: multipoint ingress lookup fix Type: fix Change-Id: I170edd62220a63cb19efea3032e173fb87730b1b Signed-off-by: Neale Ranns --- test/test_gre.py | 83 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 14 deletions(-) (limited to 'test') diff --git a/test/test_gre.py b/test/test_gre.py index 96fe3042b4e..f4b4ee2b7e5 100644 --- a/test/test_gre.py +++ b/test/test_gre.py @@ -451,6 +451,28 @@ class TestGRE(VppTestCase): self.logger.error(ppp("Tx:", tx)) raise + def verify_decapped_6o6(self, src_if, capture, sent): + self.assertEqual(len(capture), len(sent)) + + for i in range(len(capture)): + try: + tx = sent[i] + rx = capture[i] + + tx_ip = tx[IPv6] + rx_ip = rx[IPv6] + tx_gre = tx[GRE] + tx_ip = tx_gre[IPv6] + + self.assertEqual(rx_ip.src, tx_ip.src) + self.assertEqual(rx_ip.dst, tx_ip.dst) + self.assertEqual(rx_ip.hlim + 1, tx_ip.hlim) + + except: + self.logger.error(ppp("Rx:", rx)) + self.logger.error(ppp("Tx:", tx)) + raise + def test_gre(self): """ GRE IPv4 tunnel Tests """ @@ -1002,6 +1024,17 @@ class TestGRE(VppTestCase): self.logger.info(self.vapi.cli("sh adj")) self.logger.info(self.vapi.cli("sh ip fib")) + # + # ensure we don't match to the tunnel if the source address + # is all zeros + # + tx = self.create_tunnel_stream_4o4(self.pg0, + "0.0.0.0", + itf.local_ip4, + self.pg0.local_ip4, + self.pg0.remote_ip4) + self.send_and_assert_no_replies(self.pg0, tx) + # # for-each peer # @@ -1029,23 +1062,34 @@ class TestGRE(VppTestCase): # Send a packet stream that is routed into the tunnel # - packets are GRE encapped # - tx = self.create_stream_ip4(self.pg0, "5.5.5.5", route_addr) - rx = self.send_and_expect(self.pg0, tx, itf) - self.verify_tunneled_4o4(self.pg0, rx, tx, + tx_e = self.create_stream_ip4(self.pg0, "5.5.5.5", route_addr) + rx = self.send_and_expect(self.pg0, tx_e, itf) + self.verify_tunneled_4o4(self.pg0, rx, tx_e, itf.local_ip4, gre_if._remote_hosts[ii].ip4) + tx_i = self.create_tunnel_stream_4o4(self.pg0, + itf._remote_hosts[ii].ip4, + itf.local_ip4, + self.pg0.local_ip4, + self.pg0.remote_ip4) + rx = self.send_and_expect(self.pg0, tx_i, self.pg0) + self.verify_decapped_4o4(self.pg0, rx, tx_i) + # # delete and re-add the NHRP # nhrp.remove_vpp_config() - self.send_and_assert_no_replies(self.pg0, tx) + self.send_and_assert_no_replies(self.pg0, tx_e) + self.send_and_assert_no_replies(self.pg0, tx_i) nhrp.add_vpp_config() - rx = self.send_and_expect(self.pg0, tx, itf) - self.verify_tunneled_4o4(self.pg0, rx, tx, + rx = self.send_and_expect(self.pg0, tx_e, itf) + self.verify_tunneled_4o4(self.pg0, rx, tx_e, itf.local_ip4, gre_if._remote_hosts[ii].ip4) + rx = self.send_and_expect(self.pg0, tx_i, self.pg0) + self.verify_decapped_4o4(self.pg0, rx, tx_i) gre_if.admin_down() gre_if.unconfig_ip4() @@ -1053,7 +1097,8 @@ class TestGRE(VppTestCase): def test_mgre6(self): """ mGRE IPv6 tunnel Tests """ - self.pg0.ip6_enable() + self.pg0.config_ip6() + self.pg0.resolve_ndp() for itf in self.pg_interfaces[3:]: # @@ -1106,27 +1151,37 @@ class TestGRE(VppTestCase): # Send a packet stream that is routed into the tunnel # - packets are GRE encapped # - tx = self.create_stream_ip6(self.pg0, "5::5", route_addr) - rx = self.send_and_expect(self.pg0, tx, itf) - self.verify_tunneled_6o6(self.pg0, rx, tx, + tx_e = self.create_stream_ip6(self.pg0, "5::5", route_addr) + rx = self.send_and_expect(self.pg0, tx_e, itf) + self.verify_tunneled_6o6(self.pg0, rx, tx_e, itf.local_ip6, gre_if._remote_hosts[ii].ip6) + tx_i = self.create_tunnel_stream_6o6(self.pg0, + itf._remote_hosts[ii].ip6, + itf.local_ip6, + self.pg0.local_ip6, + self.pg0.remote_ip6) + rx = self.send_and_expect(self.pg0, tx_i, self.pg0) + self.verify_decapped_6o6(self.pg0, rx, tx_i) # # delete and re-add the NHRP # nhrp.remove_vpp_config() - self.send_and_assert_no_replies(self.pg0, tx) + self.send_and_assert_no_replies(self.pg0, tx_e) nhrp.add_vpp_config() - rx = self.send_and_expect(self.pg0, tx, itf) - self.verify_tunneled_6o6(self.pg0, rx, tx, + rx = self.send_and_expect(self.pg0, tx_e, itf) + self.verify_tunneled_6o6(self.pg0, rx, tx_e, itf.local_ip6, gre_if._remote_hosts[ii].ip6) + rx = self.send_and_expect(self.pg0, tx_i, self.pg0) + self.verify_decapped_6o6(self.pg0, rx, tx_i) + gre_if.admin_down() gre_if.unconfig_ip4() itf.unconfig_ip6() - self.pg0.ip6_disable() + self.pg0.unconfig_ip6() if __name__ == '__main__': -- cgit 1.2.3-korg