dhcp: timeout value is set in DHCP daemon
Eventually the timeout value will become a CLI argument The default timeout was nestled all the way in the lease constructor This commit is the first step in making the timeout configurable by moving it to the DHCPLease constructor Signed-off-by: toby lorne <toby@toby.codes>
This commit is contained in:
@ -26,6 +26,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/containernetworking/cni/pkg/skel"
|
"github.com/containernetworking/cni/pkg/skel"
|
||||||
"github.com/containernetworking/cni/pkg/types"
|
"github.com/containernetworking/cni/pkg/types"
|
||||||
@ -63,7 +64,7 @@ func (d *DHCP) Allocate(args *skel.CmdArgs, result *current.Result) error {
|
|||||||
|
|
||||||
clientID := generateClientID(args.ContainerID, conf.Name, args.IfName)
|
clientID := generateClientID(args.ContainerID, conf.Name, args.IfName)
|
||||||
hostNetns := d.hostNetnsPrefix + args.Netns
|
hostNetns := d.hostNetnsPrefix + args.Netns
|
||||||
l, err := AcquireLease(clientID, hostNetns, args.IfName)
|
l, err := AcquireLease(clientID, hostNetns, args.IfName, 5*time.Second)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ type DHCPLease struct {
|
|||||||
renewalTime time.Time
|
renewalTime time.Time
|
||||||
rebindingTime time.Time
|
rebindingTime time.Time
|
||||||
expireTime time.Time
|
expireTime time.Time
|
||||||
|
timeout time.Duration
|
||||||
stopping uint32
|
stopping uint32
|
||||||
stop chan struct{}
|
stop chan struct{}
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
@ -64,11 +65,15 @@ type DHCPLease struct {
|
|||||||
// AcquireLease gets an DHCP lease and then maintains it in the background
|
// AcquireLease gets an DHCP lease and then maintains it in the background
|
||||||
// by periodically renewing it. The acquired lease can be released by
|
// by periodically renewing it. The acquired lease can be released by
|
||||||
// calling DHCPLease.Stop()
|
// calling DHCPLease.Stop()
|
||||||
func AcquireLease(clientID, netns, ifName string) (*DHCPLease, error) {
|
func AcquireLease(
|
||||||
|
clientID, netns, ifName string,
|
||||||
|
timeout time.Duration,
|
||||||
|
) (*DHCPLease, error) {
|
||||||
errCh := make(chan error, 1)
|
errCh := make(chan error, 1)
|
||||||
l := &DHCPLease{
|
l := &DHCPLease{
|
||||||
clientID: clientID,
|
clientID: clientID,
|
||||||
stop: make(chan struct{}),
|
stop: make(chan struct{}),
|
||||||
|
timeout: timeout,
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("%v: acquiring lease", clientID)
|
log.Printf("%v: acquiring lease", clientID)
|
||||||
@ -115,7 +120,7 @@ func (l *DHCPLease) Stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *DHCPLease) acquire() error {
|
func (l *DHCPLease) acquire() error {
|
||||||
c, err := newDHCPClient(l.link, l.clientID)
|
c, err := newDHCPClient(l.link, l.clientID, l.timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -242,7 +247,7 @@ func (l *DHCPLease) downIface() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *DHCPLease) renew() error {
|
func (l *DHCPLease) renew() error {
|
||||||
c, err := newDHCPClient(l.link, l.clientID)
|
c, err := newDHCPClient(l.link, l.clientID, l.timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -273,7 +278,7 @@ func (l *DHCPLease) renew() error {
|
|||||||
func (l *DHCPLease) release() error {
|
func (l *DHCPLease) release() error {
|
||||||
log.Printf("%v: releasing lease", l.clientID)
|
log.Printf("%v: releasing lease", l.clientID)
|
||||||
|
|
||||||
c, err := newDHCPClient(l.link, l.clientID)
|
c, err := newDHCPClient(l.link, l.clientID, l.timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -361,7 +366,10 @@ func backoffRetry(f func() (*dhcp4.Packet, error)) (*dhcp4.Packet, error) {
|
|||||||
return nil, errNoMoreTries
|
return nil, errNoMoreTries
|
||||||
}
|
}
|
||||||
|
|
||||||
func newDHCPClient(link netlink.Link, clientID string) (*dhcp4client.Client, error) {
|
func newDHCPClient(
|
||||||
|
link netlink.Link, clientID string,
|
||||||
|
timeout time.Duration,
|
||||||
|
) (*dhcp4client.Client, error) {
|
||||||
pktsock, err := dhcp4client.NewPacketSock(link.Attrs().Index)
|
pktsock, err := dhcp4client.NewPacketSock(link.Attrs().Index)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -369,7 +377,7 @@ func newDHCPClient(link netlink.Link, clientID string) (*dhcp4client.Client, err
|
|||||||
|
|
||||||
return dhcp4client.New(
|
return dhcp4client.New(
|
||||||
dhcp4client.HardwareAddr(link.Attrs().HardwareAddr),
|
dhcp4client.HardwareAddr(link.Attrs().HardwareAddr),
|
||||||
dhcp4client.Timeout(5*time.Second),
|
dhcp4client.Timeout(timeout),
|
||||||
dhcp4client.Broadcast(false),
|
dhcp4client.Broadcast(false),
|
||||||
dhcp4client.Connection(pktsock),
|
dhcp4client.Connection(pktsock),
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user