libisdn
Q921.h File Reference
#include "Q9XXplatform.h"

Go to the source code of this file.

Data Structures

struct  Q921Data
 Q.921 Trunk context. More...
struct  Q921StatsCounter

Defines

#define Q921_STATISTICS
#define Q921_STATISTICS_EXTENDED
#define Q921MAXHDLCSPACE   3000
#define L2UCHAR   unsigned char /* Min 8 bit */
#define L2USHORT   unsigned short /* 16 bit */
#define L2INT   int /* Min 16 bit signed */
#define L2ULONG   unsigned long /* Min 32 bit */
#define L2TRUNK   Q921Data_t *
#define Q921_TEI_BCAST   127
#define Q921_TEI_MAX   Q921_TEI_BCAST
#define Q921_TEI_DYN_MIN   64
#define Q921_TEI_DYN_MAX   126
#define Q921StatsCounterForeach(name)   for (const struct Q921StatsCounter * name = Q921StatsCounterFirst(); name; name = Q921StatsCounterNext(name))

Typedefs

typedef int(* Q921Tx21CB_t )(void *, L2UCHAR *, L2INT)
typedef int(* Q921Tx23CB_t )(void *, Q921DLMsg_t ind, L2UCHAR tei, L2UCHAR *, L2INT)
typedef int(* Q921LogCB_t )(void *, Q921LogLevel_t, char *, L2INT)
typedef struct Q921Data Q921Data_t
 Q.921 Trunk context.

Enumerations

enum  Q921NetUser_t { Q921_TE = 0, Q921_NT = 1 }
enum  Q921NetType_t { Q921_PTP = 0, Q921_PTMP = 1 }
enum  Q921LogLevel_t {
  Q921_LOG_NONE = -1, Q921_LOG_EMERG = 0, Q921_LOG_ALERT, Q921_LOG_CRIT,
  Q921_LOG_ERROR, Q921_LOG_WARNING, Q921_LOG_NOTICE, Q921_LOG_INFO,
  Q921_LOG_DEBUG
}
enum  Q921DLMsg_t {
  Q921_DL_ESTABLISH = 0, Q921_DL_ESTABLISH_CONFIRM, Q921_DL_RELEASE, Q921_DL_RELEASE_CONFIRM,
  Q921_DL_DATA, Q921_DL_UNIT_DATA
}
enum  {
  Q921_STATS_NONE = 0, Q921_STATS_ST01, Q921_STATS_ST02, Q921_STATS_ST03,
  Q921_STATS_ST04, Q921_STATS_ST05, Q921_STATS_ST06, Q921_STATS_ST07,
  Q921_STATS_ST08, Q921_STATS_T200, Q921_STATS_T201, Q921_STATS_T202,
  Q921_STATS_T203, Q921_STATS_TM01, Q921_STATS_N200, Q921_STATS_N201,
  Q921_STATS_N202, Q921_STATS_SEND_S, Q921_STATS_SEND_U, Q921_STATS_SEND_I,
  Q921_STATS_SEND_DISC, Q921_STATS_SEND_DM, Q921_STATS_SEND_REJ, Q921_STATS_SEND_RR,
  Q921_STATS_SEND_RNR, Q921_STATS_SEND_SABME, Q921_STATS_SEND_UA, Q921_STATS_SEND_UN,
  Q921_STATS_RECV_S, Q921_STATS_RECV_U, Q921_STATS_RECV_I, Q921_STATS_RECV_DISC,
  Q921_STATS_RECV_DM, Q921_STATS_RECV_REJ, Q921_STATS_RECV_RNR, Q921_STATS_RECV_RR,
  Q921_STATS_RECV_SABME, Q921_STATS_RECV_UA, Q921_STATS_RECV_UN, Q921_STATS_RECV_INVALID_S,
  Q921_STATS_RECV_INVALID_U, Q921_STATS_RECV_INVALID_I, Q921_STATS_TEI_SEND_AR, Q921_STATS_TEI_SEND_AS,
  Q921_STATS_TEI_SEND_CR, Q921_STATS_TEI_SEND_CS, Q921_STATS_TEI_SEND_DS, Q921_STATS_TEI_SEND_RR,
  Q921_STATS_TEI_SEND_VR, Q921_STATS_TEI_RECV_AR, Q921_STATS_TEI_RECV_AS, Q921_STATS_TEI_RECV_CR,
  Q921_STATS_TEI_RECV_CS, Q921_STATS_TEI_RECV_RR, Q921_STATS_TEI_RECV_VR, Q921_STATS_MAX
}

