Simplify -usbdevice net: syntax, allow VLANs with no NICs.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4965 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									2fa7d3bf59
								
							
						
					
					
						commit
						9ad97e6503
					
				| 
						 | 
				
			
			@ -567,7 +567,7 @@ available devices.
 | 
			
		|||
Braille device.  This will use BrlAPI to display the braille output on a real
 | 
			
		||||
or fake device.
 | 
			
		||||
 | 
			
		||||
@item net:nic_num
 | 
			
		||||
@item net:options
 | 
			
		||||
Network adapter that supports CDC ethernet and RNDIS protocols.
 | 
			
		||||
 | 
			
		||||
@end table
 | 
			
		||||
| 
						 | 
				
			
			@ -587,7 +587,7 @@ Qemu can emulate several different models of network card.
 | 
			
		|||
Valid values for @var{type} are
 | 
			
		||||
@code{i82551}, @code{i82557b}, @code{i82559er},
 | 
			
		||||
@code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139},
 | 
			
		||||
@code{e1000}, @code{smc91c111}, @code{lance}, @code{mcf_fec} and @code{usb}.
 | 
			
		||||
@code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}.
 | 
			
		||||
Not all devices are supported on all targets.  Use -net nic,model=?
 | 
			
		||||
for a list of available devices for your target.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1725,14 +1725,12 @@ serial converter, faking a Matrix Orbital LCD Display (USB ID 0403:FA00).
 | 
			
		|||
@item braille
 | 
			
		||||
Braille device.  This will use BrlAPI to display the braille output on a real
 | 
			
		||||
or fake device.
 | 
			
		||||
@item net:@var{nic_num}
 | 
			
		||||
Network adapter that supports CDC ethernet and RNDIS protocols.  This must be
 | 
			
		||||
used together with the @code{-net nic,model=usb,...} option (see description),
 | 
			
		||||
where @var{nic_num} specifies the index of the @code{-net nic,...} option
 | 
			
		||||
describing the interface (zero-based).
 | 
			
		||||
For instance, user-mode networking can be used by specifying
 | 
			
		||||
@item net:@var{options}
 | 
			
		||||
Network adapter that supports CDC ethernet and RNDIS protocols.  @var{options}
 | 
			
		||||
specifies NIC options as with @code{-net nic,}@var{options} (see description).
 | 
			
		||||
For instance, user-mode networking can be used with
 | 
			
		||||
@example
 | 
			
		||||
qemu -net user,vlan=1 -net nic,model=usb,vlan=1 -usbdevice net:0 [...OPTIONS...]
 | 
			
		||||
qemu [...OPTIONS...] -net user,vlan=0 -usbdevice net:vlan=0
 | 
			
		||||
@end example
 | 
			
		||||
Currently this cannot be used in machines that support PCI NICs.
 | 
			
		||||
@end table
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										51
									
								
								vl.c
								
								
								
								
							
							
						
						
									
										51
									
								
								vl.c
								
								
								
								
							| 
						 | 
				
			
			@ -5138,26 +5138,12 @@ static int check_params(char *buf, int buf_size,
 | 
			
		|||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int net_client_init(const char *str)
 | 
			
		||||
static int net_client_init(const char *device, const char *p)
 | 
			
		||||
{
 | 
			
		||||
    const char *p;
 | 
			
		||||
    char *q;
 | 
			
		||||
    char device[64];
 | 
			
		||||
    char buf[1024];
 | 
			
		||||
    int vlan_id, ret;
 | 
			
		||||
    VLANState *vlan;
 | 
			
		||||
 | 
			
		||||
    p = str;
 | 
			
		||||
    q = device;
 | 
			
		||||
    while (*p != '\0' && *p != ',') {
 | 
			
		||||
        if ((q - device) < sizeof(device) - 1)
 | 
			
		||||
            *q++ = *p;
 | 
			
		||||
        p++;
 | 
			
		||||
    }
 | 
			
		||||
    *q = '\0';
 | 
			
		||||
    if (*p == ',')
 | 
			
		||||
        p++;
 | 
			
		||||
    vlan_id = 0;
 | 
			
		||||
    if (get_param_value(buf, sizeof(buf), "vlan", p)) {
 | 
			
		||||
        vlan_id = strtol(buf, NULL, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -5302,6 +5288,26 @@ static int net_client_init(const char *str)
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int net_client_parse(const char *str)
 | 
			
		||||
{
 | 
			
		||||
    const char *p;
 | 
			
		||||
    char *q;
 | 
			
		||||
    char device[64];
 | 
			
		||||
 | 
			
		||||
    p = str;
 | 
			
		||||
    q = device;
 | 
			
		||||
    while (*p != '\0' && *p != ',') {
 | 
			
		||||
        if ((q - device) < sizeof(device) - 1)
 | 
			
		||||
            *q++ = *p;
 | 
			
		||||
        p++;
 | 
			
		||||
    }
 | 
			
		||||
    *q = '\0';
 | 
			
		||||
    if (*p == ',')
 | 
			
		||||
        p++;
 | 
			
		||||
 | 
			
		||||
    return net_client_init(device, p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void do_info_network(void)
 | 
			
		||||
{
 | 
			
		||||
    VLANState *vlan;
 | 
			
		||||
| 
						 | 
				
			
			@ -5734,11 +5740,12 @@ static int usb_device_add(const char *devname)
 | 
			
		|||
        dev = usb_baum_init();
 | 
			
		||||
#endif
 | 
			
		||||
    } else if (strstart(devname, "net:", &p)) {
 | 
			
		||||
        int nicidx = strtoul(p, NULL, 0);
 | 
			
		||||
        int nic = nb_nics;
 | 
			
		||||
 | 
			
		||||
        if (nicidx >= nb_nics || strcmp(nd_table[nicidx].model, "usb"))
 | 
			
		||||
        if (net_client_init("nic", p) < 0)
 | 
			
		||||
            return -1;
 | 
			
		||||
        dev = usb_net_init(&nd_table[nicidx]);
 | 
			
		||||
        nd_table[nic].model = "usb";
 | 
			
		||||
        dev = usb_net_init(&nd_table[nic]);
 | 
			
		||||
    } else {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -8887,16 +8894,14 @@ int main(int argc, char **argv)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    for(i = 0;i < nb_net_clients; i++) {
 | 
			
		||||
        if (net_client_init(net_clients[i]) < 0)
 | 
			
		||||
        if (net_client_parse(net_clients[i]) < 0)
 | 
			
		||||
            exit(1);
 | 
			
		||||
    }
 | 
			
		||||
    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
 | 
			
		||||
        if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
 | 
			
		||||
            continue;
 | 
			
		||||
        if (vlan->nb_guest_devs == 0) {
 | 
			
		||||
            fprintf(stderr, "Invalid vlan (%d) with no nics\n", vlan->id);
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
        if (vlan->nb_guest_devs == 0)
 | 
			
		||||
            fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
 | 
			
		||||
        if (vlan->nb_host_devs == 0)
 | 
			
		||||
            fprintf(stderr,
 | 
			
		||||
                    "Warning: vlan %d is not connected to host network\n",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue