fib: fib api updates
[vpp.git] / src / plugins / abf / abf_itf_attach.c
index 5373fc0..337eed8 100644 (file)
@@ -184,7 +184,7 @@ abf_itf_attach (fib_protocol_t fproto,
     return (VNET_API_ERROR_ENTRY_ALREADY_EXISTS);
 
   /*
-   * construt a new attachemnt object
+   * construct a new attachment object
    */
   pool_get (abf_itf_attach_pool, aia);
 
@@ -210,7 +210,7 @@ abf_itf_attach (fib_protocol_t fproto,
   if (1 == vec_len (abf_per_itf[fproto][sw_if_index]))
     {
       /*
-       * when enabling the first ABF polciy on the interface
+       * when enabling the first ABF policy on the interface
        * we need to enable the interface input feature
        */
       vnet_feature_enable_disable ((FIB_PROTOCOL_IP4 == fproto ?
@@ -236,7 +236,7 @@ abf_itf_attach (fib_protocol_t fproto,
   abf_setup_acl_lc (fproto, sw_if_index);
 
   /*
-   * become a child of the ABF poilcy so we are notified when
+   * become a child of the ABF policy so we are notified when
    * its forwarding changes.
    */
   aia->aia_sibling = fib_node_child_add (abf_policy_fib_node_type,
@@ -253,15 +253,15 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index)
   u32 index;
 
   /*
-   * check this is a valid attahment
+   * check this is a valid attachment
    */
   aia = abf_itf_attach_db_find (policy_id, sw_if_index);
 
   if (NULL == aia)
-    return (VNET_API_ERROR_ENTRY_ALREADY_EXISTS);
+    return (VNET_API_ERROR_NO_SUCH_ENTRY);
 
   /*
-   * first remove from the interface's vecotr
+   * first remove from the interface's vector
    */
   ASSERT (abf_per_itf[fproto]);
   ASSERT (abf_per_itf[fproto][sw_if_index]);
@@ -275,7 +275,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index)
   if (0 == vec_len (abf_per_itf[fproto][sw_if_index]))
     {
       /*
-       * when deleting the last ABF polciy on the interface
+       * when deleting the last ABF policy on the interface
        * we need to disable the interface input feature
        */
       vnet_feature_enable_disable ((FIB_PROTOCOL_IP4 == fproto ?
@@ -307,7 +307,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index)
                         aia->aia_abf, aia->aia_sibling);
 
   /*
-   * remove the attahcment from the DB
+   * remove the attachment from the DB
    */
   abf_itf_attach_db_del (policy_id, sw_if_index);
 
@@ -331,7 +331,7 @@ format_abf_intf_attach (u8 * s, va_list * args)
   abf_policy_t *ap;
 
   ap = abf_policy_get (aia->aia_abf);
-  s = format (s, "abf-interface-attach: policy:%d prioity:%d",
+  s = format (s, "abf-interface-attach: policy:%d priority:%d",
              ap->ap_id, aia->aia_prio);
   s = format (s, "\n  %U", format_dpo_id, &aia->aia_dpo, 2);
 
@@ -505,12 +505,12 @@ abf_input_inline (vlib_main_t * vm,
                  vlib_node_runtime_t * node,
                  vlib_frame_t * frame, fib_protocol_t fproto)
 {
-  u32 n_left_from, *from, *to_next, next_index, matches;
+  u32 n_left_from, *from, *to_next, next_index, matches, misses;
 
   from = vlib_frame_vector_args (frame);
   n_left_from = frame->n_vectors;
   next_index = node->cached_next_index;
-  matches = 0;
+  matches = misses = 0;
 
   while (n_left_from > 0)
     {
@@ -530,6 +530,7 @@ abf_input_inline (vlib_main_t * vm,
          u32 match_acl_pos = ~0;
          u32 match_rule_index = ~0;
          u32 trace_bitmap = 0;
+         u32 lc_index;
          u8 action;
 
          bi0 = from[0];
@@ -549,7 +550,7 @@ abf_input_inline (vlib_main_t * vm,
          /*
           * check if any of the policies attached to this interface matches.
           */
-         u32 lc_index = abf_alctx_per_itf[fproto][sw_if_index0];
+         lc_index = abf_alctx_per_itf[fproto][sw_if_index0];
 
          /*
             A non-inline version looks like this:
@@ -588,7 +589,8 @@ abf_input_inline (vlib_main_t * vm,
               * miss:
               *  move on down the feature arc
               */
-             vnet_feature_next (sw_if_index0, &next0, b0);
+             vnet_feature_next (&next0, b0);
+             misses++;
            }
 
          if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED))
@@ -614,6 +616,11 @@ abf_input_inline (vlib_main_t * vm,
                                abf_ip4_node.index :
                                abf_ip6_node.index),
                               ABF_ERROR_MATCHED, matches);
+  vlib_node_increment_counter (vm,
+                              (fproto = FIB_PROTOCOL_IP6 ?
+                               abf_ip4_node.index :
+                               abf_ip6_node.index),
+                              ABF_ERROR_MISSED, misses);
 
   return frame->n_vectors;
 }
@@ -759,12 +766,17 @@ abf_itf_bond_init (vlib_main_t * vm)
     return (acl_init_res);
 
   abf_acl_user_id =
-    acl_plugin.register_user_module ("abp plugin", "sw_if_index", NULL);
+    acl_plugin.register_user_module ("ABF plugin", "sw_if_index", NULL);
 
   return (NULL);
 }
 
-VLIB_INIT_FUNCTION (abf_itf_bond_init);
+/* *INDENT-OFF* */
+VLIB_INIT_FUNCTION (abf_itf_bond_init) =
+{
+  .runs_after = VLIB_INITS("acl_init"),
+};
+/* *INDENT-ON* */
 
 /*
  * fd.io coding-style-patch-verification: ON