Functions

Q921_API int Q921_InitTrunk (L2TRUNK trunk, L2UCHAR sapi, L2UCHAR tei, Q921NetUser_t NetUser, Q921NetType_t NetType, L2INT hsize, Q921Tx21CB_t cb21, Q921Tx23CB_t cb23, void *priv21, void *priv23)
Q921_API int Q921Start (L2TRUNK trunk)
 Start trunk.
Q921_API int Q921Stop (L2TRUNK trunk)
 Stop trunk.
Q921_API void Q921SetLogCB (L2TRUNK trunk, Q921LogCB_t func, void *priv)
 Set logging callback.
Q921_API void Q921SetLogLevel (L2TRUNK trunk, Q921LogLevel_t level)
 Set loglevel of Q.921 logging functions.
Q921_API Q921LogLevel_t Q921GetLogLevel (L2TRUNK trunk)
 Get Loglevel.
Q921_API const char * Q921GetLogLevelName (L2TRUNK trunk)
 Get Loglevel Name.
Q921_API int Q921Rx12 (L2TRUNK trunk)
 Process Q.921 frame that has been enqueued using Q921QueueHDLCFrame()
Q921_API int Q921Rx32 (L2TRUNK trunk, Q921DLMsg_t ind, L2UCHAR tei, L2UCHAR *Mes, L2INT Size)
Q921_API int Q921QueueHDLCFrame (L2TRUNK trunk, L2UCHAR *b, L2INT size)
Q921_API void Q921SetGetTimeCB (L2ULONG(*callback)(void))
Q921_API void Q921TimerTick (L2TRUNK trunk)
Q921_API int Q921Establish (L2TRUNK trunk, L2UCHAR tei)
Q921_API int Q921Release (L2TRUNK trunk, L2UCHAR tei)
Q921_API int Q921IsEstablished (L2TRUNK trunk, L2UCHAR tei)
Q921_API void Q921StatsCounterResetAll (L2TRUNK trunk, const int tei)
 Reset all counter to zero.
Q921_API void Q921StatsCounterReset (L2TRUNK trunk, const int id, const int tei)
 Reset all counter to zero.
Q921_API struct Q921StatsCounterQ921StatsCounterFirst (void)
Q921_API struct Q921StatsCounterQ921StatsCounterNext (const struct Q921StatsCounter *cur)
Q921_API unsigned int Q921StatsCounterValue (const L2TRUNK trunk, const struct Q921StatsCounter *counter, const int tei)
 Retrieve current value of specified statistic event counter of one TEI, or the sum of the counters of all TEIs.
Q921_API int Q921StatsCounterID (const struct Q921StatsCounter *counter)
Q921_API const char * Q921StatsCounterName (const struct Q921StatsCounter *counter)
Q921_API const char * Q921StatsCounterDescription (const struct Q921StatsCounter *counter)
Q921_API int Q921StatsCounterIsGlobal (const struct Q921StatsCounter *counter)
Q921_API int Q921StatsCounterIsError (const struct Q921StatsCounter *counter)
Q921_API int Q921StatsCounterIsAvailable (const L2TRUNK trunk, const struct Q921StatsCounter *counter)
Q921_API const char * Q921StatsCounterGetDescription (const int id)
Q921_API const char * Q921StatsCounterGetName (const int id)
Q921_API int Q921StatsCounterGetIsGlobal (const int id)
Q921_API unsigned int Q921StatsCounterGetValue (const L2TRUNK trunk, const int id, const int tei)

Define Documentation

#define L2INT   int /* Min 16 bit signed */

Definition at line 106 of file Q921.h.

Referenced by Q921Rx12(), and Q921Rx32().

#define L2TRUNK   Q921Data_t *

Definition at line 108 of file Q921.h.

#define L2UCHAR   unsigned char /* Min 8 bit */

Definition at line 104 of file Q921.h.

Referenced by Q921Rx12().

#define L2ULONG   unsigned long /* Min 32 bit */

Definition at line 107 of file Q921.h.

Referenced by Q921TimerTick().

#define L2USHORT   unsigned short /* 16 bit */

Definition at line 105 of file Q921.h.

#define Q921_STATISTICS

Definition at line 100 of file Q921.h.

Definition at line 101 of file Q921.h.

#define Q921_TEI_BCAST   127

