Fallback to DHCPDISCOVER after 4 failed timeouts
This commit is contained in:
parent
1789f1e94c
commit
68105841c6
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user