X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdevices%2Fvirtio%2Fvhost_user_output.c;h=f4d1c2c6a7c28dd058a4044a9ede6a1d58558613;hb=b192feba004e7a52b57ff9f68246b1c94e8b667b;hp=029c0c04cc5d719b232631e5599104bcd44b5ec5;hpb=6e36351faf5b69a0bfb8235b3b06f8b2c24e5547;p=vpp.git diff --git a/src/vnet/devices/virtio/vhost_user_output.c b/src/vnet/devices/virtio/vhost_user_output.c index 029c0c04cc5..f4d1c2c6a7c 100644 --- a/src/vnet/devices/virtio/vhost_user_output.c +++ b/src/vnet/devices/virtio/vhost_user_output.c @@ -248,7 +248,7 @@ VNET_DEVICE_CLASS_TX_FN (vhost_user_device_class) (vlib_main_t * vm, goto done3; } - if (PREDICT_FALSE (!vui->is_up)) + if (PREDICT_FALSE (!vui->is_ready)) { error = VHOST_USER_TX_FUNC_ERROR_NOT_READY; goto done3; @@ -621,11 +621,17 @@ vhost_user_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, vhost_user_main_t *vum = &vhost_user_main; vhost_user_intf_t *vui = pool_elt_at_index (vum->vhost_user_interfaces, hif->dev_instance); - u32 hw_flags = 0; + u8 link_old, link_new; + + link_old = vui_is_link_up (vui); + vui->admin_up = (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) != 0; - hw_flags = vui->admin_up ? VNET_HW_INTERFACE_FLAG_LINK_UP : 0; - vnet_hw_interface_set_flags (vnm, vui->hw_if_index, hw_flags); + link_new = vui_is_link_up (vui); + + if (link_old != link_new) + vnet_hw_interface_set_flags (vnm, vui->hw_if_index, link_new ? + VNET_HW_INTERFACE_FLAG_LINK_UP : 0); return /* no error */ 0; }