fib tests: IP multicast over GRE

Type: feature

Change-Id: I1632ff23b1bf6d91aa3406c95ebd6ef0aa595f35
Signed-off-by: Neale Ranns <nranns@cisco.com>
This commit is contained in:
Neale Ranns
2019-08-04 02:41:57 -07:00
committed by Andrew Yourtchenko
parent 8511687d59
commit adb17a813c
3 changed files with 77 additions and 1 deletions

View File

@ -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);

View File

@ -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"""

View File

@ -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()