summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Gulewich <robert.gulewich@joyent.com>2011-09-12 00:03:43 -0700
committerRob Gulewich <robert.gulewich@joyent.com>2011-09-12 00:03:43 -0700
commit602f73b132f8ac9efb1202cf51f07267cbc69912 (patch)
treea1165da7b08a2d35246f2bc41d4e680ada64a159
parent0ab4c4028b301554eb52a23d9c89fc735f4bc844 (diff)
downloadillumos-kvm-cmd-602f73b132f8ac9efb1202cf51f07267cbc69912.tar.gz
[PROV-1188] VMs boot with multiple default routes
-rw-r--r--net/vnic-dhcp.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/net/vnic-dhcp.c b/net/vnic-dhcp.c
index 9806055..a8ef72c 100644
--- a/net/vnic-dhcp.c
+++ b/net/vnic-dhcp.c
@@ -427,10 +427,12 @@ populate_dhcp_reply(const struct bootp_t *bp, struct bootp_t *rbp,
q += 4;
// default gw
- *q++ = RFC1533_GATEWAY;
- *q++ = 4;
- memcpy(q, &vdsp->vnds_gw_addr, sizeof(struct in_addr));
- q += 4;
+ if (vdsp->vnds_gw_addr.s_addr != 0) {
+ *q++ = RFC1533_GATEWAY;
+ *q++ = 4;
+ memcpy(q, &vdsp->vnds_gw_addr, sizeof(struct in_addr));
+ q += 4;
+ }
// dns server list
*q++ = RFC1533_DNS;
@@ -448,10 +450,12 @@ populate_dhcp_reply(const struct bootp_t *bp, struct bootp_t *rbp,
// hostname
val = strlen(vdsp->vnds_client_hostname);
- *q++ = RFC1533_HOSTNAME;
- *q++ = val;
- memcpy(q, &vdsp->vnds_client_hostname, val);
- q += val;
+ if (val > 0) {
+ *q++ = RFC1533_HOSTNAME;
+ *q++ = val;
+ memcpy(q, &vdsp->vnds_client_hostname, val);
+ q += val;
+ }
} else {
static const char nak_msg[] = "requested address not available";
@@ -676,8 +680,9 @@ vnic_dhcp_init(VNICDHCPState *vdsp, QemuOpts *opts)
}
}
- if (!qemu_ip_opt(opts, "gateway_ip", &(vdsp->vnds_gw_addr), 1))
- return (0);
+ if (!qemu_ip_opt(opts, "gateway_ip", &(vdsp->vnds_gw_addr), 0)) {
+ vdsp->vnds_gw_addr.s_addr = 0;
+ }
if ((ret = qemu_ip_opt(opts, "dns_ip", &(vdsp->vnds_dns_addrs[0]), 0)) != 0) {
if (ret == -1)
@@ -696,12 +701,6 @@ vnic_dhcp_init(VNICDHCPState *vdsp, QemuOpts *opts)
}
num_dns_servers = i + 1;
}
-
- if (num_dns_servers == 0) {
- /* default DNS server */
- inet_pton(AF_INET, "8.8.8.8", &(vdsp->vnds_dns_addrs[0]));
- num_dns_servers = 1;
- }
vdsp->vnds_num_dns_addrs = num_dns_servers;
if ((hostname = qemu_opt_get(opts, "hostname")) != NULL) {