Definition at line 110 of file Q921.h.

Referenced by Q921Rx12(), Q921Rx32(), and Q921Start().

#define Q921_TEI_DYN_MAX   126

Definition at line 114 of file Q921.h.

#define Q921_TEI_DYN_MIN   64

Definition at line 113 of file Q921.h.

Definition at line 111 of file Q921.h.

Referenced by Q921_InitTrunk(), Q921Start(), Q921Stop(), and Q921TimerTick().

#define Q921MAXHDLCSPACE   3000

Definition at line 103 of file Q921.h.

Referenced by Q921_InitTrunk(), and Q921Start().


Typedef Documentation

typedef struct Q921Data Q921Data_t

Q.921 Trunk context.

Q921Data_t

typedef int(* Q921LogCB_t)(void *, Q921LogLevel_t, char *, L2INT)

Definition at line 165 of file Q921.h.

typedef int(* Q921Tx21CB_t)(void *, L2UCHAR *, L2INT)

Definition at line 163 of file Q921.h.

typedef int(* Q921Tx23CB_t)(void *, Q921DLMsg_t ind, L2UCHAR tei, L2UCHAR *, L2INT)

Definition at line 164 of file Q921.h.


Enumeration Type Documentation

anonymous enum
Enumerator:
Q921_STATS_NONE 
Q921_STATS_ST01 
Q921_STATS_ST02 
Q921_STATS_ST03 
Q921_STATS_ST04 
Q921_STATS_ST05 
Q921_STATS_ST06 
Q921_STATS_ST07 
Q921_STATS_ST08 
Q921_STATS_T200 
Q921_STATS_T201 
Q921_STATS_T202 
Q921_STATS_T203 
Q921_STATS_TM01 
Q921_STATS_N200 
Q921_STATS_N201 
Q921_STATS_N202 
Q921_STATS_SEND_S 
Q921_STATS_SEND_U 
Q921_STATS_SEND_I 
Q921_STATS_SEND_DISC 
Q921_STATS_SEND_DM 
Q921_STATS_SEND_REJ 
Q921_STATS_SEND_RR 
Q921_STATS_SEND_RNR 
Q921_STATS_SEND_SABME 
Q921_STATS_SEND_UA 
Q921_STATS_SEND_UN 
Q921_STATS_RECV_S 
Q921_STATS_RECV_U 
Q921_STATS_RECV_I 
Q921_STATS_RECV_DISC 
Q921_STATS_RECV_DM 
Q921_STATS_RECV_REJ 
Q921_STATS_RECV_RNR 
Q921_STATS_RECV_RR 
Q921_STATS_RECV_SABME 
Q921_STATS_RECV_UA 
Q921_STATS_RECV_UN 
Q921_STATS_RECV_INVALID_S 
Q921_STATS_RECV_INVALID_U 
Q921_STATS_RECV_INVALID_I 
Q921_STATS_TEI_SEND_AR 

Assign Request sent

Q921_STATS_TEI_SEND_AS 

Assigned Response sent

Q921_STATS_TEI_SEND_CR 

Check Request sent

Q921_STATS_TEI_SEND_CS 

Check Response sent

Q921_STATS_TEI_SEND_DS 

Deny Response sent

Q921_STATS_TEI_SEND_RR 

Remove Request sent

Q921_STATS_TEI_SEND_VR 

Verify Request sent

Q921_STATS_TEI_RECV_AR 

Assign Request received

Q921_STATS_TEI_RECV_AS 

Assign Response received

Q921_STATS_TEI_RECV_CR 

Check Request received

Q921_STATS_TEI_RECV_CS 

Check Response received

Q921_STATS_TEI_RECV_RR 

Remove Request received

Q921_STATS_TEI_RECV_VR 

Verify Request received

Q921_STATS_MAX 

Definition at line 170 of file Q921.h.

Enumerator:
Q921_DL_ESTABLISH 
Q921_DL_ESTABLISH_CONFIRM 
Q921_DL_RELEASE 
Q921_DL_RELEASE_CONFIRM 
Q921_DL_DATA 
Q921_DL_UNIT_DATA 

Definition at line 154 of file Q921.h.

Log levels

Enumerator:
Q921_LOG_NONE 
Q921_LOG_EMERG 
Q921_LOG_ALERT 
Q921_LOG_CRIT 
Q921_LOG_ERROR 
Q921_LOG_WARNING 
Q921_LOG_NOTICE 
Q921_LOG_INFO 
Q921_LOG_DEBUG 

