mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-03-14 14:38:29 +03:00
wip
This commit is contained in:
parent
6280a1ad02
commit
cdb00a5db7
2 changed files with 100 additions and 2 deletions
98
dhcpd/v4.go
98
dhcpd/v4.go
|
@ -42,6 +42,8 @@ type V4ServerConf struct {
|
|||
ipStop net.IP
|
||||
leaseTime time.Duration
|
||||
dnsIPAddrs []net.IP // IPv4 addresses to return to DHCP clients as DNS server addresses
|
||||
routerIP net.IP
|
||||
subnetMask net.IPMask
|
||||
|
||||
notify func(uint32)
|
||||
}
|
||||
|
@ -293,7 +295,98 @@ func (s *V4Server) addrAvailable(target net.IP) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (s *V4Server) packetHandler(conn net.PacketConn, peer net.Addr, m *dhcpv4.DHCPv4) {
|
||||
func (s *V4Server) findLease(mac net.HardwareAddr) *Lease {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *V4Server) reserveLease(mac net.HardwareAddr) *Lease {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *V4Server) commitLease(req *dhcpv4.DHCPv4, lease *Lease) time.Duration {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (s *V4Server) checkIA(req *dhcpv4.DHCPv4, lease *Lease) error {
|
||||
// req.GetOneOption(dhcpv4.OptionServerIdentifier)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Find a lease associated with MAC and prepare response
|
||||
func (s *V4Server) process(req *dhcpv4.DHCPv4, resp *dhcpv4.DHCPv4) bool {
|
||||
mac := req.ClientHWAddr
|
||||
|
||||
// lock
|
||||
|
||||
lease := s.findLease(mac)
|
||||
if lease == nil {
|
||||
log.Debug("DHCPv6: no lease for: %s", mac)
|
||||
|
||||
switch req.MessageType() {
|
||||
|
||||
case dhcpv4.MessageTypeDiscover:
|
||||
lease = s.reserveLease(mac)
|
||||
if lease == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
err := s.checkIA(req, lease)
|
||||
if err != nil {
|
||||
log.Debug("DHCPv4: %s", err)
|
||||
|
||||
// return NAK
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
lifetime := s.commitLease(req, lease)
|
||||
resp.UpdateOption(dhcpv4.OptIPAddressLeaseTime(lifetime))
|
||||
|
||||
// resp.UpdateOption(dhcpv4.OptRequestedIPAddress(x))
|
||||
resp.UpdateOption(dhcpv4.OptServerIdentifier(x))
|
||||
resp.UpdateOption(dhcpv4.OptDNS(s.conf.dnsIPAddrs...))
|
||||
resp.UpdateOption(dhcpv4.OptRouter(s.conf.routerIP))
|
||||
resp.UpdateOption(dhcpv4.OptSubnetMask(s.conf.subnetMask))
|
||||
return true
|
||||
}
|
||||
|
||||
// client -> Discover -> server
|
||||
// client <- Reply <- server
|
||||
// client -> Request -> server
|
||||
// client <- Reply <- server
|
||||
func (s *V4Server) packetHandler(conn net.PacketConn, peer net.Addr, req *dhcpv4.DHCPv4) {
|
||||
log.Debug("DHCPv4: received message: %s", req.Summary())
|
||||
|
||||
switch req.MessageType() {
|
||||
case dhcpv4.MessageTypeDiscover,
|
||||
dhcpv4.MessageTypeRequest:
|
||||
//
|
||||
|
||||
default:
|
||||
log.Debug("DHCPv4: unsupported message type %d", req.MessageType())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := dhcpv4.NewReplyFromRequest(req)
|
||||
if err != nil {
|
||||
log.Debug("DHCPv4: dhcpv4.New: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
_ = s.process(req, resp)
|
||||
|
||||
log.Debug("DHCPv4: sending: %s", resp.Summary())
|
||||
|
||||
_, err = conn.WriteTo(resp.ToBytes(), peer)
|
||||
if err != nil {
|
||||
log.Error("DHCPv4: conn.Write to %s failed: %s", peer, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Get IPv4 address list
|
||||
|
@ -379,6 +472,9 @@ func v4Create(conf V4ServerConf) (*V4Server, error) {
|
|||
return s, nil
|
||||
}
|
||||
|
||||
s.conf.routerIP = x
|
||||
s.conf.subnetMask = x
|
||||
|
||||
// s.conf.ipStart = net.ParseIP(conf.RangeStart)
|
||||
// if s.conf.ipStart == nil {
|
||||
// return nil, fmt.Errorf("DHCPv6: invalid range-start IP: %s", conf.RangeStart)
|
||||
|
|
|
@ -326,6 +326,8 @@ func (s *V6Server) process(msg *dhcpv6.Message, req dhcpv6.DHCPv6, resp dhcpv6.D
|
|||
return false
|
||||
}
|
||||
|
||||
// lock
|
||||
|
||||
lease := s.findLease(mac)
|
||||
if lease == nil {
|
||||
log.Debug("DHCPv6: no lease for: %s", mac)
|
||||
|
@ -345,7 +347,7 @@ func (s *V6Server) process(msg *dhcpv6.Message, req dhcpv6.DHCPv6, resp dhcpv6.D
|
|||
|
||||
err = s.checkIA(msg, lease)
|
||||
if err != nil {
|
||||
log.Debug("DHCPv6: %s", mac)
|
||||
log.Debug("DHCPv6: %s", err)
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue