ip: use IPv6 flowlabel in flow hash computation
[vpp.git] / test / test_ip4.py
index 35be24c..a428db3 100644 (file)
@@ -17,6 +17,7 @@ from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpMRoute, \
     VppMRoutePath, VppMplsIpBind, \
     VppMplsTable, VppIpTable, FibPathType, find_route, \
     VppIpInterfaceAddress, find_route_in_dump, find_mroute_in_dump
+from vpp_ip import VppIpPuntPolicer, VppIpPuntRedirect
 from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint
 from vpp_papi import VppEnum
 from vpp_neighbor import VppNeighbor
@@ -1137,6 +1138,9 @@ class TestIPLoadBalance(VppTestCase):
     def test_ip_load_balance(self):
         """ IP Load-Balancing """
 
+        fhc = VppEnum.vl_api_ip_flow_hash_config_t
+        af = VppEnum.vl_api_address_family_t
+
         #
         # An array of packets that differ only in the destination port
         #
@@ -1205,7 +1209,12 @@ class TestIPLoadBalance(VppTestCase):
         #  - now only the stream with differing source address will
         #    load-balance
         #
-        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1, sport=0, dport=0)
+        self.vapi.set_ip_flow_hash_v2(
+            af=af.ADDRESS_IP4,
+            table_id=0,
+            flow_hash_config=(fhc.IP_API_FLOW_HASH_SRC_IP |
+                              fhc.IP_API_FLOW_HASH_DST_IP |
+                              fhc.IP_API_FLOW_HASH_PROTO))
 
         self.send_and_expect_load_balancing(self.pg0, src_ip_pkts,
                                             [self.pg1, self.pg2])
@@ -1217,7 +1226,8 @@ class TestIPLoadBalance(VppTestCase):
         #
         # change the flow hash config back to defaults
         #
-        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1, sport=1, dport=1)
+        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1,
+                                   proto=1, sport=1, dport=1)
 
         #
         # Recursive prefixes
@@ -1477,9 +1487,9 @@ class TestIPPunt(VppTestCase):
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip4
-        self.vapi.ip_punt_redirect(self.pg0.sw_if_index,
-                                   self.pg1.sw_if_index,
-                                   nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
+                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
 
@@ -1488,7 +1498,8 @@ class TestIPPunt(VppTestCase):
         #
         policer = VppPolicer(self, "ip4-punt", 400, 0, 10, 0, rate_type=1)
         policer.add_vpp_config()
-        self.vapi.ip_punt_police(policer.policer_index)
+        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index)
+        ip_punt_policer.add_vpp_config()
 
         self.vapi.cli("clear trace")
         self.pg0.add_stream(pkts)
@@ -1506,32 +1517,25 @@ class TestIPPunt(VppTestCase):
         #
         # remove the policer. back to full rx
         #
-        self.vapi.ip_punt_police(policer.policer_index, is_add=0)
+        ip_punt_policer.remove_vpp_config()
         policer.remove_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
 
         #
         # remove the redirect. expect full drop.
         #
-        self.vapi.ip_punt_redirect(self.pg0.sw_if_index,
-                                   self.pg1.sw_if_index,
-                                   nh_addr,
-                                   is_add=0)
+        ip_punt_redirect.remove_vpp_config()
         self.send_and_assert_no_replies(self.pg0, pkts,
                                         "IP no punt config")
 
         #
         # Add a redirect that is not input port selective
         #
-        self.vapi.ip_punt_redirect(0xffffffff,
-                                   self.pg1.sw_if_index,
-                                   nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(self, 0xffffffff,
+                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
-
-        self.vapi.ip_punt_redirect(0xffffffff,
-                                   self.pg1.sw_if_index,
-                                   nh_addr,
-                                   is_add=0)
+        ip_punt_redirect.remove_vpp_config()
 
     def test_ip_punt_dump(self):
         """ IP4 punt redirect dump"""
@@ -1540,22 +1544,22 @@ class TestIPPunt(VppTestCase):
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip4
-        self.vapi.ip_punt_redirect(self.pg0.sw_if_index,
-                                   self.pg3.sw_if_index,
-                                   nh_address)
-        self.vapi.ip_punt_redirect(self.pg1.sw_if_index,
-                                   self.pg3.sw_if_index,
-                                   nh_address)
-        self.vapi.ip_punt_redirect(self.pg2.sw_if_index,
-                                   self.pg3.sw_if_index,
-                                   '0.0.0.0')
+        ipr_03 = VppIpPuntRedirect(self, self.pg0.sw_if_index,
+                                   self.pg3.sw_if_index, nh_address)
+        ipr_13 = VppIpPuntRedirect(self, self.pg1.sw_if_index,
+                                   self.pg3.sw_if_index, nh_address)
+        ipr_23 = VppIpPuntRedirect(self, self.pg2.sw_if_index,
+                                   self.pg3.sw_if_index, "0.0.0.0")
+        ipr_03.add_vpp_config()
+        ipr_13.add_vpp_config()
+        ipr_23.add_vpp_config()
 
         #
         # Dump pg0 punt redirects
         #
-        punts = self.vapi.ip_punt_redirect_dump(self.pg0.sw_if_index)
-        for p in punts:
-            self.assertEqual(p.punt.rx_sw_if_index, self.pg0.sw_if_index)
+        self.assertTrue(ipr_03.query_vpp_config())
+        self.assertTrue(ipr_13.query_vpp_config())
+        self.assertTrue(ipr_23.query_vpp_config())
 
         #
         # Dump punt redirects for all interfaces