⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typedef.h

📁 实现了SS7中MTP2层的基本功能
💻 H
字号:
// File Name: TypeDef.h/////////////////////////////////////////////////////#ifndef _EASYTELECOM_SS7_MTP2_DEF_H_XING_2008_09_03_#define _EASYTELECOM_SS7_MTP2_DEF_H_XING_2008_09_03_//#include <stddef.h>#include <time.h>#define DIRECTION 1#undef DIRECTION#ifndef DIRECTION#define IN_FILE_NAME_FMT    "/home/xing/ss7_mtp2_data/LinkOne_%08d.dat"#define OUT_FILE_NAME_FMT   "/home/xing/ss7_mtp2_data/LinkTwo_%08d.dat"#define LOCAL_FLAG_FILE     "/home/xing/ss7_mtp2_data/LinkOneUp.dat"#define REMOTE_FLAG_FILE    "/home/xing/ss7_mtp2_data/LinkTwoUp.dat"#else#define OUT_FILE_NAME_FMT   "/home/xing/ss7_mtp2_data/LinkOne_%08d.dat"#define IN_FILE_NAME_FMT    "/home/xing/ss7_mtp2_data/LinkTwo_%08d.dat"#define REMOTE_FLAG_FILE    "/home/xing/ss7_mtp2_data/LinkOneUp.dat"#define LOCAL_FLAG_FILE     "/home/xing/ss7_mtp2_data/LinkTwoUp.dat"#endif#define Tin     5    // Normal AERM threshold
#define Tie     3    // Emergency AERM threshold
#define Pn      (2^16) // Emergency proving period#define Pe      (2^12) // Normal proving period#define T1      50

#define T2      150

#define T3      4

#define T4      8

#define T5      1 // 80-120 ms                Timer "sending SIB"
#define T6      5

#define T7      3 // 2

#define MAX_MSU_LEN  272 // 272// The message received from the Driver// To transmit over the Link, need pack(1)#pragma pack(1)typedef struct RevSigUnit {
    unsigned short	Length;	 // including all field and extra bytes of PktBuf
    unsigned char	Type;
    unsigned char	TimeStamp[5];
    unsigned short	ChName;   //pcm and index
    unsigned char	PktBuf[1];
} RevSigUnit;#define REV_SU_HEADER_SIZE    (sizeof(RevSigUnit) - 1)typedef struct SndSigUnit {
    unsigned short	Length;	// including all field and extra bytes of PktBuf
    unsigned char	Type;
    unsigned char	TimeStamp[5];
    unsigned short	ChName;   //pcm and index
    unsigned char	PktBuf[1];
} SndSigUnit;#define SND_SU_HEADER_SIZE    (sizeof(SndSigUnit) - 1)#define REV_SU_CORRECT        0#define REV_SU_NOT_CORRECT    1typedef enum { LSSUTypeSIO, // 000
               LSSUTypeSIN, // 001               LSSUTypeSIE, // 010               LSSUTypeSIOS,// 011               LSSUTypeSIPO,// 100
               LSSUTypeSIB  // 101
} LSSUType;
typedef enum { LSCStatePowerOff,
               LSCStateOutOfService,
               LSCStateInitialAlignment,
               LSCStateAlignedNotReady,
               LSCStateAlignedReady,
               LSCStateInService,
               LSCStateProcessorOutage
} LSCState;

typedef enum { LSCEventRoutine, // routine checking
               LSCEventPowerOn, // MGMT
               LSCEventLocalProcOutage, // MGMT
               LSCEventL3Failure, // MGMT
               LSCEventLocalProcRecovered, // L3/MGMT
               LSCEventStart, // L3
               LSCEventRetrieveBSNT, // L3
               LSCEventRetrievalRequestAndFSNC, // L3
               LSCEventFlushBuffers, // L3
               LSCEventContinue, // L3
               LSCEventEmergency, // L3
               LSCEventEmergencyCease, // L3
               LSCEventStop, // L3
               LSCEventT1Expired,
               LSCEventAlignmentComplete, // IAC
               LSCEventAlignmentNotPossible, // IAC
               LSCEventGotSIO, // RC               LSCEventGotSIOS, // RC
               LSCEventGotSIPO, // RC
               LSCEventFISUMSUReceived, // RC
               LSCEventGotSIN, // RC               LSCEventGotSIE, // RC               LSCEventLinkFailure, // RC, SUERM, TXC
               LSCEventNoProcOutage, // POC
} LSCEvent;

