6 Commits

Author SHA1 Message Date
a34a03e036 Update gokrazy 2020-09-02 00:04:04 -07:00
68105841c6 Fallback to DHCPDISCOVER after 4 failed timeouts 2020-09-01 22:16:14 -07:00
1789f1e94c Replace gokrazy 2020-08-22 10:53:05 -07:00
55ac682d36 Fix flag.parse 2020-08-17 23:13:26 -07:00
5f01503df6 Use the correct NTP dhcp4 option 2020-08-16 18:19:34 -07:00
ce29a6f436 fix ip length 2020-08-10 22:05:40 -07:00
5 changed files with 17 additions and 9 deletions

View File

@ -68,6 +68,7 @@ func logic() error {
}
func main() {
flag.Parse()
if err := logic(); err != nil {
log.Fatal(err)
}

View File

@ -266,18 +266,19 @@ func newSrv(permDir string) (*srv, error) {
if err != nil {
return nil, err
}
serverIP = serverIP.To4()
var domainSearch []byte
domainSearch, err = dhcp4d.CompressNames("lan.", *domain)
if err != nil {
return nil, err
}
options := dhcp4.Options{
dhcp4.OptionSubnetMask: []byte{255, 255, 255, 0},
dhcp4.OptionRouter: []byte(serverIP),
dhcp4.OptionDomainNameServer: []byte(serverIP),
dhcp4.OptionTimeServer: []byte(serverIP),
dhcp4.OptionDomainName: []byte(*domain),
dhcp4.OptionDomainSearch: domainSearch,
dhcp4.OptionSubnetMask: []byte{255, 255, 255, 0},
dhcp4.OptionRouter: []byte(serverIP),
dhcp4.OptionDomainNameServer: []byte(serverIP),
dhcp4.OptionNetworkTimeProtocolServers: []byte(serverIP),
dhcp4.OptionDomainName: []byte(*domain),
dhcp4.OptionDomainSearch: domainSearch,
}
handler, err := dhcp4d.NewHandler(permDir, ifc, *iface, nil, options)

2
go.mod
View File

@ -2,6 +2,8 @@ module github.com/rtr7/router7
go 1.13
replace github.com/gokrazy/gokrazy => bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200902065731-7b8bf9bc8266
require (
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
github.com/digineo/go-ping v1.0.0

4
go.sum
View File

@ -1,3 +1,5 @@
bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200902060713-63d3ed56d6a1 h1:j6eK/6nuJ7H3J/8BZn753XP3SzOBGt73b7wHxRCMhAo=
bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200902060713-63d3ed56d6a1/go.mod h1:gg6WuqKqQT5Ty8vivqW/UUwyinbpjNpiaQJyAHDUquY=
cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
@ -79,8 +81,6 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gokrazy/gokrazy v0.0.0-20200801074800-f7c3cb7e0e6a h1:p/pMUGI4GdWyQG6HfQPgIseILKAEpsGeVrhx2JCI7ns=
github.com/gokrazy/gokrazy v0.0.0-20200801074800-f7c3cb7e0e6a/go.mod h1:MAXBdw3NnYx7LEQrgebujybMDDpROBGLpeeGxgz9KR4=
github.com/gokrazy/internal v0.0.0-20200531194636-d96421c60091/go.mod h1:LA5TQy7LcvYGQOy75tkrYkFUhbV2nl5qEBP47PSi2JA=
github.com/gokrazy/internal v0.0.0-20200713084155-ab6fc6e02a03 h1:H2GO8vfBaFo6msfPXPoY6KSqO1HmfDe0eiAc0LYKXOI=
github.com/gokrazy/internal v0.0.0-20200713084155-ab6fc6e02a03/go.mod h1:LA5TQy7LcvYGQOy75tkrYkFUhbV2nl5qEBP47PSi2JA=

View File

@ -51,6 +51,8 @@ type Client struct {
timeNow func() time.Time
generateXID func() uint32
timeoutCount int
// last DHCPACK packet for renewal/release
Ack *layers.DHCPv4
}
@ -130,9 +132,11 @@ func (c *Client) ObtainOrRenew() bool {
if err != nil {
if errno, ok := err.(syscall.Errno); ok && errno == syscall.EAGAIN {
c.err = fmt.Errorf("DHCP: timeout (server(s) unreachable)")
c.timeoutCount++
return true // temporary error
}
if err == errNAK {
if err == errNAK || c.timeoutCount > 3 {
c.timeoutCount = 0
c.Ack = nil // start over at DHCPDISCOVER
}
c.err = fmt.Errorf("DHCP: %v", err)