ip: convert u32 entry_flags to vl_api_mfib_entry_flags_t on mroute API
[vpp.git] / test / test_bier.py
index cd2d4c0..2f649bb 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import unittest
 
@@ -6,11 +6,12 @@ from framework import VppTestCase, VppTestRunner, running_extended_tests
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath, \
     VppMplsTable, VppIpMRoute, VppMRoutePath, VppIpTable, \
-    MRouteEntryFlags, MRouteItfFlags, MPLS_LABEL_INVALID, \
-    VppMplsLabel
+    MPLS_LABEL_INVALID, \
+    VppMplsLabel, FibPathProto, FibPathType
 from vpp_bier import BIER_HDR_PAYLOAD, VppBierImp, VppBierDispEntry, \
     VppBierDispTable, VppBierTable, VppBierTableID, VppBierRoute
 from vpp_udp_encap import VppUdpEncap
+from vpp_papi import VppEnum
 
 import scapy.compat
 from scapy.packet import Raw
@@ -20,6 +21,8 @@ from scapy.layers.inet6 import IPv6
 from scapy.contrib.mpls import MPLS
 from scapy.contrib.bier import BIER, BIERLength, BIFT
 
+NUM_PKTS = 67
+
 
 class TestBFIB(VppTestCase):
     """ BIER FIB Test Case """
@@ -165,7 +168,7 @@ class TestBier(VppTestCase):
                 byte_val = scapy.compat.chb(1 << (bp - 1) % 8)
                 byte_pos = n_bytes - (((bp - 1) // 8) + 1)
                 byte_array[byte_pos] = byte_val
-                bitstring = ''.join([scapy.compat.chb(x) for x in byte_array])
+                bitstring = b''.join(byte_array)
 
                 self.assertEqual(len(bitstring), len(bier_hdr.BitString))
                 self.assertEqual(bitstring, bier_hdr.BitString)
@@ -276,6 +279,7 @@ class TestBier(VppTestCase):
                           labels=[VppMplsLabel(101)])])
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
+
         for nh in nhs:
             self.assertTrue(sum(p[MPLS].label == nh['label'] for p in rx))
 
@@ -301,6 +305,9 @@ class TestBier(VppTestCase):
     def test_bier_head(self):
         """BIER head"""
 
+        MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
+        MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
+
         #
         # Add a BIER table for sub-domain 0, set 0, and BSL 256
         #
@@ -346,12 +353,13 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT),
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
                    VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD,
-                                 proto=DpoProto.DPO_PROTO_BIER,
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
                                  bier_imp=bi.bi_index)])
         route_ing_232_1_1_1.add_vpp_config()
 
@@ -396,6 +404,9 @@ class TestBier(VppTestCase):
     def test_bier_tail(self):
         """BIER Tail"""
 
+        MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
+        MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
+
         #
         # Add a BIER table for sub-domain 0, set 0, and BSL 256
         #
@@ -416,7 +427,7 @@ class TestBier(VppTestCase):
             self, bti, 1,
             [VppRoutePath("0.0.0.0",
                           0xffffffff,
-                          proto=DpoProto.DPO_PROTO_BIER,
+                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
                           nh_table_id=8)])
         bier_route_1.add_vpp_config()
 
@@ -425,7 +436,7 @@ class TestBier(VppTestCase):
         #
         bier_de_1 = VppBierDispEntry(self, bdt.id, 99,
                                      BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     DpoProto.DPO_PROTO_BIER,
+                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
                                      "0.0.0.0", 0, rpf_id=8192)
         bier_de_1.add_vpp_config()
 
@@ -436,9 +447,9 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
 
@@ -475,7 +486,7 @@ class TestBier(VppTestCase):
         #
         bier_de_2 = VppBierDispEntry(self, bdt.id, 0,
                                      BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     DpoProto.DPO_PROTO_BIER,
+                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
                                      "0.0.0.0", 0, rpf_id=8192)
         bier_de_2.add_vpp_config()
 
@@ -495,13 +506,14 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.2", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD,
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
                                  proto=DpoProto.DPO_PROTO_BIER,
+                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
                                  bier_imp=bi.bi_index),
                    VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8192)
 
@@ -518,6 +530,9 @@ class TestBier(VppTestCase):
     def bier_e2e(self, hdr_len_id, n_bytes, max_bp):
         """ BIER end-to-end"""
 
+        MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
+        MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
+
         #
         # Add a BIER table for sub-domain 0, set 0, and BSL 256
         #
@@ -545,24 +560,26 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT),
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
                    VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD,
-                                 proto=DpoProto.DPO_PROTO_BIER,
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
                                  bier_imp=bi_low.bi_index)])
         route_ing_232_1_1_1.add_vpp_config()
         route_ing_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
             "232.1.1.2", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT),
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
                    VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD,
-                                 proto=DpoProto.DPO_PROTO_BIER,
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
                                  bier_imp=bi_high.bi_index)])
         route_ing_232_1_1_2.add_vpp_config()
 
@@ -580,15 +597,15 @@ class TestBier(VppTestCase):
             self, bti, 1,
             [VppRoutePath("0.0.0.0",
                           0xffffffff,
-                          proto=DpoProto.DPO_PROTO_BIER,
+                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
                           nh_table_id=8)])
         bier_route_1.add_vpp_config()
         bier_route_max = VppBierRoute(
             self, bti, max_bp,
             [VppRoutePath("0.0.0.0",
                           0xffffffff,
-                          nh_table_id=8,
-                          proto=DpoProto.DPO_PROTO_BIER)])
+                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                          nh_table_id=8)])
         bier_route_max.add_vpp_config()
 
         #
@@ -597,12 +614,12 @@ class TestBier(VppTestCase):
         #
         bier_de_1 = VppBierDispEntry(self, bdt.id, 333,
                                      BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     DpoProto.DPO_PROTO_BIER,
+                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
                                      "0.0.0.0", 10, rpf_id=8192)
         bier_de_1.add_vpp_config()
         bier_de_1 = VppBierDispEntry(self, bdt.id, 334,
                                      BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     DpoProto.DPO_PROTO_BIER,
+                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
                                      "0.0.0.0", 10, rpf_id=8193)
         bier_de_1.add_vpp_config()
 
@@ -614,20 +631,20 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
             paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
         route_eg_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
             "232.1.1.2", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
             paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8193)
 
@@ -642,7 +659,7 @@ class TestBier(VppTestCase):
              UDP(sport=1234, dport=1234) /
              Raw(scapy.compat.chb(5) * 32))
 
-        rx = self.send_and_expect(self.pg0, p*65, self.pg1)
+        rx = self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
 
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.1")
@@ -653,7 +670,7 @@ class TestBier(VppTestCase):
              UDP(sport=1234, dport=1234) /
              Raw(scapy.compat.chb(5) * 512))
 
-        rx = self.send_and_expect(self.pg0, p*65, self.pg1)
+        rx = self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.2")
 
@@ -684,6 +701,9 @@ class TestBier(VppTestCase):
     def test_bier_head_o_udp(self):
         """BIER head over UDP"""
 
+        MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
+        MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
+
         #
         # Add a BIER table for sub-domain 1, set 0, and BSL 256
         #
@@ -711,7 +731,7 @@ class TestBier(VppTestCase):
             self, bti, 1,
             [VppRoutePath("0.0.0.0",
                           0xFFFFFFFF,
-                          is_udp_encap=1,
+                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
                           next_hop_id=udp_encap.id)])
         bier_route.add_vpp_config()
 
@@ -732,12 +752,13 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_ACCEPT),
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
                    VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD,
-                                 proto=DpoProto.DPO_PROTO_BIER,
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
                                  bier_imp=bi2.bi_index)])
         route_ing_232_1_1_1.add_vpp_config()
 
@@ -771,6 +792,9 @@ class TestBier(VppTestCase):
     def test_bier_tail_o_udp(self):
         """BIER Tail over UDP"""
 
+        MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
+        MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
+
         #
         # Add a BIER table for sub-domain 0, set 0, and BSL 256
         #
@@ -791,7 +815,7 @@ class TestBier(VppTestCase):
             self, bti, 1,
             [VppRoutePath("0.0.0.0",
                           0xffffffff,
-                          proto=DpoProto.DPO_PROTO_BIER,
+                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
                           nh_table_id=8)])
         bier_route_1.add_vpp_config()
 
@@ -800,7 +824,7 @@ class TestBier(VppTestCase):
         #
         bier_de_1 = VppBierDispEntry(self, bdt.id, 99,
                                      BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     DpoProto.DPO_PROTO_BIER,
+                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
                                      "0.0.0.0", 0, rpf_id=8192)
         bier_de_1.add_vpp_config()
 
@@ -811,9 +835,9 @@ class TestBier(VppTestCase):
             self,
             "0.0.0.0",
             "232.1.1.1", 32,
-            MRouteEntryFlags.MFIB_ENTRY_FLAG_NONE,
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_ITF_FLAG_FORWARD)])
+                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)