📄 ss7_mtp2.cpp
字号:
int SS7_MTP2::initMTP2(void){ printf("SS7_MTP2::initMTP2() !\n" ); lscState = LSCStatePowerOff; return 0;}int SS7_MTP2::LSC(int event_in,unsigned long param){// printf("SS7_MTP2::LSC(), event=%d,param=%d!\n",// event_in, (unsigned int)param ); MTP2_FSM_Event event_out; LSCEvent event = (LSCEvent)event_in; switch( lscState ) { case LSCStatePowerOff: // where to init, in constructor printf("SS7_MTP2::LSC(), State = LSCStatePowerOff!\n" ); switch( event ) { case LSCEventPowerOn: // to Power On printf("SS7_MTP2::LSC(), Event = LSCEventPowerOn!\n" ); poweron( ); outFileIndex = 0; // for UT break; default: break; } break; case LSCStateOutOfService: printf("SS7_MTP2::LSC(), State = LSCStateOutOfService!\n" ); switch( event ) { case LSCEventStart: // L3 printf("SS7_MTP2::LSC(), Event = LSCEventStart!\n" ); eventQueue.reset( ); LSSUBuffer.reset( ); AppendEvent( MTP2_FSM_RC, RCEventStart ); AppendEvent( MTP2_FSM_TXC, TXCEventStart ); if( emergency ) { AppendEvent( MTP2_FSM_IAC, IACEventEmergency ); } AppendEvent( MTP2_FSM_IAC, IACEventStart ); lscState = LSCStateInitialAlignment; iacState = IACStateIdle; break; case LSCEventRetrieveBSNT: // L3 AppendEvent( MTP2_FSM_RC, RCEventRetrieveBSNT ); break; case LSCEventRetrievalRequestAndFSNC: // L3 AppendEvent( MTP2_FSM_TXC, TXCEventRetrievalRequestAndFSNC ); break; case LSCEventEmergency: // L3 emergency = true; break; case LSCEventEmergencyCease: // L3 emergency = false; break; case LSCEventLocalProcOutage: // MGMT localProcessorOutage = true; break; case LSCEventLocalProcRecovered: // L3 localProcessorOutage = false; break; default: break; } break; case LSCStateInitialAlignment: printf("SS7_MTP2::LSC(), State = LSCStateInitialAlignment!\n" ); switch( event ) { case LSCEventAlignmentComplete: // IAC printf("SS7_MTP2::LSC(), Event = LSCEventAlignmentComplete!\n" ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStart ); // Start T1 timers[0].started = true; time( & timers[0].start_time ); if( localProcessorOutage ) { AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO ); AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU ); lscState = LSCStateAlignedNotReady; } else { AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU ); AppendEvent( MTP2_FSM_RC, RCEventAcceptMSUFISU ); lscState = LSCStateAlignedReady; } break; case LSCEventAlignmentNotPossible: // IAC printf("SS7_MTP2::LSC(), Event = LSCEventAlignmentNotPossible!\n" ); // L3( out of service ); // HOW ??? AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); localProcessorOutage = false; emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventStop: // L3 printf("SS7_MTP2::LSC(), Event = LSCEventStop!\n" ); AppendEvent( MTP2_FSM_IAC, IACEventStop ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); localProcessorOutage = false; emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventLinkFailure: // RC printf("SS7_MTP2::LSC(), Event = LSCEventLinkFailure!\n" ); // L3( out of service ); AppendEvent( MTP2_FSM_IAC, IACEventStop ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); localProcessorOutage = false; emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventLocalProcOutage: // MGMT printf("SS7_MTP2::LSC(), Event = LSCEventLocalProcOutage!\n" ); localProcessorOutage = true; break; case LSCEventL3Failure: // MGMT localProcessorOutage = true; break; case LSCEventLocalProcRecovered: // MGMT localProcessorOutage = false; break; case LSCEventEmergency: emergency = true; AppendEvent( MTP2_FSM_IAC, IACEventEmergency ); break; default: break; } break; case LSCStateAlignedNotReady: printf("SS7_MTP2::LSC(), State = LSCStateAlignedNotReady!\n" ); switch( event ) { case LSCEventLinkFailure: // SUERM, RC case LSCEventGotSIO: // RC case LSCEventGotSIOS: // RC printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/LSCEventGotSIO/LSCEventGotSIOS!\n" ); timers[0].started = false; // Stop T1; // L3( out of service ); // L3( stop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); AppendEvent( MTP2_FSM_POC, POCEventStop ); emergency = false; localProcessorOutage = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventStop: // L3 printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" ); timers[0].started = false; // Stop T1; // L3( stop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); AppendEvent( MTP2_FSM_POC, POCEventStop ); emergency = false; localProcessorOutage = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventT1Expired: printf("SS7_MTP2::LSC(), Event=LSCEventT1Expired!\n" ); // L3( out of service ); // L3( stop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); AppendEvent( MTP2_FSM_POC, POCEventStop ); emergency = false; localProcessorOutage = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventFISUMSUReceived: // RC printf("SS7_MTP2::LSC(), Event=LSCEventFISUMSUReceived!\n" ); // L3( In service ); timers[0].started = false; // Stop T1; lscState = LSCStateProcessorOutage; break; case LSCEventGotSIPO: // RC printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" ); // L3( remote processor outage ); AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage ); timers[0].started = false; // Stop T1; lscState = LSCStateProcessorOutage; break; case LSCEventLocalProcRecovered: // MGMT printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcRecovered!\n" ); AppendEvent( MTP2_FSM_POC, POCEventLocalProcRecovered ); localProcessorOutage = false; AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU ); AppendEvent( MTP2_FSM_RC, RCEventAcceptMSUFISU ); lscState = LSCStateAlignedReady; break; default: break; } break; case LSCStateAlignedReady: printf("SS7_MTP2::LSC(), State = LSCStateAlignedReady!\n" ); switch( event ) { case LSCEventLinkFailure: // SUERM, RC case LSCEventGotSIO: // RC case LSCEventGotSIOS: // RC printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/GotSIO/GotSIOS!\n" ); timers[0].started = false; // Stop T1; // L3( out of service ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventStop: // L3 printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" ); timers[0].started = false; // Stop T1; AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventT1Expired: printf("SS7_MTP2::LSC(), Event=LSCEventT1Expired!\n" ); // L3( out of service ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventFISUMSUReceived: // RC printf("SS7_MTP2::LSC(), Event=LSCEventFISUMSUReceived!\n" ); // L3( In service ); timers[0].started = false; // Stop T1; AppendEvent( MTP2_FSM_TXC, TXCEventSendMSU ); lscState = LSCStateInService; break; case LSCEventGotSIPO: // RC printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" ); timers[0].started = false; // Stop T1; // L3( remote processor outage ); AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage ); lscState = LSCStateProcessorOutage; break; case LSCEventLocalProcOutage: // MGMT case LSCEventL3Failure: // MGMT printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcOutage/L3Failure!\n" ); AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO ); AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU ); lscState = LSCStateAlignedNotReady; break; default: break; } break; case LSCStateInService: printf("SS7_MTP2::LSC(), State = LSCStateInService!\n" ); switch( event ) { case LSCEventLinkFailure: // RC, TXC, SUERM case LSCEventGotSIO: // RC case LSCEventGotSIN: // RC case LSCEventGotSIE: // RC case LSCEventGotSIOS: // RC printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/GotSIO/SIE/SIN/SIOS!\n" ); // L3( Out of service ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventStop: // L3 printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" ); AppendEvent( MTP2_FSM_SUERM, SUERMEventStop ); AppendEvent( MTP2_FSM_RC, RCEventStop ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS ); emergency = false; lscState = LSCStateOutOfService; gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC break; case LSCEventGotSIPO: // RC printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" ); AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU ); // L3( remote Processor Outage ); AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage ); processorOutage = true; lscState = LSCStateProcessorOutage; break; case LSCEventL3Failure: case LSCEventLocalProcOutage: // MGMT printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcOutage/L3Failure!\n" ); AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage ); AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO ); AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU ); processorOutage = true; lscState = LSCStateProcessorOutage; break; default: break; } break; case LSCStateProcessorOutage: printf("SS7_MTP2::LSC(), State = LSCStateProcessorOutage!\n" ); switch( event )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -