mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-01-12 17:07:23 +03:00
aa872dfe98
Updates #4923.
Squashed commit of the following:
commit 14ae8dc3680eae7d3ecb9e37a44c2e68221c5085
Merge: 280a4dbc7 713901c2a
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Wed Jan 31 13:52:52 2024 +0300
Merge branch 'master' into 4923-gopacket-dhcp-vol.6
commit 280a4dbc728ff67c7659f91734a74c87bf0bda43
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Tue Jan 30 20:20:04 2024 +0300
dhcpsvc: imp docs
commit 310ed67b9bf22f88c4414095bfbfc1a29c6db6d5
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Tue Jan 30 18:51:49 2024 +0300
dhcpsvc: generalize
commit e4c2cae73a729be4db244d3042d93fcc9742bb34
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Tue Jan 30 12:37:38 2024 +0300
dhcpsvc: imp code
commit 9a60d3529293ce1f0e8da70da05958f81e1d0092
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Fri Jan 26 16:28:04 2024 +0300
dhcpsvc: imp code
commit 120c0472f3a3df2ebc0495a40936c8f94156db4b
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Thu Jan 25 20:44:09 2024 +0300
dhcpsvc: imp code, names, docs
commit a92f44c75279868d8e07fe7d468278025a245d13
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Wed Jan 24 16:01:35 2024 +0300
dhcpsvc: imp code, docs
commit 18b3f237b7523f649b49563e852c298fe02fa8ae
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Thu Jan 18 15:29:36 2024 +0300
dhcpsvc: add some lease-related methods
41 lines
984 B
Go
41 lines
984 B
Go
package dhcpsvc
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"golang.org/x/exp/slices"
|
|
)
|
|
|
|
// netInterface is a common part of any network interface within the DHCP
|
|
// server.
|
|
//
|
|
// TODO(e.burkov): Add other methods as [DHCPServer] evolves.
|
|
type netInterface struct {
|
|
// name is the name of the network interface.
|
|
name string
|
|
|
|
// leases is a set of leases sorted by hardware address.
|
|
leases []*Lease
|
|
|
|
// leaseTTL is the default Time-To-Live value for leases.
|
|
leaseTTL time.Duration
|
|
}
|
|
|
|
// reset clears all the slices in iface for reuse.
|
|
func (iface *netInterface) reset() {
|
|
iface.leases = iface.leases[:0]
|
|
}
|
|
|
|
// insertLease inserts the given lease into iface. It returns an error if the
|
|
// lease can't be inserted.
|
|
func (iface *netInterface) insertLease(l *Lease) (err error) {
|
|
i, found := slices.BinarySearchFunc(iface.leases, l, compareLeaseMAC)
|
|
if found {
|
|
return fmt.Errorf("lease for mac %s already exists", l.HWAddr)
|
|
}
|
|
|
|
iface.leases = slices.Insert(iface.leases, i, l)
|
|
|
|
return nil
|
|
}
|