VPP-1507: Added binary api to dump configured ip_punt_redirect
[vpp.git] / src / vnet / dpo / load_balance_map.c
index 70ce1bf..bf5d1fb 100644 (file)
@@ -68,18 +68,20 @@ typedef struct load_balance_map_path_t_ {
  */
 load_balance_map_t *load_balance_map_pool;
 
+/**
+ * the logger
+ */
+vlib_log_class_t load_balance_map_logger;
+
 /*
  * Debug macro
  */
-#ifdef FIB_DEBUG
-#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...)       \
-    {                                                   \
-        clib_warning("lbm: FIXME" _fmt,                 \
-                     ##_args);                          \
-    }
-#else
-#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...)
-#endif
+#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...)               \
+{                                                               \
+    vlib_log_debug(load_balance_map_logger,                     \
+                   "lbm:" _fmt,                                 \
+                   ##_args);                                    \
+}
 
 static index_t
 load_balance_map_get_index (load_balance_map_t *lbm)
@@ -88,10 +90,10 @@ load_balance_map_get_index (load_balance_map_t *lbm)
 }
 
 u8*
-format_load_balance_map (u8 *s, va_list ap)
+format_load_balance_map (u8 *s, va_list ap)
 {
-    index_t lbmi = va_arg(ap, index_t);
-    u32 indent = va_arg(ap, u32);
+    index_t lbmi = va_arg(*ap, index_t);
+    u32 indent = va_arg(*ap, u32);
     load_balance_map_t *lbm;
     u32 n_buckets, ii;
 
@@ -387,7 +389,7 @@ load_balance_map_alloc (const load_balance_path_t *paths)
     u32 ii;
 
     pool_get_aligned(load_balance_map_pool, lbm, CLIB_CACHE_LINE_BYTES);
-    memset(lbm, 0, sizeof(*lbm));
+    clib_memset(lbm, 0, sizeof(*lbm));
 
     vec_validate(lbm->lbm_paths, vec_len(paths)-1);
 
@@ -412,9 +414,20 @@ load_balance_map_init (load_balance_map_t *lbm,
 
     load_balance_map_fill(lbm);
 
+    load_balance_map_logger =
+        vlib_log_register_class ("dpo", "load-balance-map");
+
     return (lbm);
 }
 
+static void
+load_balance_map_destroy (load_balance_map_t *lbm)
+{
+    vec_free(lbm->lbm_paths);
+    vec_free(lbm->lbm_buckets);
+    pool_put(load_balance_map_pool, lbm);
+}
+
 index_t
 load_balance_map_add_or_lock (u32 n_buckets,
                               u32 sum_of_weights,
@@ -434,6 +447,7 @@ load_balance_map_add_or_lock (u32 n_buckets,
     else
     {
         lbm = load_balance_map_get(lbmi);
+        load_balance_map_destroy(tmp);
     }
 
     lbm->lbm_locks++;
@@ -468,9 +482,7 @@ load_balance_map_unlock (index_t lbmi)
     if (0 == lbm->lbm_locks)
     {
         load_balance_map_db_remove(lbm);
-        vec_free(lbm->lbm_paths);
-        vec_free(lbm->lbm_buckets);
-        pool_put(load_balance_map_pool, lbm);
+        load_balance_map_destroy(lbm);
     }
 }