ip: cleanup punt socket cli help
[vpp.git] / src / vnet / bier / bier_disp_lookup_node.c
index 15515f4..255f045 100644 (file)
@@ -63,6 +63,7 @@ bier_disp_lookup_inline (vlib_main_t * vm,
         while (n_left_from > 0 && n_left_to_next > 0)
         {
             const bier_hdr_t *hdr0;
+            bier_hdr_src_id_t src0;
             vlib_buffer_t * b0;
             u32 bdei0, bdti0;
             u32 next0, bi0;
@@ -82,15 +83,22 @@ bier_disp_lookup_inline (vlib_main_t * vm,
             /*
              * lookup - source is in network order.
              */
-            bdei0 = bier_disp_table_lookup(bdti0, bier_hdr_get_src_id(hdr0));
+            src0 = bier_hdr_get_src_id(hdr0);
+            next0 = BIER_DISP_LOOKUP_NEXT_DISPATCH;
+
+            bdei0 = bier_disp_table_lookup(bdti0, src0);
 
             if (PREDICT_FALSE(INDEX_INVALID == bdei0))
             {
-                next0 = BIER_DISP_LOOKUP_NEXT_DROP;
-            }
-            else
-            {
-                next0 = BIER_DISP_LOOKUP_NEXT_DISPATCH;
+                /*
+                 * if a specific match misses, try the default
+                 */
+                bdei0 = bier_disp_table_lookup(bdti0, 0);
+
+                if (PREDICT_FALSE(INDEX_INVALID == bdei0))
+                {
+                    next0 = BIER_DISP_LOOKUP_NEXT_DROP;
+                }
             }
 
             vnet_buffer(b0)->ip.adj_index[VLIB_TX] = bdei0;
@@ -124,8 +132,7 @@ format_bier_disp_lookup_trace (u8 * s, va_list * args)
     return (s);
 }
 
-static uword
-bier_disp_lookup (vlib_main_t * vm,
+VLIB_NODE_FN (bier_disp_lookup_node) (vlib_main_t * vm,
                   vlib_node_runtime_t * node,
                   vlib_frame_t * frame)
 {
@@ -133,7 +140,6 @@ bier_disp_lookup (vlib_main_t * vm,
 }
 
 VLIB_REGISTER_NODE (bier_disp_lookup_node) = {
-    .function = bier_disp_lookup,
     .name = "bier-disp-lookup",
     .vector_size = sizeof (u32),
 
@@ -144,4 +150,3 @@ VLIB_REGISTER_NODE (bier_disp_lookup_node) = {
         [BIER_DISP_LOOKUP_NEXT_DISPATCH] = "bier-disp-dispatch",
     }
 };
-VLIB_NODE_FUNCTION_MULTIARCH (bier_disp_lookup_node, bier_disp_lookup)