nat: pick outside addr based on local addr
[vpp.git] / src / plugins / nat / test / test_nat44_ed.py
index 3980f69..8c3169e 100644 (file)
@@ -47,11 +47,11 @@ class NAT44EDTestCase(VppTestCase):
             self.plugin_disable()
 
     def plugin_enable(self):
-        self.vapi.nat44_plugin_enable_disable(
+        self.vapi.nat44_ed_plugin_enable_disable(
             sessions=self.max_sessions, enable=1)
 
     def plugin_disable(self):
-        self.vapi.nat44_plugin_enable_disable(enable=0)
+        self.vapi.nat44_ed_plugin_enable_disable(enable=0)
 
     @property
     def config_flags(self):
@@ -1903,6 +1903,45 @@ class TestNAT44ED(NAT44EDTestCase):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
+    def test_outside_address_distribution(self):
+        """ Outside address distribution based on source address """
+
+        x = 100
+        nat_addresses = []
+
+        for i in range(1, x):
+            a = "10.0.0.%d" % i
+            nat_addresses.append(a)
+
+        self.nat_add_inside_interface(self.pg0)
+        self.nat_add_outside_interface(self.pg1)
+
+        self.vapi.nat44_add_del_address_range(
+            first_ip_address=nat_addresses[0],
+            last_ip_address=nat_addresses[-1],
+            vrf_id=0xFFFFFFFF, is_add=1, flags=0)
+
+        self.pg0.generate_remote_hosts(x)
+
+        pkts = []
+        for i in range(x):
+            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
+                 IP(src=self.pg0.remote_hosts[i].ip4,
+                     dst=self.pg1.remote_ip4) /
+                 UDP(sport=7000+i, dport=80+i))
+            pkts.append(p)
+
+        self.pg0.add_stream(pkts)
+        self.pg_enable_capture(self.pg_interfaces)
+        self.pg_start()
+        recvd = self.pg1.get_capture(len(pkts))
+        for (p_sent, p_recvd) in zip(pkts, recvd):
+            packed = socket.inet_aton(p_sent[IP].src)
+            numeric = struct.unpack("!L", packed)[0]
+            numeric = socket.htonl(numeric)
+            a = nat_addresses[(numeric-1) % len(nat_addresses)]
+            self.assertEqual(a, p_recvd[IP].src, "Packet not translated")
+
 
 class TestNAT44EDMW(TestNAT44ED):
     """ NAT44ED MW Test Case """