MTRIE Optimisations 2
[vpp.git] / src / vnet / fib / fib_test.c
index 1c4a63a..92141dd 100644 (file)
@@ -40,8 +40,6 @@
        fformat(stderr, "FAIL:%d: " _comment "\n",              \
                __LINE__, ##_args);                             \
     } else {                                                   \
-       fformat(stderr, "PASS:%d: " _comment "\n",              \
-               __LINE__, ##_args);                             \
     }                                                          \
     _evald;                                                    \
 })
@@ -3556,6 +3554,73 @@ fib_test_v4 (void)
 
     fib_table_entry_delete(fib_index, &pfx_4_1_1_1_s_32, FIB_SOURCE_URPF_EXEMPT);
 
+    /*
+     * An adj-fib that fails the refinement criteria - no connected cover
+     */
+    fib_prefix_t pfx_12_10_10_2_s_32 = {
+       .fp_len = 32,
+       .fp_proto = FIB_PROTOCOL_IP4,
+       .fp_addr = {
+           /* 12.10.10.2 */
+           .ip4.as_u32 = clib_host_to_net_u32(0x0c0a0a02),
+       },
+    };
+
+    fib_table_entry_update_one_path(fib_index,
+                                   &pfx_12_10_10_2_s_32,
+                                   FIB_SOURCE_ADJ,
+                                   FIB_ENTRY_FLAG_ATTACHED,
+                                   FIB_PROTOCOL_IP4,
+                                   &pfx_12_10_10_2_s_32.fp_addr,
+                                   tm->hw[0]->sw_if_index,
+                                   ~0, // invalid fib index
+                                   1,
+                                   NULL,
+                                   FIB_ROUTE_PATH_FLAG_NONE);
+
+    fei = fib_table_lookup_exact_match(fib_index, &pfx_12_10_10_2_s_32);
+    dpo = fib_entry_contribute_ip_forwarding(fei);
+    FIB_TEST(!dpo_id_is_valid(dpo),
+            "no connected cover adj-fib fails refinement");
+
+    fib_table_entry_delete(fib_index,
+                          &pfx_12_10_10_2_s_32,
+                          FIB_SOURCE_ADJ);
+
+    /*
+     * An adj-fib that fails the refinement criteria - cover is connected
+     * but on a different interface
+     */
+    fib_prefix_t pfx_10_10_10_127_s_32 = {
+       .fp_len = 32,
+       .fp_proto = FIB_PROTOCOL_IP4,
+       .fp_addr = {
+           /* 10.10.10.127 */
+           .ip4.as_u32 = clib_host_to_net_u32(0x0a0a0a7f),
+       },
+    };
+
+    fib_table_entry_update_one_path(fib_index,
+                                   &pfx_10_10_10_127_s_32,
+                                   FIB_SOURCE_ADJ,
+                                   FIB_ENTRY_FLAG_ATTACHED,
+                                   FIB_PROTOCOL_IP4,
+                                   &pfx_10_10_10_127_s_32.fp_addr,
+                                   tm->hw[1]->sw_if_index,
+                                   ~0, // invalid fib index
+                                   1,
+                                   NULL,
+                                   FIB_ROUTE_PATH_FLAG_NONE);
+
+    fei = fib_table_lookup_exact_match(fib_index, &pfx_10_10_10_127_s_32);
+    dpo = fib_entry_contribute_ip_forwarding(fei);
+    FIB_TEST(!dpo_id_is_valid(dpo),
+            "wrong interface adj-fib fails refinement");
+
+    fib_table_entry_delete(fib_index,
+                          &pfx_10_10_10_127_s_32,
+                          FIB_SOURCE_ADJ);
+
     /*
      * CLEANUP
      *    remove adj-fibs: 
@@ -5660,7 +5725,7 @@ fib_test_label (void)
                                     &a_o_10_10_11_1,
                                     &adj_o_10_10_11_2),
             "1.1.1.1/32 LB 2 buckets via: "
-            "adj over 10.10.11.1",
+            "adj over 10.10.11.1, "
             "adj-v4 over 10.10.11.2");
 
     fei = fib_table_lookup(MPLS_FIB_DEFAULT_TABLE_ID,
@@ -5671,7 +5736,7 @@ fib_test_label (void)
                                     &a_o_10_10_11_1,
                                     &adj_o_10_10_11_2),
             "24001/eos LB 2 buckets via: "
-            "adj over 10.10.11.1",
+            "adj over 10.10.11.1, "
             "adj-v4 over 10.10.11.2");
 
     fei = fib_table_lookup(MPLS_FIB_DEFAULT_TABLE_ID,