aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/l2/l2_bd.c
diff options
context:
space:
mode:
Diffstat (limited to 'vnet/vnet/l2/l2_bd.c')
-rw-r--r--vnet/vnet/l2/l2_bd.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/vnet/vnet/l2/l2_bd.c b/vnet/vnet/l2/l2_bd.c
index 31f02c63eff..0676a2869a2 100644
--- a/vnet/vnet/l2/l2_bd.c
+++ b/vnet/vnet/l2/l2_bd.c
@@ -54,9 +54,15 @@ u32 bd_find_or_add_bd_index (bd_main_t * bdm, u32 bd_id)
uword * p;
u32 rv;
- p = hash_get (bdm->bd_index_by_bd_id, bd_id);
- if (p)
- return (p[0]);
+ if (bd_id == ~0) {
+ bd_id = 0;
+ while (hash_get (bdm->bd_index_by_bd_id, bd_id))
+ bd_id++;
+ } else {
+ p = hash_get (bdm->bd_index_by_bd_id, bd_id);
+ if (p)
+ return (p[0]);
+ }
rv = clib_bitmap_first_clear (bdm->bd_index_bitmap);