diff options
author | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-07-29 13:16:31 +0000 |
---|---|---|
committer | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-07-29 13:16:31 +0000 |
commit | 9ad97e65034ad8da566ca3fdecc4920ed4783681 (patch) | |
tree | 04410db2c6419fd8eb75f237d40cce25c8b52c0d /vl.c | |
parent | 2fa7d3bf59e5f25dd60d46dfd63aa9c56f09b91d (diff) | |
download | qemu-9ad97e65034ad8da566ca3fdecc4920ed4783681.zip qemu-9ad97e65034ad8da566ca3fdecc4920ed4783681.tar.gz qemu-9ad97e65034ad8da566ca3fdecc4920ed4783681.tar.bz2 |
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
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 51 |
1 files changed, 28 insertions, 23 deletions
@@ -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", |