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