hook up SIGUSR2 to DHCPRELEASE
This commit is contained in:
parent
9facb2c230
commit
7f93ea6661
@ -32,6 +32,8 @@ func logic() error {
|
|||||||
c := dhcp4.Client{
|
c := dhcp4.Client{
|
||||||
Interface: iface,
|
Interface: iface,
|
||||||
}
|
}
|
||||||
|
usr2 := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(usr2, syscall.SIGUSR2)
|
||||||
for c.ObtainOrRenew() {
|
for c.ObtainOrRenew() {
|
||||||
if err := c.Err(); err != nil {
|
if err := c.Err(); err != nil {
|
||||||
log.Printf("Temporary error: %v", err)
|
log.Printf("Temporary error: %v", err)
|
||||||
@ -48,7 +50,15 @@ func logic() error {
|
|||||||
if err := notify.Process("/user/netconfi", syscall.SIGUSR1); err != nil {
|
if err := notify.Process("/user/netconfi", syscall.SIGUSR1); err != nil {
|
||||||
log.Printf("notifying netconfig: %v", err)
|
log.Printf("notifying netconfig: %v", err)
|
||||||
}
|
}
|
||||||
time.Sleep(time.Until(c.Config().RenewAfter))
|
select {
|
||||||
|
case <-time.After(time.Until(c.Config().RenewAfter)):
|
||||||
|
// fallthrough and renew the DHCP lease
|
||||||
|
case <-usr2:
|
||||||
|
if err := c.Release(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
os.Exit(125) // quit supervision by gokrazy
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return c.Err() // permanent error
|
return c.Err() // permanent error
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,9 @@ type Client struct {
|
|||||||
cfg Config
|
cfg Config
|
||||||
timeNow func() time.Time
|
timeNow func() time.Time
|
||||||
randRead func([]byte) (int, error)
|
randRead func([]byte) (int, error)
|
||||||
|
|
||||||
|
// last DHCPACK packet for renewal/release
|
||||||
|
ack dhcp4.Packet
|
||||||
}
|
}
|
||||||
|
|
||||||
// ObtainOrRenew returns false when encountering a permanent error.
|
// ObtainOrRenew returns false when encountering a permanent error.
|
||||||
@ -87,6 +90,7 @@ func (c *Client) ObtainOrRenew() bool {
|
|||||||
c.err = fmt.Errorf("received DHCPNAK")
|
c.err = fmt.Errorf("received DHCPNAK")
|
||||||
return true // temporary error
|
return true // temporary error
|
||||||
}
|
}
|
||||||
|
c.ack = ack
|
||||||
opts := ack.ParseOptions()
|
opts := ack.ParseOptions()
|
||||||
|
|
||||||
// DHCPACK (described in RFC2131 4.3.1)
|
// DHCPACK (described in RFC2131 4.3.1)
|
||||||
@ -131,6 +135,12 @@ func (c *Client) ObtainOrRenew() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Release() error {
|
||||||
|
err := c.dhcp.Release(c.ack)
|
||||||
|
c.ack = nil
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) Err() error {
|
func (c *Client) Err() error {
|
||||||
return c.err
|
return c.err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user