summaryrefslogtreecommitdiffhomepage
path: root/networking/udhcp/dhcpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/udhcp/dhcpc.c')
-rw-r--r--networking/udhcp/dhcpc.c47
1 files changed, 19 insertions, 28 deletions
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index a818c1875..6666cbce6 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -1027,7 +1027,6 @@ static int udhcp_raw_socket(int ifindex)
* SOCK_DGRAM: remove link-layer headers on input (SOCK_RAW keeps them)
* ETH_P_IP: want to receive only packets with IPv4 eth type
*/
- log3("got raw socket fd %d", fd);
memset(&sock, 0, sizeof(sock)); /* let's be deterministic */
sock.sll_family = AF_PACKET;
@@ -1122,29 +1121,6 @@ static void change_listen_mode(int new_mode)
/* else LISTEN_NONE: client_data.sockfd stays closed */
}
-/* Called only on SIGUSR1 */
-static void perform_renew(void)
-{
- bb_simple_info_msg("performing DHCP renew");
- switch (client_data.state) {
- case BOUND:
- change_listen_mode(LISTEN_KERNEL);
- case RENEWING:
- case REBINDING:
- client_data.state = RENEW_REQUESTED;
- break;
- case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
- udhcp_run_script(NULL, "deconfig");
- case REQUESTING:
- case RELEASED:
- change_listen_mode(LISTEN_RAW);
- client_data.state = INIT_SELECTING;
- break;
- case INIT_SELECTING:
- break;
- }
-}
-
static void perform_release(uint32_t server_addr, uint32_t requested_ip)
{
char buffer[sizeof("255.255.255.255")];
@@ -1247,7 +1223,6 @@ static void client_background(void)
//usage: "\n USR1 Renew lease"
//usage: "\n USR2 Release lease"
-
int udhcpc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int udhcpc_main(int argc UNUSED_PARAM, char **argv)
{
@@ -1597,10 +1572,26 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
switch (udhcp_sp_read()) {
case SIGUSR1:
client_data.first_secs = 0; /* make secs field count from 0 */
- perform_renew();
- if (client_data.state == RENEW_REQUESTED)
+ bb_simple_info_msg("performing DHCP renew");
+
+ switch (client_data.state) {
+ /* Try to renew/rebind */
+ case BOUND:
+ case RENEWING:
+ case REBINDING:
+ change_listen_mode(LISTEN_KERNEL);
+ client_data.state = RENEW_REQUESTED;
goto case_RENEW_REQUESTED;
+
/* Start things over */
+ case RENEW_REQUESTED: /* two or more SIGUSR1 received */
+ udhcp_run_script(NULL, "deconfig");
+ /* case REQUESTING: break; */
+ /* case RELEASED: break; */
+ /* case INIT_SELECTING: break; */
+ }
+ change_listen_mode(LISTEN_RAW);
+ client_data.state = INIT_SELECTING;
packet_num = 0;
/* Kill any timeouts, user wants this to hurry along */
timeout = 0;
@@ -1737,7 +1728,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
/* paranoia: must not be too small and not prone to overflows */
/* NB: 60s leases _are_ used in real world
* (temporary IPs while ISP modem initializes)
- * do not break this case by bumplit it up.
+ * do not break this case by bumping it up.
*/
if (lease_remaining < 0) /* signed overflow? */
lease_remaining = INT_MAX;