typedef enum { IACStateIdle,
               IACStateNotAligned,
               IACStateAligned,
               IACStateProving
} IACState;
typedef enum { IACEventEmergency, // LSC
               IACEventStart, // LSC
               IACEventStop, // LSC
               IACEventT2Expired,
               IACEventT3Expired,
               IACEventT4Expired,
               IACEventGotSIOSIN, // RC
               IACEventGotSIE, // RC
               IACEventGotSIN, // RC
               IACEventGotSIOS, // RC
               IACEventGotSIO, // RC
               IACEventCorrectSU, // DAEDR
               IACEventAbortProving // AERM
} IACEvent;

typedef enum { POCStateIdle,
               POCStateLocalProcOutage,
               POCStateRemoteProcOutage,
               POCStateBothProcOutage
} POCState;
typedef enum { POCEventLocalProcOutage, // LSC
               POCEventRemoteProcOutage, // LSC
               POCEventLocalProcRecovered, // LSC
               POCEventRemoteProcRecovered, // LSC
               POCEventStop // LSC
} POCEvent;

typedef enum { TXCStateIdle,
               TXCStateInService
} TXCState;

typedef enum { TXCEventStart, // LSC
               TXCEventSendSIOS, // LSC
               TXCEventSendSIPO, // LSC
               TXCEventSendSIO, // LSC
               TXCEventSendSIN, // LSC
               TXCEventSendSIE, // IAC
               TXCEventSendSIB, // CC
               TXCEventSendFISU, // LSC
               TXCEventSendMSU, // LSC
               TXCEventSendMSUFISU, // LSC
               TXCEventTransmissionRequest, // DAEDT
               TXCEventT6Expired,
               TXCEventT7Expired,
               TXCEventNACKToBeSent, // RC
               TXCEventGotSIB, // RC
               TXCEventMsg4Transmission, // L3
               TXCEventBSNRAndBIBR, // RC ???
               TXCEventFSNXValue, // RC ???
               TXCEventRetrievalRequestAndFSNC, // LSC ???
               TXCEventFlushBuffers // LSC
} TXCEvent;

typedef enum { RCStateIdle,
               RCStateInService
} RCState;

