Exemple #1
0
        private void AddFakeNetworkForTesting(int fakeMode)
        {
            DatabaseAvailabilityGroupSubnetId subnetId = new DatabaseAvailabilityGroupSubnetId("1.1.1.0/24");
            ClusterNetwork clusterNetwork = new ClusterNetwork(subnetId);

            clusterNetwork.ClusterState = AmNetworkState.Up;
            this.m_clusterNets.Add(clusterNetwork);
            int num = 1;

            foreach (ClusterNode clusterNode in this.m_clusterNodes)
            {
                string     ipString   = string.Format("1.1.1.{0}", num);
                IPAddress  ipaddress  = IPAddress.Parse(ipString);
                ClusterNic clusterNic = new ClusterNic();
                clusterNic.Name           = string.Format("FakeNic{0}", num);
                clusterNic.NodeName       = clusterNode.Name.NetbiosName;
                clusterNic.HasIPAddress   = true;
                clusterNic.IPAddress      = ipaddress;
                clusterNic.ClusterState   = AmNetInterfaceState.Up;
                clusterNic.ClusterNetwork = clusterNetwork;
                clusterNetwork.Nics.Add(clusterNic);
                if (fakeMode > 1)
                {
                    break;
                }
            }
        }
Exemple #2
0
        // Token: 0x060016C9 RID: 5833 RVA: 0x0005D090 File Offset: 0x0005B290
        public ClusterNetwork(AmClusterNetwork clusNet)
        {
            this.SubnetId     = ExchangeSubnet.ExtractSubnetId(clusNet);
            this.ClusterState = clusNet.GetState(false);
            if (this.SubnetId == null)
            {
                ExTraceGlobals.NetworkManagerTracer.TraceError <string>(0L, "ClusterNetwork.Subnet is null for network {0}", clusNet.Name);
                throw new ClusterNetworkNullSubnetException(clusNet.Name);
            }
            IEnumerable <AmClusterNetInterface> enumerable = clusNet.EnumerateNetworkInterfaces();

            try
            {
                foreach (AmClusterNetInterface clusNic in enumerable)
                {
                    ClusterNic item = new ClusterNic(clusNic, this);
                    this.m_nics.Add(item);
                }
            }
            finally
            {
                foreach (AmClusterNetInterface amClusterNetInterface in enumerable)
                {
                    using (amClusterNetInterface)
                    {
                    }
                }
            }
        }
Exemple #3
0
        public void DetermineDnsStatus()
        {
            foreach (ClusterNode clusterNode in this.Nodes)
            {
                bool      flag = false;
                Exception arg;
                clusterNode.DnsAddresses = NetworkUtil.GetDnsAddresses(clusterNode.Name.Fqdn, ref arg);
                if (clusterNode.DnsAddresses.Length > 0)
                {
                    using (List <ClusterNic> .Enumerator enumerator2 = clusterNode.Nics.GetEnumerator())
                    {
                        while (enumerator2.MoveNext())
                        {
                            ClusterNic clusterNic = enumerator2.Current;
                            if (NetworkUtil.IsAddressPresent(clusterNode.DnsAddresses, clusterNic.IPAddress))
                            {
                                if (flag)
                                {
                                    NetworkDiscovery.Tracer.TraceError <AmServerName, IPAddress>((long)this.GetHashCode(), "Node({0}) has multiple dns nics. DupIP: {1}", clusterNode.Name, clusterNic.IPAddress);
                                }
                                else
                                {
                                    NetworkDiscovery.Tracer.TraceDebug <AmServerName, IPAddress>((long)this.GetHashCode(), "Node({0}) has DNS IP {1}", clusterNode.Name, clusterNic.IPAddress);
                                }
                                clusterNic.IsDnsRegistered          = true;
                                clusterNic.ClusterNetwork.HasDnsNic = true;
                                flag = true;
                            }
                        }
                        goto IL_103;
                    }
                    goto IL_E6;
                }
                goto IL_E6;
IL_103:
                if (!flag)
                {
                    foreach (ClusterNic clusterNic2 in clusterNode.Nics)
                    {
                        clusterNic2.IsDnsRegistered          = true;
                        clusterNic2.ClusterNetwork.HasDnsNic = true;
                        NetworkDiscovery.Tracer.TraceError <AmServerName, IPAddress>((long)this.GetHashCode(), "Node({0}) Nic({1}) being treated as DNS as a fallback.", clusterNode.Name, clusterNic2.IPAddress);
                    }
                    continue;
                }
                continue;
IL_E6:
                NetworkDiscovery.Tracer.TraceError <AmServerName, Exception>((long)this.GetHashCode(), "Node({0}) failed to resolve in DNS: {1}", clusterNode.Name, arg);
                goto IL_103;
            }
        }
