2 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
3 changed files with 8 additions and 4 deletions

2
go.mod
View File

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

4
go.sum
View File

@ -1,5 +1,5 @@
bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200822174213-684b7f10bbcc h1:8dSoG9r/UydbDre0bV/oWef5zkPZVTf2CuEITPgWXqU= bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200902060713-63d3ed56d6a1 h1:j6eK/6nuJ7H3J/8BZn753XP3SzOBGt73b7wHxRCMhAo=
bombur.narnian.us/git/lordwelch/gokrazy v0.0.0-20200822174213-684b7f10bbcc/go.mod h1:gg6WuqKqQT5Ty8vivqW/UUwyinbpjNpiaQJyAHDUquY= 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 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 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= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=

View File

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