private void CleanPool(DhcpPool pool, DhcpAddressPool addressPool) { var now = DateTimeOffset.Now; var timeoutDeadline = now.Add(pool.RequestTimeOut); // TODO : Find better way to clean List <Lease> leasesToClean; try { leasesToClean = Leases .Where(x => x.Pool == pool && ( ( x.Acknowledged == null && x.TimesOut < now ) || ( x.Expires < now ) ) ).ToList(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed to scan leases for leases to clean : " + e.Message); return; } foreach (var lease in leasesToClean) { try { addressPool.SetAvailable(lease.Address); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed to set " + lease.Address.ToString() + " as available : " + e.Message); return; } try { Leases.Remove(lease); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed to remove " + lease.Address.ToString() + " from leases : " + e.Message); return; } } }
public DhcpAddressPool(DhcpPool pool) { Pool = pool; AvailableAddresses = new IPAddressPool(pool.Network); var toUnset = Pool.Exclusions.Clone(); toUnset.Add(pool.Network.BaseNetwork.Network); toUnset.Add(pool.Network.Broadcast); toUnset.Add(Pool.DefaultGateways); UnsetAvailable(toUnset); }
public bool RegisterPool(DhcpPool pool) { var conflictingPool = GetPoolByPrefix(pool.Network); if (conflictingPool != null) { return(false); } Pools.Add(pool); AddressPools.Add(new DhcpAddressPool(pool)); return(true); }