dhcp4: skip DHCPDISCOVER when renewing

This commit is contained in:
Michael Stapelberg 2018-06-15 09:58:03 +02:00
parent 32dd03c7f2
commit d2ecb190ac
2 changed files with 19 additions and 18 deletions

View File

@ -118,8 +118,6 @@ func TestDHCPv4(t *testing.T) {
"DHCPREQUEST(veth0b) 192.168.23.4 02:73:53:00:ca:fe",
"DHCPACK(veth0b) 192.168.23.4 02:73:53:00:ca:fe midna",
"DHCPDISCOVER(veth0b) 192.168.23.4 02:73:53:00:ca:fe",
"DHCPOFFER(veth0b) 192.168.23.4 02:73:53:00:ca:fe",
"DHCPREQUEST(veth0b) 192.168.23.4 02:73:53:00:ca:fe",
"DHCPACK(veth0b) 192.168.23.4 02:73:53:00:ca:fe midna",

View File

@ -172,13 +172,11 @@ func (c *Client) addClientId(p *dhcp4.Packet) {
// dhcpRequest is a copy of (dhcp4client/Client).Request which
// includes the hostname.
func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
var last dhcp4.Packet
if c.ack == nil {
discoveryPacket := c.dhcp.DiscoverPacket()
c.addHostname(&discoveryPacket)
c.addClientId(&discoveryPacket)
if c.ack != nil {
discoveryPacket.SetYIAddr(c.ack.YIAddr())
discoveryPacket.AddOption(dhcp4.OptionRequestedIPAddress, (c.ack.YIAddr()).To4())
}
discoveryPacket.PadToMinSize()
if err := c.dhcp.SendPacket(discoveryPacket); err != nil {
@ -189,8 +187,12 @@ func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
if err != nil {
return false, offerPacket, err
}
last = offerPacket
} else {
last = c.ack
}
requestPacket := c.dhcp.RequestPacket(&offerPacket)
requestPacket := c.dhcp.RequestPacket(&last)
c.addHostname(&requestPacket)
c.addClientId(&requestPacket)
requestPacket.PadToMinSize()
@ -206,6 +208,7 @@ func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
acknowledgementOptions := acknowledgement.ParseOptions()
if dhcp4.MessageType(acknowledgementOptions[dhcp4.OptionDHCPMessageType][0]) != dhcp4.ACK {
c.ack = nil // start over
return false, acknowledgement, nil
}