fib tests: IP multicast over GRE
Type: feature Change-Id: I1632ff23b1bf6d91aa3406c95ebd6ef0aa595f35 Signed-off-by: Neale Ranns <nranns@cisco.com>
This commit is contained in:

committed by
Andrew Yourtchenko

parent
8511687d59
commit
adb17a813c
@ -515,6 +515,7 @@ adj_nbr_midchain_update_rewrite (adj_index_t adj_index,
|
||||
*/
|
||||
ASSERT((adj->lookup_next_index == IP_LOOKUP_NEXT_ARP) ||
|
||||
(adj->lookup_next_index == IP_LOOKUP_NEXT_GLEAN) ||
|
||||
(adj->lookup_next_index == IP_LOOKUP_NEXT_MCAST) ||
|
||||
(adj->lookup_next_index == IP_LOOKUP_NEXT_BCAST));
|
||||
|
||||
adj_midchain_setup(adj_index, fixup, fixup_data, flags);
|
||||
|
@ -6,9 +6,10 @@ from framework import VppTestCase, VppTestRunner
|
||||
from vpp_ip import DpoProto
|
||||
from vpp_ip_route import VppIpMRoute, VppMRoutePath, VppMFibSignal, \
|
||||
MRouteItfFlags, MRouteEntryFlags, VppIpTable, FibPathProto
|
||||
from vpp_gre_interface import VppGreInterface
|
||||
|
||||
from scapy.packet import Raw
|
||||
from scapy.layers.l2 import Ether
|
||||
from scapy.layers.l2 import Ether, GRE
|
||||
from scapy.layers.inet import IP, UDP, getmacbyip
|
||||
from scapy.layers.inet6 import IPv6, getmacbyip6
|
||||
|
||||
@ -795,6 +796,79 @@ class TestIPMcast(VppTestCase):
|
||||
self.verify_capture_ip4(self.pg1, tx)
|
||||
self.verify_capture_ip4(self.pg2, tx)
|
||||
|
||||
def test_ip_mcast_gre(self):
|
||||
""" IP Multicast Replication over GRE"""
|
||||
|
||||
gre_if_1 = VppGreInterface(
|
||||
self,
|
||||
self.pg1.local_ip4,
|
||||
self.pg1.remote_ip4).add_vpp_config()
|
||||
gre_if_2 = VppGreInterface(
|
||||
self,
|
||||
self.pg2.local_ip4,
|
||||
self.pg2.remote_ip4).add_vpp_config()
|
||||
gre_if_3 = VppGreInterface(
|
||||
self,
|
||||
self.pg3.local_ip4,
|
||||
self.pg3.remote_ip4).add_vpp_config()
|
||||
|
||||
gre_if_1.admin_up()
|
||||
gre_if_1.config_ip4()
|
||||
gre_if_2.admin_up()
|
||||
gre_if_2.config_ip4()
|
||||
gre_if_3.admin_up()
|
||||
gre_if_3.config_ip4()
|
||||
|
||||
#
|
||||
# An (S,G).
|
||||
# one accepting interface, pg0, 2 forwarding interfaces
|
||||
#
|
||||
route_1_1_1_1_232_1_1_1 = VppIpMRoute(
|
||||
self,
|
||||
"1.1.1.1",
|
||||
"232.2.2.2", 64,
|
||||
MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
|
||||
[VppMRoutePath(gre_if_1.sw_if_index,
|
||||
MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT),
|
||||
VppMRoutePath(gre_if_2.sw_if_index,
|
||||
MRouteItfFlags.MFIB_ITF_FLAG_FORWARD),
|
||||
VppMRoutePath(gre_if_3.sw_if_index,
|
||||
MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
|
||||
route_1_1_1_1_232_1_1_1.add_vpp_config()
|
||||
|
||||
#
|
||||
# a stream that matches the route for (1.1.1.1,232.2.2.2)
|
||||
# small packets
|
||||
#
|
||||
tx = (Ether(dst=self.pg1.local_mac,
|
||||
src=self.pg1.remote_mac) /
|
||||
IP(src=self.pg1.remote_ip4,
|
||||
dst=self.pg1.local_ip4) /
|
||||
GRE() /
|
||||
IP(src="1.1.1.1", dst="232.2.2.2") /
|
||||
UDP(sport=1234, dport=1234) /
|
||||
Raw('\a5' * 64)) * 63
|
||||
|
||||
self.vapi.cli("clear trace")
|
||||
self.pg1.add_stream(tx)
|
||||
|
||||
self.pg_enable_capture(self.pg_interfaces)
|
||||
self.pg_start()
|
||||
|
||||
# We expect replications on Pg2 & 3
|
||||
# check the encap headers are as expected based on the egress tunnel
|
||||
rxs = self.pg2.get_capture(len(tx))
|
||||
for rx in rxs:
|
||||
self.assertEqual(rx[IP].src, gre_if_2.t_src)
|
||||
self.assertEqual(rx[IP].dst, gre_if_2.t_dst)
|
||||
self.assert_packet_checksums_valid(rx)
|
||||
|
||||
rxs = self.pg3.get_capture(len(tx))
|
||||
for rx in rxs:
|
||||
self.assertEqual(rx[IP].src, gre_if_3.t_src)
|
||||
self.assertEqual(rx[IP].dst, gre_if_3.t_dst)
|
||||
self.assert_packet_checksums_valid(rx)
|
||||
|
||||
def test_ip6_mcast_vrf(self):
|
||||
""" IPv6 Multicast Replication in non-default table"""
|
||||
|
||||
|
@ -31,6 +31,7 @@ class VppGreInterface(VppInterface):
|
||||
self.set_sw_if_index(r.sw_if_index)
|
||||
self.generate_remote_hosts()
|
||||
self.test.registry.register(self, self.test.logger)
|
||||
return self
|
||||
|
||||
def remove_vpp_config(self):
|
||||
self.unconfig()
|
||||
|
Reference in New Issue
Block a user