Commit 833c7174ce5145397d2b3405f6857ca607fed1f1

Authored by blueswir1
1 parent 1b2e93c1

Improved sanity checking to -net options


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2877 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 19 additions and 0 deletions
@@ -4197,6 +4197,7 @@ static int net_client_init(const char *str) @@ -4197,6 +4197,7 @@ static int net_client_init(const char *str)
4197 } 4197 }
4198 nd->vlan = vlan; 4198 nd->vlan = vlan;
4199 nb_nics++; 4199 nb_nics++;
  4200 + vlan->nb_guest_devs++;
4200 ret = 0; 4201 ret = 0;
4201 } else 4202 } else
4202 if (!strcmp(device, "none")) { 4203 if (!strcmp(device, "none")) {
@@ -4209,6 +4210,7 @@ static int net_client_init(const char *str) @@ -4209,6 +4210,7 @@ static int net_client_init(const char *str)
4209 if (get_param_value(buf, sizeof(buf), "hostname", p)) { 4210 if (get_param_value(buf, sizeof(buf), "hostname", p)) {
4210 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf); 4211 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
4211 } 4212 }
  4213 + vlan->nb_host_devs++;
4212 ret = net_slirp_init(vlan); 4214 ret = net_slirp_init(vlan);
4213 } else 4215 } else
4214 #endif 4216 #endif
@@ -4219,6 +4221,7 @@ static int net_client_init(const char *str) @@ -4219,6 +4221,7 @@ static int net_client_init(const char *str)
4219 fprintf(stderr, "tap: no interface name\n"); 4221 fprintf(stderr, "tap: no interface name\n");
4220 return -1; 4222 return -1;
4221 } 4223 }
  4224 + vlan->nb_host_devs++;
4222 ret = tap_win32_init(vlan, ifname); 4225 ret = tap_win32_init(vlan, ifname);
4223 } else 4226 } else
4224 #else 4227 #else
@@ -4238,6 +4241,7 @@ static int net_client_init(const char *str) @@ -4238,6 +4241,7 @@ static int net_client_init(const char *str)
4238 if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) { 4241 if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
4239 pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT); 4242 pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
4240 } 4243 }
  4244 + vlan->nb_host_devs++;
4241 ret = net_tap_init(vlan, ifname, setup_script); 4245 ret = net_tap_init(vlan, ifname, setup_script);
4242 } 4246 }
4243 } else 4247 } else
@@ -4259,6 +4263,7 @@ static int net_client_init(const char *str) @@ -4259,6 +4263,7 @@ static int net_client_init(const char *str)
4259 fprintf(stderr, "Unknown socket options: %s\n", p); 4263 fprintf(stderr, "Unknown socket options: %s\n", p);
4260 return -1; 4264 return -1;
4261 } 4265 }
  4266 + vlan->nb_host_devs++;
4262 } else 4267 } else
4263 { 4268 {
4264 fprintf(stderr, "Unknown network device: %s\n", device); 4269 fprintf(stderr, "Unknown network device: %s\n", device);
@@ -7131,6 +7136,7 @@ int main(int argc, char **argv) @@ -7131,6 +7136,7 @@ int main(int argc, char **argv)
7131 int usb_devices_index; 7136 int usb_devices_index;
7132 int fds[2]; 7137 int fds[2];
7133 const char *pid_file = NULL; 7138 const char *pid_file = NULL;
  7139 + VLANState *vlan;
7134 7140
7135 LIST_INIT (&vm_change_state_head); 7141 LIST_INIT (&vm_change_state_head);
7136 #ifndef _WIN32 7142 #ifndef _WIN32
@@ -7750,6 +7756,18 @@ int main(int argc, char **argv) @@ -7750,6 +7756,18 @@ int main(int argc, char **argv)
7750 if (net_client_init(net_clients[i]) < 0) 7756 if (net_client_init(net_clients[i]) < 0)
7751 exit(1); 7757 exit(1);
7752 } 7758 }
  7759 + for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
  7760 + if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
  7761 + continue;
  7762 + if (vlan->nb_guest_devs == 0) {
  7763 + fprintf(stderr, "Invalid vlan (%d) with no nics\n", vlan->id);
  7764 + exit(1);
  7765 + }
  7766 + if (vlan->nb_host_devs == 0)
  7767 + fprintf(stderr,
  7768 + "Warning: vlan %d is not connected to host network\n",
  7769 + vlan->id);
  7770 + }
7753 7771
7754 #ifdef TARGET_I386 7772 #ifdef TARGET_I386
7755 if (boot_device == 'n') { 7773 if (boot_device == 'n') {
@@ -389,6 +389,7 @@ typedef struct VLANState { @@ -389,6 +389,7 @@ typedef struct VLANState {
389 int id; 389 int id;
390 VLANClientState *first_client; 390 VLANClientState *first_client;
391 struct VLANState *next; 391 struct VLANState *next;
  392 + unsigned int nb_guest_devs, nb_host_devs;
392 } VLANState; 393 } VLANState;
393 394
394 VLANState *qemu_find_vlan(int id); 395 VLANState *qemu_find_vlan(int id);