File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -654,6 +654,7 @@ Suite *wolf_suite(void)
654654 tcase_add_test (tc_proto , test_dns_query_and_callback_a );
655655 tcase_add_test (tc_proto , test_dhcp_parse_offer_and_ack );
656656 tcase_add_test (tc_proto , test_dhcp_schedule_lease_timer_defaults_t1_t2 );
657+ tcase_add_test (tc_proto , test_dhcp_schedule_lease_timer_small_lease_clamps_t1_t2 );
657658 tcase_add_test (tc_proto , test_dhcp_parse_offer_defaults_mask_when_missing );
658659 tcase_add_test (tc_proto , test_dhcp_parse_offer_rejects_mismatched_xid );
659660 tcase_add_test (tc_proto , test_dhcp_parse_ack_rejects_mismatched_xid );
Original file line number Diff line number Diff line change @@ -103,7 +103,7 @@ START_TEST(test_dhcp_parse_offer_and_ack)
103103 opt -> data [2 ] = (router_ip >> 8 ) & 0xFF ;
104104 opt -> data [3 ] = (router_ip >> 0 ) & 0xFF ;
105105 opt = (struct dhcp_option * )((uint8_t * )opt + 6 );
106- opt -> code = 51 ;
106+ opt -> code = DHCP_OPTION_LEASE_TIME ;
107107 opt -> len = 4 ;
108108 opt -> data [0 ] = (lease_s >> 24 ) & 0xFF ;
109109 opt -> data [1 ] = (lease_s >> 16 ) & 0xFF ;
@@ -148,6 +148,23 @@ START_TEST(test_dhcp_schedule_lease_timer_defaults_t1_t2)
148148}
149149END_TEST
150150
151+ START_TEST (test_dhcp_schedule_lease_timer_small_lease_clamps_t1_t2 )
152+ {
153+ struct wolfIP s ;
154+
155+ wolfIP_init (& s );
156+ s .last_tick = 1000U ;
157+
158+ dhcp_schedule_lease_timer (& s , 1U , 0 , 0 );
159+
160+ ck_assert_int_ne (s .dhcp_timer , NO_TIMER );
161+ ck_assert_uint_eq (s .dhcp_renew_at , 2000U );
162+ ck_assert_uint_eq (s .dhcp_rebind_at , 2000U );
163+ ck_assert_uint_eq (s .dhcp_lease_expires , 2000U );
164+ ck_assert_uint_eq (find_timer_expiry (& s , s .dhcp_timer ), s .dhcp_renew_at );
165+ }
166+ END_TEST
167+
151168START_TEST (test_dhcp_parse_offer_defaults_mask_when_missing )
152169{
153170 struct wolfIP s ;
Original file line number Diff line number Diff line change @@ -5142,12 +5142,22 @@ static void dhcp_schedule_lease_timer(struct wolfIP *s,
51425142 if (!s || lease_s == 0 )
51435143 return ;
51445144
5145- if (renew_s == 0 || renew_s > lease_s )
5145+ if (renew_s == 0 || renew_s > lease_s ) {
51465146 renew_s = lease_s / 2U ;
5147- if (rebind_s == 0 || rebind_s > lease_s )
5147+ if (renew_s == 0 )
5148+ renew_s = 1U ;
5149+ }
5150+ if (rebind_s == 0 || rebind_s > lease_s ) {
51485151 rebind_s = (uint32_t )(((uint64_t )lease_s * 7U ) / 8U );
5152+ if (rebind_s == 0 )
5153+ rebind_s = 1U ;
5154+ }
51495155 if (rebind_s < renew_s )
51505156 rebind_s = renew_s ;
5157+ if (renew_s > lease_s )
5158+ renew_s = lease_s ;
5159+ if (rebind_s > lease_s )
5160+ rebind_s = lease_s ;
51515161
51525162 lease_ms = (uint64_t )lease_s * 1000U ;
51535163 renew_ms = (uint64_t )renew_s * 1000U ;
You can’t perform that action at this time.
0 commit comments