diff options
-rw-r--r-- | qemu-doc.texi | 18 | ||||
-rw-r--r-- | vl.c | 51 |
2 files changed, 36 insertions, 33 deletions
diff --git a/qemu-doc.texi b/qemu-doc.texi index eb29a9f..636d819 100644 --- a/qemu-doc.texi +++ b/qemu-doc.texi @@ -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 -@example -qemu -net user,vlan=1 -net nic,model=usb,vlan=1 -usbdevice net:0 [...OPTIONS...] +@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 [...OPTIONS...] -net user,vlan=0 -usbdevice net:vlan=0 @end example Currently this cannot be used in machines that support PCI NICs. @end table @@ -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", |