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;
|
||||
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) {
|
||||
int has_nic = 0, has_host_dev = 0;
|
||||
|
@ -1312,6 +1328,7 @@ void net_check_clients(void)
|
|||
QTAILQ_FOREACH(vc, &vlan->clients, next) {
|
||||
switch (vc->info->type) {
|
||||
case NET_CLIENT_TYPE_NIC:
|
||||
seen_nics++;
|
||||
has_nic = 1;
|
||||
break;
|
||||
case NET_CLIENT_TYPE_SLIRP:
|
||||
|
@ -1331,12 +1348,26 @@ void net_check_clients(void)
|
|||
vlan->id);
|
||||
}
|
||||
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
|
||||
if (vc->info->type == NET_CLIENT_TYPE_NIC) {
|
||||
seen_nics++;
|
||||
}
|
||||
if (!vc->peer) {
|
||||
fprintf(stderr, "Warning: %s %s has no peer\n",
|
||||
vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue