Initial import.
This commit is contained in:
62
server/server.go
Normal file
62
server/server.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"net"
|
||||
)
|
||||
|
||||
// github.com/insomniacslk/dhcp
|
||||
|
||||
type Config struct {
|
||||
Device string `yaml:"device"`
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
addrs []net.IP
|
||||
l net.Listener
|
||||
}
|
||||
|
||||
func addrsForDevice(dev string) ([]net.IP, error) {
|
||||
netInterface, err := net.InterfaceByName(dev)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var addrs []net.IP
|
||||
devAddrs, err := netInterface.Addrs()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, addr := range devAddrs {
|
||||
ip := net.ParseIP(addr.String())
|
||||
if ip == nil {
|
||||
continue // address isn't an IP address
|
||||
}
|
||||
|
||||
// DHCP should only listen on private addresses.
|
||||
if !ip.IsPrivate() {
|
||||
continue
|
||||
}
|
||||
|
||||
// only support IPv4 for now
|
||||
if len(ip) != 4 {
|
||||
continue
|
||||
}
|
||||
|
||||
addrs = append(addrs, ip)
|
||||
}
|
||||
|
||||
return addrs, nil
|
||||
}
|
||||
|
||||
func NewServer(cfg *Config) (*Server, error) {
|
||||
addrs, err := addrsForDevice(cfg.Device)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Println("server IP list: ", addrs)
|
||||
return nil, errors.New("not implemented")
|
||||
}
|
||||
Reference in New Issue
Block a user