Add setting of tenant VRF id for SNAT addresses (VPP-641)
Change-Id: I9c0bb35ba16e04206ac481495f6638d3763754a1 Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
ede470b4fc
commit
eab38d91e8
@ -405,7 +405,7 @@ class TestSNAT(VppTestCase):
|
||||
proto,
|
||||
is_add)
|
||||
|
||||
def snat_add_address(self, ip, is_add=1):
|
||||
def snat_add_address(self, ip, is_add=1, vrf_id=0xFFFFFFFF):
|
||||
"""
|
||||
Add/delete S-NAT address
|
||||
|
||||
@ -413,7 +413,8 @@ class TestSNAT(VppTestCase):
|
||||
:param is_add: 1 if add, 0 if delete (Default add)
|
||||
"""
|
||||
snat_addr = socket.inet_pton(socket.AF_INET, ip)
|
||||
self.vapi.snat_add_address_range(snat_addr, snat_addr, is_add)
|
||||
self.vapi.snat_add_address_range(snat_addr, snat_addr, is_add,
|
||||
vrf_id=vrf_id)
|
||||
|
||||
def test_dynamic(self):
|
||||
""" SNAT dynamic translation test """
|
||||
@ -1201,6 +1202,73 @@ class TestSNAT(VppTestCase):
|
||||
self.pg_start()
|
||||
capture = self.pg1.get_capture(0)
|
||||
|
||||
def test_vrf_mode(self):
|
||||
""" S-NAT tenant VRF aware address pool mode """
|
||||
|
||||
vrf_id1 = 1
|
||||
vrf_id2 = 2
|
||||
nat_ip1 = "10.0.0.10"
|
||||
nat_ip2 = "10.0.0.11"
|
||||
|
||||
self.pg0.unconfig_ip4()
|
||||
self.pg1.unconfig_ip4()
|
||||
self.pg0.set_table_ip4(vrf_id1)
|
||||
self.pg1.set_table_ip4(vrf_id2)
|
||||
self.pg0.config_ip4()
|
||||
self.pg1.config_ip4()
|
||||
|
||||
self.snat_add_address(nat_ip1, vrf_id=vrf_id1)
|
||||
self.snat_add_address(nat_ip2, vrf_id=vrf_id2)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg0.sw_if_index)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg1.sw_if_index)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg2.sw_if_index,
|
||||
is_inside=0)
|
||||
|
||||
# first VRF
|
||||
pkts = self.create_stream_in(self.pg0, self.pg2)
|
||||
self.pg0.add_stream(pkts)
|
||||
self.pg_enable_capture(self.pg_interfaces)
|
||||
self.pg_start()
|
||||
capture = self.pg2.get_capture(len(pkts))
|
||||
self.verify_capture_out(capture, nat_ip1)
|
||||
|
||||
# second VRF
|
||||
pkts = self.create_stream_in(self.pg1, self.pg2)
|
||||
self.pg1.add_stream(pkts)
|
||||
self.pg_enable_capture(self.pg_interfaces)
|
||||
self.pg_start()
|
||||
capture = self.pg2.get_capture(len(pkts))
|
||||
self.verify_capture_out(capture, nat_ip2)
|
||||
|
||||
def test_vrf_feature_independent(self):
|
||||
""" S-NAT tenant VRF independent address pool mode """
|
||||
|
||||
nat_ip1 = "10.0.0.10"
|
||||
nat_ip2 = "10.0.0.11"
|
||||
|
||||
self.snat_add_address(nat_ip1)
|
||||
self.snat_add_address(nat_ip2)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg0.sw_if_index)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg1.sw_if_index)
|
||||
self.vapi.snat_interface_add_del_feature(self.pg2.sw_if_index,
|
||||
is_inside=0)
|
||||
|
||||
# first VRF
|
||||
pkts = self.create_stream_in(self.pg0, self.pg2)
|
||||
self.pg0.add_stream(pkts)
|
||||
self.pg_enable_capture(self.pg_interfaces)
|
||||
self.pg_start()
|
||||
capture = self.pg2.get_capture(len(pkts))
|
||||
self.verify_capture_out(capture, nat_ip1)
|
||||
|
||||
# second VRF
|
||||
pkts = self.create_stream_in(self.pg1, self.pg2)
|
||||
self.pg1.add_stream(pkts)
|
||||
self.pg_enable_capture(self.pg_interfaces)
|
||||
self.pg_start()
|
||||
capture = self.pg2.get_capture(len(pkts))
|
||||
self.verify_capture_out(capture, nat_ip1)
|
||||
|
||||
def tearDown(self):
|
||||
super(TestSNAT, self).tearDown()
|
||||
if not self.vpp_dead:
|
||||
|
Reference in New Issue
Block a user