typedef enum { RCEventStart, // LSC
               RCEventRetrieveBSNT, // LSC
               RCEventStop, // LSC
               RCEventFSNTValue, // TXC
               RCEventRejectMSUFISU, // LSC
               RCEventAcceptMSUFISU, // LSC
               RCEventSignalUnit, // DAEDR
               RCEventCongestionDiscard,
               RCEventCongestionAccept,
               RCEventNoCongestion,
               RCEventRetrieveFSNX // LSC} RCEvent;

typedef enum { AERMStateIdle,
               AERMStateMonitoring
} AERMState;

typedef enum { AERMEventSetTi2Tin, // LSC
               AERMEventStart, // IAC
               AERMEventSetTi2Tie, // IAC
               AERMEventStop, // IAC
               AERMEventSUinError // DAEDR
} AERMEvent;

typedef enum { SUERMStateIdle,
               SUERMStateInService
} SUERMState;

typedef enum { SUERMEventStart, // LSC
               SUERMEventStop, // LSC
               SUERMEventSUinError, // DAEDR
               SUERMEventCorrectSU // DAEDR
} SUERMEvent;

typedef enum { CCStateIdle,
               CCStateL2Congestion
} CCState;

typedef enum { CCEventBusy, // RC
               CCEventNormal, // RC
               CCEventT5Expired
} CCEvent;

typedef enum { DAEDRStateIdle,
               DAEDRStateInService
} DAEDRState;

typedef enum { DAEDREventStart, // RC
               DAEDREventSUReceived // L1
} DAEDREvent;

typedef enum { DAEDTStateIdle,
               DAEDTStateInService
} DAEDTState;
typedef enum { DAEDTEventStart, // RC               DAEDTEventSignalUnit // TXC} DAEDTEvent;typedef enum { MTP2_FSM_NULL,               MTP2_FSM_LSC,               MTP2_FSM_RC,               MTP2_FSM_TXC,
               MTP2_FSM_IAC,
               MTP2_FSM_POC,
               MTP2_FSM_CC,
               MTP2_FSM_AERM,
               MTP2_FSM_SUERM,
               MTP2_FSM_DAEDR,
               MTP2_FSM_DAEDT
} MTP2_FSM_TYPE;

typedef struct {
    MTP2_FSM_TYPE FSMType;
    int name; // need forced type convertion    unsigned long param;
} MTP2_FSM_Event;

typedef struct {
    unsigned int timer_val; // T1/T2/.....
    time_t      start_time;
    bool        started; // if not started, then it's stopped, right?
    //  bool        expired;
} MTP2_TIMER;

// Now we define the message structures// The common structure header for MSU, LSSU, FISUtypedef struct {    unsigned char BSN : 7;    unsigned char BIB : 1;    unsigned char FSN : 7;    unsigned char FIB : 1;    unsigned char LI : 6; // determine the message type    unsigned char reserved : 2;} SUHeaderL2;typedef struct {    unsigned char LI; // determine the message type} SUHeaderL3;// Determine Message Type based on LItypedef enum { SUTypeMSU,
               SUTypeLSSU,               SUTypeFISU
} SUType;// MSU, which will be used as pointer for data accessing// From L2 to L3: MSU_L3 used// From L2 to L1: MSU_L2 used, which added FIB/FSN/BIB/BSNtypedef struct {    SUHeaderL2 suHeader;    unsigned char  SIO;    unsigned char  SIF[2]; // at least two bytes} MSUL2;typedef struct {    SUHeaderL3 suHeader;    unsigned char  SIO;    unsigned char  SIF[2]; // at least two bytes} MSUL3;// LSSU -- used only in L2typedef struct {    SUHeaderL2 suHeader;    unsigned char SF;} LSSU;typedef struct {    SUHeaderL2 suHeader;} FISU; // seems useless// Used to pass the SU for transmission for FISU/LSSU/MSUtypedef struct {    SUType       suType;    unsigned short  len; // length of FISU/LSSU/MSU    SUHeaderL2   header;} SUCommonMsgL2;typedef struct {    unsigned short  len; // length of FISU/LSSU/MSU    SUHeaderL2  header;} SUWithLength;// The messages stored in MSU queue
// NOTE: we use one queue for storing LSSU, one for MSU, none for FISU since//   1) FISU won't be used for any other purpose except link monitoring//   2) LSSU will be processed with higher priority//   3) MSU will be exchanged between L2 and L3// For messages From L2 to L1, use MSUL2 -- not being usedtypedef struct {    unsigned short len; // excluding itself    MSUL2 msuL2;} MSUQueueElementL2;////////////////// Restore the default pack ////////////////////#pragma pack()// The messages stored in MSU queue
// NOTE: Just use LSSU -- note that sometimes some fields are useless#define AppendEvent(event_type,event_name)\          event_out.FSMType = event_type;\          event_out.name = event_name;\          event_out.param = 0;\          eventQueue.write((unsigned char*)(&event_out), sizeof(event_out));//  printf("AppendEvent(type=%d,name=%d)\n", event_type,event_name);#define AppendEventWithParam(event_type,event_name,parameter)\          event_out.FSMType = event_type;\          event_out.name = event_name;\          event_out.param = parameter;\          eventQueue.write((unsigned char*)(&event_out), sizeof(event_out));//printf("AppendEventWithParam(type=%d,name=%d,param=%d)\n", event_type,event_name,parameter);#endif // _EASYTELECOM_SS7_MTP2_DEF_H_XING_2008_09_03_

