DHCP MAC-address resolver: handle duplicate leases (#740)

This commit is contained in:
Nikolay Edigaryev 2024-02-23 16:49:06 +04:00 committed by GitHub
parent 3f17884ac2
commit e2d6c13ed0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 1 deletions

View File

@ -45,7 +45,10 @@ class Leases {
(lease.mac, lease)
})
self.leases = Dictionary(uniqueKeysWithValues: leases)
self.leases = Dictionary(leases) { (left, right) in
// When duplicate lease is found, prefer a newer lease over the older one
(left.expiresAt > right.expiresAt) ? left : right
}
}
/// Parse leases from the host cache similarly to the PLCache_read() function found in Apple's Open Source releases.

View File

@ -35,4 +35,27 @@ final class LeasesTests: XCTestCase {
XCTAssertEqual(IPv4Address("1.2.3.4"), leases.ResolveMACAddress(macAddress: macAddress))
}
func testDuplicateYetNotExpiredLeases() throws {
let macAddress = MACAddress(fromString: "11:22:33:44:55:66")!
let leases = try Leases("""
{
name=debian
ip_address=192.168.64.1
hw_address=1,\(macAddress)
identifier=1,\(macAddress)
lease=\(Int((Date() + 10.minutes).timeIntervalSince1970).hex)
}
{
name=debian
ip_address=192.168.64.2
hw_address=1,\(macAddress)
identifier=1,\(macAddress)
lease=\(Int((Date() + 5.minutes).timeIntervalSince1970).hex)
}
""")
XCTAssertEqual(IPv4Address("192.168.64.1"), leases.ResolveMACAddress(macAddress: macAddress))
}
}