@@ -119,7 +119,8 @@ static const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;
119
119
#define DHCP_OPTION_IDX_T2 5
120
120
#define DHCP_OPTION_IDX_SUBNET_MASK 6
121
121
#define DHCP_OPTION_IDX_ROUTER 7
122
- #define DHCP_OPTION_IDX_DNS_SERVER 8
122
+ #define DHCP_OPTION_IDX_NTP 8
123
+ #define DHCP_OPTION_IDX_DNS_SERVER 9
123
124
#define DHCP_OPTION_IDX_MAX (DHCP_OPTION_IDX_DNS_SERVER + DNS_MAX_SERVERS)
124
125
125
126
/** Holds the decoded option values, only valid while in dhcp_recv.
@@ -292,19 +293,20 @@ dhcp_select(struct netif *netif)
292
293
dhcp_option (dhcp , DHCP_OPTION_SERVER_ID , 4 );
293
294
dhcp_option_long (dhcp , ntohl (ip4_addr_get_u32 (& dhcp -> server_ip_addr )));
294
295
295
- dhcp_option (dhcp , DHCP_OPTION_PARAMETER_REQUEST_LIST , 12 /*num options*/ );
296
+ dhcp_option (dhcp , DHCP_OPTION_PARAMETER_REQUEST_LIST , 13 /*num options*/ );
296
297
dhcp_option_byte (dhcp , DHCP_OPTION_SUBNET_MASK );
297
298
dhcp_option_byte (dhcp , DHCP_OPTION_ROUTER );
298
299
dhcp_option_byte (dhcp , DHCP_OPTION_BROADCAST );
299
300
dhcp_option_byte (dhcp , DHCP_OPTION_DNS_SERVER );
301
+ dhcp_option_byte (dhcp , DHCP_OPTION_NTP );
300
302
dhcp_option_byte (dhcp , DHCP_OPTION_DOMAIN_NAME );
301
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINS );
302
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINT );
303
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TIS );
304
- dhcp_option_byte (dhcp , DHCP_OPTION_PRD );
305
- dhcp_option_byte (dhcp , DHCP_OPTION_STATIC_ROUTER );
306
- dhcp_option_byte (dhcp , DHCP_OPTION_CLASSLESS_STATIC_ROUTER );
307
- dhcp_option_byte (dhcp , DHCP_OPTION_VSN );
303
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINS );
304
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINT );
305
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TIS );
306
+ dhcp_option_byte (dhcp , DHCP_OPTION_PRD );
307
+ dhcp_option_byte (dhcp , DHCP_OPTION_STATIC_ROUTER );
308
+ dhcp_option_byte (dhcp , DHCP_OPTION_CLASSLESS_STATIC_ROUTER );
309
+ dhcp_option_byte (dhcp , DHCP_OPTION_VSN );
308
310
309
311
#if LWIP_NETIF_HOSTNAME
310
312
if (netif -> hostname != NULL ) {
@@ -383,7 +385,7 @@ dhcp_fine_tmr()
383
385
if (netif -> dhcp != NULL ) {
384
386
/*add DHCP retries processing by LiuHan*/
385
387
if (DHCP_MAXRTX != 0 ) {
386
- if (netif -> dhcp -> tries >= DHCP_MAXRTX ){
388
+ if (netif -> dhcp -> tries >= DHCP_MAXRTX ){
387
389
os_printf ("DHCP timeout\n" );
388
390
if (netif -> dhcp_event != NULL )
389
391
netif -> dhcp_event ();
@@ -536,6 +538,7 @@ dhcp_handle_ack(struct netif *netif)
536
538
#if LWIP_DHCP_BOOTP_FILE
537
539
ip_addr_set_zero (& dhcp -> offered_si_addr );
538
540
#endif /* LWIP_DHCP_BOOTP_FILE */
541
+ ip_addr_set_zero (& dhcp -> offered_ntp_addr );
539
542
540
543
/* lease time given? */
541
544
if (dhcp_option_given (dhcp , DHCP_OPTION_IDX_LEASE_TIME )) {
@@ -593,6 +596,10 @@ dhcp_handle_ack(struct netif *netif)
593
596
n ++ ;
594
597
}
595
598
#endif /* LWIP_DNS */
599
+
600
+ if (dhcp_option_given (dhcp , DHCP_OPTION_IDX_NTP )) {
601
+ ip4_addr_set_u32 (& dhcp -> offered_ntp_addr , htonl (dhcp_get_option_value (dhcp , DHCP_OPTION_IDX_NTP )));
602
+ }
596
603
}
597
604
598
605
/** Set a statically allocated struct dhcp to work with.
@@ -915,19 +922,20 @@ dhcp_discover(struct netif *netif)
915
922
}
916
923
}
917
924
#endif /* LWIP_NETIF_HOSTNAME */
918
- dhcp_option (dhcp , DHCP_OPTION_PARAMETER_REQUEST_LIST , 12 /*num options*/ );
925
+ dhcp_option (dhcp , DHCP_OPTION_PARAMETER_REQUEST_LIST , 13 /*num options*/ );
919
926
dhcp_option_byte (dhcp , DHCP_OPTION_SUBNET_MASK );
920
927
dhcp_option_byte (dhcp , DHCP_OPTION_ROUTER );
921
928
dhcp_option_byte (dhcp , DHCP_OPTION_BROADCAST );
922
929
dhcp_option_byte (dhcp , DHCP_OPTION_DNS_SERVER );
930
+ dhcp_option_byte (dhcp , DHCP_OPTION_NTP );
923
931
dhcp_option_byte (dhcp , DHCP_OPTION_DOMAIN_NAME );
924
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINS );
925
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINT );
926
- dhcp_option_byte (dhcp , DHCP_OPTION_NB_TIS );
927
- dhcp_option_byte (dhcp , DHCP_OPTION_PRD );
928
- dhcp_option_byte (dhcp , DHCP_OPTION_STATIC_ROUTER );
929
- dhcp_option_byte (dhcp , DHCP_OPTION_CLASSLESS_STATIC_ROUTER );
930
- dhcp_option_byte (dhcp , DHCP_OPTION_VSN );
932
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINS );
933
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TINT );
934
+ dhcp_option_byte (dhcp , DHCP_OPTION_NB_TIS );
935
+ dhcp_option_byte (dhcp , DHCP_OPTION_PRD );
936
+ dhcp_option_byte (dhcp , DHCP_OPTION_STATIC_ROUTER );
937
+ dhcp_option_byte (dhcp , DHCP_OPTION_CLASSLESS_STATIC_ROUTER );
938
+ dhcp_option_byte (dhcp , DHCP_OPTION_VSN );
931
939
932
940
dhcp_option_trailer (dhcp );
933
941
@@ -1253,6 +1261,7 @@ dhcp_release(struct netif *netif)
1253
1261
#if LWIP_DHCP_BOOTP_FILE
1254
1262
ip_addr_set_zero (& dhcp -> offered_si_addr );
1255
1263
#endif /* LWIP_DHCP_BOOTP_FILE */
1264
+ ip_addr_set_zero (& dhcp -> offered_ntp_addr );
1256
1265
dhcp -> offered_t0_lease = dhcp -> offered_t1_renew = dhcp -> offered_t2_rebind = 0 ;
1257
1266
1258
1267
/* create and initialize the DHCP message header */
@@ -1463,6 +1472,10 @@ dhcp_parse_reply(struct dhcp *dhcp, struct pbuf *p)
1463
1472
LWIP_ASSERT ("len >= decode_len" , len >= decode_len );
1464
1473
decode_idx = DHCP_OPTION_IDX_DNS_SERVER ;
1465
1474
break ;
1475
+ case (DHCP_OPTION_NTP ):
1476
+ LWIP_ASSERT ("len == 4" , len == 4 );
1477
+ decode_idx = DHCP_OPTION_IDX_NTP ;
1478
+ break ;
1466
1479
case (DHCP_OPTION_LEASE_TIME ):
1467
1480
LWIP_ASSERT ("len == 4" , len == 4 );
1468
1481
decode_idx = DHCP_OPTION_IDX_LEASE_TIME ;
0 commit comments