mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-03-30 22:13:32 +03:00
finish
This commit is contained in:
parent
2acff7757b
commit
c7cc4a9345
4 changed files with 67 additions and 61 deletions
|
@ -64,21 +64,22 @@ func v4ServerConfToJSON(c V4ServerConf) v4ServerConfJSON {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func v4JSONToServerConf(c v4ServerConfJSON) V4ServerConf {
|
func v4JSONToServerConf(j v4ServerConfJSON) V4ServerConf {
|
||||||
return V4ServerConf{
|
return V4ServerConf{
|
||||||
Enabled: c.Enabled,
|
Enabled: j.Enabled,
|
||||||
InterfaceName: c.InterfaceName,
|
InterfaceName: j.InterfaceName,
|
||||||
GatewayIP: c.GatewayIP,
|
GatewayIP: j.GatewayIP,
|
||||||
SubnetMask: c.SubnetMask,
|
SubnetMask: j.SubnetMask,
|
||||||
RangeStart: c.RangeStart,
|
RangeStart: j.RangeStart,
|
||||||
RangeEnd: c.RangeEnd,
|
RangeEnd: j.RangeEnd,
|
||||||
LeaseDuration: c.LeaseDuration,
|
LeaseDuration: j.LeaseDuration,
|
||||||
ICMPTimeout: c.ICMPTimeout,
|
ICMPTimeout: j.ICMPTimeout,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type v6ServerConfJSON struct {
|
type v6ServerConfJSON struct {
|
||||||
Enabled bool `json:"enabled"`
|
Enabled bool `json:"enabled"`
|
||||||
|
InterfaceName string `json:"interface_name"`
|
||||||
RangeStart string `json:"range_start"`
|
RangeStart string `json:"range_start"`
|
||||||
LeaseDuration uint32 `json:"lease_duration"`
|
LeaseDuration uint32 `json:"lease_duration"`
|
||||||
}
|
}
|
||||||
|
@ -86,25 +87,34 @@ type v6ServerConfJSON struct {
|
||||||
func v6ServerConfToJSON(c V6ServerConf) v6ServerConfJSON {
|
func v6ServerConfToJSON(c V6ServerConf) v6ServerConfJSON {
|
||||||
return v6ServerConfJSON{
|
return v6ServerConfJSON{
|
||||||
Enabled: c.Enabled,
|
Enabled: c.Enabled,
|
||||||
|
InterfaceName: c.InterfaceName,
|
||||||
RangeStart: c.RangeStart,
|
RangeStart: c.RangeStart,
|
||||||
LeaseDuration: c.LeaseDuration,
|
LeaseDuration: c.LeaseDuration,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func v6JSONToServerConf(c v6ServerConfJSON) V6ServerConf {
|
func v6JSONToServerConf(j v6ServerConfJSON) V6ServerConf {
|
||||||
return V6ServerConf{
|
return V6ServerConf{
|
||||||
Enabled: c.Enabled,
|
Enabled: j.Enabled,
|
||||||
RangeStart: c.RangeStart,
|
InterfaceName: j.InterfaceName,
|
||||||
LeaseDuration: c.LeaseDuration,
|
RangeStart: j.RangeStart,
|
||||||
|
LeaseDuration: j.LeaseDuration,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) handleDHCPStatus(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleDHCPStatus(w http.ResponseWriter, r *http.Request) {
|
||||||
leases := convertLeases(s.Leases(LeasesDynamic), true)
|
leases := convertLeases(s.Leases(LeasesDynamic), true)
|
||||||
staticLeases := convertLeases(s.Leases(LeasesStatic), false)
|
staticLeases := convertLeases(s.Leases(LeasesStatic), false)
|
||||||
|
|
||||||
|
v4conf := V4ServerConf{}
|
||||||
|
s.srv4.WriteDiskConfig4(&v4conf)
|
||||||
|
|
||||||
|
v6conf := V6ServerConf{}
|
||||||
|
s.srv6.WriteDiskConfig6(&v6conf)
|
||||||
|
|
||||||
status := map[string]interface{}{
|
status := map[string]interface{}{
|
||||||
"v4": v4ServerConfToJSON(s.conf.Conf4),
|
"v4": v4ServerConfToJSON(v4conf),
|
||||||
"v6": v6ServerConfToJSON(s.conf.Conf6),
|
"v6": v6ServerConfToJSON(v6conf),
|
||||||
"leases": leases,
|
"leases": leases,
|
||||||
"static_leases": staticLeases,
|
"static_leases": staticLeases,
|
||||||
}
|
}
|
||||||
|
@ -136,33 +146,27 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// err = s.CheckConfig(newconfig.ServerConfig)
|
|
||||||
// if err != nil {
|
|
||||||
// httpError(r, w, http.StatusBadRequest, "Invalid DHCP configuration: %s", err)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
err = s.Stop()
|
|
||||||
if err != nil {
|
|
||||||
log.Error("failed to stop the DHCP server: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
v4conf := v4JSONToServerConf(newconfig.V4)
|
v4conf := v4JSONToServerConf(newconfig.V4)
|
||||||
v4conf.notify = s.conf.Conf4.notify
|
v4conf.notify = s.onNotify
|
||||||
s4, err := v4Create(v4conf)
|
s4, err := v4Create(v4conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(r, w, http.StatusBadRequest, "Invalid DHCP configuration: %s", err)
|
httpError(r, w, http.StatusBadRequest, "Invalid DHCPv4 configuration: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
v6conf := v6JSONToServerConf(newconfig.V6)
|
v6conf := v6JSONToServerConf(newconfig.V6)
|
||||||
v6conf.notify = s.conf.Conf6.notify
|
v6conf.notify = s.onNotify
|
||||||
s6, err := v6Create(v6conf)
|
s6, err := v6Create(v6conf)
|
||||||
if s6 == nil {
|
if s6 == nil {
|
||||||
httpError(r, w, http.StatusBadRequest, "Invalid DHCPv6 configuration: %s", err)
|
httpError(r, w, http.StatusBadRequest, "Invalid DHCPv6 configuration: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = s.Stop()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("failed to stop the DHCP server: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
s.srv4 = s4
|
s.srv4 = s4
|
||||||
s.srv6 = s6
|
s.srv6 = s6
|
||||||
|
|
||||||
|
@ -177,12 +181,12 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = s.Start()
|
err = s.Start()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(r, w, http.StatusBadRequest, "Failed to start DHCP server: %s", err)
|
httpError(r, w, http.StatusBadRequest, "Failed to start DHCP server: %s", err)
|
||||||
return
|
return
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,8 +72,6 @@ func (s *Server) CheckConfig(config ServerConfig) error {
|
||||||
// Create - create object
|
// Create - create object
|
||||||
func Create(config ServerConfig) *Server {
|
func Create(config ServerConfig) *Server {
|
||||||
s := Server{}
|
s := Server{}
|
||||||
config.Conf4.notify = s.onNotify
|
|
||||||
config.Conf6.notify = s.onNotify
|
|
||||||
s.conf.HTTPRegister = config.HTTPRegister
|
s.conf.HTTPRegister = config.HTTPRegister
|
||||||
s.conf.ConfigModified = config.ConfigModified
|
s.conf.ConfigModified = config.ConfigModified
|
||||||
s.conf.DBFilePath = filepath.Join(config.WorkDir, dbFilename)
|
s.conf.DBFilePath = filepath.Join(config.WorkDir, dbFilename)
|
||||||
|
@ -84,12 +82,14 @@ func Create(config ServerConfig) *Server {
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
config.Conf4.notify = s.onNotify
|
||||||
s.srv4, err = v4Create(config.Conf4)
|
s.srv4, err = v4Create(config.Conf4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.Conf6.notify = s.onNotify
|
||||||
s.srv6, err = v6Create(config.Conf6)
|
s.srv6, err = v6Create(config.Conf6)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
|
|
30
dhcpd/v4.go
30
dhcpd/v4.go
|
@ -376,11 +376,8 @@ func (s *v4Server) processRequest(req *dhcpv4.DHCPv4, resp *dhcpv4.DHCPv4) (*Lea
|
||||||
reqIP := req.Options.Get(dhcpv4.OptionRequestedIPAddress)
|
reqIP := req.Options.Get(dhcpv4.OptionRequestedIPAddress)
|
||||||
|
|
||||||
sid := req.Options.Get(dhcpv4.OptionServerIdentifier)
|
sid := req.Options.Get(dhcpv4.OptionServerIdentifier)
|
||||||
if len(sid) == 0 {
|
if len(sid) != 0 &&
|
||||||
log.Debug("DHCPv4: No OptionServerIdentifier in Request message for %s", mac)
|
!bytes.Equal(sid, s.conf.dnsIPAddrs[0]) {
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
if !bytes.Equal(sid, s.conf.dnsIPAddrs[0]) {
|
|
||||||
log.Debug("DHCPv4: Bad OptionServerIdentifier in Request message for %s", mac)
|
log.Debug("DHCPv4: Bad OptionServerIdentifier in Request message for %s", mac)
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
@ -535,7 +532,7 @@ func (s *v4Server) Start() error {
|
||||||
IP: net.ParseIP("0.0.0.0"),
|
IP: net.ParseIP("0.0.0.0"),
|
||||||
Port: dhcpv4.ServerPort,
|
Port: dhcpv4.ServerPort,
|
||||||
}
|
}
|
||||||
server, err := server4.NewServer(iface.Name, laddr, s.packetHandler, server4.WithDebugLogger())
|
s.srv, err = server4.NewServer(iface.Name, laddr, s.packetHandler, server4.WithDebugLogger())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -543,31 +540,33 @@ func (s *v4Server) Start() error {
|
||||||
log.Info("DHCPv4: listening")
|
log.Info("DHCPv4: listening")
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
err = server.Serve()
|
err = s.srv.Serve()
|
||||||
log.Error("DHCPv4: %s", err)
|
log.Error("DHCPv4: %s", err)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset - stop server
|
|
||||||
func (s *v4Server) Reset() {
|
|
||||||
s.leasesLock.Lock()
|
|
||||||
s.leases = nil
|
|
||||||
s.leasesLock.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop - stop server
|
// Stop - stop server
|
||||||
func (s *v4Server) Stop() {
|
func (s *v4Server) Stop() {
|
||||||
if s.srv == nil {
|
if s.srv == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug("DHCPv4: stopping")
|
||||||
err := s.srv.Close()
|
err := s.srv.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("DHCPv4: srv.Close: %s", err)
|
log.Error("DHCPv4: srv.Close: %s", err)
|
||||||
}
|
}
|
||||||
// now server.Serve() will return
|
// now s.srv.Serve() will return
|
||||||
|
s.srv = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset - stop server
|
||||||
|
func (s *v4Server) Reset() {
|
||||||
|
s.leasesLock.Lock()
|
||||||
|
s.leases = nil
|
||||||
|
s.leasesLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create DHCPv4 server
|
// Create DHCPv4 server
|
||||||
|
@ -599,6 +598,7 @@ func v4Create(conf V4ServerConf) (DHCPServer, error) {
|
||||||
if s.conf.ipStart[0] == 0 {
|
if s.conf.ipStart[0] == 0 {
|
||||||
return nil, fmt.Errorf("DHCPv4: invalid range start IP")
|
return nil, fmt.Errorf("DHCPv4: invalid range start IP")
|
||||||
}
|
}
|
||||||
|
|
||||||
s.conf.ipEnd, err = parseIPv4(conf.RangeEnd)
|
s.conf.ipEnd, err = parseIPv4(conf.RangeEnd)
|
||||||
if s.conf.ipEnd == nil {
|
if s.conf.ipEnd == nil {
|
||||||
return nil, fmt.Errorf("DHCPv4: %s", err)
|
return nil, fmt.Errorf("DHCPv4: %s", err)
|
||||||
|
|
22
dhcpd/v6.go
22
dhcpd/v6.go
|
@ -60,7 +60,7 @@ func (s *v6Server) ResetLeases(ll []*Lease) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
s.leases = append(s.leases, l)
|
s.addLease(l)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -578,36 +578,38 @@ func (s *v6Server) Start() error {
|
||||||
IP: net.ParseIP("::"),
|
IP: net.ParseIP("::"),
|
||||||
Port: dhcpv6.DefaultServerPort,
|
Port: dhcpv6.DefaultServerPort,
|
||||||
}
|
}
|
||||||
server, err := server6.NewServer(iface.Name, laddr, s.packetHandler, server6.WithDebugLogger())
|
s.srv, err = server6.NewServer(iface.Name, laddr, s.packetHandler, server6.WithDebugLogger())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
err = server.Serve()
|
err = s.srv.Serve()
|
||||||
log.Error("DHCPv6: %s", err)
|
log.Error("DHCPv6: %s", err)
|
||||||
}()
|
}()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset - stop server
|
|
||||||
func (s *v6Server) Reset() {
|
|
||||||
s.leasesLock.Lock()
|
|
||||||
s.leases = nil
|
|
||||||
s.leasesLock.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop - stop server
|
// Stop - stop server
|
||||||
func (s *v6Server) Stop() {
|
func (s *v6Server) Stop() {
|
||||||
if s.srv == nil {
|
if s.srv == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug("DHCPv6: stopping")
|
||||||
err := s.srv.Close()
|
err := s.srv.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("DHCPv6: srv.Close: %s", err)
|
log.Error("DHCPv6: srv.Close: %s", err)
|
||||||
}
|
}
|
||||||
// now server.Serve() will return
|
// now server.Serve() will return
|
||||||
|
s.srv = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset - stop server
|
||||||
|
func (s *v6Server) Reset() {
|
||||||
|
s.leasesLock.Lock()
|
||||||
|
s.leases = nil
|
||||||
|
s.leasesLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create DHCPv6 server
|
// Create DHCPv6 server
|
||||||
|
|
Loading…
Add table
Reference in a new issue