vnet: introduce error state for sw interfaces 41/6641/3
authorDamjan Marion <damarion@cisco.com>
Wed, 10 May 2017 18:09:31 +0000 (20:09 +0200)
committerDave Barach <openvpp@barachs.net>
Wed, 10 May 2017 22:02:22 +0000 (22:02 +0000)
Interfaces with error state are not allowed to go admin up

Change-Id: I09fc09a5b28130aead219dccbc2e0f30ea7414cf
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vnet/interface.c
src/vnet/interface.h
src/vnet/interface_format.c

index 24f216f..41e2186 100644 (file)
@@ -482,6 +482,13 @@ vnet_sw_interface_set_flags_helper (vnet_main_t * vnm, u32 sw_if_index,
          vnet_device_class_t *dev_class =
            vnet_get_device_class (vnm, hi->dev_class_index);
 
+         if ((flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) &&
+             (si->flags & VNET_SW_INTERFACE_FLAG_ERROR))
+           {
+             error = clib_error_return (0, "Interface in the error state");
+             goto done;
+           }
+
          /* save the si admin up flag */
          old_flags = si->flags;
 
index 1c98555..095fe96 100644 (file)
@@ -573,6 +573,9 @@ typedef struct
 /* Interface does not appear in CLI/API */
 #define VNET_SW_INTERFACE_FLAG_HIDDEN (1 << 5)
 
+/* Interface in ERROR state */
+#define VNET_SW_INTERFACE_FLAG_ERROR (1 << 6)
+
   /* Index for this interface. */
   u32 sw_if_index;
 
index 03caf5c..df7e938 100644 (file)
@@ -45,7 +45,9 @@ format_vnet_sw_interface_flags (u8 * s, va_list * args)
 {
   u32 flags = va_arg (*args, u32);
 
-  if (flags & VNET_SW_INTERFACE_FLAG_BOND_SLAVE)
+  if (flags & VNET_SW_INTERFACE_FLAG_ERROR)
+    s = format (s, "error");
+  else if (flags & VNET_SW_INTERFACE_FLAG_BOND_SLAVE)
     s = format (s, "bond-slave");
   else
     {