From ed5a831f95fc9c76511996beadd73dc3e54f2af5 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 30 Apr 2022 12:03:25 +0530 Subject: [PATCH] Scope: implemented RemoveLeaseByClientIdentifier() method and renamed RemoveLease() to RemoveLeaseByHardwareAddress(). --- DnsServerCore/Dhcp/Scope.cs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/DnsServerCore/Dhcp/Scope.cs b/DnsServerCore/Dhcp/Scope.cs index 62276e24..f7a63b9c 100644 --- a/DnsServerCore/Dhcp/Scope.cs +++ b/DnsServerCore/Dhcp/Scope.cs @@ -1013,7 +1013,7 @@ namespace DnsServerCore.Dhcp _lastModified = DateTime.UtcNow; } - internal Lease RemoveLease(string hardwareAddress) + internal Lease RemoveLeaseByHardwareAddress(string hardwareAddress) { byte[] hardwareAddressBytes = Lease.ParseHardwareAddress(hardwareAddress); @@ -1044,6 +1044,27 @@ namespace DnsServerCore.Dhcp throw new DhcpServerException("No lease was found for hardware address: " + hardwareAddress); } + internal Lease RemoveLeaseByClientIdentifier(string clientIdentifier) + { + //remove lease + if (!_leases.TryRemove(ClientIdentifierOption.Parse(clientIdentifier), out Lease removedLease)) + throw new DhcpServerException("No lease was found for client identifier: " + clientIdentifier); + + if (removedLease.Type == LeaseType.Reserved) + { + //remove reserved lease + ClientIdentifierOption reservedLeasesClientIdentifier = new ClientIdentifierOption((byte)DhcpMessageHardwareAddressType.Ethernet, removedLease.HardwareAddress); + if (_reservedLeases.TryGetValue(reservedLeasesClientIdentifier, out Lease existingReservedLease)) + { + //remove reserved lease only if the IP addresses match + if (existingReservedLease.Address.Equals(removedLease.Address)) + _reservedLeases.TryRemove(reservedLeasesClientIdentifier, out _); + } + } + + return removedLease; + } + internal void SetEnabled(bool enabled) { _enabled = enabled;