net: introduce control client
This patch introduces a boolean for the device has control queue which can accepts control command via network queue. The first user would be the control virtqueue support for vhost. Signed-off-by: Jason Wang <jasowang@redhat.com> Message-Id: <20211020045600.16082-6-jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
654790b65b
commit
2f849dbdb2
@ -105,6 +105,7 @@ struct NetClientState {
|
||||
int vnet_hdr_len;
|
||||
bool is_netdev;
|
||||
bool do_not_pad; /* do not pad to the minimum ethernet frame length */
|
||||
bool is_datapath;
|
||||
QTAILQ_HEAD(, NetFilterState) filters;
|
||||
};
|
||||
|
||||
@ -136,6 +137,10 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
|
||||
NetClientState *peer,
|
||||
const char *model,
|
||||
const char *name);
|
||||
NetClientState *qemu_new_net_control_client(NetClientInfo *info,
|
||||
NetClientState *peer,
|
||||
const char *model,
|
||||
const char *name);
|
||||
NICState *qemu_new_nic(NetClientInfo *info,
|
||||
NICConf *conf,
|
||||
const char *model,
|
||||
|
24
net/net.c
24
net/net.c
@ -239,7 +239,8 @@ static void qemu_net_client_setup(NetClientState *nc,
|
||||
NetClientState *peer,
|
||||
const char *model,
|
||||
const char *name,
|
||||
NetClientDestructor *destructor)
|
||||
NetClientDestructor *destructor,
|
||||
bool is_datapath)
|
||||
{
|
||||
nc->info = info;
|
||||
nc->model = g_strdup(model);
|
||||
@ -258,6 +259,7 @@ static void qemu_net_client_setup(NetClientState *nc,
|
||||
|
||||
nc->incoming_queue = qemu_new_net_queue(qemu_deliver_packet_iov, nc);
|
||||
nc->destructor = destructor;
|
||||
nc->is_datapath = is_datapath;
|
||||
QTAILQ_INIT(&nc->filters);
|
||||
}
|
||||
|
||||
@ -272,7 +274,23 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
|
||||
|
||||
nc = g_malloc0(info->size);
|
||||
qemu_net_client_setup(nc, info, peer, model, name,
|
||||
qemu_net_client_destructor);
|
||||
qemu_net_client_destructor, true);
|
||||
|
||||
return nc;
|
||||
}
|
||||
|
||||
NetClientState *qemu_new_net_control_client(NetClientInfo *info,
|
||||
NetClientState *peer,
|
||||
const char *model,
|
||||
const char *name)
|
||||
{
|
||||
NetClientState *nc;
|
||||
|
||||
assert(info->size >= sizeof(NetClientState));
|
||||
|
||||
nc = g_malloc0(info->size);
|
||||
qemu_net_client_setup(nc, info, peer, model, name,
|
||||
qemu_net_client_destructor, false);
|
||||
|
||||
return nc;
|
||||
}
|
||||
@ -297,7 +315,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
qemu_net_client_setup(&nic->ncs[i], info, peers[i], model, name,
|
||||
NULL);
|
||||
NULL, true);
|
||||
nic->ncs[i].queue_index = i;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user