private bool AreAnyMapiNicsUp(AmNetworkMonitor.Node node)
        {
            int num = 0;

            foreach (AmNetworkMonitor.Nic nic in node.MapiNics)
            {
                num++;
                AmNetInterfaceState nicState = this.GetNicState(nic.Name);
                switch (nicState)
                {
                case AmNetInterfaceState.Unavailable:
                case AmNetInterfaceState.Failed:
                case AmNetInterfaceState.Unreachable:
                    AmNetworkMonitor.Tracer.TraceError <string, AmNetInterfaceState>(0L, "Nic '{0}' is {1}.", nic.Name, nicState);
                    break;

                case AmNetInterfaceState.Up:
                    return(true);

                default:
                    AmNetworkMonitor.Tracer.TraceError <string, AmNetInterfaceState>(0L, "Nic '{0}' is {1}.", nic.Name, nicState);
                    return(true);
                }
            }
            AmNetworkMonitor.Tracer.TraceError <AmServerName, int>(0L, "Node {0} has {1} MAPI nics. None appear usable.", node.Name, num);
            return(false);
        }
        private void ProcessNicEvent(AmClusterEventInfo cei)
        {
            Dictionary <string, AmNetworkMonitor.Nic> nicTable = this.m_nicTable;
            IAmCluster cluster = this.GetCluster();

            if (nicTable == null || cluster == null)
            {
                AmNetworkMonitor.Tracer.TraceError(0L, "Not yet initialized. Ignoring event");
                return;
            }
            AmNetworkMonitor.Nic nic;
            if (!nicTable.TryGetValue(cei.ObjectName, out nic))
            {
                this.TriggerClusterRefresh("nic not found");
                return;
            }
            AmNetInterfaceState nicState = this.GetNicState(cei.ObjectName);

            switch (nicState)
            {
            case AmNetInterfaceState.Unavailable:
                AmNetworkMonitor.Tracer.TraceError <string, AmNetInterfaceState>(0L, "MAPI NIC '{0}' is {1}.", cei.ObjectName, nicState);
                return;

            case AmNetInterfaceState.Failed:
            case AmNetInterfaceState.Unreachable:
            {
                AmNetworkMonitor.Tracer.TraceError <string, AmNetInterfaceState>(0L, "MAPI NIC '{0}' is {1}.", cei.ObjectName, nicState);
                AmEvtMapiNetworkFailure amEvtMapiNetworkFailure = new AmEvtMapiNetworkFailure(nic.Node.Name);
                amEvtMapiNetworkFailure.Notify(true);
                return;
            }

            case AmNetInterfaceState.Up:
                AmNetworkMonitor.Tracer.TraceDebug <string>(0L, "MAPI NIC '{0}' is Up.", cei.ObjectName);
                if (nic.Node.Name.IsLocalComputerName)
                {
                    AmClusterNodeNetworkStatus amClusterNodeNetworkStatus = new AmClusterNodeNetworkStatus();
                    Exception ex = AmClusterNodeStatusAccessor.Write(cluster, nic.Node.Name, amClusterNodeNetworkStatus);
                    if (ex != null)
                    {
                        ReplayCrimsonEvents.AmNodeStatusUpdateFailed.Log <string, string>(amClusterNodeNetworkStatus.ToString(), ex.Message);
                        return;
                    }
                }
                break;

            default:
                AmNetworkMonitor.Tracer.TraceError <AmNetInterfaceState, string>(0L, "Unexpected NIC state {0} for {1}", nicState, cei.ObjectName);
                break;
            }
        }
Example #3
0
 internal void CopyClusterNicState(AmNetInterfaceState clusterNicState)
 {
     this.ClusterNicState = NetworkEndPoint.MapNicState(clusterNicState);
     if (this.ClusterNicState != DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Up && this.ClusterNicState != DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Unreachable)
     {
         NetworkManager.TraceError("NIC {0} is down: {1}", new object[]
         {
             this.IPAddress,
             clusterNicState
         });
         this.Usable = false;
     }
 }
        private AmNetInterfaceState GetNicState(string nicName)
        {
            AmNetInterfaceState result  = AmNetInterfaceState.Unknown;
            IAmCluster          cluster = this.GetCluster();

            if (cluster != null)
            {
                Exception ex;
                result = cluster.GetNetInterfaceState(nicName, out ex);
                if (ex != null)
                {
                    AmNetworkMonitor.Tracer.TraceError <string, Exception>(0L, "Failed to get state for nic '{0}': {1}", nicName, ex);
                    this.TriggerClusterRefresh("GetNicState failed");
                }
            }
            return(result);
        }
        // Token: 0x06000198 RID: 408 RVA: 0x000074A4 File Offset: 0x000056A4
        internal AmNetInterfaceState GetState(bool isThrowIfUnknown)
        {
            AmNetInterfaceState clusterNetInterfaceState = ClusapiMethods.GetClusterNetInterfaceState(this.Handle);

            if (clusterNetInterfaceState == AmNetInterfaceState.Unknown)
            {
                int       lastWin32Error = Marshal.GetLastWin32Error();
                Exception ex             = new Win32Exception(lastWin32Error);
                AmTrace.Debug("GetClusterNetInterfaceState() returned error (rc={0}, message={1})", new object[]
                {
                    lastWin32Error,
                    ex
                });
                if (isThrowIfUnknown)
                {
                    throw AmExceptionHelper.ConstructClusterApiException(lastWin32Error, "GetClusterNetInterfaceState()", new object[0]);
                }
            }
            return(clusterNetInterfaceState);
        }
Example #6
0
        internal static DatabaseAvailabilityGroupNetworkInterface.InterfaceState MapNicState(AmNetInterfaceState clusterNicState)
        {
            switch (clusterNicState)
            {
            case AmNetInterfaceState.Unavailable:
                return(DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Unavailable);

            case AmNetInterfaceState.Failed:
                return(DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Failed);

            case AmNetInterfaceState.Unreachable:
                return(DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Unreachable);

            case AmNetInterfaceState.Up:
                return(DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Up);

            default:
                return(DatabaseAvailabilityGroupNetworkInterface.InterfaceState.Unknown);
            }
        }
 // Token: 0x06000197 RID: 407 RVA: 0x00007498 File Offset: 0x00005698
 internal static bool IsNicUsable(AmNetInterfaceState state)
 {
     return(state == AmNetInterfaceState.Up || state == AmNetInterfaceState.Unreachable);
 }