mirror of https://github.com/xemu-project/xemu.git
net: Improve the warnings for dubious command line option combinations
Improve the warnings we give if the user specified a combination of -net options which don't make much sense: * Don't warn about anything if the config is the implicit default "-net user -net nic" rather than one specified by the user (this will only kick in for boards with no NIC or if CONFIG_SLIRP is not set) * Diagnose the case where the user asked for NICs which the board didn't instantiate (for example where the user asked for two NICs but the board only supports one) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
e6b3c8ca02
commit
f68b9d672b
31
net.c
31
net.c
|
@ -1305,6 +1305,22 @@ void net_check_clients(void)
|
||||||
{
|
{
|
||||||
VLANState *vlan;
|
VLANState *vlan;
|
||||||
VLANClientState *vc;
|
VLANClientState *vc;
|
||||||
|
int seen_nics = 0;
|
||||||
|
|
||||||
|
/* Don't warn about the default network setup that you get if
|
||||||
|
* no command line -net options are specified. There are two
|
||||||
|
* cases that we would otherwise complain about:
|
||||||
|
* (1) board doesn't support a NIC but the implicit "-net nic"
|
||||||
|
* requested one; we'd otherwise complain about more NICs being
|
||||||
|
* specified than we support, and also that the vlan set up by
|
||||||
|
* the implicit "-net user" didn't have any NICs connected to it
|
||||||
|
* (2) CONFIG_SLIRP not set: we'd otherwise complain about the
|
||||||
|
* implicit "-net nic" setting up a nic that wasn't connected to
|
||||||
|
* anything.
|
||||||
|
*/
|
||||||
|
if (default_net) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QTAILQ_FOREACH(vlan, &vlans, next) {
|
QTAILQ_FOREACH(vlan, &vlans, next) {
|
||||||
int has_nic = 0, has_host_dev = 0;
|
int has_nic = 0, has_host_dev = 0;
|
||||||
|
@ -1312,6 +1328,7 @@ void net_check_clients(void)
|
||||||
QTAILQ_FOREACH(vc, &vlan->clients, next) {
|
QTAILQ_FOREACH(vc, &vlan->clients, next) {
|
||||||
switch (vc->info->type) {
|
switch (vc->info->type) {
|
||||||
case NET_CLIENT_TYPE_NIC:
|
case NET_CLIENT_TYPE_NIC:
|
||||||
|
seen_nics++;
|
||||||
has_nic = 1;
|
has_nic = 1;
|
||||||
break;
|
break;
|
||||||
case NET_CLIENT_TYPE_SLIRP:
|
case NET_CLIENT_TYPE_SLIRP:
|
||||||
|
@ -1331,12 +1348,26 @@ void net_check_clients(void)
|
||||||
vlan->id);
|
vlan->id);
|
||||||
}
|
}
|
||||||
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
|
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
|
||||||
|
if (vc->info->type == NET_CLIENT_TYPE_NIC) {
|
||||||
|
seen_nics++;
|
||||||
|
}
|
||||||
if (!vc->peer) {
|
if (!vc->peer) {
|
||||||
fprintf(stderr, "Warning: %s %s has no peer\n",
|
fprintf(stderr, "Warning: %s %s has no peer\n",
|
||||||
vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
|
vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
|
||||||
vc->name);
|
vc->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (seen_nics != nb_nics) {
|
||||||
|
/* Number of NICs requested by user on command line doesn't match
|
||||||
|
* the number the model actually registered with us.
|
||||||
|
* This will generally only happen for models of embedded boards
|
||||||
|
* with no PCI bus or similar. PCI based machines can instantiate
|
||||||
|
* all requested NICs as PCI devices but usually embedded boards
|
||||||
|
* only have a single NIC.
|
||||||
|
*/
|
||||||
|
fprintf(stderr, "Warning: more nics requested than this machine "
|
||||||
|
"supports; some have been ignored\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int net_init_client(QemuOpts *opts, void *dummy)
|
static int net_init_client(QemuOpts *opts, void *dummy)
|
||||||
|
|
Loading…
Reference in New Issue