Typos. A bunch of typos I've been collecting.
[vpp.git] / src / vnet / bier / bier_table.c
index 3ecda10..a9f8a6d 100644 (file)
@@ -251,7 +251,7 @@ bier_table_mk_lfib (bier_table_t *bt)
                                           FIB_SOURCE_BIER);
 
         /*
-         * stack the entry on the forwarding chain prodcued by the
+         * stack the entry on the forwarding chain produced by the
          * path-list via the ECMP tables.
          */
         fib_path_list_contribute_forwarding(bt->bt_pl,
@@ -309,7 +309,7 @@ bier_table_mk_ecmp (index_t bti)
     }
 
     /*
-     * no oppotunity to share, this the resolving ECMP tables are unique
+     * no opportunity to share, this the resolving ECMP tables are unique
      * to this table.
      * no need to be a child of the path list, we can do nothing with any
      * notifications it would generate [not that it will].
@@ -329,6 +329,70 @@ bier_table_mk_ecmp (index_t bti)
     return (bt);
 }
 
+
+static index_t
+bier_table_create (const bier_table_id_t *btid,
+                   mpls_label_t local_label)
+{
+    /*
+     * add a new table
+     */
+    bier_table_t *bt;
+    index_t bti;
+    u32 key;
+
+    key = bier_table_mk_key(btid);
+
+    pool_get_aligned(bier_table_pool, bt, CLIB_CACHE_LINE_BYTES);
+    bier_table_init(bt, btid, local_label);
+
+    hash_set(bier_tables_by_key, key, bier_table_get_index(bt));
+    bti = bier_table_get_index(bt);
+
+    if (bier_table_is_main(bt))
+    {
+        bt = bier_table_mk_ecmp(bti);
+
+        /*
+         * add whichever mpls-fib or bift we need
+         */
+        if (local_label != MPLS_LABEL_INVALID)
+        {
+            bt->bt_ll = local_label;
+            bier_table_mk_lfib(bt);
+        }
+        else
+        {
+            bier_table_mk_bift(bt);
+        }
+    }
+
+    return (bti);
+}
+
+index_t
+bier_table_lock (const bier_table_id_t *btid)
+{
+    bier_table_t *bt;
+    index_t bti;
+
+    bt = bier_table_find(btid);
+
+    if (NULL == bt)
+    {
+        bti = bier_table_create(btid, MPLS_LABEL_INVALID);
+        bt = bier_table_get(bti);
+    }
+    else
+    {
+        bti = bier_table_get_index(bt);
+    }
+
+    bier_table_lock_i(bt);
+
+    return (bti);
+}
+
 index_t
 bier_table_add_or_lock (const bier_table_id_t *btid,
                         mpls_label_t local_label)
@@ -379,36 +443,8 @@ bier_table_add_or_lock (const bier_table_id_t *btid,
     }
     else
     {
-        /*
-         * add a new table
-         */
-        u32 key;
-
-        key = bier_table_mk_key(btid);
-
-        pool_get_aligned(bier_table_pool, bt, CLIB_CACHE_LINE_BYTES);
-        bier_table_init(bt, btid, local_label);
-
-        hash_set(bier_tables_by_key, key, bier_table_get_index(bt));
-        bti = bier_table_get_index(bt);
-
-        if (bier_table_is_main(bt))
-        {
-            bt = bier_table_mk_ecmp(bti);
-
-            /*
-             * add whichever mpls-fib or bift we need
-             */
-            if (local_label != MPLS_LABEL_INVALID)
-            {
-                bt->bt_ll = local_label;
-                bier_table_mk_lfib(bt);
-            }
-            else
-            {
-                bier_table_mk_bift(bt);
-            }
-        }
+        bti = bier_table_create(btid, local_label);
+        bt = bier_table_get(bti);
     }
 
     bier_table_lock_i(bt);