added some dhcp4 packet functions and generic byte reading functions

This commit is contained in:
2025-09-17 19:31:37 +09:00
parent 67b3e9727b
commit 90365bfdd4
8 changed files with 394 additions and 65 deletions

View File

@ -12,6 +12,7 @@ func main() {
var logger *AppLogger
var addr *net.UDPAddr
var addr2 *net.UDPAddr
var addr3 *net.UDPAddr
var err error
// addr, err = net.ResolveUDPAddr("udp4", "0.0.0.0:10000")
@ -27,7 +28,13 @@ func main() {
os.Exit(-1)
}
logger = NewAppLogger("client", os.Stderr, haza.LOG_ALL)
addr3, err = net.ResolveUDPAddr("udp4", "192.168.1.189:10000")
if err != nil {
fmt.Printf("Failed to resolve address - %s\n", err.Error())
os.Exit(-1)
}
logger = NewAppLogger("server", os.Stderr, haza.LOG_ALL)
ds, err = haza.NewDhcpServer(context.Background(), "haza-dhcpd", logger)
if err != nil {
@ -49,8 +56,14 @@ if err != nil {
fmt.Printf("Failed to add listgener for %v - %s\n", addr2, err.Error())
goto oops
}
err = ds.AddListener4("enp1s0", addr3)
if err != nil {
fmt.Printf("Failed to add listgener for %v - %s\n", addr3, err.Error())
goto oops
}
ds.StartService(nil)
ds.StartExtService(&signal_handler{svc:ds}, nil)
ds.WaitForTermination()
os.Exit(0)

69
cmd/signal.go Normal file
View File

@ -0,0 +1,69 @@
package main
import "haza"
import "sync"
import "os"
import "os/signal"
import "syscall"
type signal_handler struct {
svc haza.Service
}
func (sh *signal_handler) RunTask(wg *sync.WaitGroup) {
var sighup_chan chan os.Signal
var sigterm_chan chan os.Signal
var sig os.Signal
if wg != nil {
defer wg.Done()
}
sighup_chan = make(chan os.Signal, 1)
sigterm_chan = make(chan os.Signal, 1)
signal.Notify(sighup_chan, syscall.SIGHUP)
signal.Notify(sigterm_chan, syscall.SIGTERM, os.Interrupt)
chan_loop:
for {
select {
case <-sighup_chan:
sh.svc.FixServices()
case sig = <-sigterm_chan:
sh.svc.StopServices()
sh.svc.WriteLog ("", haza.LOG_INFO, "Received %s signal", sig)
break chan_loop
}
}
//signal.Reset(syscall.SIGHUP)
//signal.Reset(syscall.SIGTERM)
signal.Stop(sighup_chan)
signal.Stop(sigterm_chan)
}
func (sh *signal_handler) StartService(data interface{}) {
// this isn't actually used standalone..
// if we are to implement it, it must use the wait group for signal handler itself
// however, this service is run through another service.
// sh.wg.Add(1)
// go sh.RunTask(&sh.wg)
}
func (sh *signal_handler) StopServices() {
syscall.Kill(syscall.Getpid(), syscall.SIGTERM) // TODO: find a better to terminate the signal handler...
}
func (sh *signal_handler) FixServices() {
}
func (sh *signal_handler) WaitForTermination() {
// not implemented. see the comment in StartServices()
// sh.wg.Wait()
}
func (sh *signal_handler) WriteLog(id string, level haza.LogLevel, fmt string, args ...interface{}) {
sh.svc.WriteLog(id, level, fmt, args...)
}