qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH] vhost: disable on tap link down


From: pradeep
Subject: [Qemu-devel] Re: [PATCH] vhost: disable on tap link down
Date: Tue, 8 Feb 2011 17:40:58 +0530

On Mon, 7 Feb 2011 15:50:01 +0200
"Michael S. Tsirkin" <address@hidden> wrote:

> qemu makes it possible to disable link at tap
> which is not communicated to the guest but
> causes all packets to be dropped.
> 
> Handle this with vhost simply by moving to the userspace emulation.
> 
> Note: it might be a good idea to make peer link status match
> tap in this case, so the guest gets an event
> and updates the carrier state. For now
> stay bug for bug compatible with what we used to have.
> 
> Signed-off-by: Michael S. Tsirkin <address@hidden>
> Reported-by: pradeep <address@hidden>
> ---
> 
> Untested.
> Pradeep, mind trying this patch out and reporting?

Hi mst

This patch works. Thanks

--Pradeep


> Thanks!
> 
>  hw/virtio-net.c |    4 ++++
>  net.c           |    7 +++++++
>  2 files changed, 11 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/virtio-net.c b/hw/virtio-net.c
> index 671d952..fc2d6f5 100644
> --- a/hw/virtio-net.c
> +++ b/hw/virtio-net.c
> @@ -112,6 +112,10 @@ static void virtio_net_vhost_status(VirtIONet
> *n, uint8_t status) return;
>      }
> 
> +    if (n->nic->nc.peer->link_down) {
> +        return;
> +    }
> +
>      if (!tap_get_vhost_net(n->nic->nc.peer)) {
>          return;
>      }
> diff --git a/net.c b/net.c
> index 9ba5be2..57ee997 100644
> --- a/net.c
> +++ b/net.c
> @@ -1324,6 +1324,13 @@ done:
>      if (vc->info->link_status_changed) {
>          vc->info->link_status_changed(vc);
>      }
> +
> +    /* Notify peer. Don't update peer link status: this makes it
> possible to
> +     * disconnect from host network without notifying the guest.
> +     * FIXME: is this useful? Could just be an artifact of vlan
> support. */
> +    if (vc->peer && vc->peer->info->link_status_changed) {
> +        vc->peer->info->link_status_changed(vc->peer);
> +    }
>      return 0;
>  }
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]