Typos. A bunch of typos I've been collecting.
[vpp.git] / src / vnet / bier / bier_fmask_db.c
index 67d3bd1..d0f5ba1 100644 (file)
  *
  * The table's key is part of this DB key, since the fmasks therein build up
  * their forwarding mask based on the routes that resolve through
- * it, so cross polination would be bad.
+ * it, so cross pollination would be bad.
  */
 typedef struct bier_fmask_db_t_ {
     /**
      * hash table for underlying storage
      */
-    mhash_t bfdb_hash;
+    uword *bfdb_hash;
 
     /**
      * Pool for memory
@@ -60,7 +60,7 @@ bier_fmask_db_mk_key (index_t bti,
      * Depending on what the ID is there may be padding.
      * This key will be memcmp'd in the mhash, so make sure it's all 0
      */
-    memset(key, 0, sizeof(*key));
+    clib_memset(key, 0, sizeof(*key));
 
     /*
      * Pick the attributes from the path that make the FMask unique
@@ -68,11 +68,12 @@ bier_fmask_db_mk_key (index_t bti,
     if (FIB_ROUTE_PATH_UDP_ENCAP & rpath->frp_flags)
     {
         key->bfmi_id = rpath->frp_udp_encap_id;
+        key->bfmi_nh_type = BIER_NH_UDP;
     }
     else
     {
-        key->bfmi_sw_if_index = rpath->frp_sw_if_index;
         memcpy(&key->bfmi_nh, &rpath->frp_addr, sizeof(rpath->frp_addr));
+        key->bfmi_nh_type = BIER_NH_IP;
     }
     if (NULL == rpath->frp_label_stack)
     {
@@ -82,6 +83,7 @@ bier_fmask_db_mk_key (index_t bti,
     {
         key->bfmi_hdr_type = BIER_HDR_O_MPLS;
     }
+    key->bfmi_bti = bti;
 }
 
 u32
@@ -92,7 +94,7 @@ bier_fmask_db_find (index_t bti,
     uword *p;
 
     bier_fmask_db_mk_key(bti, rpath, &fmid);
-    p = mhash_get(&bier_fmask_db.bfdb_hash, &fmid);
+    p = hash_get_mem(bier_fmask_db.bfdb_hash, &fmid);
 
     if (NULL != p)
     {
@@ -111,7 +113,7 @@ bier_fmask_db_find_or_create_and_lock (index_t bti,
     uword *p;
 
     bier_fmask_db_mk_key(bti, rpath, &fmid);
-    p = mhash_get(&bier_fmask_db.bfdb_hash, &fmid);
+    p = hash_get_mem(bier_fmask_db.bfdb_hash, &fmid);
 
     if (NULL == p)
     {
@@ -121,7 +123,7 @@ bier_fmask_db_find_or_create_and_lock (index_t bti,
          */
         index = bier_fmask_create_and_lock(&fmid, rpath);
         bfm = bier_fmask_get(index);
-        mhash_set(&bier_fmask_db.bfdb_hash, bfm->bfm_id, index, 0);
+        hash_set_mem(bier_fmask_db.bfdb_hash, bfm->bfm_id, index);
     }
     else
     {
@@ -137,24 +139,37 @@ bier_fmask_db_remove (const bier_fmask_id_t *fmid)
 {
     uword *p;
 
-    p = mhash_get(&bier_fmask_db.bfdb_hash, fmid);
+    p = hash_get_mem(bier_fmask_db.bfdb_hash, fmid);
 
     if (NULL == p) {
         /*
-         * remove a non-exitant entry - oops
+         * remove a non-existent entry - oops
          */
-        ASSERT (!"remove non-existant fmask");
+        ASSERT (!"remove non-existent fmask");
     } else {
-        mhash_unset(&(bier_fmask_db.bfdb_hash), (void*)fmid, 0);
+        hash_unset(bier_fmask_db.bfdb_hash, fmid);
     }
 }
 
+void
+bier_fmask_db_walk (bier_fmask_walk_fn_t fn, void *ctx)
+{
+    CLIB_UNUSED (bier_fmask_id_t *fmid);
+    uword *bfmi;
+
+    hash_foreach(fmid, bfmi, bier_fmask_db.bfdb_hash,
+    ({
+        if (WALK_STOP == fn(*bfmi, ctx))
+            break;
+    }));
+}
+
 clib_error_t *
 bier_fmask_db_module_init (vlib_main_t *vm)
 {
-    mhash_init(&bier_fmask_db.bfdb_hash,
-               sizeof(index_t),
-               sizeof(bier_fmask_id_t));
+    bier_fmask_db.bfdb_hash = hash_create_mem(0,
+                                              sizeof(bier_fmask_id_t),
+                                              sizeof(index_t));
 
     return (NULL);
 }