dhcp4: skip DHCPDISCOVER when renewing
This commit is contained in:
parent
32dd03c7f2
commit
d2ecb190ac
@ -118,8 +118,6 @@ func TestDHCPv4(t *testing.T) {
|
|||||||
"DHCPREQUEST(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",
|
"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",
|
"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",
|
"DHCPACK(veth0b) 192.168.23.4 02:73:53:00:ca:fe midna",
|
||||||
|
|
||||||
|
@ -172,13 +172,11 @@ func (c *Client) addClientId(p *dhcp4.Packet) {
|
|||||||
// dhcpRequest is a copy of (dhcp4client/Client).Request which
|
// dhcpRequest is a copy of (dhcp4client/Client).Request which
|
||||||
// includes the hostname.
|
// includes the hostname.
|
||||||
func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
|
func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
|
||||||
|
var last dhcp4.Packet
|
||||||
|
if c.ack == nil {
|
||||||
discoveryPacket := c.dhcp.DiscoverPacket()
|
discoveryPacket := c.dhcp.DiscoverPacket()
|
||||||
c.addHostname(&discoveryPacket)
|
c.addHostname(&discoveryPacket)
|
||||||
c.addClientId(&discoveryPacket)
|
c.addClientId(&discoveryPacket)
|
||||||
if c.ack != nil {
|
|
||||||
discoveryPacket.SetYIAddr(c.ack.YIAddr())
|
|
||||||
discoveryPacket.AddOption(dhcp4.OptionRequestedIPAddress, (c.ack.YIAddr()).To4())
|
|
||||||
}
|
|
||||||
discoveryPacket.PadToMinSize()
|
discoveryPacket.PadToMinSize()
|
||||||
|
|
||||||
if err := c.dhcp.SendPacket(discoveryPacket); err != nil {
|
if err := c.dhcp.SendPacket(discoveryPacket); err != nil {
|
||||||
@ -189,8 +187,12 @@ func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, offerPacket, err
|
return false, offerPacket, err
|
||||||
}
|
}
|
||||||
|
last = offerPacket
|
||||||
|
} else {
|
||||||
|
last = c.ack
|
||||||
|
}
|
||||||
|
|
||||||
requestPacket := c.dhcp.RequestPacket(&offerPacket)
|
requestPacket := c.dhcp.RequestPacket(&last)
|
||||||
c.addHostname(&requestPacket)
|
c.addHostname(&requestPacket)
|
||||||
c.addClientId(&requestPacket)
|
c.addClientId(&requestPacket)
|
||||||
requestPacket.PadToMinSize()
|
requestPacket.PadToMinSize()
|
||||||
@ -206,6 +208,7 @@ func (c *Client) dhcpRequest() (bool, dhcp4.Packet, error) {
|
|||||||
|
|
||||||
acknowledgementOptions := acknowledgement.ParseOptions()
|
acknowledgementOptions := acknowledgement.ParseOptions()
|
||||||
if dhcp4.MessageType(acknowledgementOptions[dhcp4.OptionDHCPMessageType][0]) != dhcp4.ACK {
|
if dhcp4.MessageType(acknowledgementOptions[dhcp4.OptionDHCPMessageType][0]) != dhcp4.ACK {
|
||||||
|
c.ack = nil // start over
|
||||||
return false, acknowledgement, nil
|
return false, acknowledgement, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user