\doxysection{src/gsm/lapdm.c File Reference}
\label{lapdm_8c}\index{src/gsm/lapdm.c@{src/gsm/lapdm.c}}


GSM LAPDm (TS 04.\+06) implementation.  


{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$inttypes.\+h$>$}\newline
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/timer.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/tlv.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/rsl.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/prim.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/gsm\+\_\+utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/lapdm.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/protocol/gsm\+\_\+04\+\_\+08.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/protocol/gsm\+\_\+08\+\_\+58.\+h$>$}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ LAPD\+\_\+\+U\+\_\+\+SABM}~0x7
\item 
\#define \textbf{ LAPDm\+\_\+\+LPD\+\_\+\+NORMAL}~0
\item 
\#define \textbf{ LAPDm\+\_\+\+LPD\+\_\+\+SMSCB}~1
\item 
\#define \textbf{ LAPDm\+\_\+\+SAPI\+\_\+\+NORMAL}~0
\item 
\#define \textbf{ LAPDm\+\_\+\+SAPI\+\_\+\+SMS}~3
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR}(lpd,  sapi,  cr)~((((lpd) \& 0x3) $<$$<$ 5) $\vert$ (((sapi) \& 0x7) $<$$<$ 2) $\vert$ (((cr) \& 0x1) $<$$<$ 1) $\vert$ 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR\+\_\+\+LPD}(addr)~(((addr) $>$$>$ 5) \& 0x3)
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR\+\_\+\+SAPI}(addr)~(((addr) $>$$>$ 2) \& 0x7)
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR\+\_\+\+CR}(addr)~(((addr) $>$$>$ 1) \& 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR\+\_\+\+EA}(addr)~((addr) \& 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+ADDR\+\_\+\+SHORT\+\_\+\+L2}(addr)~((addr) \& 0x3)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+I}(nr,  ns,  p)~((((nr) \& 0x7) $<$$<$ 5) $\vert$ (((p) \& 0x1) $<$$<$ 4) $\vert$ (((ns) \& 0x7) $<$$<$ 1))
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+S}(nr,  s,  p)~((((nr) \& 0x7) $<$$<$ 5) $\vert$ (((p) \& 0x1) $<$$<$ 4) $\vert$ (((s) \& 0x3) $<$$<$ 2) $\vert$ 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+U}(u,  p)~((((u) \& 0x1c) $<$$<$ (5-\/2)) $\vert$ (((p) \& 0x1) $<$$<$ 4) $\vert$ (((u) \& 0x3) $<$$<$ 2) $\vert$ 0x3)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+is\+\_\+I}(ctrl)~(((ctrl) \& 0x1) == 0)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+is\+\_\+S}(ctrl)~(((ctrl) \& 0x3) == 1)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+is\+\_\+U}(ctrl)~(((ctrl) \& 0x3) == 3)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+\+U\+\_\+\+BITS}(ctrl)~((((ctrl) \& 0xC) $>$$>$ 2) $\vert$ ((ctrl) \& 0x\+E0) $>$$>$ 3)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+\+PF\+\_\+\+BIT}(ctrl)~(((ctrl) $>$$>$ 4) \& 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+\+S\+\_\+\+BITS}(ctrl)~(((ctrl) \& 0xC) $>$$>$ 2)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+\+I\+\_\+\+Ns}(ctrl)~(((ctrl) \& 0xE) $>$$>$ 1)
\item 
\#define \textbf{ LAPDm\+\_\+\+CTRL\+\_\+\+Nr}(ctrl)~(((ctrl) \& 0x\+E0) $>$$>$ 5)
\item 
\#define \textbf{ LAPDm\+\_\+\+LEN}(\textbf{ len})~((\textbf{ len} $<$$<$ 2) $\vert$ 0x1)
\item 
\#define \textbf{ LAPDm\+\_\+\+MORE}~0x2
\item 
\#define \textbf{ LAPDm\+\_\+\+EL}~0x1
\item 
\#define \textbf{ LAPDm\+\_\+\+U\+\_\+\+UI}~0x0
\item 
\#define \textbf{ N201\+\_\+\+AB\+\_\+\+SACCH}~18
\item 
\#define \textbf{ N201\+\_\+\+AB\+\_\+\+SDCCH}~20
\item 
\#define \textbf{ N201\+\_\+\+AB\+\_\+\+FACCH}~20
\item 
\#define \textbf{ N201\+\_\+\+Bbis}~23
\item 
\#define \textbf{ N201\+\_\+\+Bter\+\_\+\+SACCH}~21
\item 
\#define \textbf{ N201\+\_\+\+Bter\+\_\+\+SDCCH}~23
\item 
\#define \textbf{ N201\+\_\+\+Bter\+\_\+\+FACCH}~23
\item 
\#define \textbf{ N201\+\_\+\+B4}~19
\item 
\#define \textbf{ N200\+\_\+\+EST\+\_\+\+REL}~5
\item 
\#define \textbf{ N200\+\_\+\+TR\+\_\+\+SACCH}~5
\item 
\#define \textbf{ N200\+\_\+\+TR\+\_\+\+SDCCH}~23
\item 
\#define \textbf{ N200\+\_\+\+TR\+\_\+\+FACCH\+\_\+\+FR}~34
\item 
\#define \textbf{ N200\+\_\+\+TR\+\_\+\+EFACCH\+\_\+\+FR}~48
\item 
\#define \textbf{ N200\+\_\+\+TR\+\_\+\+FACCH\+\_\+\+HR}~29
\item 
\#define \textbf{ N200}~\textbf{ N200\+\_\+\+TR\+\_\+\+SDCCH}
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ lapdm\+\_\+format} \{ \newline
\textbf{ LAPDm\+\_\+\+FMT\+\_\+A}
, \newline
\textbf{ LAPDm\+\_\+\+FMT\+\_\+B}
, \newline
\textbf{ LAPDm\+\_\+\+FMT\+\_\+\+Bbis}
, \newline
\textbf{ LAPDm\+\_\+\+FMT\+\_\+\+Bter}
, \newline
\textbf{ LAPDm\+\_\+\+FMT\+\_\+\+B4}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static int \textbf{ lapdm\+\_\+send\+\_\+ph\+\_\+data\+\_\+req} (struct \textbf{ lapd\+\_\+msg\+\_\+ctx} $\ast$lctx, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static int \textbf{ send\+\_\+rslms\+\_\+dlsap} (struct \textbf{ osmo\+\_\+dlsap\+\_\+prim} $\ast$dp, struct \textbf{ lapd\+\_\+msg\+\_\+ctx} $\ast$lctx)
\item 
static int \textbf{ update\+\_\+pending\+\_\+frames} (struct \textbf{ lapd\+\_\+msg\+\_\+ctx} $\ast$lctx)
\item 
static void \textbf{ lapdm\+\_\+dl\+\_\+init} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, struct \textbf{ lapdm\+\_\+entity} $\ast$entity, int t200\+\_\+ms, uint32\+\_\+t n200, const char $\ast$\textbf{ name})
\item 
void \textbf{ lapdm\+\_\+entity\+\_\+init} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode}, int t200)
\begin{DoxyCompactList}\small\item\em initialize a LAPDm entity and all datalinks inside \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+init2} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode}, const int $\ast$t200\+\_\+ms, int n200)
\begin{DoxyCompactList}\small\item\em initialize a LAPDm entity and all datalinks inside \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+init3} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode}, const int $\ast$t200\+\_\+ms, int n200, const char $\ast$name\+\_\+pfx)
\begin{DoxyCompactList}\small\item\em initialize a LAPDm entity and all datalinks inside \end{DoxyCompactList}\item 
static int \textbf{ get\+\_\+n200\+\_\+dcch} (enum \textbf{ gsm\+\_\+chan\+\_\+t} chan\+\_\+t)
\item 
void \textbf{ lapdm\+\_\+channel\+\_\+init} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode})
\begin{DoxyCompactList}\small\item\em initialize a LAPDm channel and all its channels \end{DoxyCompactList}\item 
int \textbf{ lapdm\+\_\+channel\+\_\+init2} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode}, const int $\ast$t200\+\_\+ms\+\_\+dcch, const int $\ast$t200\+\_\+ms\+\_\+acch, enum \textbf{ gsm\+\_\+chan\+\_\+t} chan\+\_\+t)
\begin{DoxyCompactList}\small\item\em initialize a LAPDm channel and all its channels \end{DoxyCompactList}\item 
int \textbf{ lapdm\+\_\+channel\+\_\+init3} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode}, const int $\ast$t200\+\_\+ms\+\_\+dcch, const int $\ast$t200\+\_\+ms\+\_\+acch, enum \textbf{ gsm\+\_\+chan\+\_\+t} chan\+\_\+t, const char $\ast$name\+\_\+pfx)
\begin{DoxyCompactList}\small\item\em initialize a LAPDm channel and all its channels \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+exit} (struct \textbf{ lapdm\+\_\+entity} $\ast$le)
\begin{DoxyCompactList}\small\item\em flush and release all resoures in LAPDm entity \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+exit} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc)
\item 
struct \textbf{ lapdm\+\_\+datalink} $\ast$ \textbf{ lapdm\+\_\+datalink\+\_\+for\+\_\+sapi} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint8\+\_\+t sapi)
\item 
static void \textbf{ lapdm\+\_\+pad\+\_\+msgb} (struct \textbf{ msgb} $\ast$\textbf{ msg}, uint8\+\_\+t n201)
\item 
static int \textbf{ rslms\+\_\+sendmsg} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+entity} $\ast$le)
\item 
static int \textbf{ tx\+\_\+ph\+\_\+data\+\_\+enqueue} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint8\+\_\+t \textbf{ chan\+\_\+nr}, uint8\+\_\+t \textbf{ link\+\_\+id}, uint8\+\_\+t pad)
\item 
static int \textbf{ tx\+\_\+ph\+\_\+data\+\_\+enqueue\+\_\+ui} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint8\+\_\+t \textbf{ chan\+\_\+nr}, uint8\+\_\+t \textbf{ link\+\_\+id}, uint8\+\_\+t pad)
\item 
static struct \textbf{ msgb} $\ast$ \textbf{ tx\+\_\+dequeue\+\_\+msgb} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, uint32\+\_\+t fn)
\item 
static struct \textbf{ msgb} $\ast$ \textbf{ tx\+\_\+dequeue\+\_\+dcch\+\_\+msgb} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint32\+\_\+t fn)
\item 
static struct \textbf{ msgb} $\ast$ \textbf{ tx\+\_\+dequeue\+\_\+acch\+\_\+msgb} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint32\+\_\+t fn)
\item 
int \textbf{ lapdm\+\_\+phsap\+\_\+dequeue\+\_\+prim\+\_\+fn} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, struct \textbf{ osmo\+\_\+phsap\+\_\+prim} $\ast$pp, uint32\+\_\+t fn)
\begin{DoxyCompactList}\small\item\em dequeue a msg that\textquotesingle{}s pending transmission via L1 and wrap it into a \doxyref{osmo\+\_\+phsap\+\_\+prim}{p.}{structosmo__phsap__prim} \end{DoxyCompactList}\item 
static void \textbf{ lapdm\+\_\+t200\+\_\+fn\+\_\+dl} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, uint32\+\_\+t fn)
\item 
void \textbf{ lapdm\+\_\+t200\+\_\+fn} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint32\+\_\+t fn)
\begin{DoxyCompactList}\small\item\em Get receive frame number from L1. \end{DoxyCompactList}\item 
int \textbf{ lapdm\+\_\+phsap\+\_\+dequeue\+\_\+prim} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, struct \textbf{ osmo\+\_\+phsap\+\_\+prim} $\ast$pp)
\begin{DoxyCompactList}\small\item\em dequeue a msg that\textquotesingle{}s pending transmission via L1 and wrap it into a \doxyref{osmo\+\_\+phsap\+\_\+prim}{p.}{structosmo__phsap__prim} \end{DoxyCompactList}\item 
static int \textbf{ l2\+\_\+ph\+\_\+data\+\_\+conf} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+entity} $\ast$le)
\item 
static int \textbf{ rsl\+\_\+is\+\_\+transparent} (uint8\+\_\+t \textbf{ msg\+\_\+type})
\item 
static int \textbf{ send\+\_\+rslms\+\_\+rll\+\_\+l3} (uint8\+\_\+t \textbf{ msg\+\_\+type}, struct \textbf{ lapdm\+\_\+msg\+\_\+ctx} $\ast$mctx, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static int \textbf{ send\+\_\+rslms\+\_\+rll\+\_\+l3\+\_\+ui} (struct \textbf{ lapdm\+\_\+msg\+\_\+ctx} $\ast$mctx, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static int \textbf{ send\+\_\+rll\+\_\+simple} (uint8\+\_\+t \textbf{ msg\+\_\+type}, struct \textbf{ lapdm\+\_\+msg\+\_\+ctx} $\ast$mctx)
\item 
static int \textbf{ rsl\+\_\+rll\+\_\+error} (uint8\+\_\+t \textbf{ cause}, struct \textbf{ lapdm\+\_\+msg\+\_\+ctx} $\ast$mctx)
\item 
static int \textbf{ lapdm\+\_\+rx\+\_\+not\+\_\+permitted} (const struct \textbf{ lapdm\+\_\+entity} $\ast$le, const struct \textbf{ lapd\+\_\+msg\+\_\+ctx} $\ast$lctx)
\item 
static int \textbf{ l2\+\_\+ph\+\_\+data\+\_\+ind} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint8\+\_\+t \textbf{ chan\+\_\+nr}, uint8\+\_\+t \textbf{ link\+\_\+id}, uint32\+\_\+t fn)
\item 
static int \textbf{ l2\+\_\+ph\+\_\+rach\+\_\+ind} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint8\+\_\+t ra, uint32\+\_\+t fn, uint8\+\_\+t acc\+\_\+delay)
\item 
static int \textbf{ l2\+\_\+ph\+\_\+chan\+\_\+conf} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+entity} $\ast$le, uint32\+\_\+t frame\+\_\+nr)
\item 
int \textbf{ lapdm\+\_\+phsap\+\_\+up} (struct \textbf{ osmo\+\_\+prim\+\_\+hdr} $\ast$oph, struct \textbf{ lapdm\+\_\+entity} $\ast$le)
\begin{DoxyCompactList}\small\item\em Receive a PH-\/\+SAP primitive from L1. \end{DoxyCompactList}\item 
static int \textbf{ set\+\_\+lapdm\+\_\+context} (struct \textbf{ lapdm\+\_\+datalink} $\ast$dl, uint8\+\_\+t \textbf{ chan\+\_\+nr}, uint8\+\_\+t \textbf{ link\+\_\+id}, int n201, uint8\+\_\+t sapi)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+est\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+udata\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+data\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+susp\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+res\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll\+\_\+rel\+\_\+req} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+datalink} $\ast$dl)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+chan\+\_\+rqd} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+rll} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+channel} $\ast$lc)
\item 
static int \textbf{ rslms\+\_\+rx\+\_\+com\+\_\+chan} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+channel} $\ast$lc)
\item 
int \textbf{ lapdm\+\_\+rslms\+\_\+recvmsg} (struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ lapdm\+\_\+channel} $\ast$lc)
\begin{DoxyCompactList}\small\item\em Receive a RSLms \textbf{ Message buffers} from Layer 3. \end{DoxyCompactList}\item 
int \textbf{ lapdm\+\_\+entity\+\_\+set\+\_\+mode} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode})
\begin{DoxyCompactList}\small\item\em Set the \doxyref{lapdm\+\_\+mode}{p.}{group__lapdm_gae1114a473c0f1b35d2fddae1bf35ff81} of a LAPDm entity. \end{DoxyCompactList}\item 
int \textbf{ lapdm\+\_\+channel\+\_\+set\+\_\+mode} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, enum \textbf{ lapdm\+\_\+mode} \textbf{ mode})
\begin{DoxyCompactList}\small\item\em Set the \doxyref{lapdm\+\_\+mode}{p.}{group__lapdm_gae1114a473c0f1b35d2fddae1bf35ff81} of a LAPDm channel. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+set\+\_\+l1} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, \textbf{ osmo\+\_\+prim\+\_\+cb} cb, void $\ast$ctx)
\begin{DoxyCompactList}\small\item\em Set the L1 callback and context of a LAPDm channel. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+set\+\_\+l3} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, \textbf{ lapdm\+\_\+cb\+\_\+t} cb, void $\ast$ctx)
\begin{DoxyCompactList}\small\item\em Set the L3 callback and context of a LAPDm channel. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+reset} (struct \textbf{ lapdm\+\_\+entity} $\ast$le)
\begin{DoxyCompactList}\small\item\em Reset an entire LAPDm entity and all its datalinks. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+reset} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc)
\begin{DoxyCompactList}\small\item\em Reset a LAPDm channel with all its entities. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+set\+\_\+flags} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, unsigned int \textbf{ flags})
\begin{DoxyCompactList}\small\item\em Set the flags of a LAPDm entity. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+set\+\_\+flags} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, unsigned int \textbf{ flags})
\begin{DoxyCompactList}\small\item\em Set the flags of all LAPDm entities in a LAPDm channel. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+entity\+\_\+set\+\_\+t200\+\_\+fn} (struct \textbf{ lapdm\+\_\+entity} $\ast$le, const uint32\+\_\+t $\ast$t200\+\_\+fn)
\begin{DoxyCompactList}\small\item\em Set the T200 FN timer of a LAPDm entity. \end{DoxyCompactList}\item 
void \textbf{ lapdm\+\_\+channel\+\_\+set\+\_\+t200\+\_\+fn} (struct \textbf{ lapdm\+\_\+channel} $\ast$lc, const uint32\+\_\+t $\ast$t200\+\_\+fn\+\_\+dcch, const uint32\+\_\+t $\ast$t200\+\_\+fn\+\_\+acch)
\begin{DoxyCompactList}\small\item\em Set the T200 FN timer of all LAPDm entities in a LAPDm channel. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ osmo\+\_\+ph\+\_\+prim\+\_\+names} [$\,$]
\item 
void $\ast$ \textbf{ tall\+\_\+lapd\+\_\+ctx}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
GSM LAPDm (TS 04.\+06) implementation. 

