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",
|
||||
"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",
|
||||
|
||||
|
@ -172,25 +172,27 @@ 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) {
|
||||
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()
|
||||
var last dhcp4.Packet
|
||||
if c.ack == nil {
|
||||
discoveryPacket := c.dhcp.DiscoverPacket()
|
||||
c.addHostname(&discoveryPacket)
|
||||
c.addClientId(&discoveryPacket)
|
||||
discoveryPacket.PadToMinSize()
|
||||
|
||||
if err := c.dhcp.SendPacket(discoveryPacket); err != nil {
|
||||
return false, discoveryPacket, err
|
||||
if err := c.dhcp.SendPacket(discoveryPacket); err != nil {
|
||||
return false, discoveryPacket, err
|
||||
}
|
||||
|
||||
offerPacket, err := c.dhcp.GetOffer(&discoveryPacket)
|
||||
if err != nil {
|
||||
return false, offerPacket, err
|
||||
}
|
||||
last = offerPacket
|
||||
} else {
|
||||
last = c.ack
|
||||
}
|
||||
|
||||
offerPacket, err := c.dhcp.GetOffer(&discoveryPacket)
|
||||
if err != nil {
|
||||
return false, offerPacket, err
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user