From 9d0bae5d0c6209b704af8fbc155e9e30dbe74bf8 Mon Sep 17 00:00:00 2001 From: CNBUGS AI Date: Fri, 24 Apr 2026 16:50:40 +0800 Subject: [PATCH] Fix config hot-reload for serverIP - Add getServerIP() method to dynamically read Gateway from config - Update sendOffer, sendACK, sendNAK to use getServerIP() - This ensures gateway IP updates when config changes via web UI --- internal/dhcp/server.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/dhcp/server.go b/internal/dhcp/server.go index 3980689..f0d8e6a 100644 --- a/internal/dhcp/server.go +++ b/internal/dhcp/server.go @@ -76,6 +76,12 @@ func (s *Server) getConfig() *config.DHCPConfig { return s.config } +// getServerIP returns the server IP for DHCP options +func (s *Server) getServerIP() net.IP { + cfg := s.getConfig() + return net.ParseIP(cfg.Gateway).To4() +} + func (s *Server) Start() error { if !s.config.Enabled { return nil @@ -383,7 +389,7 @@ func (s *Server) sendOffer(data []byte, clientMAC, offeredIP string, remoteAddr response = appendOption(response, OptionLeaseTime, leaseTime) // Add server identifier - response = appendOption(response, OptionServerIdentifier, []byte(s.serverIP.To4())) + response = appendOption(response, OptionServerIdentifier, []byte(s.getServerIP().To4())) // Add end option response = append(response, OptionEnd) @@ -412,7 +418,7 @@ func (s *Server) sendACK(data []byte, clientMAC, ip string, remoteAddr *net.UDPA binary.BigEndian.PutUint32(leaseTime, uint32(s.getConfig().LeaseTime)) response = appendOption(response, OptionLeaseTime, leaseTime) - response = appendOption(response, OptionServerIdentifier, []byte(s.serverIP.To4())) + response = appendOption(response, OptionServerIdentifier, []byte(s.getServerIP().To4())) response = append(response, OptionEnd) targetAddr := s.getResponseAddr(data, remoteAddr) @@ -421,7 +427,7 @@ func (s *Server) sendACK(data []byte, clientMAC, ip string, remoteAddr *net.UDPA func (s *Server) sendNAK(data []byte, remoteAddr *net.UDPAddr) { response := buildDHCPMessage(MsgNAK, data, "0.0.0.0", s.config) - response = appendOption(response, OptionServerIdentifier, []byte(s.serverIP.To4())) + response = appendOption(response, OptionServerIdentifier, []byte(s.getServerIP().To4())) response = append(response, OptionEnd) // NAK must always be broadcast