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; } } }
// 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) { } } } }
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; } }
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(); } } } }
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; } }