示例#1
0
        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);
        }
示例#2
0
        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();
            }
        }