From 64c4214b7a3fb6a04a07e23ddff2b304862d7fb5 Mon Sep 17 00:00:00 2001 From: cyrus Date: Thu, 29 May 2014 10:35:34 +0000 Subject: [PATCH] busybox: udhcpc source IP rebind patch MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Patch sets the source IP address of DHCP request messages during rebind to the IP address assigned to the udhcpc client. Source address 0.0.0.0 can only be used by a client prior to obtaining its IP address (see RFC2131 § 4.1). Source IP address behavior lines up now with the ISC dhcp client implementation for DHCP request messages during rebind and DHCP release messages. Signed-off-by: Hans Dedecker git-svn-id: svn://svn.openwrt.org/openwrt/trunk@40878 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../busybox/patches/204-udhcpc_src_ip_rebind.patch | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch diff --git a/package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch b/package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch new file mode 100644 index 0000000000..6da568a914 --- /dev/null +++ b/package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch @@ -0,0 +1,53 @@ +Index: busybox-1.22.1/networking/udhcp/dhcpc.c +=================================================================== +--- busybox-1.22.1.orig/networking/udhcp/dhcpc.c ++++ busybox-1.22.1/networking/udhcp/dhcpc.c +@@ -659,10 +659,10 @@ static void add_client_options(struct dh + * client reverts to using the IP broadcast address. + */ + +-static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet) ++static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet, uint32_t src_nip) + { + return udhcp_send_raw_packet(packet, +- /*src*/ INADDR_ANY, CLIENT_PORT, ++ /*src*/ src_nip, CLIENT_PORT, + /*dst*/ INADDR_BROADCAST, SERVER_PORT, MAC_BCAST_ADDR, + client_config.ifindex); + } +@@ -673,7 +673,7 @@ static int bcast_or_ucast(struct dhcp_pa + return udhcp_send_kernel_packet(packet, + ciaddr, CLIENT_PORT, + server, SERVER_PORT); +- return raw_bcast_from_client_config_ifindex(packet); ++ return raw_bcast_from_client_config_ifindex(packet, ciaddr); + } + + /* Broadcast a DHCP discover packet to the network, with an optionally requested IP */ +@@ -701,7 +701,7 @@ static NOINLINE int send_discover(uint32 + + if (msgs++ < 3) + bb_info_msg("Sending discover..."); +- return raw_bcast_from_client_config_ifindex(&packet); ++ return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY); + } + + /* Broadcast a DHCP request message */ +@@ -745,7 +745,7 @@ static NOINLINE int send_select(uint32_t + + addr.s_addr = requested; + bb_info_msg("Sending select for %s...", inet_ntoa(addr)); +- return raw_bcast_from_client_config_ifindex(&packet); ++ return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY); + } + + /* Unicast or broadcast a DHCP renew message */ +@@ -813,7 +813,7 @@ static NOINLINE int send_decline(/*uint3 + udhcp_add_simple_option(&packet, DHCP_SERVER_ID, server); + + bb_info_msg("Sending decline..."); +- return raw_bcast_from_client_config_ifindex(&packet); ++ return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY); + } + #endif + -- 2.11.0