@@ -556,6 +556,10 @@ static uint32_t dhcpv4_send_request(struct net_if *iface)
556
556
net_dhcpv4_state_name (iface -> config .dhcpv4 .state ));
557
557
goto fail ;
558
558
break ;
559
+ case NET_DHCPV4_INIT_REBOOT :
560
+ with_requested_ip = true;
561
+ timeout = dhcpv4_update_message_timeout (& iface -> config .dhcpv4 );
562
+ break ;
559
563
case NET_DHCPV4_REQUESTING :
560
564
with_server_id = true;
561
565
with_requested_ip = true;
@@ -802,6 +806,7 @@ static uint32_t dhcpv4_manage_timers(struct net_if *iface, int64_t now)
802
806
case NET_DHCPV4_SELECTING :
803
807
/* Failed to get OFFER message, send DISCOVER again */
804
808
return dhcpv4_send_discover (iface );
809
+ case NET_DHCPV4_INIT_REBOOT :
805
810
case NET_DHCPV4_REQUESTING :
806
811
/* Maximum number of renewal attempts failed, so start
807
812
* from the beginning.
@@ -1420,6 +1425,7 @@ static inline void dhcpv4_handle_msg_offer(struct net_if *iface,
1420
1425
switch (iface -> config .dhcpv4 .state ) {
1421
1426
case NET_DHCPV4_DISABLED :
1422
1427
case NET_DHCPV4_INIT :
1428
+ case NET_DHCPV4_INIT_REBOOT :
1423
1429
case NET_DHCPV4_REQUESTING :
1424
1430
case NET_DHCPV4_RENEWING :
1425
1431
case NET_DHCPV4_REBINDING :
@@ -1442,6 +1448,7 @@ static void dhcpv4_handle_msg_ack(struct net_if *iface)
1442
1448
case NET_DHCPV4_BOUND :
1443
1449
case NET_DHCPV4_DECLINE :
1444
1450
break ;
1451
+ case NET_DHCPV4_INIT_REBOOT :
1445
1452
case NET_DHCPV4_REQUESTING :
1446
1453
NET_INFO ("Received: %s" ,
1447
1454
net_sprint_ipv4_addr (& iface -> config .dhcpv4 .requested_ip ));
@@ -1476,6 +1483,7 @@ static void dhcpv4_handle_msg_nak(struct net_if *iface)
1476
1483
switch (iface -> config .dhcpv4 .state ) {
1477
1484
case NET_DHCPV4_DISABLED :
1478
1485
case NET_DHCPV4_INIT :
1486
+ case NET_DHCPV4_INIT_REBOOT :
1479
1487
case NET_DHCPV4_SELECTING :
1480
1488
case NET_DHCPV4_REQUESTING :
1481
1489
if (memcmp (& iface -> config .dhcpv4 .request_server_addr ,
@@ -1661,7 +1669,9 @@ static void dhcpv4_iface_event_handler(struct net_mgmt_event_callback *cb,
1661
1669
1662
1670
if (iface -> config .dhcpv4 .state == NET_DHCPV4_BOUND ) {
1663
1671
iface -> config .dhcpv4 .attempts = 0U ;
1664
- iface -> config .dhcpv4 .state = NET_DHCPV4_INIT ;
1672
+ iface -> config .dhcpv4 .state = IS_ENABLED (CONFIG_NET_DHCPV4_INIT_REBOOT )
1673
+ ? NET_DHCPV4_INIT_REBOOT
1674
+ : NET_DHCPV4_INIT ;
1665
1675
NET_DBG ("enter state=%s" , net_dhcpv4_state_name (
1666
1676
iface -> config .dhcpv4 .state ));
1667
1677
/* Remove any bound address as interface is gone */
@@ -1749,6 +1759,7 @@ const char *net_dhcpv4_state_name(enum net_dhcpv4_state state)
1749
1759
static const char * const name [] = {
1750
1760
"disabled" ,
1751
1761
"init" ,
1762
+ "init-reboot" ,
1752
1763
"selecting" ,
1753
1764
"requesting" ,
1754
1765
"renewing" ,
@@ -1834,6 +1845,7 @@ static void dhcpv4_start_internal(struct net_if *iface, bool first_start)
1834
1845
1835
1846
break ;
1836
1847
case NET_DHCPV4_INIT :
1848
+ case NET_DHCPV4_INIT_REBOOT :
1837
1849
case NET_DHCPV4_SELECTING :
1838
1850
case NET_DHCPV4_REQUESTING :
1839
1851
case NET_DHCPV4_RENEWING :
@@ -1934,6 +1946,7 @@ void net_dhcpv4_stop(struct net_if *iface)
1934
1946
1935
1947
__fallthrough ;
1936
1948
case NET_DHCPV4_INIT :
1949
+ case NET_DHCPV4_INIT_REBOOT :
1937
1950
case NET_DHCPV4_SELECTING :
1938
1951
case NET_DHCPV4_REQUESTING :
1939
1952
case NET_DHCPV4_REBINDING :
0 commit comments