Skip to content

Commit 1cce5e7

Browse files
committed
DHCP fixes (copilot's review)
1 parent fdcb9a5 commit 1cce5e7

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

src/test/unit/unit_tests_dns_dhcp.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3876,6 +3876,7 @@ START_TEST(test_regression_dhcp_lease_expiry_deconfigures_address)
38763876
{
38773877
struct wolfIP s;
38783878
struct ipconf *primary;
3879+
uint32_t stale_timeout_count;
38793880

38803881
wolfIP_init(&s);
38813882
mock_link_init(&s);
@@ -3890,26 +3891,37 @@ START_TEST(test_regression_dhcp_lease_expiry_deconfigures_address)
38903891
s.dhcp_server_ip = 0x0A000001U;
38913892
s.last_tick = 1000U;
38923893
s.dhcp_lease_expires = s.last_tick;
3894+
s.dhcp_timeout_count = 3U;
3895+
stale_timeout_count = s.dhcp_timeout_count;
38933896

38943897
s.dhcp_state = DHCP_BOUND;
38953898
dhcp_timer_cb(&s);
38963899
ck_assert_int_eq(s.dhcp_state, DHCP_DISCOVER_SENT);
38973900
ck_assert_uint_eq(primary->ip, 0U);
38983901
ck_assert_uint_eq(primary->mask, 0U);
38993902
ck_assert_uint_eq(primary->gw, 0U);
3903+
ck_assert_uint_eq(s.dhcp_ip, 0U);
3904+
ck_assert_uint_eq(s.dhcp_server_ip, 0U);
3905+
ck_assert_uint_ne(stale_timeout_count, 0U);
3906+
ck_assert_uint_eq(s.dhcp_timeout_count, 0U);
39003907
ck_assert_uint_ne(s.dhcp_timer, NO_TIMER);
39013908

39023909
wolfIP_ipconfig_set(&s, 0x0A000064U, 0xFFFFFF00U, 0x0A000001U);
39033910
s.dhcp_ip = primary->ip;
3911+
s.dhcp_server_ip = 0x0A000001U;
39043912
s.last_tick = 2000U;
39053913
s.dhcp_lease_expires = s.last_tick;
3914+
s.dhcp_timeout_count = 2U;
39063915

39073916
s.dhcp_state = DHCP_REBINDING;
39083917
dhcp_timer_cb(&s);
39093918
ck_assert_int_eq(s.dhcp_state, DHCP_DISCOVER_SENT);
39103919
ck_assert_uint_eq(primary->ip, 0U);
39113920
ck_assert_uint_eq(primary->mask, 0U);
39123921
ck_assert_uint_eq(primary->gw, 0U);
3922+
ck_assert_uint_eq(s.dhcp_ip, 0U);
3923+
ck_assert_uint_eq(s.dhcp_server_ip, 0U);
3924+
ck_assert_uint_eq(s.dhcp_timeout_count, 0U);
39133925
ck_assert_uint_ne(s.dhcp_timer, NO_TIMER);
39143926
}
39153927
END_TEST

src/wolfip.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5491,6 +5491,7 @@ static int dhcp_send_discover(struct wolfIP *s);
54915491
static int dhcp_send_request(struct wolfIP *s);
54925492
static void dhcp_timer_cb(void *arg);
54935493
static void dhcp_cancel_timer(struct wolfIP *s);
5494+
static void dhcp_deconfigure_lease(struct wolfIP *s);
54945495

54955496
static void dhcp_schedule_timer_at(struct wolfIP *s, uint64_t when)
54965497
{
@@ -5601,7 +5602,7 @@ static void dhcp_timer_cb(void *arg)
56015602
case DHCP_BOUND:
56025603
if (s->dhcp_lease_expires != 0 && s->last_tick >= s->dhcp_lease_expires) {
56035604
dhcp_cancel_timer(s);
5604-
wolfIP_ipconfig_set(s, 0, 0, 0);
5605+
dhcp_deconfigure_lease(s);
56055606
s->dhcp_state = DHCP_OFF;
56065607
dhcp_send_discover(s);
56075608
break;
@@ -5626,7 +5627,7 @@ static void dhcp_timer_cb(void *arg)
56265627
case DHCP_REBINDING:
56275628
if (s->dhcp_lease_expires != 0 && s->last_tick >= s->dhcp_lease_expires) {
56285629
dhcp_cancel_timer(s);
5629-
wolfIP_ipconfig_set(s, 0, 0, 0);
5630+
dhcp_deconfigure_lease(s);
56305631
s->dhcp_state = DHCP_OFF;
56315632
dhcp_send_discover(s);
56325633
break;
@@ -5642,16 +5643,23 @@ static void dhcp_timer_cb(void *arg)
56425643

56435644
static void dhcp_cancel_timer(struct wolfIP *s)
56445645
{
5646+
s->dhcp_timeout_count = 0;
56455647
if (s->dhcp_timer != NO_TIMER) {
56465648
timer_binheap_cancel(&s->timers, s->dhcp_timer);
56475649
s->dhcp_timer = NO_TIMER;
5648-
s->dhcp_timeout_count = 0;
56495650
}
56505651
s->dhcp_renew_at = 0;
56515652
s->dhcp_rebind_at = 0;
56525653
s->dhcp_lease_expires = 0;
56535654
}
56545655

5656+
static void dhcp_deconfigure_lease(struct wolfIP *s)
5657+
{
5658+
wolfIP_ipconfig_set(s, 0, 0, 0);
5659+
s->dhcp_ip = 0;
5660+
s->dhcp_server_ip = 0;
5661+
}
5662+
56555663
#define DHCP_OPT_data_to_u32(opt) \
56565664
(((uint32_t)(opt)->data[0] << 24) | \
56575665
((uint32_t)(opt)->data[1] << 16) | \
@@ -5957,7 +5965,7 @@ static int dhcp_poll(struct wolfIP *s)
59575965
* it must restart the configuration process. */
59585966
if (dhcp_msg_type(s, &msg, (uint32_t)len) == DHCP_NAK) {
59595967
dhcp_cancel_timer(s);
5960-
wolfIP_ipconfig_set(s, 0, 0, 0);
5968+
dhcp_deconfigure_lease(s);
59615969
s->dhcp_state = DHCP_OFF;
59625970
dhcp_send_discover(s);
59635971
return 0;

0 commit comments

Comments
 (0)