📄 typedef.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 + -