Definition at line 138 of file Q921.h.

Link type

Enumerator:
Q921_PTP 

Point-To-Point

Q921_PTMP 

Point-To-Multipoint

Definition at line 129 of file Q921.h.

Mode

Enumerator:
Q921_TE 

User Mode

Q921_NT 

Network Mode

Definition at line 120 of file Q921.h.


Function Documentation

Q921_API int Q921_InitTrunk ( L2TRUNK  trunk,
L2UCHAR  sapi,
L2UCHAR  tei,
Q921NetUser_t  NetUser,
Q921NetType_t  NetType,
L2INT  hsize,
Q921Tx21CB_t  cb21,
Q921Tx23CB_t  cb23,
void *  priv21,
void *  priv23 
)

Public functions Initialize Q.921 Trunk

Parameters:
[in]trunkQ.921 trunk
[in]sapiSAPI
[in]teiTEI (ignored in PTMP mode)
[in]NetUserMode (Network / User)
[in]NetTypeType (PTP / PTMP)
[in]hsize
[in]cb21Layer1 TX callback, called to send Q.921 to Layer 1
[in]cb23Layer3 RX callback, called to submit frames to Layer 3
[in]priv21Custom data for Layer1 TX callback
[in]priv23Custom data for Layer3 RX callback

Definition at line 366 of file Q921.c.

References INITIALIZED_MAGIC, MFIFOCreate(), Q921_IS_PTMP, Q921_IS_PTMP_NT, Q921_TEI_MAX, Q921MAXHDLCSPACE, and Q921_Link::tei.

Get Loglevel.

Get log level

Parameters:
[in]trunkQ.921 trunk
Returns:
Log level

Q921GetLogLevel

Parameters:
trunkQ.921 trunk
Returns:
loglevel
Author:
Stefan Knoblich

Definition at line 3328 of file Q921.c.

References Q921_LOG_NONE.

Q921_API const char* Q921GetLogLevelName ( L2TRUNK  trunk)

Get Loglevel Name.

Get log level name

Parameters:
[in]trunkQ.921 trunk
Returns:
Name of current log level

Q921GetLogLevelName

Parameters:
trunkQ.921 trunk
Returns:
loglevel name
Author:
Stefan Knoblich

Definition at line 3356 of file Q921.c.

References Q921_LOG_NONE.

Q921_API int Q921IsEstablished ( L2TRUNK  trunk,
L2UCHAR  tei 
)

Is Q.921 link ready to transmit data?

Parameters:
[in]trunkQ.921 trunk
[in]teiTEI of link to check

Definition at line 1606 of file Q921.c.

References Q921_LINK_CONTEXT, Q921_STATE_MULTIPLE_FRAME_ESTABLISHED, and Q921_Link::state.

Q921_API int Q921QueueHDLCFrame ( L2TRUNK  trunk,
L2UCHAR b,
L2INT  size 
)

Enqueue new incoming Q.921 frame from Layer 1

Parameters:
[in]trunkQ.921 trunk
[in]bBuffer to incoming data
[in]sizeSize of incoming data

Definition at line 1377 of file Q921.c.

References MFIFOWriteMes().

Q921_API int Q921Rx12 ( L2TRUNK  trunk)

Process Q.921 frame that has been enqueued using Q921QueueHDLCFrame()

Receive incoming data from Layer 1

Parameters:
[in]trunkQ.921 trunk

Definition at line 3222 of file Q921.c.

References L2INT, L2UCHAR, MFIFOGetMesPtr(), MFIFOKillNext(), Q921_IS_PTMP_TE, Q921_LINK_CONTEXT, Q921_LOG_DEBUG, Q921_LOG_ERROR, Q921_STATE_TEI_ASSIGNED, Q921_STATE_TEI_UNASSIGNED, Q921_TEI_BCAST, Q921_Link::state, and Q921_Link::tei.

Q921_API int Q921Rx32 ( L2TRUNK  trunk,
Q921DLMsg_t  ind,
L2UCHAR  tei,
L2UCHAR Mes,
L2INT  Size 
)

Receive data from Layer 3

Parameters:
[in]trunkQ.921 trunk
[in]indType of message
[in]teiTEI of this message
[in]MesMessage
[in]SizeSize of message (octets)

TODO: NT mode handling? Need a way to get Link context from Q.931

Definition at line 1710 of file Q921.c.

