コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
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);
        }