@@ -21,6 +21,7 @@ type NetworkInterfaceState struct {
2121 ipv6Addr * net.IP
2222 ipv6Addresses []IPv6Address
2323 ipv6LinkLocal * net.IP
24+ ntpAddresses []* net.IP
2425 macAddr * net.HardwareAddr
2526
2627 l * zerolog.Logger
@@ -76,6 +77,7 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
7677 onInitialCheck : opts .OnInitialCheck ,
7778 cbConfigChange : opts .OnConfigChange ,
7879 config : opts .NetworkConfig ,
80+ ntpAddresses : make ([]* net.IP , 0 ),
7981 }
8082
8183 // create the dhcp client
@@ -89,7 +91,7 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
8991 opts .Logger .Error ().Err (err ).Msg ("failed to update network state" )
9092 return
9193 }
92-
94+ _ = s . updateNtpServersFromLease ( lease )
9395 _ = s .setHostnameIfNotSame ()
9496
9597 opts .OnDhcpLeaseChange (lease )
@@ -135,6 +137,27 @@ func (s *NetworkInterfaceState) IPv6String() string {
135137 return s .ipv6Addr .String ()
136138}
137139
140+ func (s * NetworkInterfaceState ) NtpAddresses () []* net.IP {
141+ return s .ntpAddresses
142+ }
143+
144+ func (s * NetworkInterfaceState ) NtpAddressesString () []string {
145+ ntpServers := []string {}
146+
147+ if s != nil {
148+ s .l .Debug ().Any ("s" , s ).Msg ("getting NTP address strings" )
149+
150+ if len (s .ntpAddresses ) > 0 {
151+ for _ , server := range s .ntpAddresses {
152+ s .l .Debug ().IPAddr ("server" , * server ).Msg ("converting NTP address" )
153+ ntpServers = append (ntpServers , server .String ())
154+ }
155+ }
156+ }
157+
158+ return ntpServers
159+ }
160+
138161func (s * NetworkInterfaceState ) MAC () * net.HardwareAddr {
139162 return s .macAddr
140163}
@@ -318,6 +341,25 @@ func (s *NetworkInterfaceState) update() (DhcpTargetState, error) {
318341 return dhcpTargetState , nil
319342}
320343
344+ func (s * NetworkInterfaceState ) updateNtpServersFromLease (lease * udhcpc.Lease ) error {
345+ if lease != nil && len (lease .NTPServers ) > 0 {
346+ s .l .Info ().Msg ("lease found, updating DHCP NTP addresses" )
347+ s .ntpAddresses = make ([]* net.IP , 0 , len (lease .NTPServers ))
348+
349+ for _ , ntpServer := range lease .NTPServers {
350+ if ntpServer != nil {
351+ s .l .Info ().IPAddr ("ntp_server" , ntpServer ).Msg ("NTP server found in lease" )
352+ s .ntpAddresses = append (s .ntpAddresses , & ntpServer )
353+ }
354+ }
355+ } else {
356+ s .l .Info ().Msg ("no NTP servers found in lease" )
357+ s .ntpAddresses = make ([]* net.IP , 0 , len (s .config .TimeSyncNTPServers ))
358+ }
359+
360+ return nil
361+ }
362+
321363func (s * NetworkInterfaceState ) CheckAndUpdateDhcp () error {
322364 dhcpTargetState , err := s .update ()
323365 if err != nil {
0 commit comments