lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] NTP server option (patch for dhcp.c/dhcp.h)


From: Mitani Hiroshi
Subject: [lwip-users] NTP server option (patch for dhcp.c/dhcp.h)
Date: Wed, 07 Sep 2005 15:51:25 +0900
User-agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)

Hi,

Here is a small patch to obtain NTP server address from DHCP server.
(see RFC-2132 8.2)

Have a fun.
--
Mitani

*** dhcp.c.orig Wed Sep  7 15:35:22 2005
--- dhcp.c      Wed Sep  7 15:04:42 2005
***************
*** 234,244 ****
      dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4);
      dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr));
  
!     dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/);
      dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
      dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
      dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
      dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
  
      dhcp_option_trailer(dhcp);
      /* shrink the pbuf to the actual content length */
--- 236,247 ----
      dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4);
      dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr));
  
!     dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 5/*num options*/);
      dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
      dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
      dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
      dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
+     dhcp_option_byte(dhcp, DHCP_OPTION_NTP_SERVER);
  
      dhcp_option_trailer(dhcp);
      /* shrink the pbuf to the actual content length */
***************
*** 498,503 ****
--- 501,513 ----
        dhcp->offered_dns_addr[n].addr = 
htonl(dhcp_get_option_long(&option_ptr[2+(n<<2)]));
      }
    }
+   
+   /* NTP server */
+   option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_NTP_SERVER);
+   if (option_ptr != NULL) {
+     /* get one NTP server */
+     dhcp->offered_ntp_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2]));
+   }
  }
  
  /**
***************
*** 720,730 ****
      dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
      dhcp_option_short(dhcp, 576);
  
!     dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/);
      dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
      dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
      dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
      dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
  
      dhcp_option_trailer(dhcp);
  
--- 729,740 ----
      dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
      dhcp_option_short(dhcp, 576);
  
!     dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 5/*num options*/);
      dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
      dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
      dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
      dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
+     dhcp_option_byte(dhcp, DHCP_OPTION_NTP_SERVER);
  
      dhcp_option_trailer(dhcp);
  
*** dhcp.h.orig Wed Sep  7 15:34:53 2005
--- dhcp.h      Wed Sep  7 14:22:47 2005
***************
*** 46,51 ****
--- 46,52 ----
  #define DHCP_MAX_DNS 2
    u32_t dns_count; /* actual number of DNS servers obtained */
    struct ip_addr offered_dns_addr[DHCP_MAX_DNS]; /* DNS server addresses */
+   struct ip_addr offered_ntp_addr; /* NTP server addresses */
   
    u32_t offered_t0_lease; /* lease period (in seconds) */
    u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease 
period) */
***************
*** 191,196 ****
--- 192,198 ----
  #define DHCP_OPTION_MTU 26
  #define DHCP_OPTION_BROADCAST 28
  #define DHCP_OPTION_TCP_TTL 37
+ #define DHCP_OPTION_NTP_SERVER 42 /* RFC 2132 8.3 */ 
  #define DHCP_OPTION_END 255
  
  /** DHCP options */

reply via email to

[Prev in Thread] Current Thread [Next in Thread]