Prevent Bridge Domain operations on BD 0.
[vpp.git] / src / vnet / l2 / l2_bd.c
index 7c55789..4ebbb54 100644 (file)
@@ -304,6 +304,10 @@ bd_learn (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p == 0)
@@ -369,6 +373,10 @@ bd_fwd (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd)
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p == 0)
@@ -436,6 +444,10 @@ bd_flood (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p == 0)
@@ -502,6 +514,10 @@ bd_uu_flood (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p == 0)
@@ -568,6 +584,10 @@ bd_arp_term (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
   if (p)
     bd_index = *p;
@@ -607,6 +627,10 @@ bd_mac_age (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p == 0)
@@ -780,6 +804,10 @@ bd_arp_entry (vlib_main_t * vm,
       goto done;
     }
 
+  if (bd_id == 0)
+    return clib_error_return (0,
+                             "No operations on the default bridge domain are supported");
+
   p = hash_get (bdm->bd_index_by_bd_id, bd_id);
 
   if (p)
@@ -900,7 +928,7 @@ bd_show (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd)
   u32 bd_id = ~0;
   uword *p;
 
-  start = 0;
+  start = 1;
   end = vec_len (l2input_main.bd_configs);
 
   if (unformat (input, "%d", &bd_id))
@@ -914,6 +942,10 @@ bd_show (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd)
       if (unformat (input, "arp"))
        arp = 1;
 
+      if (bd_id == 0)
+       return clib_error_return (0,
+                                 "No operations on the default bridge domain are supported");
+
       p = hash_get (bdm->bd_index_by_bd_id, bd_id);
       if (p)
        bd_index = *p;
@@ -1125,6 +1157,8 @@ bd_add_del (l2_bridge_domain_add_del_args_t * a)
     {
       if (bd_index == ~0)
        return VNET_API_ERROR_NO_SUCH_ENTRY;
+      if (bd_index == 0)
+       return VNET_API_ERROR_BD_NOT_MODIFIABLE;
       if (vec_len (l2input_main.bd_configs[bd_index].members))
        return VNET_API_ERROR_BD_IN_USE;
       rv = bd_delete (bdm, bd_index);
@@ -1188,6 +1222,12 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input,
       goto done;
     }
 
+  if (bd_id == 0)
+    {
+      error = clib_error_return (0, "bridge domain 0 can not be modified");
+      goto done;
+    }
+
   if (mac_age > 255)
     {
       error = clib_error_return (0, "mac age must be less than 256");
@@ -1218,6 +1258,9 @@ bd_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input,
     case VNET_API_ERROR_NO_SUCH_ENTRY:
       error = clib_error_return (0, "bridge domain id does not exist");
       goto done;
+    case VNET_API_ERROR_BD_NOT_MODIFIABLE:
+      error = clib_error_return (0, "bridge domain 0 can not be modified");
+      goto done;
     default:
       error = clib_error_return (0, "bd_add_del returned %d", rv);
       goto done;