/************************

12.2 Abbreviations
For the purposes of this Recommendation, the following abbreviations apply:

AERM        Alignment Error Rate Monitor
BIB         Backward Indicator Bit
BIBR        BIB received
BIBT        BIB to be transmitted
BIBX        BIB expected
BSN         Backward Sequence Number
BSNR        BSN received
BSNT        BSN to be transmitted
Cp          Count of aborted proving attempts [Figure 9 (sheets 2 of 6 and 3 of 6)]
Cm          Counter of MSU in TB [Figure 13 (sheet 1 of 7) and Figure 15 (sheet 1 of 7)]
Ca          AERM count (Figure 17)
Cs          SUERM count (Figure 18)
CC          Congestion Control
DAEDR       Delimitation, Alignment and Error Detection (Receiving)
DAEDT       Delimitation, Alignment and Error Detection (Transmitting)
FIB         Forward Indicator Bit
FIBR        FIB received
FIBT        FIB transmitted
FIBX        FIB expected
FISU        Fill-In Signal Unit
FSN         Forward Sequence Number
FSNC        Forward sequence number of last message signal unit accepted by remote level 2
FSNF        FSN of the oldest MSU in the RTB
FSNL        FSN of the last MSU in the RTB
FSNR        FSN received
FSNT        FSN of the last MSU transmitted
FSNX        FSN expected
IAC         Initial Alignment Control
L2          Level 2
L3          Level 3
LSC         Link State Control
LSSU        Link Status Signal Unit
MGMT        Management system šC Unspecified implementation dependent management function
MSU         Message Signal Unit
NSU         Correct SU count
NACK        Negative acknowledgement
N1          Maximum number of MSU which are available for retransmission
            (fixed by the numbering capacity of the FSN)
N2          Maximum number of MSU octets which are available for retransmission
            (fixed by the common channel loop delay time)
POC         Processor Outage Control
RC          Reception Control
RTB         Retransmission buffer
RTR         If = 1 means retransmission expected
SIB         Status Indication "B" ("Busy")
SIE         Status Indication "E" ("emergency alignment")
SIN         Status Indication "N" ("normal alignment")
SIO         Status Indication "O" ("out of alignment")
SIOS        Status Indication "OS" ("out of service")
SIPO        Status Indication "PO" ("processor outage")
SU          Signal Unit
SUERM       Signal Unit Error Rate Monitor
TB          Transmission Buffer
Ti          AERM threshold
Tie         Emergency AERM threshold
Tin         Normal AERM threshold
TXC         Transmission control
UNB         Counter of unreasonable BSN
UNF         Counter of unreasonable FIB

12.3 Timers

T1                            Timer "alignment ready"
        T1 (64) = 40-50 s        Bit rate of 64 kbit/s
        T1 (4.8) = 500-600 s    Bit rate of 4.8 kbit/s

T2 = 5-150 s                Timer "not aligned"
    T2 low = 5-50 s            Only for automatic allocation of
    T2 high = 70-150 s        signalling data links and terminals

T3 = 1-2 s                    Timer "aligned"

T4        Proving period timer = 2^16 or 2^12 octet transmission time
    T4n(64) = 7.5-9.5 s            Normal proving period at 64 kbit/s
    Nominal value 8.2 s            (corresponding to Pn = 2^16)
    T4n (4.8) = 100-120 s        Nominal proving period at 4.8 kbit/s
    Nominal value 110 s            (corresponding to Pn = 2^16)
    T4e (64) = 400-600 ms        Emergency proving period at 64 kbit/s
    Nominal value 500 ms        (corresponding to Pe = 2^12)
    T4e (4.8) = 6-8 s            Emergency proving period at 4.8 kbit/s
    Nominal value 7 s            (corresponding to Pe = 2^12)

T5 = 80-120 ms                Timer "sending SIB"

T6                            Timer "remote congestion"
    T6 (64) = 3-6 s        Bit rate of 64 kbit/s
    T6 (4.8) = 8-12 s    Bit rate of 4.8 kbit/s

T7                            Timer "excessive delay of acknowledgement"
    T7 (64) = 0.5-2 s    Bit rate of 64 kbit/s
    For PCR method, Values less than 0.8 s should not be used
    T7 (4.8) = 4-6 s    Bit rate of 4.8 kbit/s

Pe    Emergency proving period
Pn    Normal proving period

*************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -