MPLS Unifom mode
[vpp.git] / src / vnet / bier / bier_test.c
index 0fbca7e..6c7af82 100644 (file)
@@ -158,7 +158,7 @@ bier_test_mk_intf (u32 ninterfaces)
 
 static int
 bier_test_validate_entry (index_t bei,
-                          u16 n_buckets,
+                          int n_buckets,
                           ...)
 {
     dpo_id_t dpo = DPO_INVALID;
@@ -310,13 +310,16 @@ bier_test_mpls_spf (void)
             .as_u32 = clib_host_to_net_u32(0x01010101),
         },
     };
-    fib_route_path_t *paths_1_1_1_1 = NULL;
+    fib_route_path_t *paths_1_1_1_1 = NULL, *input_paths_1_1_1_1;
     fib_route_path_t path_1_1_1_1 = {
         .frp_addr = nh_1_1_1_1,
         .frp_bier_fib_index = bti,
         .frp_sw_if_index = ~0,
     };
-    vec_add1(path_1_1_1_1.frp_label_stack, 500);
+    fib_mpls_label_t fml_500 = {
+        .fml_value = 500,
+    };
+    vec_add1(path_1_1_1_1.frp_label_stack, fml_500);
     vec_add1(paths_1_1_1_1, path_1_1_1_1);
     const fib_prefix_t pfx_1_1_1_1_s_32 = {
         .fp_addr = nh_1_1_1_1,
@@ -325,7 +328,8 @@ bier_test_mpls_spf (void)
     };
     index_t bei_1;
 
-    bier_table_route_add(&bt_0_0_0_256, 1, paths_1_1_1_1);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_add(&bt_0_0_0_256, 1, input_paths_1_1_1_1);
     bei_1 = bier_table_lookup(bier_table_get(bti), 1);
 
     BIER_TEST((INDEX_INVALID != bei_1), "BP:1 present");
@@ -388,8 +392,10 @@ bier_test_mpls_spf (void)
             .ttl = 255,
         },
     };
-    mpls_label_t *out_lbl_99 = NULL;
-    vec_add1(out_lbl_99, 99);
+    fib_mpls_label_t *out_lbl_99 = NULL, fml_99 = {
+        .fml_value = 99,
+    };
+    vec_add1(out_lbl_99, fml_99);
 
     fei = fib_table_entry_update_one_path(0,
                                           &pfx_1_1_1_1_s_32,
@@ -442,8 +448,10 @@ bier_test_mpls_spf (void)
             .ttl = 255,
         },
     };
-    mpls_label_t *out_lbl_100 = NULL;
-    vec_add1(out_lbl_100, 100);
+    fib_mpls_label_t *out_lbl_100 = NULL, fml_100 = {
+        .fml_value = 100,
+    };
+    vec_add1(out_lbl_100, fml_100);
 
     fei = fib_table_entry_path_add(0,
                                    &pfx_1_1_1_1_s_32,
@@ -477,7 +485,8 @@ bier_test_mpls_spf (void)
      */
     index_t bei_2;
 
-    bier_table_route_add(&bt_0_0_0_256, 2, paths_1_1_1_1);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_add(&bt_0_0_0_256, 2, input_paths_1_1_1_1);
     bei_2 = bier_table_lookup(bier_table_get(bti), 2);
 
     bier_entry_contribute_forwarding(bei_2, &dpo_bei);
@@ -498,17 +507,23 @@ bier_test_mpls_spf (void)
         .fp_len = 32,
         .fp_proto = FIB_PROTOCOL_IP4,
     };
-    fib_route_path_t *paths_1_1_1_2 = NULL, path_1_1_1_2 = {
+    fib_route_path_t *paths_1_1_1_2 = NULL, *input_paths_1_1_1_2, path_1_1_1_2 = {
         .frp_addr = nh_1_1_1_2,
         .frp_bier_fib_index = bti,
         .frp_sw_if_index = ~0,
     };
-    vec_add1(path_1_1_1_2.frp_label_stack, 501);
+    fib_mpls_label_t fml_501 = {
+        .fml_value = 501,
+    };
+    vec_add1(path_1_1_1_2.frp_label_stack, fml_501);
     vec_add1(paths_1_1_1_2, path_1_1_1_2);
+    input_paths_1_1_1_2 = vec_dup(paths_1_1_1_2);
     index_t bei_3;
 
-    mpls_label_t *out_lbl_101 = NULL;
-    vec_add1(out_lbl_101, 101);
+    fib_mpls_label_t *out_lbl_101 = NULL, fml_101 = {
+        .fml_value = 101,
+    };
+    vec_add1(out_lbl_101, fml_101);
     fei = fib_table_entry_path_add(0,
                                    &pfx_1_1_1_2_s_32,
                                    FIB_SOURCE_API,
@@ -520,7 +535,7 @@ bier_test_mpls_spf (void)
                                    1,
                                    out_lbl_101,
                                    FIB_ROUTE_PATH_FLAG_NONE);
-    bier_table_route_add(&bt_0_0_0_256, 3, paths_1_1_1_2);
+    bier_table_route_add(&bt_0_0_0_256, 3, input_paths_1_1_1_2);
     bei_3 = bier_table_lookup(bier_table_get(bti), 3);
 
     BIER_TEST((INDEX_INVALID != bei_3), "BP:3 present");
@@ -562,7 +577,8 @@ bier_test_mpls_spf (void)
      * Load-balance BP:3 over both next-hops
      */
     paths_1_1_1_1[0] = path_1_1_1_1;
-    bier_table_route_add(&bt_0_0_0_256, 3, paths_1_1_1_1);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_add(&bt_0_0_0_256, 3, input_paths_1_1_1_1);
 
     BIER_TEST(bier_test_validate_entry(bei_3, 2,
                                        &dpo_o_bfm_1_1_1_1,
@@ -601,7 +617,7 @@ bier_test_mpls_spf (void)
      * add the via back
      */
     out_lbl_101 = NULL;
-    vec_add1(out_lbl_101, 101);
+    vec_add1(out_lbl_101, fml_101);
     fei = fib_table_entry_path_add(0,
                                    &pfx_1_1_1_2_s_32,
                                    FIB_SOURCE_API,
@@ -630,7 +646,8 @@ bier_test_mpls_spf (void)
     /*
      * remove the original 1.1.1.2 fmask from BP:3
      */
-    bier_table_route_remove(&bt_0_0_0_256, 3, paths_1_1_1_2);
+    input_paths_1_1_1_2 = vec_dup(paths_1_1_1_2);
+    bier_table_route_remove(&bt_0_0_0_256, 3, input_paths_1_1_1_2);
     bier_entry_contribute_forwarding(bei_3, &dpo_bei);
     BIER_TEST((dpo_bei.dpoi_index == bfmi_1_1_1_1),
               "BP:3 stacks on fmask 1.1.1.1");
@@ -648,10 +665,14 @@ bier_test_mpls_spf (void)
     /*
      * remove the routes added
      */
-    bier_table_route_remove(&bt_0_0_0_256, 2, paths_1_1_1_1);
-    bier_table_route_remove(&bt_0_0_0_256, 3, paths_1_1_1_2);
-    bier_table_route_remove(&bt_0_0_0_256, 3, paths_1_1_1_1);
-    bier_table_route_remove(&bt_0_0_0_256, 1, paths_1_1_1_1);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_remove(&bt_0_0_0_256, 2, input_paths_1_1_1_1);
+    input_paths_1_1_1_2 = vec_dup(paths_1_1_1_2);
+    bier_table_route_remove(&bt_0_0_0_256, 3, input_paths_1_1_1_2);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_remove(&bt_0_0_0_256, 3, input_paths_1_1_1_1);
+    input_paths_1_1_1_1 = vec_dup(paths_1_1_1_1);
+    bier_table_route_remove(&bt_0_0_0_256, 1, input_paths_1_1_1_1);
 
     /*
      * delete the table
@@ -685,6 +706,8 @@ bier_test_mpls_spf (void)
 
     vec_free(paths_1_1_1_1);
     vec_free(paths_1_1_1_2);
+    vec_free(input_paths_1_1_1_1);
+    vec_free(input_paths_1_1_1_2);
 
     return (0);
 }