vxlan: multiarch optimization of vxlan
[vpp.git] / src / plugins / gbp / gbp_contract.c
index 452c5a5..dd433f2 100644 (file)
@@ -73,6 +73,12 @@ gbp_rule_alloc (gbp_rule_action_t action,
   return (gu - gbp_rule_pool);
 }
 
+void
+gbp_rule_free (index_t gui)
+{
+  pool_put_index (gbp_rule_pool, gui);
+}
+
 index_t
 gbp_next_hop_alloc (const ip46_address_t * ip,
                    index_t grd, const mac_address_t * mac, index_t gbd)
@@ -139,6 +145,8 @@ gbp_contract_rules_free (index_t * rules)
        adj_unlock (gnh->gnh_ai[fproto]);
       }
     }
+
+    gbp_rule_free (*gui);
   }
   vec_free (rules);
 }
@@ -159,7 +167,7 @@ format_gbp_next_hop (u8 * s, va_list * args)
   return (s);
 }
 
-static u8 *
+u8 *
 format_gbp_rule_action (u8 * s, va_list * args)
 {
   gbp_rule_action_t action = va_arg (*args, gbp_rule_action_t);
@@ -559,11 +567,11 @@ gbp_contract_walk (gbp_contract_cb_t cb, void *ctx)
   gbp_contract_t *gc;
 
   /* *INDENT-OFF* */
-  pool_foreach(gc, gbp_contract_pool,
-  ({
+  pool_foreach (gc, gbp_contract_pool)
+   {
     if (!cb(gc, ctx))
       break;
-  }));
+  }
   /* *INDENT-ON* */
 }
 
@@ -702,8 +710,8 @@ gbp_contract_show (vlib_main_t * vm,
   vlib_cli_output (vm, "Contracts:");
 
   /* *INDENT-OFF* */
-  pool_foreach (gc, gbp_contract_pool,
-  ({
+  pool_foreach (gc, gbp_contract_pool)
+   {
     gci = gc - gbp_contract_pool;
 
     if (SCLASS_INVALID != src && SCLASS_INVALID != dst)
@@ -724,7 +732,7 @@ gbp_contract_show (vlib_main_t * vm,
       }
     else
       vlib_cli_output (vm, "  %U", format_gbp_contract, gci);
-  }));
+  }
   /* *INDENT-ON* */
 
   return (NULL);