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> --- 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