misc: refactor clib_bitmap_foreach macro
[vpp.git] / src / plugins / nat / nat64 / nat64.c
index 5da4986..6e5ceec 100644 (file)
@@ -21,6 +21,7 @@
 #include <vnet/plugin/plugin.h>
 #include <vpp/app/version.h>
 
+#include <nat/lib/ipfix_logging.h>
 #include <nat/nat64/nat64.h>
 
 nat64_main_t nat64_main;
@@ -282,10 +283,10 @@ nat64_init (vlib_main_t * vm)
        bitmap = clib_bitmap_set (bitmap, i, 1);
 
       /* *INDENT-OFF* */
-      clib_bitmap_foreach (i, bitmap,
-        ({
+      clib_bitmap_foreach (i, bitmap)
+         {
           vec_add1(nm->workers, i);
-        }));
+        }
       /* *INDENT-ON* */
 
       clib_bitmap_free (bitmap);
@@ -293,9 +294,8 @@ nat64_init (vlib_main_t * vm)
       nm->port_per_thread = (0xffff - 1024) / _vec_len (nm->workers);
     }
 
-  // TODO: ipfix needs to be separated from NAT base plugin
   /* Init IPFIX logging */
-  //snat_ipfix_logging_init (vm);
+  nat_ipfix_logging_init (vm);
 
 #define _(x)                                                     \
   nm->counters.in2out.x.name = #x;                               \
@@ -423,14 +423,14 @@ nat64_add_del_pool_addr (u32 thread_index,
 
   /* Add/del external address to FIB */
   /* *INDENT-OFF* */
-  pool_foreach (interface, nm->interfaces,
-  ({
+  pool_foreach (interface, nm->interfaces)
+   {
     if (nat64_interface_is_inside(interface))
       continue;
 
     nat64_add_del_addr_to_fib (addr, 32, interface->sw_if_index, is_add);
     break;
-  }));
+  }
   /* *INDENT-ON* */
 
   return 0;
@@ -547,14 +547,14 @@ nat64_interface_add_del (u32 sw_if_index, u8 is_inside, u8 is_add)
 
   /* Check if interface already exists */
   /* *INDENT-OFF* */
-  pool_foreach (i, nm->interfaces,
-  ({
+  pool_foreach (i, nm->interfaces)
+   {
     if (i->sw_if_index == sw_if_index)
       {
         interface = i;
         break;
       }
-  }));
+  }
   /* *INDENT-ON* */
 
   if (is_add)
@@ -642,11 +642,11 @@ nat64_interfaces_walk (nat64_interface_walk_fn_t fn, void *ctx)
   nat64_interface_t *i = 0;
 
   /* *INDENT-OFF* */
-  pool_foreach (i, nm->interfaces,
-  ({
+  pool_foreach (i, nm->interfaces)
+   {
     if (fn (i, ctx))
       break;
-  }));
+  }
   /* *INDENT-ON* */
 }
 
@@ -749,7 +749,7 @@ nat64_alloc_addr_and_port_default (nat64_address_t * addresses,
     }
 
   /* Totally out of translations to use... */
-  //snat_ipfix_logging_addresses_exhausted (thread_index, 0);
+  nat_ipfix_logging_addresses_exhausted (thread_index, 0);
   return 1;
 }
 
@@ -823,8 +823,8 @@ nat64_static_bib_worker_fn (vlib_main_t * vm, vlib_node_runtime_t * rt,
   ip46_address_t addr;
 
   /* *INDENT-OFF* */
-  pool_foreach (static_bib, nm->static_bibs,
-  ({
+  pool_foreach (static_bib, nm->static_bibs)
+   {
     if ((static_bib->thread_index != thread_index) || (static_bib->done))
       continue;
 
@@ -858,7 +858,7 @@ nat64_static_bib_worker_fn (vlib_main_t * vm, vlib_node_runtime_t * rt,
       }
 
       static_bib->done = 1;
-  }));
+  }
   /* *INDENT-ON* */
 
   return 0;
@@ -978,11 +978,11 @@ nat64_add_del_static_bib_entry (ip6_address_t * in_addr,
   if (nm->num_workers)
     {
       /* *INDENT-OFF* */
-      pool_foreach (static_bib, nm->static_bibs,
-      ({
+      pool_foreach (static_bib, nm->static_bibs)
+       {
         if (static_bib->done)
           vec_add1 (to_be_free, static_bib - nm->static_bibs);
-      }));
+      }
       vec_foreach (index, to_be_free)
         pool_put_index (nm->static_bibs, index[0]);
       /* *INDENT-ON* */
@@ -1557,7 +1557,7 @@ nat64_plugin_disable ()
   int rv = 0;
 
   nat64_address_t *a;
-  nat64_interface_t *i, *interfaces;
+  nat64_interface_t *i, *interfaces = 0;
 
   if (plugin_enabled () == 0)
     {
@@ -1566,16 +1566,21 @@ nat64_plugin_disable ()
     }
   nm->enabled = 0;
 
-  interfaces = vec_dup (nm->interfaces);
+  /* *INDENT-OFF* */
+  pool_foreach (i, nm->interfaces)
+   {
+    vec_add1 (interfaces, *i);
+  }
+  /* *INDENT-ON* */
   vec_foreach (i, interfaces)
   {
-    rv = nat64_interface_add_del (i->sw_if_index, i->flags, 1);
+    rv = nat64_interface_add_del (i->sw_if_index, i->flags, 0);
     if (rv)
       {
        nat64_log_err ("%U %s interface del failed",
-                      unformat_vnet_sw_interface,
+                      format_vnet_sw_if_index_name, vnm, i->sw_if_index,
                       i->flags & NAT64_INTERFACE_FLAG_IS_INSIDE ?
-                      "inside" : "outside", vnm, i->sw_if_index);
+                      "inside" : "outside");
       }
   }
   vec_free (interfaces);