libisdn
Q921.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "Q921.h"
#include "Q921priv.h"
#include "mfifo.h"

Go to the source code of this file.

Data Structures

struct  Q921StateName
 Static array of state name / value mappings.

Defines

#define MSG_PUTS(buf, off, lef, fmt)
#define MSG_SPRINTF(buf, off, lef, fmt,...)

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 void Q921TimerTick (L2TRUNK trunk)
Q921_API void Q921SetGetTimeCB (L2ULONG(*callback)(void))
Q921_API int Q921QueueHDLCFrame (L2TRUNK trunk, L2UCHAR *b, L2INT size)
Q921_API int Q921IsEstablished (L2TRUNK trunk, L2UCHAR tei)
Q921_API int Q921Establish (L2TRUNK trunk, L2UCHAR tei)
Q921_API int Q921Release (L2TRUNK trunk, L2UCHAR tei)
Q921_API int Q921Rx32 (L2TRUNK trunk, Q921DLMsg_t ind, L2UCHAR tei, L2UCHAR *Mes, L2INT Size)
Q921_API int Q921Start (L2TRUNK trunk)
 Start trunk.
Q921_API int Q921Stop (L2TRUNK trunk)
 Stop trunk.
int Q921Rx12 (L2TRUNK trunk)
 Process Q.921 frame that has been enqueued using Q921QueueHDLCFrame()
void Q921SetLogCB (L2TRUNK trunk, Q921LogCB_t func, void *priv)
 Set logging callback.
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.

Define Documentation

#define MSG_PUTS (   buf,
  off,
  lef,
  fmt 
)
Value:
strncat(buf + off, fmt, lef - 1);       \
        len = strlen(buf + off);                \
        off += len;                             \
        lef -= len;                             \
        if (lef <= 0) {                         \
                goto out;                       \
        }

Definition at line 542 of file Q921.c.

#define MSG_SPRINTF (   buf,
  off,
  lef,
  fmt,
  ... 
)
Value:
len = snprintf(buf + off, lef, fmt, ##__VA_ARGS__);     \
        if (len > 0) {                                          \
                off += len;                                     \
                lef -= len;                                     \
        } else {                                                \
                goto out;                                       \
        }

Definition at line 551 of file Q921.c.


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.

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.

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().

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 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.

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

Set logging 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.

void Q921SetLogLevel ( L2TRUNK  trunk,
Q921LogLevel_t  level 
)

Set loglevel of Q.921 logging functions.

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 Q921Stop ( L2TRUNK  trunk)

Stop 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.