public ExclusionChanges(NetworkPrefix network, IPRanges before, IPRanges after) { Network = network; BeforeRanges = before.Clone(); AfterRanges = after.Clone(); }
public void ModifyPool( NetworkPrefix network, List <IPAddress> gateways, IPRanges exclusions, string domainName, string bootFile, List <IPAddress> dnsServers, IPAddress tftpServer ) { lock (this) { var addressPool = AddressPools.Where(x => x.Pool.Network.Equals(network)).FirstOrDefault(); if (addressPool == null) { var dhcpPool = GetPoolByPrefix(network); if (dhcpPool == null) { return; } addressPool = new DhcpAddressPool(dhcpPool); AddressPools.Add(addressPool); } var pool = addressPool.Pool; pool.DefaultGateways = gateways .Select(x => x ) .ToList(); var exclusionChanges = new ExclusionChanges(pool.Network, pool.Exclusions, exclusions); var leasesToKill = Leases .Where(x => exclusionChanges.ToExclude.Contains(x.Address) ) .ToList(); foreach (var leaseToKill in leasesToKill) { addressPool.SetAvailable(leaseToKill.Address); Leases.Remove(leaseToKill); } var toExclude = exclusionChanges.ToExclude.Clone(); toExclude.Remove(pool.Network.BaseNetwork.Network); toExclude.Remove(pool.Network.Broadcast); addressPool.UnsetAvailable(toExclude); var toUnexclude = exclusionChanges.ToUnexclude.Clone(); toUnexclude.Remove(pool.Network.BaseNetwork.Network); toUnexclude.Remove(pool.Network.Broadcast); addressPool.SetAvailable(toUnexclude); pool.Exclusions = exclusions.Clone(); pool.PoolOptions.DomainName = domainName; pool.PoolOptions.BootFile = bootFile; pool.PoolOptions.TFTPServers = new List <string> { tftpServer.ToString() }; pool.PoolOptions.DNSServers = dnsServers .Select(x => x ) .ToList(); } }