tests: Tests for cross AF routing
Type: test Signed-off-by: Neale Ranns <neale@graphiant.com> Change-Id: Iebee39d0974c6f458863ce6144c6a83bc3cf4cb7
This commit is contained in:

committed by
Beno�t Ganne

parent
de0b3b5718
commit
91adf2449f
124
test/test_ip6.py
124
test/test_ip6.py
@ -3459,5 +3459,129 @@ class TestIPFibSource(VppTestCase):
|
|||||||
self.assertFalse(find_route(self, "2001::1", 128))
|
self.assertFalse(find_route(self, "2001::1", 128))
|
||||||
|
|
||||||
|
|
||||||
|
class TestIPxAF(VppTestCase):
|
||||||
|
""" IP cross AF """
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super(TestIPxAF, cls).setUpClass()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
super(TestIPxAF, cls).tearDownClass()
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestIPxAF, self).setUp()
|
||||||
|
|
||||||
|
self.create_pg_interfaces(range(2))
|
||||||
|
|
||||||
|
for i in self.pg_interfaces:
|
||||||
|
i.admin_up()
|
||||||
|
i.config_ip6()
|
||||||
|
i.config_ip4()
|
||||||
|
i.resolve_arp()
|
||||||
|
i.resolve_ndp()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(TestIPxAF, self).tearDown()
|
||||||
|
for i in self.pg_interfaces:
|
||||||
|
i.admin_down()
|
||||||
|
i.unconfig_ip4()
|
||||||
|
i.unconfig_ip6()
|
||||||
|
|
||||||
|
def test_x_af(self):
|
||||||
|
""" Cross AF routing """
|
||||||
|
|
||||||
|
N_PKTS = 63
|
||||||
|
# a v4 route via a v6 attached next-hop
|
||||||
|
VppIpRoute(
|
||||||
|
self, "1.1.1.1", 32,
|
||||||
|
[VppRoutePath(self.pg1.remote_ip6,
|
||||||
|
self.pg1.sw_if_index)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IP(src=self.pg0.remote_ip4, dst="1.1.1.1") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
for rx in rxs:
|
||||||
|
self.assertEqual(rx[IP].dst, "1.1.1.1")
|
||||||
|
|
||||||
|
# a v6 route via a v4 attached next-hop
|
||||||
|
VppIpRoute(
|
||||||
|
self, "2001::1", 128,
|
||||||
|
[VppRoutePath(self.pg1.remote_ip4,
|
||||||
|
self.pg1.sw_if_index)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IPv6(src=self.pg0.remote_ip6, dst="2001::1") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
for rx in rxs:
|
||||||
|
self.assertEqual(rx[IPv6].dst, "2001::1")
|
||||||
|
|
||||||
|
# a recursive v4 route via a v6 next-hop (from above)
|
||||||
|
VppIpRoute(
|
||||||
|
self, "2.2.2.2", 32,
|
||||||
|
[VppRoutePath("2001::1",
|
||||||
|
0xffffffff)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IP(src=self.pg0.remote_ip4, dst="2.2.2.2") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
# a recursive v4 route via a v6 next-hop
|
||||||
|
VppIpRoute(
|
||||||
|
self, "2.2.2.3", 32,
|
||||||
|
[VppRoutePath(self.pg1.remote_ip6,
|
||||||
|
0xffffffff)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IP(src=self.pg0.remote_ip4, dst="2.2.2.3") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
# a recursive v6 route via a v4 next-hop
|
||||||
|
VppIpRoute(
|
||||||
|
self, "3001::1", 128,
|
||||||
|
[VppRoutePath(self.pg1.remote_ip4,
|
||||||
|
0xffffffff)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IPv6(src=self.pg0.remote_ip6, dst="3001::1") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
for rx in rxs:
|
||||||
|
self.assertEqual(rx[IPv6].dst, "3001::1")
|
||||||
|
|
||||||
|
VppIpRoute(
|
||||||
|
self, "3001::2", 128,
|
||||||
|
[VppRoutePath("1.1.1.1",
|
||||||
|
0xffffffff)]).add_vpp_config()
|
||||||
|
|
||||||
|
p = (Ether(src=self.pg0.remote_mac,
|
||||||
|
dst=self.pg0.local_mac) /
|
||||||
|
IPv6(src=self.pg0.remote_ip6, dst="3001::2") /
|
||||||
|
UDP(sport=1234, dport=1234) /
|
||||||
|
Raw(b'\xa5' * 100))
|
||||||
|
rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
|
||||||
|
|
||||||
|
for rx in rxs:
|
||||||
|
self.assertEqual(rx[IPv6].dst, "3001::2")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main(testRunner=VppTestRunner)
|
unittest.main(testRunner=VppTestRunner)
|
||||||
|
Reference in New Issue
Block a user