Re: [PATCH] The kernel gets no IP from some DHCP servers, 2.6.24

From: Frans Pop
Date: Thu Feb 21 2008 - 18:42:12 EST


Adding netdev list.
Original patch can be found at: http://lkml.org/lkml/2008/2/21/171

Wappler Marcel wrote:
> This patch fixes a DHCP issue of the kernel: some DHCP servers
> (i.e. in the Linksys WRT54Gv5) are very strict about the contents
> of the DHCPDISCOVER packet they receive from clients. Table 5 in RFC2131
> page 36 requests the fields 'ciaddr' and 'siaddr' MUST be set to '0'.
> These DHCP servers ignore Linux kernel's DHCP discovery packets with these
> two fields set to '255.255.255.255' (in contrast to popular DHCP clients,
> such as 'dhclient' or 'udhcpc'). This leads to a not booting system.
> I tested this on a ARM embedded device mounting rootfs over NFS obtaining
> its IP from a Linksys WRT54Gv5 Router running VxWorks and a PC based
> Server running a Linux. Changing the two fields to '0.0.0.0' worked.
>
> Please CC me personaly when answering this message.
>
> Thanks,
> Marcel
>
> --- linux-2.6.24.2/net/ipv4/ipconfig.c 2008-02-21 15:27:47.250890963 +0100
> +++ linux/net/ipv4/ipconfig.c 2008-02-21 15:36:12.686735925 +0100
> @@ -29,6 +29,10 @@
> *
> * Multiple Nameservers in /proc/net/pnp
> * -- Josef Siemes <jsiemes@xxxxxx>, Aug 2002
> + *
> + * Bugfix: Not getting an IP from some DHCP servers: RFC2131 page 36
> + * Table 5 requests DHCPDISCOVER fields ciaddr and siaddr MUST be '0'.
> + * -- marcel.wappler@xxxxxxxxxxxx
> */
>
> #include <linux/types.h>
> @@ -103,6 +107,7 @@
> - '3' from resolv.h */
>
> #define NONE __constant_htonl(INADDR_NONE)
> +#define ZERO __constant_htonl(((unsigned long int) 0x00000000))
>
> /*
> * Public IP configuration
> @@ -740,8 +745,8 @@
> b->htype = dev->type; /* can cause undefined behavior */
> }
> b->hlen = dev->addr_len;
> - b->your_ip = NONE;
> - b->server_ip = NONE;
> + b->your_ip = ZERO;
> + b->server_ip = ZERO;
> memcpy(b->hw_addr, dev->dev_addr, dev->addr_len);
> b->secs = htons(jiffies_diff / HZ);
> b->xid = d->xid;
>
> --
> Marcel Wappler
> Bridgeco AG
> CH-8600 Dübendorf
> Switzerland
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/