예제 #1
0
        public ExclusionChanges(NetworkPrefix network, IPRanges before, IPRanges after)
        {
            Network = network;

            BeforeRanges = before.Clone();
            AfterRanges  = after.Clone();
        }
예제 #2
0
        public void DeregisterPool(NetworkPrefix prefix)
        {
            var addressPoolToRemove = AddressPools.Where(x => x.Pool.Network.Equals(prefix)).FirstOrDefault();

            if (addressPoolToRemove == null)
            {
                return;
            }

            AddressPools.Remove(addressPoolToRemove);
            Pools.Remove(addressPoolToRemove.Pool);

            Leases.RemoveAll(x => x.Pool == addressPoolToRemove.Pool);
        }
 private bool EqualsData(IpV6MobilityOptionNetworkPrefix other)
 {
     return(other != null &&
            PrefixLength == other.PrefixLength && NetworkPrefix.Equals(other.NetworkPrefix));
 }
예제 #4
0
        List <ShowIPRouteEntryItem> ApplyPrefixLength(List <ShowIPRouteEntryItem> routes, NetworkPrefix prefix)
        {
            foreach (var route in routes)
            {
                route.Prefix.Length = prefix.Length;
            }

            return(routes);
        }
예제 #5
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();
            }
        }
예제 #6
0
 public DhcpPool GetPoolByPrefix(NetworkPrefix prefix)
 {
     return(Pools.Where(x => x.Network.Equals(prefix)).FirstOrDefault());
 }