summaryrefslogtreecommitdiffhomepage
path: root/dhcpv4/server4/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv4/server4/server.go')
-rw-r--r--dhcpv4/server4/server.go40
1 files changed, 34 insertions, 6 deletions
diff --git a/dhcpv4/server4/server.go b/dhcpv4/server4/server.go
index 9c1cee2..c50e6a5 100644
--- a/dhcpv4/server4/server.go
+++ b/dhcpv4/server4/server.go
@@ -3,6 +3,7 @@ package server4
import (
"log"
"net"
+ "os"
"github.com/insomniacslk/dhcp/dhcpv4"
)
@@ -68,32 +69,33 @@ type Handler func(conn net.PacketConn, peer net.Addr, m *dhcpv4.DHCPv4)
type Server struct {
conn net.PacketConn
Handler Handler
+ logger Logger
}
// Serve serves requests.
func (s *Server) Serve() error {
- log.Printf("Server listening on %s", s.conn.LocalAddr())
- log.Print("Ready to handle requests")
+ s.logger.Printf("Server listening on %s", s.conn.LocalAddr())
+ s.logger.Printf("Ready to handle requests")
defer s.Close()
for {
rbuf := make([]byte, 4096) // FIXME this is bad
n, peer, err := s.conn.ReadFrom(rbuf)
if err != nil {
- log.Printf("Error reading from packet conn: %v", err)
+ s.logger.Printf("Error reading from packet conn: %v", err)
return err
}
- log.Printf("Handling request from %v", peer)
+ s.logger.Printf("Handling request from %v", peer)
m, err := dhcpv4.FromBytes(rbuf[:n])
if err != nil {
- log.Printf("Error parsing DHCPv4 request: %v", err)
+ s.logger.Printf("Error parsing DHCPv4 request: %v", err)
continue
}
upeer, ok := peer.(*net.UDPAddr)
if !ok {
- log.Printf("Not a UDP connection? Peer is %s", peer)
+ s.logger.Printf("Not a UDP connection? Peer is %s", peer)
continue
}
// Set peer to broadcast if the client did not have an IP.
@@ -126,6 +128,7 @@ func WithConn(c net.PacketConn) ServerOpt {
func NewServer(ifname string, addr *net.UDPAddr, handler Handler, opt ...ServerOpt) (*Server, error) {
s := &Server{
Handler: handler,
+ logger: EmptyLogger{},
}
for _, o := range opt {
@@ -141,3 +144,28 @@ func NewServer(ifname string, addr *net.UDPAddr, handler Handler, opt ...ServerO
}
return s, nil
}
+
+// WithSummaryLogger logs one-line DHCPv4 message summaries when sent & received.
+func WithSummaryLogger() ServerOpt {
+ return func(s *Server) {
+ s.logger = ShortSummaryLogger{
+ Printfer: log.New(os.Stderr, "[dhcpv4] ", log.LstdFlags),
+ }
+ }
+}
+
+// WithDebugLogger logs multi-line full DHCPv4 messages when sent & received.
+func WithDebugLogger() ServerOpt {
+ return func(s *Server) {
+ s.logger = DebugLogger{
+ Printfer: log.New(os.Stderr, "[dhcpv4] ", log.LstdFlags),
+ }
+ }
+}
+
+// WithLogger set the logger (see interface Logger).
+func WithLogger(newLogger Logger) ServerOpt {
+ return func(s *Server) {
+ s.logger = newLogger
+ }
+}