References Q921_Link::IFrameQueue, L2INT, MFIFOClear(), Q921_Link::N200, Q921_COMMAND, Q921_DL_DATA, Q921_DL_ESTABLISH, Q921_DL_RELEASE, Q921_DL_UNIT_DATA, Q921_FLAG_L3_INITIATED, Q921_IS_NT, Q921_LINK_CONTEXT, Q921_LOG_DEBUG, Q921_SET_FLAG, Q921_STATE_AWAITING_ESTABLISHMENT, Q921_STATE_AWAITING_RELEASE, Q921_STATE_MULTIPLE_FRAME_ESTABLISHED, Q921_STATE_TEI_ASSIGNED, Q921_STATE_TIMER_RECOVERY, Q921_TEI_BCAST, Q921Establish(), Q921Release(), Q921_Link::state, and Q921_Link::tei.

Q921_API void Q921SetGetTimeCB ( L2ULONG(*)(void)  callback)

Set custom callback to get current time in ms

Parameters:
[in]callbackCallback function

Definition at line 1353 of file Q921.c.

Q921_API void Q921SetLogCB ( L2TRUNK  trunk,
Q921LogCB_t  func,
void *  priv 
)

Set logging callback.

Set logging callback and private data

Parameters:
[in]trunkQ.921 trunk
[in]funcCallback function
[in]privCustom data passed to callback

Q921SetLogCB

Parameters:
[in]trunkpointer to Q921 data struct
[in]funcpointer to logging callback function
[in]privpointer to private data
Author:
Stefan Knoblich

Definition at line 3288 of file Q921.c.

Q921_API void Q921SetLogLevel ( L2TRUNK  trunk,
Q921LogLevel_t  level 
)

Set loglevel of Q.921 logging functions.

Set log level

Parameters:
[in]trunkQ.921 trunk
[in]levelLog level

Q921SetLogLevel

Parameters:
[in]trunkpointer to Q921 data struct
[in]levelnew loglevel
Author:
Stefan Knoblich

Definition at line 3305 of file Q921.c.

References Q921_LOG_DEBUG, and Q921_LOG_NONE.

Q921_API int Q921Start ( L2TRUNK  trunk)

Start trunk.

Start Q.921 Trunk

Parameters:
[in]trunkQ.921 trunk

Q921Start

Parameters:
[in]trunkpointer to Q921 data struct
Returns:
> 0 on success; <= 0 on error

Definition at line 1964 of file Q921.c.

References Q921_Link::IFrameQueue, Q921_Link::IFrameResendQueue, INITIALIZED_MAGIC, MFIFOCreate(), Q921_COMMAND, Q921_IS_PTMP, Q921_IS_PTMP_NT, Q921_IS_PTMP_TE, Q921_IS_PTP, Q921_IS_TE, Q921_LINK_CONTEXT, Q921_LOG_DEBUG, Q921_STATE_TEI_ASSIGNED, Q921_STATE_TEI_UNASSIGNED, Q921_TEI_BCAST, Q921_TEI_MAX, Q921_TRUNK_CONTEXT, Q921MAXHDLCSPACE, Q921_Link::state, Q921_Link::tei, and Q921_Link::UIFrameQueue.

Q921_API int Q921Stop ( L2TRUNK  trunk)

Stop trunk.

Stop Q.921 Trunk

Parameters:
[in]trunkQ.921 trunk

Q921Stop

Parameters:
[in]trunkpointer to Q921 data struct
Returns:
> 0 on success; <= 0 on error
Author:
Stefan Knoblich

Definition at line 2043 of file Q921.c.

References Q921_Link::IFrameQueue, Q921_Link::IFrameResendQueue, MFIFOClear(), Q921_IS_PTMP_NT, Q921_IS_PTMP_TE, Q921_IS_STOPPED, Q921_STATE_STOPPED, Q921_TEI_MAX, Q921_TRUNK_CONTEXT, Q921_Link::tei, and Q921_Link::UIFrameQueue.

Q921_API void Q921TimerTick ( L2TRUNK  trunk)

Update internal timers

Parameters:
[in]trunkQ.921 trunk

Definition at line 1311 of file Q921.c.

References L2ULONG, Q921_IS_PTMP_NT, Q921_LINK_CONTEXT, Q921_STATE_STOPPED, Q921_TEI_MAX, Q921_Link::state, Q921_Link::T200, Q921_Link::T201, Q921_Link::T203, and Q921_Link::tei.