X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_ip_mcast.py;h=b4554c67f42f5621db8aa32217699238d2adf388;hb=51e59688359ddac32ed58f3add3ea9ac358c9132;hp=7cad683cac5ccd06ecc87e158c9648b31fcaeb5c;hpb=1500254bee11355bbd69cc1dd9705be4f002f2bd;p=vpp.git diff --git a/test/test_ip_mcast.py b/test/test_ip_mcast.py index 7cad683cac5..b4554c67f42 100644 --- a/test/test_ip_mcast.py +++ b/test/test_ip_mcast.py @@ -5,7 +5,7 @@ import unittest from framework import VppTestCase, VppTestRunner from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint from vpp_ip_route import VppIpMRoute, VppMRoutePath, VppMFibSignal, \ - MRouteItfFlags, MRouteEntryFlags, VppIpTable + MRouteItfFlags, MRouteEntryFlags, VppIpTable, DpoProto from scapy.packet import Raw from scapy.layers.l2 import Ether @@ -14,12 +14,13 @@ from scapy.layers.inet6 import IPv6, getmacbyip6 from util import ppp # -# The number of packets sent is set to 90 so that when we replicate more than 3 +# The number of packets sent is set to 91 so that when we replicate more than 3 # times, which we do for some entries, we will generate more than 256 packets # to the next node in the VLIB graph. Thus we are testing the code's -# correctness handling this over-flow +# correctness handling this over-flow. +# It's also an odd number so we hit any single loops. # -N_PKTS_IN_STREAM = 90 +N_PKTS_IN_STREAM = 91 class TestMFIB(VppTestCase): @@ -324,10 +325,6 @@ class TestIPMcast(VppTestCase): self.verify_capture_ip4(self.pg6, tx) self.verify_capture_ip4(self.pg7, tx) - route_232_1_1_1.remove_vpp_config() - route_1_1_1_1_232_1_1_1.remove_vpp_config() - route_232.remove_vpp_config() - def test_ip6_mcast(self): """ IPv6 Multicast Replication """ @@ -354,13 +351,17 @@ class TestIPMcast(VppTestCase): "ff01::1", 128, MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE, [VppMRoutePath(self.pg0.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT), + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg1.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg2.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg3.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)], + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6)], is_ip6=1) route_ff01_1.add_vpp_config() @@ -374,11 +375,14 @@ class TestIPMcast(VppTestCase): "ff01::1", 256, MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE, [VppMRoutePath(self.pg0.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT), + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg1.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg2.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)], + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6)], is_ip6=1) route_2001_ff01_1.add_vpp_config() @@ -392,14 +396,25 @@ class TestIPMcast(VppTestCase): "ff01::", 16, MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE, [VppMRoutePath(self.pg0.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT), + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg1.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)], + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6)], is_ip6=1) route_ff01.add_vpp_config() # # a stream that matches the route for (*, ff01::/16) + # sent on the non-accepting interface + # + self.vapi.cli("clear trace") + tx = self.create_stream_ip6(self.pg1, "2002::1", "ff01:2::255") + self.send_and_assert_no_replies(self.pg1, tx, "RPF miss") + + # + # a stream that matches the route for (*, ff01::/16) + # sent on the accepting interface # self.vapi.cli("clear trace") tx = self.create_stream_ip6(self.pg0, "2002::1", "ff01:2::255") @@ -474,10 +489,6 @@ class TestIPMcast(VppTestCase): self.pg3.assert_nothing_captured( remark="IP multicast packets forwarded on PG3") - route_ff01.remove_vpp_config() - route_ff01_1.remove_vpp_config() - route_2001_ff01_1.remove_vpp_config() - def _mcast_connected_send_stream(self, dst_ip): self.vapi.cli("clear trace") tx = self.create_stream_ip4(self.pg0, @@ -584,8 +595,10 @@ class TestIPMcast(VppTestCase): signal_232_1_1_1_itf_0.compare(signals[1]) signal_232_1_1_2_itf_0.compare(signals[0]) - route_232_1_1_1.remove_vpp_config() - route_232_1_1_2.remove_vpp_config() + route_232_1_1_1.update_entry_flags( + MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE) + route_232_1_1_2.update_entry_flags( + MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE) def test_ip_mcast_signal(self): """ IP Multicast Signal """ @@ -679,11 +692,6 @@ class TestIPMcast(VppTestCase): signals = self.vapi.mfib_signal_dump() self.assertEqual(0, len(signals)) - # - # Cleanup - # - route_232_1_1_1.remove_vpp_config() - def test_ip_mcast_vrf(self): """ IP Multicast Replication in non-default table""" @@ -733,11 +741,14 @@ class TestIPMcast(VppTestCase): "ff01::1", 256, MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE, [VppMRoutePath(self.pg8.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT), + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg1.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6), VppMRoutePath(self.pg2.sw_if_index, - MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)], + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD, + proto=DpoProto.DPO_PROTO_IP6)], table_id=10, is_ip6=1) route_2001_ff01_1.add_vpp_config() @@ -756,5 +767,44 @@ class TestIPMcast(VppTestCase): self.verify_capture_ip6(self.pg1, tx) self.verify_capture_ip6(self.pg2, tx) + def test_bidir(self): + """ IP Multicast Bi-directional """ + + # + # A (*,G). The set of accepting interfaces matching the forwarding + # + route_232_1_1_1 = VppIpMRoute( + self, + "0.0.0.0", + "232.1.1.1", 32, + MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE, + [VppMRoutePath(self.pg0.sw_if_index, + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT | + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + VppMRoutePath(self.pg1.sw_if_index, + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT | + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + VppMRoutePath(self.pg2.sw_if_index, + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT | + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD), + VppMRoutePath(self.pg3.sw_if_index, + MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT | + MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)]) + route_232_1_1_1.add_vpp_config() + + tx = self.create_stream_ip4(self.pg0, "1.1.1.1", "232.1.1.1") + self.pg0.add_stream(tx) + + self.pg_enable_capture(self.pg_interfaces) + self.pg_start() + + # We expect replications on Pg1, 2, 3, but not on pg0 + self.verify_capture_ip4(self.pg1, tx) + self.verify_capture_ip4(self.pg2, tx) + self.verify_capture_ip4(self.pg3, tx) + self.pg0.assert_nothing_captured( + remark="IP multicast packets forwarded on PG0") + + if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)