Exemple #4
0
        private void ResolveReplNets(ClusterNic localNic, List <ClusterNetwork> unassignedNets)
        {
            List <PingRequest> list = new List <PingRequest>(30);

            foreach (ClusterNetwork clusterNetwork in unassignedNets)
            {
                if (clusterNetwork.LogicalNetwork == null && !this.DoesClusterNetworkContainNode(clusterNetwork, localNic.NodeName))
                {
                    this.SelectPingCandidates(clusterNetwork, list);
                }
            }
            if (list.Count > 0)
            {
                PingRequest[] array      = list.ToArray();
                PingProber    pingProber = null;
                try
                {
                    pingProber = new PingProber(localNic.IPAddress);
                    pingProber.SendPings(array);
                    pingProber.GatherReplies(3000);
                    foreach (PingRequest pingRequest in array)
                    {
                        if (pingRequest.Success)
                        {
                            ClusterNic clusterNic = (ClusterNic)pingRequest.UserContext;
                            if (clusterNic.ClusterNetwork.LogicalNetwork == null)
                            {
                                Subnet subnet = this.GetSubnet(clusterNic.ClusterNetwork.SubnetId);
                                clusterNic.ClusterNetwork.LogicalNetwork = localNic.ClusterNetwork.LogicalNetwork;
                                clusterNic.ClusterNetwork.LogicalNetwork.Add(subnet);
                            }
                        }
                    }
                }
                catch (SocketException arg)
                {
                    NetworkDiscovery.Tracer.TraceError <IPAddress, SocketException>((long)this.GetHashCode(), "Prober failed from {0}:{1}", localNic.IPAddress, arg);
                }
                finally
                {
                    if (pingProber != null)
                    {
                        pingProber.Dispose();
                    }
                }
            }
        }
Exemple #5
0
        private void ResolveLocalNic(ClusterNic localNic)
        {
            Subnet subnet = this.GetSubnet(localNic.ClusterNetwork.SubnetId);

            if (localNic.ClusterState == AmNetInterfaceState.Up)
            {
                List <LogicalNetwork> list = this.FindLogicalNetsWithoutNode(localNic.NodeName);
                if (list.Count > 0)
                {
                    List <PingRequest> list2 = new List <PingRequest>(list.Count * 3);
                    foreach (LogicalNetwork logicalNetwork in list)
                    {
                        foreach (Subnet subnet2 in logicalNetwork.Subnets)
                        {
                            if (subnet2.ClusterNetwork != null)
                            {
                                this.SelectPingCandidates(subnet2.ClusterNetwork, list2);
                            }
                        }
                    }
                    if (list2.Count > 0)
                    {
                        PingRequest[] array      = list2.ToArray();
                        PingProber    pingProber = null;
                        try
                        {
                            pingProber = new PingProber(localNic.IPAddress);
                            pingProber.SendPings(array);
                            pingProber.GatherReplies(3000);
                            foreach (PingRequest pingRequest in array)
                            {
                                if (pingRequest.Success)
                                {
                                    ClusterNic clusterNic = (ClusterNic)pingRequest.UserContext;
                                    localNic.ClusterNetwork.LogicalNetwork = clusterNic.ClusterNetwork.LogicalNetwork;
                                    localNic.ClusterNetwork.LogicalNetwork.Add(subnet);
                                    break;
                                }
                            }
                        }
                        catch (SocketException arg)
                        {
                            NetworkDiscovery.Tracer.TraceError <IPAddress, SocketException>((long)this.GetHashCode(), "Prober failed from {0}:{1}", localNic.IPAddress, arg);
                        }
                        finally
                        {
                            if (pingProber != null)
                            {
                                pingProber.Dispose();
                            }
                        }
                    }
                }
            }
            if (localNic.ClusterNetwork.LogicalNetwork == null)
            {
                LogicalNetwork logicalNetwork2 = this.AddNewLogicalNetwork();
                logicalNetwork2.Add(subnet);
                localNic.ClusterNetwork.LogicalNetwork = logicalNetwork2;
            }
        }