net: Define net_client_set_link()
The code to set the link status is currently located in qmp_set_link(). This function identifies the device by name, searches for the corresponding NetClientState, and then updates the link status. In some parts of the code, such as vhost-user.c, the NetClientState are already available. Calling qmp_set_link() from these locations leads to a redundant search for the clients. This patch refactors the logic by introducing a new function, net_client_set_link(), which accepts a NetClientState array directly. qmp_set_link() is simplified to be a wrapper that performs the client search and then calls the new function. The vhost-user implementation is updated to use net_client_set_link() directly, thereby eliminating the unnecessary client lookup. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
adf684ce69
commit
9b5b45c717
3 changed files with 23 additions and 14 deletions
|
|
@ -298,6 +298,7 @@ void net_client_parse(QemuOptsList *opts_list, const char *optstr);
|
|||
void show_netdevs(void);
|
||||
void net_init_clients(void);
|
||||
void net_check_clients(void);
|
||||
void net_client_set_link(NetClientState **ncs, int queues, bool up);
|
||||
void net_cleanup(void);
|
||||
void hmp_host_net_add(Monitor *mon, const QDict *qdict);
|
||||
void hmp_host_net_remove(Monitor *mon, const QDict *qdict);
|
||||
|
|
|
|||
32
net/net.c
32
net/net.c
|
|
@ -1601,21 +1601,11 @@ void colo_notify_filters_event(int event, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
void qmp_set_link(const char *name, bool up, Error **errp)
|
||||
void net_client_set_link(NetClientState **ncs, int queues, bool up)
|
||||
{
|
||||
NetClientState *ncs[MAX_QUEUE_NUM];
|
||||
NetClientState *nc;
|
||||
int queues, i;
|
||||
int i;
|
||||
|
||||
queues = qemu_find_net_clients_except(name, ncs,
|
||||
NET_CLIENT_DRIVER__MAX,
|
||||
MAX_QUEUE_NUM);
|
||||
|
||||
if (queues == 0) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
||||
"Device '%s' not found", name);
|
||||
return;
|
||||
}
|
||||
nc = ncs[0];
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
|
|
@ -1646,6 +1636,24 @@ void qmp_set_link(const char *name, bool up, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
void qmp_set_link(const char *name, bool up, Error **errp)
|
||||
{
|
||||
NetClientState *ncs[MAX_QUEUE_NUM];
|
||||
int queues;
|
||||
|
||||
queues = qemu_find_net_clients_except(name, ncs,
|
||||
NET_CLIENT_DRIVER__MAX,
|
||||
MAX_QUEUE_NUM);
|
||||
|
||||
if (queues == 0) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
||||
"Device '%s' not found", name);
|
||||
return;
|
||||
}
|
||||
|
||||
net_client_set_link(ncs, queues, up);
|
||||
}
|
||||
|
||||
static void net_vm_change_state_handler(void *opaque, bool running,
|
||||
RunState state)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -264,7 +264,7 @@ static void chr_closed_bh(void *opaque)
|
|||
vhost_user_save_acked_features(ncs[i]);
|
||||
}
|
||||
|
||||
qmp_set_link(name, false, &err);
|
||||
net_client_set_link(ncs, queues, false);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, net_vhost_user_event,
|
||||
NULL, opaque, NULL, true);
|
||||
|
|
@ -300,7 +300,7 @@ static void net_vhost_user_event(void *opaque, QEMUChrEvent event)
|
|||
}
|
||||
s->watch = qemu_chr_fe_add_watch(&s->chr, G_IO_HUP,
|
||||
net_vhost_user_watch, s);
|
||||
qmp_set_link(name, true, &err);
|
||||
net_client_set_link(ncs, queues, true);
|
||||
s->started = true;
|
||||
qapi_event_send_netdev_vhost_user_connected(name, chr->label);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue