dhcp reads done, moving on to offers
This commit is contained in:
@@ -15,7 +15,8 @@ go_library(
|
||||
"//config",
|
||||
"//dhcp",
|
||||
"//iptools",
|
||||
"@dev_wntrmute_git_kyle_goutils//syslog",
|
||||
"@com_github_benbjohnson_clock//:clock",
|
||||
"@dev_wntrmute_git_kyle_goutils//log",
|
||||
"@in_gopkg_yaml_v2//:yaml_v2",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
log "git.wntrmute.dev/kyle/goutils/syslog"
|
||||
log "git.wntrmute.dev/kyle/goutils/log"
|
||||
"git.wntrmute.dev/kyle/kdhcp/iptools"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
@@ -3,8 +3,9 @@ package server
|
||||
import (
|
||||
"fmt"
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
log "git.wntrmute.dev/kyle/goutils/syslog"
|
||||
log "git.wntrmute.dev/kyle/goutils/log"
|
||||
"git.wntrmute.dev/kyle/kdhcp/iptools"
|
||||
)
|
||||
|
||||
@@ -35,3 +36,14 @@ func (srv *Server) loadPoolsFromConfig() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (srv *Server) updatePoolLoop() {
|
||||
for {
|
||||
time.Sleep(time.Minute)
|
||||
for _, p := range srv.Pools {
|
||||
if p.Update(srv.clock.Now()) {
|
||||
log.Debugln("pools updated")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,11 @@ import (
|
||||
"net"
|
||||
"time"
|
||||
|
||||
log "git.wntrmute.dev/kyle/goutils/syslog"
|
||||
log "git.wntrmute.dev/kyle/goutils/log"
|
||||
"git.wntrmute.dev/kyle/kdhcp/config"
|
||||
"git.wntrmute.dev/kyle/kdhcp/dhcp"
|
||||
"git.wntrmute.dev/kyle/kdhcp/iptools"
|
||||
"github.com/benbjohnson/clock"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -22,6 +23,8 @@ type Server struct {
|
||||
Config *config.Config
|
||||
Pools map[string]*iptools.Pool
|
||||
Static map[string]*iptools.LeaseInfo
|
||||
|
||||
clock clock.Clock
|
||||
}
|
||||
|
||||
func (s *Server) Close() error {
|
||||
@@ -62,23 +65,34 @@ func (s *Server) WriteTo(b []byte, addr net.Addr) error {
|
||||
return errors.New("server: not implemented")
|
||||
}
|
||||
|
||||
func (s *Server) AcceptPacket() error {
|
||||
func (s *Server) AcceptPacket() (*dhcp.BootRequest, error) {
|
||||
request, err := s.ReadDHCPRequest()
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debugf("BOOTP request received from %x", request.HardwareAddress)
|
||||
return nil
|
||||
return request, nil
|
||||
}
|
||||
|
||||
func (s *Server) Listen() {
|
||||
go s.updatePoolLoop()
|
||||
|
||||
for {
|
||||
if err := s.AcceptPacket(); err != nil {
|
||||
req, err := s.AcceptPacket()
|
||||
if err != nil {
|
||||
log.Errf("server: error reading packet: %s", err)
|
||||
continue
|
||||
}
|
||||
break
|
||||
|
||||
lease := s.SelectLease(req, s.clock.Now())
|
||||
if err != nil {
|
||||
log.Err("server: couldn't find available lease")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Infof("available lease: %s", lease)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +101,7 @@ func New(cfg *config.Config) (*Server, error) {
|
||||
Config: cfg,
|
||||
Pools: map[string]*iptools.Pool{},
|
||||
Static: map[string]*iptools.LeaseInfo{},
|
||||
clock: clock.New(),
|
||||
}
|
||||
|
||||
if err := srv.loadPoolsFromConfig(); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user