From 6269f399a535f9316e7c3240bf01957f6eca684e Mon Sep 17 00:00:00 2001 From: Songmin Li Date: Wed, 21 Aug 2024 22:06:32 +0800 Subject: [PATCH] Fix unnecessary retrying when the link is down in dhcp. From the dhcp daemon log, we can see that dhcp will fail to acquire the lease when the link is down, and success on retry. ``` 2024/08/21 21:30:44 macvlan-dhcp/eth1: acquiring lease 2024/08/21 21:30:44 Link "eth1" down. Attempting to set up 2024/08/21 21:30:44 network is down 2024/08/21 21:30:44 retrying in 2.641696 seconds 2024/08/21 21:30:49 macvlan-dhcp/eth1: lease acquired, expiration is 2024-08-22 09:30:49.755367962 +0800 CST m=+43205.712107889 ``` After move the code of set up link to the beginning of the function, the dhcp success on first time. ``` 2024/08/21 22:04:02 macvlan-dhcp/eth1: acquiring lease 2024/08/21 22:04:02 Link "eth1" down. Attempting to set up 2024/08/21 22:04:05 macvlan-dhcp/eth1: lease acquired, expiration is 2024-08-22 10:04:05.297887726 +0800 CST m=+43203.081141304 ``` Signed-off-by: Songmin Li --- plugins/ipam/dhcp/lease.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/ipam/dhcp/lease.go b/plugins/ipam/dhcp/lease.go index 4377f58f0..8928c79de 100644 --- a/plugins/ipam/dhcp/lease.go +++ b/plugins/ipam/dhcp/lease.go @@ -234,19 +234,19 @@ func (l *DHCPLease) getAllOptions() dhcp4.Options { } func (l *DHCPLease) acquire() error { - c, err := newDHCPClient(l.link, l.timeout, l.broadcast) - if err != nil { - return err - } - defer c.Close() - if (l.link.Attrs().Flags & net.FlagUp) != net.FlagUp { log.Printf("Link %q down. Attempting to set up", l.link.Attrs().Name) - if err = netlink.LinkSetUp(l.link); err != nil { + if err := netlink.LinkSetUp(l.link); err != nil { return err } } + c, err := newDHCPClient(l.link, l.timeout, l.broadcast) + if err != nil { + return err + } + defer c.Close() + opts := l.getAllOptions() pkt, err := backoffRetry(l.resendMax, func() (*dhcp4.Packet, error) {