Skip to content

Commit

Permalink
Merge pull request #709 from fwiesel/ipam_dhcp_client_id
Browse files Browse the repository at this point in the history
ipam/dhcp: Fix client id in renew/release
  • Loading branch information
squeed committed Mar 2, 2022
2 parents 3512b10 + 7a98979 commit 600c58a
Showing 1 changed file with 27 additions and 18 deletions.
45 changes: 27 additions & 18 deletions plugins/ipam/dhcp/lease.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,30 @@ func (l *DHCPLease) Stop() {
l.wg.Wait()
}

func (l *DHCPLease) getOptionsWithClientId() dhcp4.Options {
opts := make(dhcp4.Options)
opts[dhcp4.OptionClientIdentifier] = []byte(l.clientID)
// client identifier's first byte is "type"
newClientID := []byte{0}
newClientID = append(newClientID, opts[dhcp4.OptionClientIdentifier]...)
opts[dhcp4.OptionClientIdentifier] = newClientID
return opts
}

func (l *DHCPLease) getAllOptions() dhcp4.Options {
opts := l.getOptionsWithClientId()

for k, v := range l.optsProviding {
opts[k] = v
}

opts[dhcp4.OptionParameterRequestList] = []byte{}
for k := range l.optsRequesting {
opts[dhcp4.OptionParameterRequestList] = append(opts[dhcp4.OptionParameterRequestList], byte(k))
}
return opts
}

func (l *DHCPLease) acquire() error {
c, err := newDHCPClient(l.link, l.clientID, l.timeout, l.broadcast)
if err != nil {
Expand All @@ -214,19 +238,7 @@ func (l *DHCPLease) acquire() error {
}
}

opts := make(dhcp4.Options)
opts[dhcp4.OptionClientIdentifier] = []byte(l.clientID)
opts[dhcp4.OptionParameterRequestList] = []byte{}
for k := range l.optsRequesting {
opts[dhcp4.OptionParameterRequestList] = append(opts[dhcp4.OptionParameterRequestList], byte(k))
}
for k, v := range l.optsProviding {
opts[k] = v
}
// client identifier's first byte is "type"
newClientID := []byte{0}
newClientID = append(newClientID, opts[dhcp4.OptionClientIdentifier]...)
opts[dhcp4.OptionClientIdentifier] = newClientID
opts := l.getAllOptions()

pkt, err := backoffRetry(l.resendMax, func() (*dhcp4.Packet, error) {
ok, ack, err := DhcpRequest(c, opts)
Expand Down Expand Up @@ -344,9 +356,7 @@ func (l *DHCPLease) renew() error {
}
defer c.Close()

opts := make(dhcp4.Options)
opts[dhcp4.OptionClientIdentifier] = []byte(l.clientID)

opts := l.getOptionsWithClientId()
pkt, err := backoffRetry(l.resendMax, func() (*dhcp4.Packet, error) {
ok, ack, err := DhcpRenew(c, *l.ack, opts)
switch {
Expand Down Expand Up @@ -375,8 +385,7 @@ func (l *DHCPLease) release() error {
}
defer c.Close()

opts := make(dhcp4.Options)
opts[dhcp4.OptionClientIdentifier] = []byte(l.clientID)
opts := l.getOptionsWithClientId()

if err = DhcpRelease(c, *l.ack, opts); err != nil {
return fmt.Errorf("failed to send DHCPRELEASE")
Expand Down

0 comments on commit 600c58a

Please sign in to comment.