提交 62112d18 编写于 作者: M Markus Armbruster 提交者: Anthony Liguori

net: Fix bogus "Warning: vlan 0 with no nics" with -device

net_check_clients() prints this when an VLAN has host devices, but no
guest devices.  It uses VLANState members nb_guest_devs and
nb_host_devs to keep track of these devices.  However, -device does
not update nb_guest_devs, only net_init_nic() does that, for -net nic.

Check the VLAN clients directly, and remove the counters.
Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 668680f7
...@@ -812,9 +812,6 @@ static int net_init_nic(QemuOpts *opts, ...@@ -812,9 +812,6 @@ static int net_init_nic(QemuOpts *opts,
} }
nd->used = 1; nd->used = 1;
if (vlan) {
nd->vlan->nb_guest_devs++;
}
nb_nics++; nb_nics++;
return idx; return idx;
...@@ -1278,13 +1275,27 @@ void net_cleanup(void) ...@@ -1278,13 +1275,27 @@ void net_cleanup(void)
void net_check_clients(void) void net_check_clients(void)
{ {
VLANState *vlan; VLANState *vlan;
VLANClientState *vc;
int has_nic, has_host_dev;
QTAILQ_FOREACH(vlan, &vlans, next) { QTAILQ_FOREACH(vlan, &vlans, next) {
if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0) QTAILQ_FOREACH(vc, &vlan->clients, next) {
continue; switch (vc->info->type) {
if (vlan->nb_guest_devs == 0) case NET_CLIENT_TYPE_NIC:
has_nic = 1;
break;
case NET_CLIENT_TYPE_SLIRP:
case NET_CLIENT_TYPE_TAP:
case NET_CLIENT_TYPE_SOCKET:
case NET_CLIENT_TYPE_VDE:
has_host_dev = 1;
break;
default: ;
}
}
if (has_host_dev && !has_nic)
fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id); fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
if (vlan->nb_host_devs == 0) if (has_nic && !has_host_dev)
fprintf(stderr, fprintf(stderr,
"Warning: vlan %d is not connected to host network\n", "Warning: vlan %d is not connected to host network\n",
vlan->id); vlan->id);
......
...@@ -79,7 +79,6 @@ struct VLANState { ...@@ -79,7 +79,6 @@ struct VLANState {
int id; int id;
QTAILQ_HEAD(, VLANClientState) clients; QTAILQ_HEAD(, VLANClientState) clients;
QTAILQ_ENTRY(VLANState) next; QTAILQ_ENTRY(VLANState) next;
unsigned int nb_guest_devs, nb_host_devs;
NetQueue *send_queue; NetQueue *send_queue;
}; };
......
...@@ -738,10 +738,6 @@ int net_init_slirp(QemuOpts *opts, ...@@ -738,10 +738,6 @@ int net_init_slirp(QemuOpts *opts,
qemu_free(config); qemu_free(config);
} }
if (ret != -1 && vlan) {
vlan->nb_host_devs++;
}
qemu_free(vnet); qemu_free(vnet);
return ret; return ret;
......
...@@ -569,9 +569,5 @@ int net_init_socket(QemuOpts *opts, ...@@ -569,9 +569,5 @@ int net_init_socket(QemuOpts *opts,
return -1; return -1;
} }
if (vlan) {
vlan->nb_host_devs++;
}
return 0; return 0;
} }
...@@ -714,10 +714,6 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan ...@@ -714,10 +714,6 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
return -1; return -1;
} }
if (vlan) {
vlan->nb_host_devs++;
}
return 0; return 0;
} }
......
...@@ -449,9 +449,5 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan ...@@ -449,9 +449,5 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
} }
} }
if (vlan) {
vlan->nb_host_devs++;
}
return 0; return 0;
} }
...@@ -127,9 +127,5 @@ int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan ...@@ -127,9 +127,5 @@ int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
return -1; return -1;
} }
if (vlan) {
vlan->nb_host_devs++;
}
return 0; return 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册