virtio: fix link up/down flag 15/26015/2
authorMohsin Kazmi <sykazmi@cisco.com>
Thu, 19 Mar 2020 13:03:31 +0000 (14:03 +0100)
committerDamjan Marion <dmarion@me.com>
Sat, 21 Mar 2020 12:06:26 +0000 (12:06 +0000)
Type: fix

"set int state <interface> down" puts the virtio device link
down. It will not put the link in "UP" state, when
"set int state <interface up>" will be used again to change
the interface admin up. This patch fixes it.

To test:
create tap
set int state tap0 up
set int state tap0 down
sh hardware
sh int
set int state tap0 up
sh int
sh hardware

Change-Id: I3c0e31539f8a2a1e40220e7fb57eedecf408f067
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
src/vnet/devices/virtio/device.c

index 588c84b..856e5f2 100644 (file)
@@ -531,10 +531,16 @@ virtio_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
   virtio_if_t *vif = pool_elt_at_index (mm->interfaces, hw->dev_instance);
 
   if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
-    vif->flags |= VIRTIO_IF_FLAG_ADMIN_UP;
+    {
+      vif->flags |= VIRTIO_IF_FLAG_ADMIN_UP;
+      vnet_hw_interface_set_flags (vnm, vif->hw_if_index,
+                                  VNET_HW_INTERFACE_FLAG_LINK_UP);
+    }
   else
-    vif->flags &= ~VIRTIO_IF_FLAG_ADMIN_UP;
-
+    {
+      vif->flags &= ~VIRTIO_IF_FLAG_ADMIN_UP;
+      vnet_hw_interface_set_flags (vnm, vif->hw_if_index, 0);
+    }
   return 0;
 }