On Tue, Mar 04, 2014 at 07:22:56PM +0100, Antonios Motakis wrote: > This will be used in a following patch to ensure that a vhost-user > client reconnecting to QEMU supports the features that were exposed > by the first client that initiated the virtio-net session. > > Signed-off-by: Antonios Motakis <a.mota...@virtualopensystems.com> > Signed-off-by: Nikolay Nikolaev <n.nikol...@virtualopensystems.com>
Why isn't checking features, or backend_features field sufficient? > --- > hw/net/vhost_net.c | 10 ++++++++++ > include/hw/virtio/vhost.h | 1 + > include/net/vhost_net.h | 2 ++ > 3 files changed, 13 insertions(+) > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > index 0fb4fa5..38e1e8a 100644 > --- a/hw/net/vhost_net.c > +++ b/hw/net/vhost_net.c > @@ -80,6 +80,11 @@ void vhost_net_ack_features(struct vhost_net *net, > unsigned features) > } > } > > +unsigned long long vhost_net_features(VHostNetState *net) > +{ > + return net->dev.features; > +} > + > static int vhost_net_get_fd(NetClientState *backend) > { > switch (backend->info->type) { > @@ -112,6 +117,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > > net->dev.nvqs = 2; > net->dev.vqs = net->vqs; > + net->dev.mandatory_features = options->mandatory_features; > > r = vhost_dev_init(&net->dev, options->opaque, > options->force); > @@ -347,6 +353,10 @@ unsigned vhost_net_get_features(struct vhost_net *net, > unsigned features) > void vhost_net_ack_features(struct vhost_net *net, unsigned features) > { > } > +unsigned long long vhost_net_features(struct vhost_net *net) > +{ > + return 0; > +} > > bool vhost_net_virtqueue_pending(VHostNetState *net, int idx) > { > diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h > index 97641b6..0068d40 100644 > --- a/include/hw/virtio/vhost.h > +++ b/include/hw/virtio/vhost.h > @@ -41,6 +41,7 @@ struct vhost_dev { > unsigned long long features; > unsigned long long acked_features; > unsigned long long backend_features; > + unsigned long long mandatory_features; > bool started; > bool log_enabled; > vhost_log_chunk_t *log; > diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h > index 2067ee2..b39bb45 100644 > --- a/include/net/vhost_net.h > +++ b/include/net/vhost_net.h > @@ -10,6 +10,7 @@ typedef struct VhostNetOptions { > NetClientState *net_backend; > void *opaque; > bool force; > + unsigned long long mandatory_features; > } VhostNetOptions; > > struct vhost_net *vhost_net_init(VhostNetOptions *options); > @@ -22,6 +23,7 @@ void vhost_net_cleanup(VHostNetState *net); > > unsigned vhost_net_get_features(VHostNetState *net, unsigned features); > void vhost_net_ack_features(VHostNetState *net, unsigned features); > +unsigned long long vhost_net_features(VHostNetState *net); > > bool vhost_net_virtqueue_pending(VHostNetState *net, int n); > void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev, > -- > 1.8.3.2