aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>2017-01-24 10:05:12 -0500
committerBen Hutchings <ben@decadent.org.uk>2019-01-02 03:08:04 +0000
commit8cb2792d8f7317c336ccc98f99199ae579ac84c6 (patch)
treec10b3b5462ee515863d761d2416986cec0976129
parent10059fddba9f8bec6aeb0d37d217df6d65e64c3b (diff)
downloadklibc-8cb2792d8f7317c336ccc98f99199ae579ac84c6.tar.gz
[klibc] ipconfig: Set broadcast when sending DHCPREQUEST and DHCPDISCOVER
We need to do this, since our devices are probably not configured yet and there may be more than one device we're trying to do DHCP on on the same network. Otherwise, things might be dropped. Patch is originally from here: https://bugs.launchpad.net/ubuntu/+source/klibc/+bug/1327412/comments/5 ... but the reporter "patpat" has not provided contact information, and this is independently verifiable by looking at RFC 2131, section 4.1, page 24. References: https://bugs.debian.org/733988 References: https://bugs.launchpad.net/bugs/1327412 Link: https://www.zytor.com/pipermail/klibc/2017-December/003974.html Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--usr/kinit/ipconfig/dhcp_proto.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/usr/kinit/ipconfig/dhcp_proto.c b/usr/kinit/ipconfig/dhcp_proto.c
index ebf79cc0b5f71..d5b759bbc16ba 100644
--- a/usr/kinit/ipconfig/dhcp_proto.c
+++ b/usr/kinit/ipconfig/dhcp_proto.c
@@ -201,8 +201,14 @@ static int dhcp_send(struct netdev *dev, struct iovec *vec)
bootp.hlen = dev->hwlen;
bootp.xid = dev->bootp.xid;
bootp.ciaddr = INADDR_ANY;
- bootp.yiaddr = dev->ip_addr;
+ /* yiaddr should always be set to 0 for the messages we're likely
+ * to send as a DHCP client: DHCPDISCOVER, DHCPREQUEST, DHCPDECLINE,
+ * DHCPINFORM, DHCPRELEASE
+ * cf. RFC2131 section 4.1.1, table 5.
+ */
+ bootp.yiaddr = INADDR_ANY;
bootp.giaddr = INADDR_ANY;
+ bootp.flags = htons(0x8000);
bootp.secs = htons(time(NULL) - dev->open_time);
memcpy(bootp.chaddr, dev->hwaddr, 16);