Commit 9ad97e65034ad8da566ca3fdecc4920ed4783681

Authored by balrog
1 parent 2fa7d3bf

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
Showing 2 changed files with 36 additions and 33 deletions
qemu-doc.texi
@@ -567,7 +567,7 @@ available devices. @@ -567,7 +567,7 @@ available devices.
567 Braille device. This will use BrlAPI to display the braille output on a real 567 Braille device. This will use BrlAPI to display the braille output on a real
568 or fake device. 568 or fake device.
569 569
570 -@item net:nic_num 570 +@item net:options
571 Network adapter that supports CDC ethernet and RNDIS protocols. 571 Network adapter that supports CDC ethernet and RNDIS protocols.
572 572
573 @end table 573 @end table
@@ -587,7 +587,7 @@ Qemu can emulate several different models of network card. @@ -587,7 +587,7 @@ Qemu can emulate several different models of network card.
587 Valid values for @var{type} are 587 Valid values for @var{type} are
588 @code{i82551}, @code{i82557b}, @code{i82559er}, 588 @code{i82551}, @code{i82557b}, @code{i82559er},
589 @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139}, 589 @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139},
590 -@code{e1000}, @code{smc91c111}, @code{lance}, @code{mcf_fec} and @code{usb}. 590 +@code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}.
591 Not all devices are supported on all targets. Use -net nic,model=? 591 Not all devices are supported on all targets. Use -net nic,model=?
592 for a list of available devices for your target. 592 for a list of available devices for your target.
593 593
@@ -1725,14 +1725,12 @@ serial converter, faking a Matrix Orbital LCD Display (USB ID 0403:FA00). @@ -1725,14 +1725,12 @@ serial converter, faking a Matrix Orbital LCD Display (USB ID 0403:FA00).
1725 @item braille 1725 @item braille
1726 Braille device. This will use BrlAPI to display the braille output on a real 1726 Braille device. This will use BrlAPI to display the braille output on a real
1727 or fake device. 1727 or fake device.
1728 -@item net:@var{nic_num}  
1729 -Network adapter that supports CDC ethernet and RNDIS protocols. This must be  
1730 -used together with the @code{-net nic,model=usb,...} option (see description),  
1731 -where @var{nic_num} specifies the index of the @code{-net nic,...} option  
1732 -describing the interface (zero-based).  
1733 -For instance, user-mode networking can be used by specifying  
1734 -@example  
1735 -qemu -net user,vlan=1 -net nic,model=usb,vlan=1 -usbdevice net:0 [...OPTIONS...] 1728 +@item net:@var{options}
  1729 +Network adapter that supports CDC ethernet and RNDIS protocols. @var{options}
  1730 +specifies NIC options as with @code{-net nic,}@var{options} (see description).
  1731 +For instance, user-mode networking can be used with
  1732 +@example
  1733 +qemu [...OPTIONS...] -net user,vlan=0 -usbdevice net:vlan=0
1736 @end example 1734 @end example
1737 Currently this cannot be used in machines that support PCI NICs. 1735 Currently this cannot be used in machines that support PCI NICs.
1738 @end table 1736 @end table
@@ -5138,26 +5138,12 @@ static int check_params(char *buf, int buf_size, @@ -5138,26 +5138,12 @@ static int check_params(char *buf, int buf_size,
5138 return 0; 5138 return 0;
5139 } 5139 }
5140 5140
5141 -  
5142 -static int net_client_init(const char *str) 5141 +static int net_client_init(const char *device, const char *p)
5143 { 5142 {
5144 - const char *p;  
5145 - char *q;  
5146 - char device[64];  
5147 char buf[1024]; 5143 char buf[1024];
5148 int vlan_id, ret; 5144 int vlan_id, ret;
5149 VLANState *vlan; 5145 VLANState *vlan;
5150 5146
5151 - p = str;  
5152 - q = device;  
5153 - while (*p != '\0' && *p != ',') {  
5154 - if ((q - device) < sizeof(device) - 1)  
5155 - *q++ = *p;  
5156 - p++;  
5157 - }  
5158 - *q = '\0';  
5159 - if (*p == ',')  
5160 - p++;  
5161 vlan_id = 0; 5147 vlan_id = 0;
5162 if (get_param_value(buf, sizeof(buf), "vlan", p)) { 5148 if (get_param_value(buf, sizeof(buf), "vlan", p)) {
5163 vlan_id = strtol(buf, NULL, 0); 5149 vlan_id = strtol(buf, NULL, 0);
@@ -5302,6 +5288,26 @@ static int net_client_init(const char *str) @@ -5302,6 +5288,26 @@ static int net_client_init(const char *str)
5302 return ret; 5288 return ret;
5303 } 5289 }
5304 5290
  5291 +static int net_client_parse(const char *str)
  5292 +{
  5293 + const char *p;
  5294 + char *q;
  5295 + char device[64];
  5296 +
  5297 + p = str;
  5298 + q = device;
  5299 + while (*p != '\0' && *p != ',') {
  5300 + if ((q - device) < sizeof(device) - 1)
  5301 + *q++ = *p;
  5302 + p++;
  5303 + }
  5304 + *q = '\0';
  5305 + if (*p == ',')
  5306 + p++;
  5307 +
  5308 + return net_client_init(device, p);
  5309 +}
  5310 +
5305 void do_info_network(void) 5311 void do_info_network(void)
5306 { 5312 {
5307 VLANState *vlan; 5313 VLANState *vlan;
@@ -5734,11 +5740,12 @@ static int usb_device_add(const char *devname) @@ -5734,11 +5740,12 @@ static int usb_device_add(const char *devname)
5734 dev = usb_baum_init(); 5740 dev = usb_baum_init();
5735 #endif 5741 #endif
5736 } else if (strstart(devname, "net:", &p)) { 5742 } else if (strstart(devname, "net:", &p)) {
5737 - int nicidx = strtoul(p, NULL, 0); 5743 + int nic = nb_nics;
5738 5744
5739 - if (nicidx >= nb_nics || strcmp(nd_table[nicidx].model, "usb")) 5745 + if (net_client_init("nic", p) < 0)
5740 return -1; 5746 return -1;
5741 - dev = usb_net_init(&nd_table[nicidx]); 5747 + nd_table[nic].model = "usb";
  5748 + dev = usb_net_init(&nd_table[nic]);
5742 } else { 5749 } else {
5743 return -1; 5750 return -1;
5744 } 5751 }
@@ -8887,16 +8894,14 @@ int main(int argc, char **argv) @@ -8887,16 +8894,14 @@ int main(int argc, char **argv)
8887 } 8894 }
8888 8895
8889 for(i = 0;i < nb_net_clients; i++) { 8896 for(i = 0;i < nb_net_clients; i++) {
8890 - if (net_client_init(net_clients[i]) < 0) 8897 + if (net_client_parse(net_clients[i]) < 0)
8891 exit(1); 8898 exit(1);
8892 } 8899 }
8893 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) { 8900 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
8894 if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0) 8901 if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
8895 continue; 8902 continue;
8896 - if (vlan->nb_guest_devs == 0) {  
8897 - fprintf(stderr, "Invalid vlan (%d) with no nics\n", vlan->id);  
8898 - exit(1);  
8899 - } 8903 + if (vlan->nb_guest_devs == 0)
  8904 + fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
8900 if (vlan->nb_host_devs == 0) 8905 if (vlan->nb_host_devs == 0)
8901 fprintf(stderr, 8906 fprintf(stderr,
8902 "Warning: vlan %d is not connected to host network\n", 8907 "Warning: vlan %d is not connected to host network\n",