dhcp reads done, moving on to offers

This commit is contained in:
2023-05-09 07:28:54 +00:00
parent 6ba2bf3911
commit f66fbc0f6c
20 changed files with 196 additions and 58 deletions

View File

@@ -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",
],
)

View File

@@ -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"
)

View File

@@ -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")
}
}
}
}

View File

@@ -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 {