diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-07-03 20:26:44 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-07-03 20:26:44 +0200 |
commit | 44399e00ffa73270cd7fc108c983d3b1705b9d86 (patch) | |
tree | 704af5332cd123a2e51fb03c035c868d52b19756 | |
parent | aabb0a93e947a2a3cd180b490ae6664396446f63 (diff) | |
download | busybox-w32-44399e00ffa73270cd7fc108c983d3b1705b9d86.tar.gz busybox-w32-44399e00ffa73270cd7fc108c983d3b1705b9d86.tar.bz2 busybox-w32-44399e00ffa73270cd7fc108c983d3b1705b9d86.zip |
udhcpc: run "deconfig" script in manual renew state too. closes 9061
The bug was seen when the following is done:
# killall 1 udhpc; killall 2 udhpc
Performing a DHCP renew
state: 2 -> 5
Sending renew...
Entering released state
state: 5 -> 6 <<<<<<<<<<<<<< not calling script!!!!
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/udhcp/d6_dhcpc.c | 6 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index c77669a31..12f8f1125 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c | |||
@@ -793,7 +793,11 @@ static void perform_renew(void) | |||
793 | static void perform_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6) | 793 | static void perform_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6) |
794 | { | 794 | { |
795 | /* send release packet */ | 795 | /* send release packet */ |
796 | if (state == BOUND || state == RENEWING || state == REBINDING) { | 796 | if (state == BOUND |
797 | || state == RENEWING | ||
798 | || state == REBINDING | ||
799 | || state == RENEW_REQUESTED | ||
800 | ) { | ||
797 | bb_error_msg("unicasting a release"); | 801 | bb_error_msg("unicasting a release"); |
798 | send_d6_release(server_ipv6, our_cur_ipv6); /* unicast */ | 802 | send_d6_release(server_ipv6, our_cur_ipv6); /* unicast */ |
799 | d6_run_script(NULL, "deconfig"); | 803 | d6_run_script(NULL, "deconfig"); |
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index fc7b6216d..e58acbaca 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c | |||
@@ -1118,7 +1118,11 @@ static void perform_release(uint32_t server_addr, uint32_t requested_ip) | |||
1118 | struct in_addr temp_addr; | 1118 | struct in_addr temp_addr; |
1119 | 1119 | ||
1120 | /* send release packet */ | 1120 | /* send release packet */ |
1121 | if (state == BOUND || state == RENEWING || state == REBINDING) { | 1121 | if (state == BOUND |
1122 | || state == RENEWING | ||
1123 | || state == REBINDING | ||
1124 | || state == RENEW_REQUESTED | ||
1125 | ) { | ||
1122 | temp_addr.s_addr = server_addr; | 1126 | temp_addr.s_addr = server_addr; |
1123 | strcpy(buffer, inet_ntoa(temp_addr)); | 1127 | strcpy(buffer, inet_ntoa(temp_addr)); |
1124 | temp_addr.s_addr = requested_ip; | 1128 | temp_addr.s_addr = requested_ip; |