118 lines
3.3 KiB
Diff
118 lines
3.3 KiB
Diff
Upstream-Status: Pending
|
|
|
|
Add a new option -D to the udhcpc client that allows for
|
|
dhcp renewal to occur without having to down the interface
|
|
in the process.
|
|
|
|
Signed-off-by: Greg Moffatt <greg.moffatt@windriver.com>
|
|
|
|
Updated to latest Busybox 1.17.3
|
|
|
|
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
|
|
|
Updated to Busybox 1.18.4
|
|
option spec is changed
|
|
|
|
Signed-off-by: Qing He <qing.he@intel.com>
|
|
|
|
diff -ur busybox-1.17.3.orig/networking/udhcp/dhcpc.c busybox-1.17.3/networking/udhcp/dhcpc.c
|
|
--- busybox-1.17.3.orig/networking/udhcp/dhcpc.c
|
|
+++ busybox-1.17.3/networking/udhcp/dhcpc.c
|
|
@@ -35,6 +35,9 @@
|
|
#endif
|
|
#include <linux/filter.h>
|
|
|
|
+/* option whether to down the interface when reconfiguring */
|
|
+static int allow_deconfig = 1;
|
|
+
|
|
/* struct client_config_t client_config is in bb_common_bufsiz1 */
|
|
|
|
|
|
@@ -709,7 +712,8 @@
|
|
state = RENEW_REQUESTED;
|
|
break;
|
|
case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
case REQUESTING:
|
|
case RELEASED:
|
|
change_listen_mode(LISTEN_RAW);
|
|
@@ -733,7 +737,8 @@
|
|
bb_info_msg("Unicasting a release of %s to %s",
|
|
inet_ntoa(temp_addr), buffer);
|
|
send_release(server_addr, requested_ip); /* unicast */
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
}
|
|
bb_info_msg("Entering released state");
|
|
|
|
@@ -836,6 +841,7 @@
|
|
OPT_o = 1 << 17,
|
|
OPT_x = 1 << 18,
|
|
OPT_f = 1 << 19,
|
|
+ OPT_D = 1 << 20,
|
|
/* The rest has variable bit positions, need to be clever */
|
|
OPTBIT_f = 20,
|
|
USE_FOR_MMU( OPTBIT_b,)
|
|
@@ -861,7 +867,7 @@
|
|
#endif
|
|
;
|
|
IF_LONG_OPTS(applet_long_options = udhcpc_longopts;)
|
|
- opt = getopt32(argv, "CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:f"
|
|
+ opt = getopt32(argv, "CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:fD"
|
|
USE_FOR_MMU("b")
|
|
IF_FEATURE_UDHCPC_ARPING("a")
|
|
IF_FEATURE_UDHCP_PORT("P:")
|
|
@@ -950,6 +956,9 @@
|
|
logmode |= LOGMODE_SYSLOG;
|
|
}
|
|
|
|
+ if (opt & OPT_D)
|
|
+ allow_deconfig = 0;
|
|
+
|
|
/* Make sure fd 0,1,2 are open */
|
|
bb_sanitize_stdio();
|
|
/* Equivalent of doing a fflush after every \n */
|
|
@@ -964,7 +973,8 @@
|
|
srand(monotonic_us());
|
|
|
|
state = INIT_SELECTING;
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
change_listen_mode(LISTEN_RAW);
|
|
packet_num = 0;
|
|
timeout = 0;
|
|
@@ -1100,7 +1110,8 @@
|
|
}
|
|
/* Timed out, enter init state */
|
|
bb_info_msg("Lease lost, entering init state");
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
state = INIT_SELECTING;
|
|
/*timeout = 0; - already is */
|
|
packet_num = 0;
|
|
@@ -1246,7 +1257,8 @@
|
|
send_decline(xid, server_addr, packet.yiaddr);
|
|
|
|
if (state != REQUESTING)
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
change_listen_mode(LISTEN_RAW);
|
|
state = INIT_SELECTING;
|
|
requested_ip = 0;
|
|
@@ -1292,7 +1304,8 @@
|
|
bb_info_msg("Received DHCP NAK");
|
|
udhcp_run_script(&packet, "nak");
|
|
if (state != REQUESTING)
|
|
- udhcp_run_script(NULL, "deconfig");
|
|
+ if (allow_deconfig)
|
|
+ udhcp_run_script(NULL, "deconfig");
|
|
change_listen_mode(LISTEN_RAW);
|
|
sleep(3); /* avoid excessive network traffic */
|
|
state = INIT_SELECTING;
|