aboutsummaryrefslogtreecommitdiffstats
path: root/package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch')
-rw-r--r--package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch51
1 files changed, 51 insertions, 0 deletions
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 0000000..21fec51
--- /dev/null
+++ b/package/utils/busybox/patches/204-udhcpc_src_ip_rebind.patch
@@ -0,0 +1,51 @@
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -673,10 +673,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);
+ }
+@@ -687,7 +687,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 */
+@@ -715,7 +715,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 */
+@@ -759,7 +759,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 */
+@@ -827,7 +827,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
+