\doxysection{Gsm0408}
\label{group__gsm0408}\index{Gsm0408@{Gsm0408}}


GSM Mobile Radion Interface L3 messages / TS 04.\+08.  


\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
const char $\ast$ \textbf{ rr\+\_\+cause\+\_\+name} (uint8\+\_\+t \textbf{ cause})
\begin{DoxyCompactList}\small\item\em return string representation of RR Cause value \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+rai\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$rai)
\begin{DoxyCompactList}\small\item\em Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in a caller-\/provided output buffer. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+rai\+\_\+name} (const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$rai)
\begin{DoxyCompactList}\small\item\em Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in a static buffer. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+rai\+\_\+name\+\_\+c} (const void $\ast$ctx, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$rai)
\begin{DoxyCompactList}\small\item\em Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in dynamically-\/allocated output buffer. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+rai\+\_\+to\+\_\+gprs} (struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$dest, const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$src)
\begin{DoxyCompactList}\small\item\em Convert \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} (new) into \doxyref{gprs\+\_\+ra\+\_\+id}{p.}{structgprs__ra__id} (old) \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+rai\+\_\+to\+\_\+osmo} (struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$dest, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$src)
\begin{DoxyCompactList}\small\item\em Convert \doxyref{gprs\+\_\+ra\+\_\+id}{p.}{structgprs__ra__id} (old) into \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} (new) \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+cc\+\_\+state\+\_\+name} (uint8\+\_\+t state)
\begin{DoxyCompactList}\small\item\em return string representation of CC State \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+cc\+\_\+msg\+\_\+name} (uint8\+\_\+t msgtype)
\begin{DoxyCompactList}\small\item\em return string representation of CC Message Type \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+rr\+\_\+msg\+\_\+name} (uint8\+\_\+t msgtype)
\begin{DoxyCompactList}\small\item\em return string representation of RR Message Type \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+rr\+\_\+short\+\_\+pd\+\_\+msg\+\_\+name} (uint8\+\_\+t msgtype)
\begin{DoxyCompactList}\small\item\em return string representation of RR Message Type using the RR short protocol discriminator \end{DoxyCompactList}\item 
enum \textbf{ gsm48\+\_\+chan\+\_\+mode} \textbf{ gsm48\+\_\+chan\+\_\+mode\+\_\+to\+\_\+vamos} (enum \textbf{ gsm48\+\_\+chan\+\_\+mode} \textbf{ mode})
\begin{DoxyCompactList}\small\item\em Translate GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$ to its corresponding GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$\+\_\+\+VAMOS mode. \end{DoxyCompactList}\item 
enum \textbf{ gsm48\+\_\+chan\+\_\+mode} \textbf{ gsm48\+\_\+chan\+\_\+mode\+\_\+to\+\_\+non\+\_\+vamos} (enum \textbf{ gsm48\+\_\+chan\+\_\+mode} \textbf{ mode})
\begin{DoxyCompactList}\small\item\em Translate GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$\+\_\+\+VAMOS to its corresponding GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$ non-\/vamos mode. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+mi\+\_\+type\+\_\+name} (uint8\+\_\+t \textbf{ mi})
\begin{DoxyCompactList}\small\item\em return string representation of Mobile Identity Type \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const uint8\+\_\+t $\ast$\textbf{ mi}, uint8\+\_\+t \textbf{ mi\+\_\+len})
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+mi\+\_\+name} (const uint8\+\_\+t $\ast$\textbf{ mi}, uint8\+\_\+t \textbf{ mi\+\_\+len})
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+c} (const void $\ast$ctx, const uint8\+\_\+t $\ast$\textbf{ mi}, uint8\+\_\+t \textbf{ mi\+\_\+len})
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode} (struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, const uint8\+\_\+t $\ast$mi\+\_\+data, uint8\+\_\+t \textbf{ mi\+\_\+len}, bool allow\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Extract Mobile Identity from encoded bytes (3GPP TS 24.\+008 10.\+5.\+1.\+4). \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encoded\+\_\+len} (const struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, int $\ast$mi\+\_\+digits)
\begin{DoxyCompactList}\small\item\em Return the number of encoded Mobile Identity octets, without actually encoding. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+buf} (uint8\+\_\+t $\ast$buf, size\+\_\+t buflen, const struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, bool allow\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Encode Mobile Identity from uint32\+\_\+t (TMSI) or digits string (all others) (3GPP TS 24.\+008 10.\+5.\+1.\+4). \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, bool allow\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Encode Mobile Identity type and BCD digits, appended to a msgb. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3\+\_\+buf} (struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, const uint8\+\_\+t $\ast$l3\+\_\+data, size\+\_\+t l3\+\_\+len, bool allow\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Extract Mobile Identity from a Complete Layer 3 message. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3} (struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi}, struct \textbf{ msgb} $\ast$\textbf{ msg}, bool allow\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Extract Mobile Identity from a Complete Layer 3 message. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf} (char $\ast$buf, size\+\_\+t buflen, const struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi})
\begin{DoxyCompactList}\small\item\em Return a human readable representation of a struct osmo\+\_\+mobile\+\_\+identity. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+c} (void $\ast$ctx, const struct osmo\+\_\+mobile\+\_\+identity $\ast$\textbf{ mi})
\begin{DoxyCompactList}\small\item\em Like \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf()}{p.}{group__gsm0408_ga2314c30d9470ecf1e15949ba1827bf0a}, but return the string in a talloc buffer. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+cmp} (const struct osmo\+\_\+mobile\+\_\+identity $\ast$a, const struct osmo\+\_\+mobile\+\_\+identity $\ast$b)
\begin{DoxyCompactList}\small\item\em Compare two osmo\+\_\+mobile\+\_\+identity structs, returning typical cmp() result. \end{DoxyCompactList}\item 
bool \textbf{ gsm48\+\_\+hdr\+\_\+gmm\+\_\+cipherable} (const struct \textbf{ gsm48\+\_\+hdr} $\ast$\textbf{ hdr})
\begin{DoxyCompactList}\small\item\em Checks is particular message is cipherable in A/\+Gb mode according to 3GPP TS 24.\+008 § 4.\+7.\+1.\+2. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+mcc\+\_\+mnc\+\_\+to\+\_\+bcd} (uint8\+\_\+t $\ast$bcd\+\_\+dst, uint16\+\_\+t mcc, uint16\+\_\+t mnc)
\item 
void \textbf{ gsm48\+\_\+mcc\+\_\+mnc\+\_\+from\+\_\+bcd} (uint8\+\_\+t $\ast$bcd\+\_\+src, uint16\+\_\+t $\ast$mcc, uint16\+\_\+t $\ast$mnc)
\item 
void \textbf{ gsm48\+\_\+generate\+\_\+lai} (struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$lai48, uint16\+\_\+t mcc, uint16\+\_\+t mnc, uint16\+\_\+t \textbf{ lac})
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Location Area Identifier, legacy implementation. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+generate\+\_\+lai2} (struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$lai48, const struct \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id} $\ast$\textbf{ lai})
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Location Area Identifier. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+lai} (struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$\textbf{ lai}, uint16\+\_\+t $\ast$mcc, uint16\+\_\+t $\ast$mnc, uint16\+\_\+t $\ast$\textbf{ lac})
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Location Area Identifier, legacy implementation. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+decode\+\_\+lai2} (const struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$\textbf{ lai}, struct \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id} $\ast$decoded)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Location Area Identifier. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+set\+\_\+dtx} (struct \textbf{ gsm48\+\_\+cell\+\_\+options} $\ast$op, enum \textbf{ gsm48\+\_\+dtx\+\_\+mode} full, enum \textbf{ gsm48\+\_\+dtx\+\_\+mode} half, bool is\+\_\+bcch)
\begin{DoxyCompactList}\small\item\em Set DTX mode in Cell Options IE (3GPP TS 44.\+018) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+generate\+\_\+mid\+\_\+from\+\_\+tmsi} (uint8\+\_\+t $\ast$buf, uint32\+\_\+t tmsi)
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ gsm48\+\_\+generate\+\_\+mid} (uint8\+\_\+t $\ast$buf, const char $\ast$id, uint8\+\_\+t mi\+\_\+type)
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+generate\+\_\+mid\+\_\+from\+\_\+imsi} (uint8\+\_\+t $\ast$buf, const char $\ast$imsi)
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+mi\+\_\+to\+\_\+string} (char $\ast$string, int str\+\_\+len, const uint8\+\_\+t $\ast$\textbf{ mi}, int \textbf{ mi\+\_\+len})
\begin{DoxyCompactList}\small\item\em Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+decode} (struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$dst, const uint8\+\_\+t $\ast$ra\+\_\+data, size\+\_\+t ra\+\_\+data\+\_\+len)
\begin{DoxyCompactList}\small\item\em Decode to struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} from a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+buf} (uint8\+\_\+t $\ast$buf, size\+\_\+t buflen, const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$src)
\begin{DoxyCompactList}\small\item\em Encode struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} to a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification\+: write to a buffer. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+msgb} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$src)
\begin{DoxyCompactList}\small\item\em Encode struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} to a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification\+: append to msgb. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+parse\+\_\+ra} (struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$raid, const uint8\+\_\+t $\ast$buf)
\begin{DoxyCompactList}\small\item\em Parse TS 04.\+08 Routing Area Identifier. \end{DoxyCompactList}\item 
void \textbf{ gsm48\+\_\+encode\+\_\+ra} (struct \textbf{ gsm48\+\_\+ra\+\_\+id} $\ast$out, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$raid)
\begin{DoxyCompactList}\small\item\em Encode a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+construct\+\_\+ra} (uint8\+\_\+t $\ast$buf, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$raid)
\begin{DoxyCompactList}\small\item\em Encode a TS 04.\+08 Routing Area Identifier. \end{DoxyCompactList}\item 
bool \textbf{ gsm48\+\_\+ra\+\_\+equal} (const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$raid1, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$raid2)
\begin{DoxyCompactList}\small\item\em Compare a TS 04.\+08 Routing Area Identifier. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+number\+\_\+of\+\_\+paging\+\_\+subchannels} (const struct \textbf{ gsm48\+\_\+control\+\_\+channel\+\_\+descr} $\ast$\textbf{ chan\+\_\+desc})
\begin{DoxyCompactList}\small\item\em Determine number of paging sub-\/channels. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, uint8\+\_\+t pdisc, uint8\+\_\+t \textbf{ msg\+\_\+type})
\begin{DoxyCompactList}\small\item\em Compose a string naming the message type for given protocol, in a caller-\/provided buffer. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name} (uint8\+\_\+t pdisc, uint8\+\_\+t \textbf{ msg\+\_\+type})
\begin{DoxyCompactList}\small\item\em Compose a string naming the message type for given protocol, in a static buffer. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+c} (const void $\ast$ctx, uint8\+\_\+t pdisc, uint8\+\_\+t \textbf{ msg\+\_\+type})
\begin{DoxyCompactList}\small\item\em Compose a string naming the message type for given protocol, in a dynamically-\/allocated buffer. \end{DoxyCompactList}\item 
struct \textbf{ gsm48\+\_\+hdr} $\ast$ \textbf{ gsm48\+\_\+push\+\_\+l3hdr} (struct \textbf{ msgb} $\ast$\textbf{ msg}, uint8\+\_\+t pdisc, uint8\+\_\+t \textbf{ msg\+\_\+type})
\begin{DoxyCompactList}\small\item\em Wrap a given \doxyref{msg}{p.}{gsm__08__08_8h_a22fb9e0346dd94237971f7d829821bfa} with \doxyref{gsm48\+\_\+hdr}{p.}{structgsm48__hdr} structure. \end{DoxyCompactList}\item 
bool \textbf{ osmo\+\_\+gsm48\+\_\+classmark1\+\_\+is\+\_\+r99} (const struct \textbf{ gsm48\+\_\+classmark1} $\ast$cm1)
\item 
bool \textbf{ osmo\+\_\+gsm48\+\_\+classmark2\+\_\+is\+\_\+r99} (const struct \textbf{ gsm48\+\_\+classmark2} $\ast$\textbf{ cm2}, uint8\+\_\+t \textbf{ cm2\+\_\+len})
\item 
bool \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+is\+\_\+r99} (const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$cm)
\begin{DoxyCompactList}\small\item\em Return true if any of Classmark 1 or Classmark 2 are present and indicate R99 capability. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$cm)
\begin{DoxyCompactList}\small\item\em Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name} (const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$cm)
\begin{DoxyCompactList}\small\item\em Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+c} (const void $\ast$ctx, const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$cm)
\begin{DoxyCompactList}\small\item\em Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+update} (struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$dst, const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$src)
\begin{DoxyCompactList}\small\item\em Overwrite dst with the Classmark information present in src. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+supports\+\_\+a5} (const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$cm, uint8\+\_\+t a5)
\begin{DoxyCompactList}\small\item\em Determine if the given Classmark (1/2/3) value permits a given A5/n cipher. \end{DoxyCompactList}\item 
int8\+\_\+t \textbf{ osmo\+\_\+gsm48\+\_\+rfpowercap2powerclass} (enum \textbf{ gsm\+\_\+band} band, uint8\+\_\+t rf\+\_\+power\+\_\+cap)
\begin{DoxyCompactList}\small\item\em Decode power class from Classmark1/2 RF power capability field. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number} (char $\ast$output, int output\+\_\+len, const uint8\+\_\+t $\ast$bcd\+\_\+lv, int h\+\_\+len)
\begin{DoxyCompactList}\small\item\em Like \doxyref{gsm48\+\_\+decode\+\_\+bcd\+\_\+number2()}{p.}{group__gsm0408_ga5b3bf7d4c1afaa1fe5705f76bb5a0e07} but with less airtight bounds checking. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number2} (char $\ast$output, size\+\_\+t output\+\_\+len, const uint8\+\_\+t $\ast$bcd\+\_\+lv, size\+\_\+t input\+\_\+len, size\+\_\+t h\+\_\+len)
\begin{DoxyCompactList}\small\item\em Decode a \textquotesingle{}called/calling/connect party BCD number\textquotesingle{} as in 10.\+5.\+4.\+7. \end{DoxyCompactList}\item 
static int \textbf{ asc\+\_\+to\+\_\+bcd} (const char asc)
\begin{DoxyCompactList}\small\item\em convert a single ASCII character to call-\/control BCD \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+bcd\+\_\+number} (uint8\+\_\+t $\ast$bcd\+\_\+lv, uint8\+\_\+t max\+\_\+len, int h\+\_\+len, const char $\ast$input)
\begin{DoxyCompactList}\small\item\em convert a ASCII phone number to \textquotesingle{}called/calling/connect party BCD number\textquotesingle{} \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+bearer\+\_\+cap} (struct \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap} $\ast$bcap, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Bearer Capability IE (10.\+5.\+4.\+5) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+bearer\+\_\+cap} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int lv\+\_\+only, const struct \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap} $\ast$bcap)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Bearer Capability IE (10.\+5.\+4.\+5) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+cccap} (struct \textbf{ gsm\+\_\+mncc\+\_\+cccap} $\ast$ccap, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Call Control Capabilities IE (10.\+5.\+4.\+5a) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+cccap} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+cccap} $\ast$ccap)
\begin{DoxyCompactList}\small\item\em Encodoe TS 04.\+08 Call Control Capabilities (10.\+5.\+4.\+5a) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+called} (struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$called, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Called Party BCD Number IE (10.\+5.\+4.\+7) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+called} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$called)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Called Party IE (10.\+5.\+4.\+7) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+callerid} (struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$callerid, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Caller ID. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+callerid} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int ie, int max\+\_\+len, const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$callerid)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Caller ID IE. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+cause} (struct \textbf{ gsm\+\_\+mncc\+\_\+cause} $\ast$\textbf{ cause}, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Cause IE (10.\+5.\+4.\+11) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+cause} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int lv\+\_\+only, const struct \textbf{ gsm\+\_\+mncc\+\_\+cause} $\ast$\textbf{ cause})
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Cause IE (10.\+5.\+4.\+11) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+calling} (struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$calling, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Calling Number IE (10.\+5.\+4.\+9) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+calling} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$calling)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Calling Number IE (10.\+5.\+4.\+9) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+connected} (struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$connected, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Connected Number IE (10.\+5.\+4.\+13) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+connected} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$connected)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Connected Number IE (10.\+5.\+4.\+13) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+redirecting} (struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$redirecting, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Redirecting Number IE (10.\+5.\+4.\+21b) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+redirecting} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$redirecting)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Redirecting Number IE (10.\+5.\+4.\+21b) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+facility} (struct \textbf{ gsm\+\_\+mncc\+\_\+facility} $\ast$facility, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Facility IE (10.\+5.\+4.\+15) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+facility} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int lv\+\_\+only, const struct \textbf{ gsm\+\_\+mncc\+\_\+facility} $\ast$facility)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Facility IE (10.\+5.\+4.\+15) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+notify} (int $\ast$notify, const uint8\+\_\+t $\ast$v)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Notify IE (10.\+5.\+4.\+20) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+notify} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int notify)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Notify IE (10.\+5.\+4.\+20) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+signal} (int $\ast$signal, const uint8\+\_\+t $\ast$v)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Signal IE (10.\+5.\+4.\+23) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+signal} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int signal)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Signal IE (10.\+5.\+4.\+23) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+keypad} (int $\ast$keypad, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Keypad IE (10.\+5.\+4.\+17) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+keypad} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int keypad)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Keypad IE (10.\+5.\+4.\+17) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+progress} (struct \textbf{ gsm\+\_\+mncc\+\_\+progress} $\ast$progress, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Progress IE (10.\+5.\+4.\+21) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+progress} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int lv\+\_\+only, const struct \textbf{ gsm\+\_\+mncc\+\_\+progress} $\ast$p)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 Progress IE (10.\+5.\+4.\+21) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+useruser} (struct \textbf{ gsm\+\_\+mncc\+\_\+useruser} $\ast$uu, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 User-\/\+User IE (10.\+5.\+4.\+25) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+useruser} (struct \textbf{ msgb} $\ast$\textbf{ msg}, int lv\+\_\+only, const struct \textbf{ gsm\+\_\+mncc\+\_\+useruser} $\ast$uu)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 User-\/\+User IE (10.\+5.\+4.\+25) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+ssversion} (struct \textbf{ gsm\+\_\+mncc\+\_\+ssversion} $\ast$ssv, const uint8\+\_\+t $\ast$lv)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 SS Version IE (10.\+5.\+4.\+24) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+ssversion} (struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ gsm\+\_\+mncc\+\_\+ssversion} $\ast$ssv)
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 SS Version IE (10.\+5.\+4.\+24) \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+encode\+\_\+more} (struct \textbf{ msgb} $\ast$\textbf{ msg})
\begin{DoxyCompactList}\small\item\em Encode TS 04.\+08 More Data IE (10.\+5.\+4.\+19) \end{DoxyCompactList}\item 
static int32\+\_\+t \textbf{ smod} (int32\+\_\+t \textbf{ n}, int32\+\_\+t m)
\item 
int \textbf{ gsm48\+\_\+decode\+\_\+freq\+\_\+list} (struct \textbf{ gsm\+\_\+sysinfo\+\_\+freq} $\ast$f, const uint8\+\_\+t $\ast$cd, uint8\+\_\+t \textbf{ len}, uint8\+\_\+t mask, uint8\+\_\+t frqt)
\begin{DoxyCompactList}\small\item\em Decode TS 04.\+08 Cell Channel Description IE (10.\+5.\+2.\+1b) and other frequency lists. \end{DoxyCompactList}\item 
int \textbf{ gsm48\+\_\+decode\+\_\+classmark3} (struct \textbf{ gsm48\+\_\+classmark3} $\ast$classmark3\+\_\+out, const uint8\+\_\+t $\ast$classmark3, size\+\_\+t classmark3\+\_\+len)
\begin{DoxyCompactList}\small\item\em Decode 3GPP TS 24.\+008 Mobile Station Classmark 3 (10.\+5.\+1.\+7). \end{DoxyCompactList}\item 
bool \textbf{ gprs\+\_\+ms\+\_\+net\+\_\+cap\+\_\+gea\+\_\+supported} (const uint8\+\_\+t $\ast$ms\+\_\+net\+\_\+cap, uint8\+\_\+t cap\+\_\+len, enum \textbf{ gprs\+\_\+ciph\+\_\+algo} gea)
\begin{DoxyCompactList}\small\item\em Check if MS supports particular version of GEA by inspecting MS network capability IE specified in 3GPP TS 24.\+008. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct \textbf{ tlv\+\_\+definition} \textbf{ gsm48\+\_\+att\+\_\+tlvdef}
\begin{DoxyCompactList}\small\item\em TLV parser definitions for TS 04.\+08 CC. \end{DoxyCompactList}\item 
const struct \textbf{ tlv\+\_\+definition} \textbf{ gsm48\+\_\+rr\+\_\+att\+\_\+tlvdef}
\begin{DoxyCompactList}\small\item\em TLV parser definitions for TS 04.\+08 RR. \end{DoxyCompactList}\item 
const struct \textbf{ tlv\+\_\+definition} \textbf{ gsm48\+\_\+mm\+\_\+att\+\_\+tlvdef}
\begin{DoxyCompactList}\small\item\em TLV parser definitions for TS 04.\+08 MM. \end{DoxyCompactList}\item 
static const struct \textbf{ value\+\_\+string} \textbf{ rr\+\_\+cause\+\_\+names} [$\,$]
\item 
static const char $\ast$ \textbf{ cc\+\_\+state\+\_\+names} [32]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ cc\+\_\+msg\+\_\+names} [$\,$]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ rr\+\_\+msg\+\_\+names} [$\,$]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ rr\+\_\+msg\+\_\+type\+\_\+short\+\_\+names} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+chan\+\_\+mode\+\_\+names} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm\+\_\+chan\+\_\+t\+\_\+names} [$\,$]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ mi\+\_\+type\+\_\+names} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+pdisc\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+08 Protocol Descriptor names. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+rr\+\_\+msgtype\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+08 RR Message Type names. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+mm\+\_\+msgtype\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+08 MM Message Type names. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+cc\+\_\+msgtype\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+08 CC Message Type names. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+cc\+\_\+cause\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+08 10.\+5..4.\+11 Call Control Cause Values. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+nc\+\_\+ss\+\_\+msgtype\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em TS 04.\+80, section 3.\+4 Messages for supplementary services control. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+reject\+\_\+value\+\_\+names} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ osmo\+\_\+lu\+\_\+type\+\_\+names} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ osmo\+\_\+cm\+\_\+service\+\_\+type\+\_\+names} [$\,$]
\item 
static const char \textbf{ bcd\+\_\+num\+\_\+digits} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+gmm\+\_\+cause\+\_\+names\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em 10.\+5.\+5.\+14 GPRS MM Cause / Table 10.\+5.\+147 \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gsm48\+\_\+gmm\+\_\+cause\+\_\+names} = \textbf{ gsm48\+\_\+gmm\+\_\+cause\+\_\+names\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gsm48\+\_\+gsm\+\_\+cause\+\_\+names\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em 10.\+5.\+6.\+6 SM Cause / Table 10.\+5.\+157 \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gsm48\+\_\+gsm\+\_\+cause\+\_\+names} = \textbf{ gsm48\+\_\+gsm\+\_\+cause\+\_\+names\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+msgt\+\_\+gmm\+\_\+names} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GMM message types. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+att\+\_\+t\+\_\+strs\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GPRS Attach types according to 10.\+5.\+5.\+2. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gprs\+\_\+att\+\_\+t\+\_\+strs} = \textbf{ gprs\+\_\+att\+\_\+t\+\_\+strs\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+upd\+\_\+t\+\_\+strs\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GPRS Location Update Types. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gprs\+\_\+upd\+\_\+t\+\_\+strs} = \textbf{ gprs\+\_\+upd\+\_\+t\+\_\+strs\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GMM MO Detach Types according to 10.\+5.\+5.\+5. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs} = \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GMM MT Detach Types according to 10.\+5.\+5.\+5. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs} = \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs\+\_\+}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+service\+\_\+t\+\_\+strs\+\_\+} [$\,$]
\begin{DoxyCompactList}\small\item\em String names of GMM Service Types. \end{DoxyCompactList}\item 
const struct \textbf{ value\+\_\+string} $\ast$ \textbf{ gprs\+\_\+service\+\_\+t\+\_\+strs} = \textbf{ gprs\+\_\+service\+\_\+t\+\_\+strs\+\_\+}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
GSM Mobile Radion Interface L3 messages / TS 04.\+08. 



\doxysubsection{Function Documentation}
\mbox{\label{group__gsm0408_ga8af2627278e121b2a8525195fa714ea5}} 
\index{Gsm0408@{Gsm0408}!asc\_to\_bcd@{asc\_to\_bcd}}
\index{asc\_to\_bcd@{asc\_to\_bcd}!Gsm0408@{Gsm0408}}
\doxysubsubsection{asc\_to\_bcd()}
{\footnotesize\ttfamily static int asc\+\_\+to\+\_\+bcd (\begin{DoxyParamCaption}\item[{const char}]{asc }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



convert a single ASCII character to call-\/control BCD 



References \textbf{ ARRAY\+\_\+\+SIZE}, and \textbf{ bcd\+\_\+num\+\_\+digits}.



Referenced by \textbf{ gsm48\+\_\+encode\+\_\+bcd\+\_\+number()}.

\mbox{\label{group__gsm0408_ga49d16b3ec95ecfbd157a1de037d75b74}} 
\index{Gsm0408@{Gsm0408}!gprs\_ms\_net\_cap\_gea\_supported@{gprs\_ms\_net\_cap\_gea\_supported}}
\index{gprs\_ms\_net\_cap\_gea\_supported@{gprs\_ms\_net\_cap\_gea\_supported}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_ms\_net\_cap\_gea\_supported()}
{\footnotesize\ttfamily bool gprs\+\_\+ms\+\_\+net\+\_\+cap\+\_\+gea\+\_\+supported (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{ms\+\_\+net\+\_\+cap,  }\item[{uint8\+\_\+t}]{cap\+\_\+len,  }\item[{enum \textbf{ gprs\+\_\+ciph\+\_\+algo}}]{gea }\end{DoxyParamCaption})}



Check if MS supports particular version of GEA by inspecting MS network capability IE specified in 3GPP TS 24.\+008. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ms\+\_\+net\+\_\+cap} & Buffer with raw MS network capability IE value, 3 -\/ 10 bytes \\
\hline
\mbox{\texttt{ in}}  & {\em cap\+\_\+len} & Length of ms\+\_\+net\+\_\+cap, in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em gea} & Version of GEA to check \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true if given version is supported by MS, false otherwise 
\end{DoxyReturn}


References \textbf{ GPRS\+\_\+\+ALGO\+\_\+\+GEA0}, \textbf{ GPRS\+\_\+\+ALGO\+\_\+\+GEA1}, \textbf{ GPRS\+\_\+\+ALGO\+\_\+\+GEA2}, \textbf{ GPRS\+\_\+\+ALGO\+\_\+\+GEA3}, and \textbf{ GPRS\+\_\+\+ALGO\+\_\+\+GEA4}.

\mbox{\label{group__gsm0408_ga1da7ad6a2dc9dcbfba2a69fc399ad740}} 
\index{Gsm0408@{Gsm0408}!gprs\_rai\_to\_osmo@{gprs\_rai\_to\_osmo}}
\index{gprs\_rai\_to\_osmo@{gprs\_rai\_to\_osmo}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_rai\_to\_osmo()}
{\footnotesize\ttfamily void gprs\+\_\+rai\+\_\+to\+\_\+osmo (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$}]{dest,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{src }\end{DoxyParamCaption})}



Convert \doxyref{gprs\+\_\+ra\+\_\+id}{p.}{structgprs__ra__id} (old) into \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} (new) 



References \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::lac}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::plmn}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::rac}, and \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}.

\mbox{\label{group__gsm0408_gab0699960d0d7babf1f38532ab2af3a44}} 
\index{Gsm0408@{Gsm0408}!gsm48\_cc\_msg\_name@{gsm48\_cc\_msg\_name}}
\index{gsm48\_cc\_msg\_name@{gsm48\_cc\_msg\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_cc\_msg\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+cc\+\_\+msg\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{msgtype }\end{DoxyParamCaption})}



return string representation of CC Message Type 



References \textbf{ cc\+\_\+msg\+\_\+names}, and \textbf{ get\+\_\+value\+\_\+string()}.

\mbox{\label{group__gsm0408_gadbd70480952e29cfb9a1fe5e9ffa3e4c}} 
\index{Gsm0408@{Gsm0408}!gsm48\_cc\_state\_name@{gsm48\_cc\_state\_name}}
\index{gsm48\_cc\_state\_name@{gsm48\_cc\_state\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_cc\_state\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+cc\+\_\+state\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{state }\end{DoxyParamCaption})}



return string representation of CC State 



References \textbf{ ARRAY\+\_\+\+SIZE}, and \textbf{ cc\+\_\+state\+\_\+names}.

\mbox{\label{group__gsm0408_gafc4af1e5cda0fc66e89ac88d46cb40a4}} 
\index{Gsm0408@{Gsm0408}!gsm48\_chan\_mode\_to\_non\_vamos@{gsm48\_chan\_mode\_to\_non\_vamos}}
\index{gsm48\_chan\_mode\_to\_non\_vamos@{gsm48\_chan\_mode\_to\_non\_vamos}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_chan\_mode\_to\_non\_vamos()}
{\footnotesize\ttfamily enum \textbf{ gsm48\+\_\+chan\+\_\+mode} gsm48\+\_\+chan\+\_\+mode\+\_\+to\+\_\+non\+\_\+vamos (\begin{DoxyParamCaption}\item[{enum \textbf{ gsm48\+\_\+chan\+\_\+mode}}]{mode }\end{DoxyParamCaption})}



Translate GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$\+\_\+\+VAMOS to its corresponding GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$ non-\/vamos mode. 

If the mode is not a VAMOS mode, return the unchanged mode. 

References \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+AMR}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+EFR}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V1}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V1\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V2\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V3\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V5}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V5\+\_\+\+VAMOS}, and \textbf{ mode}.

\mbox{\label{group__gsm0408_gaa4d52308340ef3f2568b791ab87cc7e6}} 
\index{Gsm0408@{Gsm0408}!gsm48\_chan\_mode\_to\_vamos@{gsm48\_chan\_mode\_to\_vamos}}
\index{gsm48\_chan\_mode\_to\_vamos@{gsm48\_chan\_mode\_to\_vamos}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_chan\_mode\_to\_vamos()}
{\footnotesize\ttfamily enum \textbf{ gsm48\+\_\+chan\+\_\+mode} gsm48\+\_\+chan\+\_\+mode\+\_\+to\+\_\+vamos (\begin{DoxyParamCaption}\item[{enum \textbf{ gsm48\+\_\+chan\+\_\+mode}}]{mode }\end{DoxyParamCaption})}



Translate GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$ to its corresponding GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+$\ast$\+\_\+\+VAMOS mode. 

If the mode has no equivalent VAMOS mode, return a negative value. 

References \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+AMR}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+EFR}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V1}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V1\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V2\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V3\+\_\+\+VAMOS}, \textbf{ GSM48\+\_\+\+CMODE\+\_\+\+SPEECH\+\_\+\+V5\+\_\+\+VAMOS}, and \textbf{ mode}.

\mbox{\label{group__gsm0408_gae892d02a72005cd11e26576c3bb0af61}} 
\index{Gsm0408@{Gsm0408}!gsm48\_construct\_ra@{gsm48\_construct\_ra}}
\index{gsm48\_construct\_ra@{gsm48\_construct\_ra}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_construct\_ra()}
{\footnotesize\ttfamily int gsm48\+\_\+construct\+\_\+ra (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{raid }\end{DoxyParamCaption})}



Encode a TS 04.\+08 Routing Area Identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Caller-\/provided output buffer of 6 bytes \\
\hline
\mbox{\texttt{ in}}  & {\em raid} & Routing Area ID to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of bytes used in {\itshape buf} 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+encode\+\_\+ra()}.

\mbox{\label{group__gsm0408_gad0214b46c6453ec71cec042ba96422b8}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_bcd\_number@{gsm48\_decode\_bcd\_number}}
\index{gsm48\_decode\_bcd\_number@{gsm48\_decode\_bcd\_number}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_bcd\_number()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+bcd\+\_\+number (\begin{DoxyParamCaption}\item[{char $\ast$}]{output,  }\item[{int}]{output\+\_\+len,  }\item[{const uint8\+\_\+t $\ast$}]{bcd\+\_\+lv,  }\item[{int}]{h\+\_\+len }\end{DoxyParamCaption})}



Like \doxyref{gsm48\+\_\+decode\+\_\+bcd\+\_\+number2()}{p.}{group__gsm0408_ga5b3bf7d4c1afaa1fe5705f76bb5a0e07} but with less airtight bounds checking. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em output} & Caller-\/provided output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em output\+\_\+len} & sizeof(output) \\
\hline
\mbox{\texttt{ in}}  & {\em bcd\+\_\+lv} & Length-\/\+Value portion of to-\/be-\/decoded IE \\
\hline
\mbox{\texttt{ in}}  & {\em h\+\_\+len} & Length of an optional heder between L and V portion \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 in case of success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number2()}.



Referenced by \textbf{ gsm0808\+\_\+dec\+\_\+msisdn()}, \textbf{ gsm48\+\_\+decode\+\_\+called()}, and \textbf{ gsm48\+\_\+decode\+\_\+callerid()}.

\mbox{\label{group__gsm0408_ga5b3bf7d4c1afaa1fe5705f76bb5a0e07}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_bcd\_number2@{gsm48\_decode\_bcd\_number2}}
\index{gsm48\_decode\_bcd\_number2@{gsm48\_decode\_bcd\_number2}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_bcd\_number2()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+bcd\+\_\+number2 (\begin{DoxyParamCaption}\item[{char $\ast$}]{output,  }\item[{size\+\_\+t}]{output\+\_\+len,  }\item[{const uint8\+\_\+t $\ast$}]{bcd\+\_\+lv,  }\item[{size\+\_\+t}]{input\+\_\+len,  }\item[{size\+\_\+t}]{h\+\_\+len }\end{DoxyParamCaption})}



Decode a \textquotesingle{}called/calling/connect party BCD number\textquotesingle{} as in 10.\+5.\+4.\+7. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em output} & Caller-\/provided output buffer. \\
\hline
\mbox{\texttt{ in}}  & {\em output\+\_\+len} & sizeof(output). \\
\hline
\mbox{\texttt{ in}}  & {\em bcd\+\_\+lv} & Length-\/\+Value part of to-\/be-\/decoded IE. \\
\hline
\mbox{\texttt{ in}}  & {\em input\+\_\+len} & Size of the bcd\+\_\+lv buffer for bounds checking. \\
\hline
\mbox{\texttt{ in}}  & {\em h\+\_\+len} & Length of an optional header between L and V parts. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 in case of success, negative on error.
\end{DoxyReturn}
Errors checked\+:
\begin{DoxyItemize}
\item no or too little input data (-\/EIO),
\item IE length exceeds input data size (-\/EINVAL),
\item no or too little output buffer size (-\/ENOSPC),
\item decoded number exceeds size of the output buffer (-\/ENOSPC).
\end{DoxyItemize}

The output is guaranteed to be nul terminated iff output\+\_\+len $>$ 0. 

References \textbf{ bcd\+\_\+num\+\_\+digits}.



Referenced by \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number()}, and \textbf{ osmo\+\_\+gsup\+\_\+decode()}.

\mbox{\label{group__gsm0408_ga86a28ebd028d29eb0ac1dbd3003b4c39}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_bearer\_cap@{gsm48\_decode\_bearer\_cap}}
\index{gsm48\_decode\_bearer\_cap@{gsm48\_decode\_bearer\_cap}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_bearer\_cap()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+bearer\+\_\+cap (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap} $\ast$}]{bcap,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Bearer Capability IE (10.\+5.\+4.\+5) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em bcap} & Caller-\/provided memory for decoded output \\
\hline
\mbox{\texttt{ in}}  & {\em lv} & LV portion of TS 04.\+08 Bearer Capability \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::async}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::coding}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::data}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+RRQ\+\_\+\+DUAL\+\_\+\+FR}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+RRQ\+\_\+\+DUAL\+\_\+\+HR}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+RRQ\+\_\+\+FR\+\_\+\+ONLY}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+SV\+\_\+\+FR}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+SV\+\_\+\+HR}, \textbf{ GSM\+\_\+\+MNCC\+\_\+\+BCAP\+\_\+\+AUDIO}, \textbf{ GSM\+\_\+\+MNCC\+\_\+\+BCAP\+\_\+\+FAX\+\_\+\+G3}, \textbf{ GSM\+\_\+\+MNCC\+\_\+\+BCAP\+\_\+\+SPEECH}, \textbf{ GSM\+\_\+\+MNCC\+\_\+\+BCAP\+\_\+\+UNR\+\_\+\+DIG}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::interm\+\_\+rate}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::mode}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::modem\+\_\+type}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::nr\+\_\+data\+\_\+bits}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::nr\+\_\+stop\+\_\+bits}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::parity}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::radio}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::rate\+\_\+adaption}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::sig\+\_\+access}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::speech\+\_\+ctm}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::speech\+\_\+ver}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::transfer}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::transp}, and \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::user\+\_\+rate}.

\mbox{\label{group__gsm0408_gab4519c62e601705c981ae59c3454bc6c}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_called@{gsm48\_decode\_called}}
\index{gsm48\_decode\_called@{gsm48\_decode\_called}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_called()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+called (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{called,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Called Party BCD Number IE (10.\+5.\+4.\+7) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em called} & Caller-\/provided memory for decoded number \\
\hline
\mbox{\texttt{ in}}  & {\em lv} & Length-\/\+Value portion of IE \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number()}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::number}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::plan}, and \textbf{ gsm\+\_\+mncc\+\_\+number\+::type}.

\mbox{\label{group__gsm0408_ga9ae6cb39c986258e7aaebe790075d9a7}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_callerid@{gsm48\_decode\_callerid}}
\index{gsm48\_decode\_callerid@{gsm48\_decode\_callerid}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_callerid()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+callerid (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{callerid,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Caller ID. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em callerid} & Caller-\/provided memory for decoded number \\
\hline
\mbox{\texttt{ in}}  & {\em lv} & Length-\/\+Value portion of IE \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number()}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::number}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::plan}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::present}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::screen}, and \textbf{ gsm\+\_\+mncc\+\_\+number\+::type}.



Referenced by \textbf{ gsm48\+\_\+decode\+\_\+calling()}, \textbf{ gsm48\+\_\+decode\+\_\+connected()}, and \textbf{ gsm48\+\_\+decode\+\_\+redirecting()}.

\mbox{\label{group__gsm0408_ga2e750349ad708e53e88b04ebfeeaa90e}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_calling@{gsm48\_decode\_calling}}
\index{gsm48\_decode\_calling@{gsm48\_decode\_calling}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_calling()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+calling (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{calling,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Calling Number IE (10.\+5.\+4.\+9) 



References \textbf{ gsm48\+\_\+decode\+\_\+callerid()}.

\mbox{\label{group__gsm0408_ga160850bd89612994bd000ba761662a01}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_cause@{gsm48\_decode\_cause}}
\index{gsm48\_decode\_cause@{gsm48\_decode\_cause}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_cause()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+cause (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+cause} $\ast$}]{cause,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Cause IE (10.\+5.\+4.\+11) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em cause} & Caller-\/provided memory for output \\
\hline
\mbox{\texttt{ in}}  & {\em lv} & LV portion of Cause IE \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ cause}.

\mbox{\label{group__gsm0408_ga1ddab02190f282cd0263c74026d87ae8}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_cccap@{gsm48\_decode\_cccap}}
\index{gsm48\_decode\_cccap@{gsm48\_decode\_cccap}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_cccap()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+cccap (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+cccap} $\ast$}]{ccap,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Call Control Capabilities IE (10.\+5.\+4.\+5a) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em ccap} & Caller-\/provided memory for decoded CC capabilities \\
\hline
\mbox{\texttt{ in}}  & {\em lv} & Length-\/\+Value of IE \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm\+\_\+mncc\+\_\+cccap\+::dtmf}, and \textbf{ gsm\+\_\+mncc\+\_\+cccap\+::pcp}.

\mbox{\label{group__gsm0408_ga9094f9cdf4d23475b4abc093f517c9f6}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_classmark3@{gsm48\_decode\_classmark3}}
\index{gsm48\_decode\_classmark3@{gsm48\_decode\_classmark3}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_classmark3()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+classmark3 (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+classmark3} $\ast$}]{classmark3\+\_\+out,  }\item[{const uint8\+\_\+t $\ast$}]{classmark3,  }\item[{size\+\_\+t}]{classmark3\+\_\+len }\end{DoxyParamCaption})}



Decode 3GPP TS 24.\+008 Mobile Station Classmark 3 (10.\+5.\+1.\+7). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em classmark3\+\_\+out} & user provided memory to store decoded classmark3. \\
\hline
\mbox{\texttt{ in}}  & {\em classmark3} & pointer to memory that contains the raw classmark bits. \\
\hline
\mbox{\texttt{ in}}  & {\em classmark3\+\_\+len} & length in bytes of the memory where classmark3 points to. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error. 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+classmark3\+::a5\+\_\+bits}, \textbf{ gsm48\+\_\+classmark3\+::add\+\_\+pos\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::assoc\+\_\+radio\+\_\+cap\+\_\+1}, \textbf{ gsm48\+\_\+classmark3\+::assoc\+\_\+radio\+\_\+cap\+\_\+2}, \textbf{ bitvec\+\_\+get\+\_\+uint()}, \textbf{ gsm48\+\_\+classmark3\+::cdma200\+\_\+rat\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::ciphering\+\_\+mode\+\_\+setting\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::cs\+\_\+ps\+\_\+srvcc\+\_\+geran\+\_\+eutra}, \textbf{ gsm48\+\_\+classmark3\+::cs\+\_\+ps\+\_\+srvcc\+\_\+geran\+\_\+utra}, \textbf{ bitvec\+::data}, \textbf{ data}, \textbf{ bitvec\+::data\+\_\+len}, \textbf{ gsm48\+\_\+classmark3\+::dl\+\_\+advanced\+\_\+rx\+\_\+perf}, \textbf{ gsm48\+\_\+classmark3\+::dtm\+\_\+egprs\+\_\+high\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::dtm\+\_\+egprs\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::dtm\+\_\+enhancements\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::dtm\+\_\+gprs\+\_\+high\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::dtm\+\_\+gprs\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::e\+\_\+utra\+\_\+fdd\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::e\+\_\+utra\+\_\+meas\+\_\+rep\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::e\+\_\+utra\+\_\+mult\+\_\+band\+\_\+ind\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::e\+\_\+utra\+\_\+tdd\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::e\+\_\+utra\+\_\+wb\+\_\+rsrq\+\_\+meas\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::ecsd\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::er\+\_\+band\+\_\+support}, \textbf{ gsm48\+\_\+classmark3\+::extended\+\_\+dtm\+\_\+egprs\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::extended\+\_\+dtm\+\_\+gprs\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::extended\+\_\+earfcn\+\_\+val\+\_\+range}, \textbf{ gsm48\+\_\+classmark3\+::extended\+\_\+meas\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::extended\+\_\+tsc\+\_\+set\+\_\+cap\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::geran\+\_\+feature\+\_\+package}, \textbf{ gsm48\+\_\+classmark3\+::geran\+\_\+feature\+\_\+package\+\_\+2}, \textbf{ gsm48\+\_\+classmark3\+::geran\+\_\+net\+\_\+sharing}, \textbf{ gsm48\+\_\+classmark3\+::gmsk\+\_\+multislot\+\_\+power\+\_\+prof}, \textbf{ gsm48\+\_\+classmark3\+::gsm\+\_\+1900\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::gsm\+\_\+400\+\_\+bands\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::gsm\+\_\+710\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::gsm\+\_\+750\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::gsm\+\_\+850\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::high\+\_\+multislot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::hscsd\+\_\+mult\+\_\+slot\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::method}, \textbf{ gsm48\+\_\+classmark3\+::mod\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::ms\+\_\+meas\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::ms\+\_\+pos\+\_\+method\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::mslot\+\_\+class}, \textbf{ gsm48\+\_\+classmark3\+::mult\+\_\+band\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::offset\+\_\+required}, \textbf{ gsm48\+\_\+classmark3\+::present}, \textbf{ gsm48\+\_\+classmark3\+::prio\+\_\+resel\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::psk8\+\_\+multislot\+\_\+power\+\_\+prof}, \textbf{ gsm48\+\_\+classmark3\+::psk8\+\_\+struct}, \textbf{ gsm48\+\_\+classmark3\+::r\+\_\+gsm\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::r\+\_\+support}, \textbf{ gsm48\+\_\+classmark3\+::repeated\+\_\+acch\+\_\+capability}, \textbf{ gsm48\+\_\+classmark3\+::rf\+\_\+pwr\+\_\+cap\+\_\+1}, \textbf{ gsm48\+\_\+classmark3\+::rf\+\_\+pwr\+\_\+cap\+\_\+2}, \textbf{ gsm48\+\_\+classmark3\+::sel\+\_\+ciph\+\_\+dl\+\_\+sacch}, \textbf{ gsm48\+\_\+classmark3\+::single\+\_\+band\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::single\+\_\+slot\+\_\+dtm}, \textbf{ gsm48\+\_\+classmark3\+::sm\+\_\+value}, \textbf{ gsm48\+\_\+classmark3\+::sms\+\_\+value}, \textbf{ gsm48\+\_\+classmark3\+::t\+\_\+gsm\+\_\+400\+\_\+bands\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::t\+\_\+gsm\+\_\+810\+\_\+assoc\+\_\+radio\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::tighter\+\_\+capability}, \textbf{ gsm48\+\_\+classmark3\+::ucs2\+\_\+treatment}, \textbf{ gsm48\+\_\+classmark3\+::umts\+\_\+1\+\_\+28\+\_\+mcps\+\_\+tdd\+\_\+rat\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::umts\+\_\+fdd\+\_\+rat\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::umts\+\_\+tdd\+\_\+rat\+\_\+cap}, \textbf{ gsm48\+\_\+classmark3\+::utra\+\_\+csg\+\_\+cells\+\_\+rep}, \textbf{ gsm48\+\_\+classmark3\+::utra\+\_\+mult\+\_\+band\+\_\+ind\+\_\+supp}, \textbf{ gsm48\+\_\+classmark3\+::value}, and \textbf{ gsm48\+\_\+classmark3\+::vamos\+\_\+level}.

\mbox{\label{group__gsm0408_ga1bfae76c935759a320a49624529b8e59}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_connected@{gsm48\_decode\_connected}}
\index{gsm48\_decode\_connected@{gsm48\_decode\_connected}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_connected()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+connected (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{connected,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Connected Number IE (10.\+5.\+4.\+13) 



References \textbf{ gsm48\+\_\+decode\+\_\+callerid()}.

\mbox{\label{group__gsm0408_ga695092e59407d4d5da56c9ca706ab461}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_facility@{gsm48\_decode\_facility}}
\index{gsm48\_decode\_facility@{gsm48\_decode\_facility}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_facility()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+facility (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+facility} $\ast$}]{facility,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Facility IE (10.\+5.\+4.\+15) 



References \textbf{ gsm\+\_\+mncc\+\_\+facility\+::info}, and \textbf{ gsm\+\_\+mncc\+\_\+facility\+::len}.

\mbox{\label{group__gsm0408_ga437c4a3f686ef16f04f2a3a17215c0d1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_freq\_list@{gsm48\_decode\_freq\_list}}
\index{gsm48\_decode\_freq\_list@{gsm48\_decode\_freq\_list}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_freq\_list()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+freq\+\_\+list (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+sysinfo\+\_\+freq} $\ast$}]{f,  }\item[{const uint8\+\_\+t $\ast$}]{cd,  }\item[{uint8\+\_\+t}]{len,  }\item[{uint8\+\_\+t}]{mask,  }\item[{uint8\+\_\+t}]{frqt }\end{DoxyParamCaption})}



Decode TS 04.\+08 Cell Channel Description IE (10.\+5.\+2.\+1b) and other frequency lists. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em f} & Caller-\/provided output memory, an array of 1024 elements \\
\hline
\mbox{\texttt{ in}}  & {\em cd} & Cell Channel Description IE \\
\hline
\mbox{\texttt{ in}}  & {\em len} & Length of {\itshape cd} in bytes \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ if()}, \textbf{ len}, \textbf{ gsm\+\_\+sysinfo\+\_\+freq\+::mask}, and \textbf{ smod()}.

\mbox{\label{group__gsm0408_ga98e50a2ad48868fc7e1ca926a4bd88c7}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_keypad@{gsm48\_decode\_keypad}}
\index{gsm48\_decode\_keypad@{gsm48\_decode\_keypad}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_keypad()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+keypad (\begin{DoxyParamCaption}\item[{int $\ast$}]{keypad,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Keypad IE (10.\+5.\+4.\+17) 

\mbox{\label{group__gsm0408_gae243314f03678292da2b06c5eaf7923f}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_lai@{gsm48\_decode\_lai}}
\index{gsm48\_decode\_lai@{gsm48\_decode\_lai}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_lai()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+lai (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$}]{lai,  }\item[{uint16\+\_\+t $\ast$}]{mcc,  }\item[{uint16\+\_\+t $\ast$}]{mnc,  }\item[{uint16\+\_\+t $\ast$}]{lac }\end{DoxyParamCaption})}



Decode TS 04.\+08 Location Area Identifier, legacy implementation. 

Instead use \doxyref{gsm48\+\_\+decode\+\_\+lai2()}{p.}{group__gsm0408_ga92284ee303f897cc3cf1601aaeba2f64}, which is capable of three-\/digit MNC with leading zeros. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em Location} & Area Identifier (encoded) \\
\hline
\mbox{\texttt{ out}}  & {\em mcc} & Mobile Country Code \\
\hline
\mbox{\texttt{ out}}  & {\em mnc} & Mobile Network Code \\
\hline
\mbox{\texttt{ out}}  & {\em lac} & Location Area Code \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0
\end{DoxyReturn}
Attention\+: this function returns true integers, not hex! 

References \textbf{ gsm48\+\_\+decode\+\_\+lai2()}, \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::lac}, \textbf{ lac}, \textbf{ lai}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mcc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc}, and \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::plmn}.

\mbox{\label{group__gsm0408_ga92284ee303f897cc3cf1601aaeba2f64}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_lai2@{gsm48\_decode\_lai2}}
\index{gsm48\_decode\_lai2@{gsm48\_decode\_lai2}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_lai2()}
{\footnotesize\ttfamily void gsm48\+\_\+decode\+\_\+lai2 (\begin{DoxyParamCaption}\item[{const struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$}]{lai,  }\item[{struct \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id} $\ast$}]{decoded }\end{DoxyParamCaption})}



Decode TS 04.\+08 Location Area Identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em Location} & Area Identifier (encoded). \\
\hline
\mbox{\texttt{ out}}  & {\em decoded} & Target buffer to write decoded values of MCC-\/\+MNC-\/\+LAC.\\
\hline
\end{DoxyParams}
Attention\+: this function returns true integers, not hex! 

References \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id\+::digits}, \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::lac}, \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id\+::lac}, \textbf{ lai}, \textbf{ osmo\+\_\+ntohs}, \textbf{ osmo\+\_\+plmn\+\_\+from\+\_\+bcd()}, and \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::plmn}.



Referenced by \textbf{ decode\+\_\+lai()}, \textbf{ gsm48\+\_\+decode\+\_\+lai()}, and \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+decode()}.

\mbox{\label{group__gsm0408_ga4ac394899f73e7ef8093fb4ee348eb0b}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_notify@{gsm48\_decode\_notify}}
\index{gsm48\_decode\_notify@{gsm48\_decode\_notify}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_notify()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+notify (\begin{DoxyParamCaption}\item[{int $\ast$}]{notify,  }\item[{const uint8\+\_\+t $\ast$}]{v }\end{DoxyParamCaption})}



Decode TS 04.\+08 Notify IE (10.\+5.\+4.\+20) 

\mbox{\label{group__gsm0408_ga4118f4763d774aa6b06679baa8b504c0}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_progress@{gsm48\_decode\_progress}}
\index{gsm48\_decode\_progress@{gsm48\_decode\_progress}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_progress()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+progress (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+progress} $\ast$}]{progress,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Progress IE (10.\+5.\+4.\+21) 



References \textbf{ gsm\+\_\+mncc\+\_\+progress\+::coding}, \textbf{ gsm\+\_\+mncc\+\_\+progress\+::descr}, and \textbf{ gsm\+\_\+mncc\+\_\+progress\+::location}.

\mbox{\label{group__gsm0408_gaf3f3ca63d0e0a4e8041b08d9c2ec294e}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_redirecting@{gsm48\_decode\_redirecting}}
\index{gsm48\_decode\_redirecting@{gsm48\_decode\_redirecting}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_redirecting()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+redirecting (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{redirecting,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 Redirecting Number IE (10.\+5.\+4.\+21b) 



References \textbf{ gsm48\+\_\+decode\+\_\+callerid()}.

\mbox{\label{group__gsm0408_ga030f620cbbfa299f6992f526fb87dbc4}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_signal@{gsm48\_decode\_signal}}
\index{gsm48\_decode\_signal@{gsm48\_decode\_signal}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_signal()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+signal (\begin{DoxyParamCaption}\item[{int $\ast$}]{signal,  }\item[{const uint8\+\_\+t $\ast$}]{v }\end{DoxyParamCaption})}



Decode TS 04.\+08 Signal IE (10.\+5.\+4.\+23) 

\mbox{\label{group__gsm0408_gac37222115309f8c3b23716f383e2a12a}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_ssversion@{gsm48\_decode\_ssversion}}
\index{gsm48\_decode\_ssversion@{gsm48\_decode\_ssversion}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_ssversion()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+ssversion (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+ssversion} $\ast$}]{ssv,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 SS Version IE (10.\+5.\+4.\+24) 



References \textbf{ gsm\+\_\+mncc\+\_\+ssversion\+::info}, and \textbf{ gsm\+\_\+mncc\+\_\+ssversion\+::len}.

\mbox{\label{group__gsm0408_ga8e14934259989d3042551c4f11711cca}} 
\index{Gsm0408@{Gsm0408}!gsm48\_decode\_useruser@{gsm48\_decode\_useruser}}
\index{gsm48\_decode\_useruser@{gsm48\_decode\_useruser}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_decode\_useruser()}
{\footnotesize\ttfamily int gsm48\+\_\+decode\+\_\+useruser (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm\+\_\+mncc\+\_\+useruser} $\ast$}]{uu,  }\item[{const uint8\+\_\+t $\ast$}]{lv }\end{DoxyParamCaption})}



Decode TS 04.\+08 User-\/\+User IE (10.\+5.\+4.\+25) 



References \textbf{ gsm\+\_\+mncc\+\_\+useruser\+::info}, and \textbf{ gsm\+\_\+mncc\+\_\+useruser\+::proto}.

\mbox{\label{group__gsm0408_gacb2d8b542186392dab9b564e95d6cc1d}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_bcd\_number@{gsm48\_encode\_bcd\_number}}
\index{gsm48\_encode\_bcd\_number@{gsm48\_encode\_bcd\_number}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_bcd\_number()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+bcd\+\_\+number (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{bcd\+\_\+lv,  }\item[{uint8\+\_\+t}]{max\+\_\+len,  }\item[{int}]{h\+\_\+len,  }\item[{const char $\ast$}]{input }\end{DoxyParamCaption})}



convert a ASCII phone number to \textquotesingle{}called/calling/connect party BCD number\textquotesingle{} 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em bcd\+\_\+lv} & Caller-\/provided output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em max\+\_\+len} & Maximum Length of {\itshape bcd\+\_\+lv} \\
\hline
\mbox{\texttt{ in}}  & {\em h\+\_\+len} & Length of an optional heder between L and V portion \\
\hline
\mbox{\texttt{ in}}  & {\em input} & phone number as 0-\/terminated ASCII \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of bytes used in {\itshape bcd\+\_\+lv}; negative on error
\end{DoxyReturn}
Depending on a context (e.\+g. called or calling party BCD number), the optional header between L and V parts can contain TON (Type Of Number), NPI (Numbering Plan Indication), presentation or screening indicator. NOTE\+: it is up to the caller to initialize this header! 

References \textbf{ asc\+\_\+to\+\_\+bcd()}.



Referenced by \textbf{ gsm0808\+\_\+enc\+\_\+msisdn()}, \textbf{ gsm340\+\_\+gen\+\_\+oa()}, \textbf{ gsm48\+\_\+encode\+\_\+called()}, \textbf{ gsm48\+\_\+encode\+\_\+callerid()}, and \textbf{ osmo\+\_\+gsup\+\_\+encode()}.

\mbox{\label{group__gsm0408_gaf2c33e892bdb259d838b30c0351f0ba7}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_bearer\_cap@{gsm48\_encode\_bearer\_cap}}
\index{gsm48\_encode\_bearer\_cap@{gsm48\_encode\_bearer\_cap}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_bearer\_cap()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+bearer\+\_\+cap (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{lv\+\_\+only,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap} $\ast$}]{bcap }\end{DoxyParamCaption})}



Encode TS 04.\+08 Bearer Capability IE (10.\+5.\+4.\+5) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Message Buffer to which IE is to be appended \\
\hline
\mbox{\texttt{ in}}  & {\em lv\+\_\+only} & Write only LV portion (1) or TLV (0) \\
\hline
\mbox{\texttt{ in}}  & {\em bcap} & Decoded Bearer Capability to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::async}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::coding}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::data}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+ITCAP\+\_\+3k1\+\_\+\+AUDIO}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+ITCAP\+\_\+\+FAX\+\_\+\+G3}, \textbf{ GSM48\+\_\+\+BCAP\+\_\+\+ITCAP\+\_\+\+UNR\+\_\+\+DIG\+\_\+\+INF}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+BEARER\+\_\+\+CAP}, \textbf{ GSM\+\_\+\+MNCC\+\_\+\+BCAP\+\_\+\+SPEECH}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::interm\+\_\+rate}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::mode}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::modem\+\_\+type}, \textbf{ msg}, \textbf{ msgb\+\_\+lv\+\_\+put()}, \textbf{ msgb\+\_\+tlv\+\_\+put()}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::nr\+\_\+data\+\_\+bits}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::nr\+\_\+stop\+\_\+bits}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::parity}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::radio}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::rate\+\_\+adaption}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::sig\+\_\+access}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::speech\+\_\+ctm}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::speech\+\_\+ver}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::transfer}, \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::transp}, and \textbf{ gsm\+\_\+mncc\+\_\+bearer\+\_\+cap\+::user\+\_\+rate}.

\mbox{\label{group__gsm0408_gaafe33212d70a0006834facf81ca30c1a}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_called@{gsm48\_encode\_called}}
\index{gsm48\_encode\_called@{gsm48\_encode\_called}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_called()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+called (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{called }\end{DoxyParamCaption})}



Encode TS 04.\+08 Called Party IE (10.\+5.\+4.\+7) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Mesage Buffer to which to append IE (as TLV) \\
\hline
\mbox{\texttt{ in}}  & {\em called} & MNCC Number to encode/append \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+encode\+\_\+bcd\+\_\+number()}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+CALLED\+\_\+\+BCD}, \textbf{ msg}, \textbf{ msgb\+\_\+tlv\+\_\+put()}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::number}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::plan}, and \textbf{ gsm\+\_\+mncc\+\_\+number\+::type}.

\mbox{\label{group__gsm0408_ga3784469be522807ca6d7764e1a56e368}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_callerid@{gsm48\_encode\_callerid}}
\index{gsm48\_encode\_callerid@{gsm48\_encode\_callerid}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_callerid()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+callerid (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{ie,  }\item[{int}]{max\+\_\+len,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{callerid }\end{DoxyParamCaption})}



Encode TS 04.\+08 Caller ID IE. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Mesage Buffer to which to append IE (as TLV) \\
\hline
\mbox{\texttt{ in}}  & {\em ie} & IE Identifier (tag) \\
\hline
\mbox{\texttt{ in}}  & {\em max\+\_\+len} & maximum generated output in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em callerid} & MNCC Number to encode/append \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+encode\+\_\+bcd\+\_\+number()}, \textbf{ msg}, \textbf{ msgb\+\_\+tlv\+\_\+put()}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::number}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::plan}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::present}, \textbf{ gsm\+\_\+mncc\+\_\+number\+::screen}, and \textbf{ gsm\+\_\+mncc\+\_\+number\+::type}.



Referenced by \textbf{ gsm48\+\_\+encode\+\_\+calling()}, \textbf{ gsm48\+\_\+encode\+\_\+connected()}, and \textbf{ gsm48\+\_\+encode\+\_\+redirecting()}.

\mbox{\label{group__gsm0408_ga2b6a22241c3cde5745b6bd9a72b1ca61}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_calling@{gsm48\_encode\_calling}}
\index{gsm48\_encode\_calling@{gsm48\_encode\_calling}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_calling()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+calling (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{calling }\end{DoxyParamCaption})}



Encode TS 04.\+08 Calling Number IE (10.\+5.\+4.\+9) 



References \textbf{ gsm48\+\_\+encode\+\_\+callerid()}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+CALLING\+\_\+\+BCD}, and \textbf{ msg}.

\mbox{\label{group__gsm0408_gafc70a15ba1ac6b9b5d9904dd5048cdb3}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_cause@{gsm48\_encode\_cause}}
\index{gsm48\_encode\_cause@{gsm48\_encode\_cause}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_cause()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+cause (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{lv\+\_\+only,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+cause} $\ast$}]{cause }\end{DoxyParamCaption})}



Encode TS 04.\+08 Cause IE (10.\+5.\+4.\+11) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Message Buffer to which to append IE \\
\hline
\mbox{\texttt{ in}}  & {\em lv\+\_\+only} & Encode as LV (1) or TLV (0) \\
\hline
\mbox{\texttt{ in}}  & {\em cause} & Cause value to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ cause}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ msg}, \textbf{ msgb\+\_\+lv\+\_\+put()}, and \textbf{ msgb\+\_\+tlv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga9f0875ecde27d728313ab1f41b9ca60d}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_cccap@{gsm48\_encode\_cccap}}
\index{gsm48\_encode\_cccap@{gsm48\_encode\_cccap}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_cccap()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+cccap (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+cccap} $\ast$}]{ccap }\end{DoxyParamCaption})}



Encodoe TS 04.\+08 Call Control Capabilities (10.\+5.\+4.\+5a) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Message Buffer to which to append IE (as TLV) \\
\hline
\mbox{\texttt{ in}}  & {\em ccap} & Decoded CC Capabilities to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gsm\+\_\+mncc\+\_\+cccap\+::dtmf}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+CC\+\_\+\+CAP}, \textbf{ msg}, \textbf{ msgb\+\_\+tlv\+\_\+put()}, and \textbf{ gsm\+\_\+mncc\+\_\+cccap\+::pcp}.

\mbox{\label{group__gsm0408_gaf9ca5751dd98625e37fdb86a53e6dfd2}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_connected@{gsm48\_encode\_connected}}
\index{gsm48\_encode\_connected@{gsm48\_encode\_connected}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_connected()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+connected (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{connected }\end{DoxyParamCaption})}



Encode TS 04.\+08 Connected Number IE (10.\+5.\+4.\+13) 



References \textbf{ gsm48\+\_\+encode\+\_\+callerid()}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+CONN\+\_\+\+BCD}, and \textbf{ msg}.

\mbox{\label{group__gsm0408_ga116f0fcbf1a78bc335adcf8dacb5ff10}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_facility@{gsm48\_encode\_facility}}
\index{gsm48\_encode\_facility@{gsm48\_encode\_facility}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_facility()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+facility (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{lv\+\_\+only,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+facility} $\ast$}]{facility }\end{DoxyParamCaption})}



Encode TS 04.\+08 Facility IE (10.\+5.\+4.\+15) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+FACILITY}, \textbf{ GSM\+\_\+\+MAX\+\_\+\+FACILITY}, \textbf{ gsm\+\_\+mncc\+\_\+facility\+::info}, \textbf{ gsm\+\_\+mncc\+\_\+facility\+::len}, \textbf{ msg}, \textbf{ msgb\+\_\+lv\+\_\+put()}, and \textbf{ msgb\+\_\+tlv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga350ee9a916915d68bdbe66b2d984fa94}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_keypad@{gsm48\_encode\_keypad}}
\index{gsm48\_encode\_keypad@{gsm48\_encode\_keypad}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_keypad()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+keypad (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{keypad }\end{DoxyParamCaption})}



Encode TS 04.\+08 Keypad IE (10.\+5.\+4.\+17) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+KPD\+\_\+\+FACILITY}, \textbf{ msg}, and \textbf{ msgb\+\_\+tv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga89c6ca906ca0040a1ff586fa2a7867c1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_more@{gsm48\_encode\_more}}
\index{gsm48\_encode\_more@{gsm48\_encode\_more}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_more()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+more (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg }\end{DoxyParamCaption})}



Encode TS 04.\+08 More Data IE (10.\+5.\+4.\+19) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+MORE\+\_\+\+DATA}, \textbf{ msg}, and \textbf{ msgb\+\_\+put()}.

\mbox{\label{group__gsm0408_ga66fadbf8ec7651ad24353e84c2fc307e}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_notify@{gsm48\_encode\_notify}}
\index{gsm48\_encode\_notify@{gsm48\_encode\_notify}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_notify()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+notify (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{notify }\end{DoxyParamCaption})}



Encode TS 04.\+08 Notify IE (10.\+5.\+4.\+20) 



References \textbf{ msg}, and \textbf{ msgb\+\_\+v\+\_\+put()}.

\mbox{\label{group__gsm0408_ga3e6e1056ccf01869483ea24034a0c35a}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_progress@{gsm48\_encode\_progress}}
\index{gsm48\_encode\_progress@{gsm48\_encode\_progress}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_progress()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+progress (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{lv\+\_\+only,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+progress} $\ast$}]{p }\end{DoxyParamCaption})}



Encode TS 04.\+08 Progress IE (10.\+5.\+4.\+21) 



References \textbf{ gsm\+\_\+mncc\+\_\+progress\+::coding}, \textbf{ gsm\+\_\+mncc\+\_\+progress\+::descr}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+PROGR\+\_\+\+IND}, \textbf{ gsm\+\_\+mncc\+\_\+progress\+::location}, \textbf{ msg}, \textbf{ msgb\+\_\+lv\+\_\+put()}, and \textbf{ msgb\+\_\+tlv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga6e4dd6f3b93c90e742c3f726355dcee9}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_ra@{gsm48\_encode\_ra}}
\index{gsm48\_encode\_ra@{gsm48\_encode\_ra}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_ra()}
{\footnotesize\ttfamily void gsm48\+\_\+encode\+\_\+ra (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+ra\+\_\+id} $\ast$}]{out,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{raid }\end{DoxyParamCaption})}



Encode a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em out} & Caller-\/provided packed struct \\
\hline
\mbox{\texttt{ in}}  & {\em raid} & Routing Area ID to be encoded \\
\hline
\end{DoxyParams}


References \textbf{ gsm48\+\_\+ra\+\_\+id\+::digits}, \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ gsm48\+\_\+ra\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ osmo\+\_\+htons}, \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}, and \textbf{ gsm48\+\_\+ra\+\_\+id\+::rac}.



Referenced by \textbf{ gsm48\+\_\+construct\+\_\+ra()}.

\mbox{\label{group__gsm0408_gaaa86b1fb9883743b29026a8726849e64}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_redirecting@{gsm48\_encode\_redirecting}}
\index{gsm48\_encode\_redirecting@{gsm48\_encode\_redirecting}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_redirecting()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+redirecting (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+number} $\ast$}]{redirecting }\end{DoxyParamCaption})}



Encode TS 04.\+08 Redirecting Number IE (10.\+5.\+4.\+21b) 



References \textbf{ gsm48\+\_\+encode\+\_\+callerid()}, \textbf{ GSM48\+\_\+\+IE\+\_\+\+REDIR\+\_\+\+BCD}, and \textbf{ msg}.

\mbox{\label{group__gsm0408_gab1d4366ce3803c2196560952431630a6}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_signal@{gsm48\_encode\_signal}}
\index{gsm48\_encode\_signal@{gsm48\_encode\_signal}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_signal()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+signal (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{signal }\end{DoxyParamCaption})}



Encode TS 04.\+08 Signal IE (10.\+5.\+4.\+23) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+SIGNAL}, \textbf{ msg}, and \textbf{ msgb\+\_\+tv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga438a5ec65f4cba1eda75e1fbf24d9980}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_ssversion@{gsm48\_encode\_ssversion}}
\index{gsm48\_encode\_ssversion@{gsm48\_encode\_ssversion}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_ssversion()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+ssversion (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+ssversion} $\ast$}]{ssv }\end{DoxyParamCaption})}



Encode TS 04.\+08 SS Version IE (10.\+5.\+4.\+24) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+SS\+\_\+\+VERS}, \textbf{ GSM\+\_\+\+MAX\+\_\+\+SSVERSION}, \textbf{ gsm\+\_\+mncc\+\_\+ssversion\+::info}, \textbf{ gsm\+\_\+mncc\+\_\+ssversion\+::len}, \textbf{ msg}, and \textbf{ msgb\+\_\+tlv\+\_\+put()}.

\mbox{\label{group__gsm0408_ga024cba57905f0580329aa7f00c42fda1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_encode\_useruser@{gsm48\_encode\_useruser}}
\index{gsm48\_encode\_useruser@{gsm48\_encode\_useruser}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_encode\_useruser()}
{\footnotesize\ttfamily int gsm48\+\_\+encode\+\_\+useruser (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{int}]{lv\+\_\+only,  }\item[{const struct \textbf{ gsm\+\_\+mncc\+\_\+useruser} $\ast$}]{uu }\end{DoxyParamCaption})}



Encode TS 04.\+08 User-\/\+User IE (10.\+5.\+4.\+25) 



References \textbf{ GSM48\+\_\+\+IE\+\_\+\+USER\+\_\+\+USER}, \textbf{ GSM\+\_\+\+MAX\+\_\+\+USERUSER}, \textbf{ gsm\+\_\+mncc\+\_\+useruser\+::info}, \textbf{ msg}, \textbf{ msgb\+\_\+lv\+\_\+put()}, \textbf{ msgb\+\_\+tlv\+\_\+put()}, and \textbf{ gsm\+\_\+mncc\+\_\+useruser\+::proto}.

\mbox{\label{group__gsm0408_ga738e1a39cb9fd2f45988c735749266f0}} 
\index{Gsm0408@{Gsm0408}!gsm48\_generate\_lai@{gsm48\_generate\_lai}}
\index{gsm48\_generate\_lai@{gsm48\_generate\_lai}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_generate\_lai()}
{\footnotesize\ttfamily void gsm48\+\_\+generate\+\_\+lai (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$}]{lai48,  }\item[{uint16\+\_\+t}]{mcc,  }\item[{uint16\+\_\+t}]{mnc,  }\item[{uint16\+\_\+t}]{lac }\end{DoxyParamCaption})}



Encode TS 04.\+08 Location Area Identifier, legacy implementation. 

Instead use \doxyref{gsm48\+\_\+generate\+\_\+lai2()}{p.}{group__gsm0408_ga91e6da6d2f8952ce8cefd0b6415fa854}, which is capable of three-\/digit MNC with leading zeros. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em lai48} & caller-\/provided memory for output \\
\hline
\mbox{\texttt{ in}}  & {\em mcc} & Mobile Country Code \\
\hline
\mbox{\texttt{ in}}  & {\em mnc} & Mobile Network Code \\
\hline
\mbox{\texttt{ in}}  & {\em lac} & Location Area Code \\
\hline
\end{DoxyParams}


References \textbf{ gsm48\+\_\+generate\+\_\+lai2()}, \textbf{ lac}, \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id\+::lac}, and \textbf{ lai}.

\mbox{\label{group__gsm0408_ga91e6da6d2f8952ce8cefd0b6415fa854}} 
\index{Gsm0408@{Gsm0408}!gsm48\_generate\_lai2@{gsm48\_generate\_lai2}}
\index{gsm48\_generate\_lai2@{gsm48\_generate\_lai2}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_generate\_lai2()}
{\footnotesize\ttfamily void gsm48\+\_\+generate\+\_\+lai2 (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id} $\ast$}]{lai48,  }\item[{const struct \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id} $\ast$}]{lai }\end{DoxyParamCaption})}



Encode TS 04.\+08 Location Area Identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em lai48} & caller-\/provided memory for output. \\
\hline
\mbox{\texttt{ in}}  & {\em lai} & input of MCC-\/\+MNC-\/\+LAC. \\
\hline
\end{DoxyParams}


References \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id\+::digits}, \textbf{ gsm48\+\_\+loc\+\_\+area\+\_\+id\+::lac}, \textbf{ lai}, \textbf{ osmo\+\_\+htons}, and \textbf{ osmo\+\_\+plmn\+\_\+to\+\_\+bcd()}.



Referenced by \textbf{ gsm0808\+\_\+create\+\_\+layer3\+\_\+2()}, \textbf{ gsm0808\+\_\+msgb\+\_\+put\+\_\+cell\+\_\+id\+\_\+u()}, \textbf{ gsm48\+\_\+generate\+\_\+lai()}, \textbf{ msgb\+\_\+sgsap\+\_\+lai\+\_\+put()}, and \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+buf()}.

\mbox{\label{group__gsm0408_gad0893e9136d07144f10dcb2d81466814}} 
\index{Gsm0408@{Gsm0408}!gsm48\_generate\_mid@{gsm48\_generate\_mid}}
\index{gsm48\_generate\_mid@{gsm48\_generate\_mid}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_generate\_mid()}
{\footnotesize\ttfamily uint8\+\_\+t gsm48\+\_\+generate\+\_\+mid (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{const char $\ast$}]{id,  }\item[{uint8\+\_\+t}]{mi\+\_\+type }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Generate TS 24.\+008 §10.5.\+1.\+4 Mobile ID of BCD type from ASCII string 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Caller-\/provided output buffer of at least GSM48\+\_\+\+MID\+\_\+\+MAX\+\_\+\+SIZE bytes \\
\hline
\mbox{\texttt{ in}}  & {\em id} & Identity to be encoded \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+type} & Type of identity (e.\+g. GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI, IMEI, IMEISV) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of bytes used in {\itshape buf} 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+IE\+\_\+\+MOBILE\+\_\+\+ID}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+MASK}, \textbf{ length}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+char2bcd()}.



Referenced by \textbf{ gsm48\+\_\+generate\+\_\+mid\+\_\+from\+\_\+imsi()}.

\mbox{\label{group__gsm0408_ga53dbcb309eef33e4ba7ed68c80681765}} 
\index{Gsm0408@{Gsm0408}!gsm48\_generate\_mid\_from\_imsi@{gsm48\_generate\_mid\_from\_imsi}}
\index{gsm48\_generate\_mid\_from\_imsi@{gsm48\_generate\_mid\_from\_imsi}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_generate\_mid\_from\_imsi()}
{\footnotesize\ttfamily int gsm48\+\_\+generate\+\_\+mid\+\_\+from\+\_\+imsi (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{const char $\ast$}]{imsi }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Generate TS 04.\+08 Mobile ID from IMSI 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Caller-\/provided output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em imsi} & IMSI to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of bytes used in {\itshape buf} 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+generate\+\_\+mid()}, and \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}.



Referenced by \textbf{ gsm0808\+\_\+create\+\_\+handover\+\_\+request()}, \textbf{ gsm0808\+\_\+create\+\_\+paging2()}, and \textbf{ msgb\+\_\+sgsap\+\_\+imsi\+\_\+put()}.

\mbox{\label{group__gsm0408_ga5fe7f00dbb7eff5a94d62bfdbb6a73d1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_generate\_mid\_from\_tmsi@{gsm48\_generate\_mid\_from\_tmsi}}
\index{gsm48\_generate\_mid\_from\_tmsi@{gsm48\_generate\_mid\_from\_tmsi}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_generate\_mid\_from\_tmsi()}
{\footnotesize\ttfamily int gsm48\+\_\+generate\+\_\+mid\+\_\+from\+\_\+tmsi (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{uint32\+\_\+t}]{tmsi }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Generate TS 04.\+08 Mobile ID from TMSI 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Caller-\/provided output buffer (7 bytes) \\
\hline
\mbox{\texttt{ in}}  & {\em tmsi} & TMSI to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of byes encoded (always 7) 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+IE\+\_\+\+MOBILE\+\_\+\+ID}, \textbf{ GSM48\+\_\+\+TMSI\+\_\+\+LEN}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, and \textbf{ osmo\+\_\+htonl}.

\mbox{\label{group__gsm0408_gabde092ba15d9b7f0be7d73592bcf5f14}} 
\index{Gsm0408@{Gsm0408}!gsm48\_hdr\_gmm\_cipherable@{gsm48\_hdr\_gmm\_cipherable}}
\index{gsm48\_hdr\_gmm\_cipherable@{gsm48\_hdr\_gmm\_cipherable}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_hdr\_gmm\_cipherable()}
{\footnotesize\ttfamily bool gsm48\+\_\+hdr\+\_\+gmm\+\_\+cipherable (\begin{DoxyParamCaption}\item[{const struct \textbf{ gsm48\+\_\+hdr} $\ast$}]{hdr }\end{DoxyParamCaption})}



Checks is particular message is cipherable in A/\+Gb mode according to 3GPP TS 24.\+008 § 4.\+7.\+1.\+2. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em hdr} & Message header \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true if message can be encrypted, false otherwise 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+ATTACH\+\_\+\+REJ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+ATTACH\+\_\+\+REQ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+AUTH\+\_\+\+CIPH\+\_\+\+FAIL}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+AUTH\+\_\+\+CIPH\+\_\+\+REJ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+AUTH\+\_\+\+CIPH\+\_\+\+REQ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+AUTH\+\_\+\+CIPH\+\_\+\+RESP}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+ID\+\_\+\+REQ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+ID\+\_\+\+RESP}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+RA\+\_\+\+UPD\+\_\+\+REJ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+GMM\+\_\+\+RA\+\_\+\+UPD\+\_\+\+REQ}, \textbf{ hdr}, and \textbf{ gsm48\+\_\+hdr\+::msg\+\_\+type}.

\mbox{\label{group__gsm0408_gad2ba102eb878bdd1b1b3930c84890a66}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mcc\_mnc\_from\_bcd@{gsm48\_mcc\_mnc\_from\_bcd}}
\index{gsm48\_mcc\_mnc\_from\_bcd@{gsm48\_mcc\_mnc\_from\_bcd}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mcc\_mnc\_from\_bcd()}
{\footnotesize\ttfamily void gsm48\+\_\+mcc\+\_\+mnc\+\_\+from\+\_\+bcd (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{bcd\+\_\+src,  }\item[{uint16\+\_\+t $\ast$}]{mcc,  }\item[{uint16\+\_\+t $\ast$}]{mnc }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+plmn\+\_\+id\+::mcc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc}, and \textbf{ osmo\+\_\+plmn\+\_\+from\+\_\+bcd()}.

\mbox{\label{group__gsm0408_ga11ce054045471a6a86c9eea5ee30c953}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mcc\_mnc\_to\_bcd@{gsm48\_mcc\_mnc\_to\_bcd}}
\index{gsm48\_mcc\_mnc\_to\_bcd@{gsm48\_mcc\_mnc\_to\_bcd}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mcc\_mnc\_to\_bcd()}
{\footnotesize\ttfamily void gsm48\+\_\+mcc\+\_\+mnc\+\_\+to\+\_\+bcd (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{bcd\+\_\+dst,  }\item[{uint16\+\_\+t}]{mcc,  }\item[{uint16\+\_\+t}]{mnc }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+plmn\+\_\+id\+::mcc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc}, and \textbf{ osmo\+\_\+plmn\+\_\+to\+\_\+bcd()}.

\mbox{\label{group__gsm0408_gafa711a331c653aa5bb7f163a698097fe}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mi\_to\_string@{gsm48\_mi\_to\_string}}
\index{gsm48\_mi\_to\_string@{gsm48\_mi\_to\_string}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mi\_to\_string()}
{\footnotesize\ttfamily int gsm48\+\_\+mi\+\_\+to\+\_\+string (\begin{DoxyParamCaption}\item[{char $\ast$}]{string,  }\item[{int}]{str\+\_\+len,  }\item[{const uint8\+\_\+t $\ast$}]{mi,  }\item[{int}]{mi\+\_\+len }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Convert TS 04.\+08 Mobile Identity (10.\+5.\+1.\+4) to string. This function does not validate the Mobile Identity digits, i.\+e. digits $>$ 9 are returned as \textquotesingle{}A\textquotesingle{}-\/\textquotesingle{}F\textquotesingle{}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em string} & Caller-\/provided buffer for output \\
\hline
\mbox{\texttt{ in}}  & {\em str\+\_\+len} & Length of {\itshape string} in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Mobile Identity to be stringified \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+len} & Length of {\itshape mi} in bytes \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Return $<$= 0 on error, $>$ 0 on success. WARNING\+: the return value of this function is not well implemented. Depending on the MI type and amount of output buffer, this may return the nr of written bytes, or the written strlen(), or the snprintf() style strlen()-\/if-\/the-\/buffer-\/were-\/large-\/enough. 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+TMSI\+\_\+\+LEN}, \textbf{ GSM\+\_\+\+MI\+\_\+\+ODD}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+MASK}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+NONE}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, \textbf{ mi}, \textbf{ mi\+\_\+len}, and \textbf{ osmo\+\_\+bcd2str()}.

\mbox{\label{group__gsm0408_ga49b33b08eec047b91ba8b17f972e7165}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mi\_type\_name@{gsm48\_mi\_type\_name}}
\index{gsm48\_mi\_type\_name@{gsm48\_mi\_type\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mi\_type\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+mi\+\_\+type\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{mi }\end{DoxyParamCaption})}



return string representation of Mobile Identity Type 



References \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ mi}, and \textbf{ mi\+\_\+type\+\_\+names}.



Referenced by \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+buf()}, and \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf()}.

\mbox{\label{group__gsm0408_gaf10960fd4562ef2a0575afbbbad0dc69}} 
\index{Gsm0408@{Gsm0408}!gsm48\_number\_of\_paging\_subchannels@{gsm48\_number\_of\_paging\_subchannels}}
\index{gsm48\_number\_of\_paging\_subchannels@{gsm48\_number\_of\_paging\_subchannels}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_number\_of\_paging\_subchannels()}
{\footnotesize\ttfamily int gsm48\+\_\+number\+\_\+of\+\_\+paging\+\_\+subchannels (\begin{DoxyParamCaption}\item[{const struct \textbf{ gsm48\+\_\+control\+\_\+channel\+\_\+descr} $\ast$}]{chan\+\_\+desc }\end{DoxyParamCaption})}



Determine number of paging sub-\/channels. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em chan\+\_\+desc} & Control Channel Description \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of paging sub-\/channels
\end{DoxyReturn}
Uses From Table 10.\+5.\+33 of GSM 04.\+08 to determine the number of paging sub-\/channels in the given control channel configuration 

References \textbf{ chan\+\_\+desc}, \textbf{ gsm0502\+\_\+get\+\_\+n\+\_\+pag\+\_\+blocks()}, \textbf{ OSMO\+\_\+\+MAX}, and \textbf{ RSL\+\_\+\+BCCH\+\_\+\+CCCH\+\_\+\+CONF\+\_\+1\+\_\+C}.



Referenced by \textbf{ gsm0502\+\_\+calc\+\_\+paging\+\_\+group()}.

\mbox{\label{group__gsm0408_ga60aa33405914f86454cecade4d692a6b}} 
\index{Gsm0408@{Gsm0408}!gsm48\_parse\_ra@{gsm48\_parse\_ra}}
\index{gsm48\_parse\_ra@{gsm48\_parse\_ra}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_parse\_ra()}
{\footnotesize\ttfamily void gsm48\+\_\+parse\+\_\+ra (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{raid,  }\item[{const uint8\+\_\+t $\ast$}]{buf }\end{DoxyParamCaption})}



Parse TS 04.\+08 Routing Area Identifier. 

Preferably use \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+decode()}{p.}{group__gsm0408_ga63265ea43314fb62a149608fe301c3f2} instead\+: struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} is better integrated with other API like \doxyref{osmo\+\_\+plmn\+\_\+cmp()}{p.}{gsm23003_8h_a6e5fad9eb2065463fbe1266246896f4c}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em Caller-\/provided} & memory for decoded RA ID \\
\hline
\mbox{\texttt{ in}}  & {\em buf} & Input buffer pointing to RAI IE value \\
\hline
\end{DoxyParams}


References \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, and \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}.

\mbox{\label{group__gsm0408_ga085ef8ef6b7e0a5f190bd412d291ec78}} 
\index{Gsm0408@{Gsm0408}!gsm48\_pdisc\_msgtype\_name@{gsm48\_pdisc\_msgtype\_name}}
\index{gsm48\_pdisc\_msgtype\_name@{gsm48\_pdisc\_msgtype\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_pdisc\_msgtype\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{pdisc,  }\item[{uint8\+\_\+t}]{msg\+\_\+type }\end{DoxyParamCaption})}



Compose a string naming the message type for given protocol, in a static buffer. 

If the message type string is known, return the message type name, otherwise return \char`\"{}$<$protocol discriminator name$>$\+:$<$message type in hex$>$\char`\"{}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em pdisc} & protocol discriminator like GSM48\+\_\+\+PDISC\+\_\+\+MM \\
\hline
\mbox{\texttt{ in}}  & {\em msg\+\_\+type} & message type like GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+LOC\+\_\+\+UPD\+\_\+\+REQUEST \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
statically allocated string or string constant. 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}, \textbf{ msg\+\_\+type}, and \textbf{ namebuf}.

\mbox{\label{group__gsm0408_ga94ed283e4fa4bac7b8ecc26f5a0b8917}} 
\index{Gsm0408@{Gsm0408}!gsm48\_pdisc\_msgtype\_name\_buf@{gsm48\_pdisc\_msgtype\_name\_buf}}
\index{gsm48\_pdisc\_msgtype\_name\_buf@{gsm48\_pdisc\_msgtype\_name\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_pdisc\_msgtype\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{uint8\+\_\+t}]{pdisc,  }\item[{uint8\+\_\+t}]{msg\+\_\+type }\end{DoxyParamCaption})}



Compose a string naming the message type for given protocol, in a caller-\/provided buffer. 

If the message type string is known, return the message type name, otherwise return \char`\"{}$<$protocol discriminator name$>$\+:$<$message type in hex$>$\char`\"{}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & caller-\/allcated output string buffer \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & size of buf in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em pdisc} & protocol discriminator like GSM48\+\_\+\+PDISC\+\_\+\+MM \\
\hline
\mbox{\texttt{ in}}  & {\em msg\+\_\+type} & message type like GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+LOC\+\_\+\+UPD\+\_\+\+REQUEST \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
buf 
\end{DoxyReturn}


References \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ gsm48\+\_\+cc\+\_\+msgtype\+\_\+names}, \textbf{ gsm48\+\_\+mm\+\_\+msgtype\+\_\+names}, \textbf{ gsm48\+\_\+nc\+\_\+ss\+\_\+msgtype\+\_\+names}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+BCAST\+\_\+\+CC}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+CC}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+GROUP\+\_\+\+CC}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+MM}, \textbf{ gsm48\+\_\+pdisc\+\_\+name()}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+NC\+\_\+\+SS}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+RR}, \textbf{ gsm48\+\_\+rr\+\_\+msgtype\+\_\+names}, \textbf{ msg\+\_\+type}, and \textbf{ osmo\+\_\+gsm44068\+\_\+msg\+\_\+type\+\_\+names}.



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name()}, and \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+c()}.

\mbox{\label{group__gsm0408_gac5cc4129e1513232bf4759ccf0c02afa}} 
\index{Gsm0408@{Gsm0408}!gsm48\_pdisc\_msgtype\_name\_c@{gsm48\_pdisc\_msgtype\_name\_c}}
\index{gsm48\_pdisc\_msgtype\_name\_c@{gsm48\_pdisc\_msgtype\_name\_c}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_pdisc\_msgtype\_name\_c()}
{\footnotesize\ttfamily char $\ast$ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+c (\begin{DoxyParamCaption}\item[{const void $\ast$}]{ctx,  }\item[{uint8\+\_\+t}]{pdisc,  }\item[{uint8\+\_\+t}]{msg\+\_\+type }\end{DoxyParamCaption})}



Compose a string naming the message type for given protocol, in a dynamically-\/allocated buffer. 

If the message type string is known, return the message type name, otherwise return \char`\"{}$<$protocol discriminator name$>$\+:$<$message type in hex$>$\char`\"{}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em pdisc} & protocol discriminator like GSM48\+\_\+\+PDISC\+\_\+\+MM \\
\hline
\mbox{\texttt{ in}}  & {\em msg\+\_\+type} & message type like GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+LOC\+\_\+\+UPD\+\_\+\+REQUEST \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
string representation in dynamically allocated output buffer. 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}, \textbf{ msg\+\_\+type}, and \textbf{ namebuf}.

\mbox{\label{group__gsm0408_gadd8f9f0425a7751bcc8d9b8067bdceea}} 
\index{Gsm0408@{Gsm0408}!gsm48\_push\_l3hdr@{gsm48\_push\_l3hdr}}
\index{gsm48\_push\_l3hdr@{gsm48\_push\_l3hdr}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_push\_l3hdr()}
{\footnotesize\ttfamily struct \textbf{ gsm48\+\_\+hdr} $\ast$ gsm48\+\_\+push\+\_\+l3hdr (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{uint8\+\_\+t}]{pdisc,  }\item[{uint8\+\_\+t}]{msg\+\_\+type }\end{DoxyParamCaption})}



Wrap a given \doxyref{msg}{p.}{gsm__08__08_8h_a22fb9e0346dd94237971f7d829821bfa} with \doxyref{gsm48\+\_\+hdr}{p.}{structgsm48__hdr} structure. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & A message to be wrapped \\
\hline
\mbox{\texttt{ in}}  & {\em pdisc} & GSM TS 04.\+07 protocol discriminator 1/2, sub-\/pdisc, trans\+\_\+id or skip\+\_\+ind 1/2, see section 11.\+2.\+3.\+1 for details \\
\hline
\mbox{\texttt{ in}}  & {\em msg\+\_\+type} & GSM TS 04.\+08 message type \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to pushed header within \doxyref{msg}{p.}{gsm__08__08_8h_a22fb9e0346dd94237971f7d829821bfa} 
\end{DoxyReturn}


References \textbf{ msg}, \textbf{ msg\+\_\+type}, \textbf{ gsm48\+\_\+hdr\+::msg\+\_\+type}, \textbf{ msgb\+\_\+push()}, and \textbf{ gsm48\+\_\+hdr\+::proto\+\_\+discr}.



Referenced by \textbf{ gsm0480\+\_\+create\+\_\+ussd\+\_\+notify()}, and \textbf{ gsm0480\+\_\+create\+\_\+ussd\+\_\+release\+\_\+complete()}.

\mbox{\label{group__gsm0408_ga635ac88999075aeb079a7c37b30b52e1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_ra\_equal@{gsm48\_ra\_equal}}
\index{gsm48\_ra\_equal@{gsm48\_ra\_equal}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_ra\_equal()}
{\footnotesize\ttfamily bool gsm48\+\_\+ra\+\_\+equal (\begin{DoxyParamCaption}\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{raid1,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{raid2 }\end{DoxyParamCaption})}



Compare a TS 04.\+08 Routing Area Identifier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em raid1} & first Routing Area ID to compare. \\
\hline
\mbox{\texttt{ in}}  & {\em raid2} & second Routing Area ID to compare. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true if raid1 and raid2 match, false otherwise. 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, and \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}.

\mbox{\label{group__gsm0408_ga36ecdcafcc0ac9a0bf2793c9bcad0c69}} 
\index{Gsm0408@{Gsm0408}!gsm48\_rr\_msg\_name@{gsm48\_rr\_msg\_name}}
\index{gsm48\_rr\_msg\_name@{gsm48\_rr\_msg\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_rr\_msg\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+rr\+\_\+msg\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{msgtype }\end{DoxyParamCaption})}



return string representation of RR Message Type 



References \textbf{ get\+\_\+value\+\_\+string()}, and \textbf{ rr\+\_\+msg\+\_\+names}.

\mbox{\label{group__gsm0408_ga95be14b61a8a11af5c955f0f1b7aa55b}} 
\index{Gsm0408@{Gsm0408}!gsm48\_rr\_short\_pd\_msg\_name@{gsm48\_rr\_short\_pd\_msg\_name}}
\index{gsm48\_rr\_short\_pd\_msg\_name@{gsm48\_rr\_short\_pd\_msg\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_rr\_short\_pd\_msg\_name()}
{\footnotesize\ttfamily const char $\ast$ gsm48\+\_\+rr\+\_\+short\+\_\+pd\+\_\+msg\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{msgtype }\end{DoxyParamCaption})}



return string representation of RR Message Type using the RR short protocol discriminator 



References \textbf{ get\+\_\+value\+\_\+string()}, and \textbf{ rr\+\_\+msg\+\_\+type\+\_\+short\+\_\+names}.

\mbox{\label{group__gsm0408_ga036f19c91113670eefdf1e5999b125db}} 
\index{Gsm0408@{Gsm0408}!gsm48\_set\_dtx@{gsm48\_set\_dtx}}
\index{gsm48\_set\_dtx@{gsm48\_set\_dtx}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_set\_dtx()}
{\footnotesize\ttfamily void gsm48\+\_\+set\+\_\+dtx (\begin{DoxyParamCaption}\item[{struct \textbf{ gsm48\+\_\+cell\+\_\+options} $\ast$}]{op,  }\item[{enum \textbf{ gsm48\+\_\+dtx\+\_\+mode}}]{full,  }\item[{enum \textbf{ gsm48\+\_\+dtx\+\_\+mode}}]{half,  }\item[{bool}]{is\+\_\+bcch }\end{DoxyParamCaption})}



Set DTX mode in Cell Options IE (3GPP TS 44.\+018) 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em op} & Cell Options structure in which DTX parameters will be set \\
\hline
\mbox{\texttt{ in}}  & {\em full} & Mode for full-\/rate channels \\
\hline
\mbox{\texttt{ in}}  & {\em half} & Mode for half-\/rate channels \\
\hline
\mbox{\texttt{ in}}  & {\em is\+\_\+bcch} & Indicates if we should use 10.\+5.\+2.\+3.\+1 instead of 10.\+5.\+2.\+3a.\+2\\
\hline
\end{DoxyParams}
There is no space for separate DTX settings for Full and Half rate channels in BCCH -\/ in this case full setting is used for both and half parameter is ignored. 

References \textbf{ GSM48\+\_\+\+DTX\+\_\+\+MAY\+\_\+\+BE\+\_\+\+USED}, \textbf{ GSM48\+\_\+\+DTX\+\_\+\+SHALL\+\_\+\+BE\+\_\+\+USED}, and \textbf{ GSM48\+\_\+\+DTX\+\_\+\+SHALL\+\_\+\+NOT\+\_\+\+BE\+\_\+\+USED}.

\mbox{\label{group__gsm0408_ga3aa7523a479f4511ec12f638e5eb64b7}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark1\_is\_r99@{osmo\_gsm48\_classmark1\_is\_r99}}
\index{osmo\_gsm48\_classmark1\_is\_r99@{osmo\_gsm48\_classmark1\_is\_r99}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark1\_is\_r99()}
{\footnotesize\ttfamily bool osmo\+\_\+gsm48\+\_\+classmark1\+\_\+is\+\_\+r99 (\begin{DoxyParamCaption}\item[{const struct \textbf{ gsm48\+\_\+classmark1} $\ast$}]{cm1 }\end{DoxyParamCaption})}



Referenced by \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+is\+\_\+r99()}.

\mbox{\label{group__gsm0408_ga039e8a8609a6478cce58d4e0b90b32bd}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark2\_is\_r99@{osmo\_gsm48\_classmark2\_is\_r99}}
\index{osmo\_gsm48\_classmark2\_is\_r99@{osmo\_gsm48\_classmark2\_is\_r99}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark2\_is\_r99()}
{\footnotesize\ttfamily bool osmo\+\_\+gsm48\+\_\+classmark2\+\_\+is\+\_\+r99 (\begin{DoxyParamCaption}\item[{const struct \textbf{ gsm48\+\_\+classmark2} $\ast$}]{cm2,  }\item[{uint8\+\_\+t}]{cm2\+\_\+len }\end{DoxyParamCaption})}



References \textbf{ cm2}, and \textbf{ cm2\+\_\+len}.



Referenced by \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+is\+\_\+r99()}.

\mbox{\label{group__gsm0408_gafab8504424ff5c4e791f803193f83030}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_a5\_name@{osmo\_gsm48\_classmark\_a5\_name}}
\index{osmo\_gsm48\_classmark\_a5\_name@{osmo\_gsm48\_classmark\_a5\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_a5\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{cm }\end{DoxyParamCaption})}



Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em cm} & Classmarks. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A statically allocated string like \char`\"{}cm1\{a5/1=supported\} cm2\{0x23= A5/2 A5/3\} no-\/cm3\char`\"{} 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga016c08e0d4b908b50e7b372e8b06bfa1}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_a5\_name\_buf@{osmo\_gsm48\_classmark\_a5\_name\_buf}}
\index{osmo\_gsm48\_classmark\_a5\_name\_buf@{osmo\_gsm48\_classmark\_a5\_name\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_a5\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{cm }\end{DoxyParamCaption})}



Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em cm} & Classmarks. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A statically allocated string like \char`\"{}cm1\{a5/1=supported\} cm2\{0x23= A5/2 A5/3\} no-\/cm3\char`\"{} 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1\+\_\+set}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2\+\_\+len}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3\+\_\+len}, and \textbf{ cm2}.



Referenced by \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name()}, and \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+c()}.

\mbox{\label{group__gsm0408_ga2791c1af8f2780431adf928662ec1e7c}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_a5\_name\_c@{osmo\_gsm48\_classmark\_a5\_name\_c}}
\index{osmo\_gsm48\_classmark\_a5\_name\_c@{osmo\_gsm48\_classmark\_a5\_name\_c}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_a5\_name\_c()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+c (\begin{DoxyParamCaption}\item[{const void $\ast$}]{ctx,  }\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{cm }\end{DoxyParamCaption})}



Return a string representation of A5 cipher algorithms indicated by Classmark 1, 2 and 3. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em cm} & Classmarks. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
string like \char`\"{}cm1\{a5/1=supported\} cm2\{0x23= A5/2 A5/3\} no-\/cm3\char`\"{} in dynamically-\/allocated output buffer. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+\_\+a5\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_gaed348ffbca145500846226245a3fad84}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_is\_r99@{osmo\_gsm48\_classmark\_is\_r99}}
\index{osmo\_gsm48\_classmark\_is\_r99@{osmo\_gsm48\_classmark\_is\_r99}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_is\_r99()}
{\footnotesize\ttfamily bool osmo\+\_\+gsm48\+\_\+classmark\+\_\+is\+\_\+r99 (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{cm }\end{DoxyParamCaption})}



Return true if any of Classmark 1 or Classmark 2 are present and indicate R99 capability. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em cm} & Classmarks. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
True if R99 or later, false if pre-\/\+R99 or no Classmarks are present. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1\+\_\+set}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2\+\_\+len}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark1\+\_\+is\+\_\+r99()}, and \textbf{ osmo\+\_\+gsm48\+\_\+classmark2\+\_\+is\+\_\+r99()}.

\mbox{\label{group__gsm0408_gabaacb28f8f15b9ee85380653b258fafa}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_supports\_a5@{osmo\_gsm48\_classmark\_supports\_a5}}
\index{osmo\_gsm48\_classmark\_supports\_a5@{osmo\_gsm48\_classmark\_supports\_a5}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_supports\_a5()}
{\footnotesize\ttfamily int osmo\+\_\+gsm48\+\_\+classmark\+\_\+supports\+\_\+a5 (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{cm,  }\item[{uint8\+\_\+t}]{a5 }\end{DoxyParamCaption})}



Determine if the given Classmark (1/2/3) value permits a given A5/n cipher. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em cm} & Classmarks. \\
\hline
\mbox{\texttt{ in}}  & {\em a5} & The N in A5/N for which to query whether support is indicated. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 when the given A5/n is permitted, 0 when not (or a5 $>$ 7), and negative if the respective MS Classmark is not known, where the negative number indicates the classmark type\+: -\/2 means Classmark 2 is not available. The idea is that when e.\+g. A5/3 is requested and the corresponding Classmark 3 is not available, that the caller can react by obtaining Classmark 3 and calling again once it is available. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1\+\_\+set}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2\+\_\+len}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3}, and \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3\+\_\+len}.

\mbox{\label{group__gsm0408_ga17a007878293aeabdab010a3f3d34701}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_classmark\_update@{osmo\_gsm48\_classmark\_update}}
\index{osmo\_gsm48\_classmark\_update@{osmo\_gsm48\_classmark\_update}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_classmark\_update()}
{\footnotesize\ttfamily void osmo\+\_\+gsm48\+\_\+classmark\+\_\+update (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{dst,  }\item[{const struct \textbf{ osmo\+\_\+gsm48\+\_\+classmark} $\ast$}]{src }\end{DoxyParamCaption})}



Overwrite dst with the Classmark information present in src. 

Add an new Classmark and overwrite in dst what src has to offer, but where src has no Classmark information, leave dst unchanged. (For Classmark 2 and 3, dst will exactly match any non-\/zero Classmark length from src, hence may end up with a shorter Classmark after this call.) 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em dst} & The target Classmark storage to be updated. \\
\hline
\mbox{\texttt{ in}}  & {\em src} & The new Classmark information to read from. \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark1\+\_\+set}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark2\+\_\+len}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3}, \textbf{ osmo\+\_\+gsm48\+\_\+classmark\+::classmark3\+\_\+len}, and \textbf{ OSMO\+\_\+\+MIN}.

\mbox{\label{group__gsm0408_ga0d9d70de996a2d60821f309faf7f6093}} 
\index{Gsm0408@{Gsm0408}!osmo\_gsm48\_rfpowercap2powerclass@{osmo\_gsm48\_rfpowercap2powerclass}}
\index{osmo\_gsm48\_rfpowercap2powerclass@{osmo\_gsm48\_rfpowercap2powerclass}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_gsm48\_rfpowercap2powerclass()}
{\footnotesize\ttfamily int8\+\_\+t osmo\+\_\+gsm48\+\_\+rfpowercap2powerclass (\begin{DoxyParamCaption}\item[{enum \textbf{ gsm\+\_\+band}}]{band,  }\item[{uint8\+\_\+t}]{rf\+\_\+power\+\_\+cap }\end{DoxyParamCaption})}



Decode power class from Classmark1/2 RF power capability field. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em rf\+\_\+power\+\_\+cap} & The RF power capability field (3 bits). \\
\hline
\mbox{\texttt{ in}}  & {\em band} & the band of the arfcn from where the classmark was received \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the MS power class on success, negative on error. 
\end{DoxyReturn}


References \textbf{ GSM\+\_\+\+BAND\+\_\+1800}, and \textbf{ GSM\+\_\+\+BAND\+\_\+1900}.

\mbox{\label{group__gsm0408_ga41cc7733f344984098fa2c156dccab3e}} 
\index{Gsm0408@{Gsm0408}!osmo\_mi\_name@{osmo\_mi\_name}}
\index{osmo\_mi\_name@{osmo\_mi\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mi\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+mi\+\_\+name (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{mi,  }\item[{uint8\+\_\+t}]{mi\+\_\+len }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Return a human readable representation of a Mobile Identity in static buffer. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em mi} & Mobile Identity buffer containing 3GPP TS 04.\+08 style MI type and data. \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+len} & Length of mi. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A string like \char`\"{}\+IMSI-\/1234567\char`\"{}, \char`\"{}\+TMSI-\/0x1234\+ABCD\char`\"{} or \char`\"{}unknown\char`\"{}, \char`\"{}\+TMSI-\/invalid\char`\"{}... 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+MI\+\_\+\+SIZE}, \textbf{ mi}, \textbf{ mi\+\_\+len}, and \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga2616d1c41329a8b29dab90da8c7f60fc}} 
\index{Gsm0408@{Gsm0408}!osmo\_mi\_name\_buf@{osmo\_mi\_name\_buf}}
\index{osmo\_mi\_name\_buf@{osmo\_mi\_name\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mi\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+mi\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{const uint8\+\_\+t $\ast$}]{mi,  }\item[{uint8\+\_\+t}]{mi\+\_\+len }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Return a human readable representation of a Mobile Identity in caller-\/provided buffer. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & caller-\/provided output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & size of buf in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Mobile Identity buffer containing 3GPP TS 04.\+08 style MI type and data. \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+len} & Length of mi. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
buf 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+MI\+\_\+\+SIZE}, \textbf{ gsm48\+\_\+mi\+\_\+type\+\_\+name()}, \textbf{ GSM48\+\_\+\+TMSI\+\_\+\+LEN}, \textbf{ GSM\+\_\+\+MI\+\_\+\+ODD}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+MASK}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+NONE}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, \textbf{ mi}, \textbf{ mi\+\_\+len}, and \textbf{ osmo\+\_\+bcd2str()}.



Referenced by \textbf{ osmo\+\_\+mi\+\_\+name()}, and \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+c()}.

\mbox{\label{group__gsm0408_gab38cb531a9e88205f4d076147518972b}} 
\index{Gsm0408@{Gsm0408}!osmo\_mi\_name\_c@{osmo\_mi\_name\_c}}
\index{osmo\_mi\_name\_c@{osmo\_mi\_name\_c}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mi\_name\_c()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+mi\+\_\+name\+\_\+c (\begin{DoxyParamCaption}\item[{const void $\ast$}]{ctx,  }\item[{const uint8\+\_\+t $\ast$}]{mi,  }\item[{uint8\+\_\+t}]{mi\+\_\+len }\end{DoxyParamCaption})}



Deprecated, see osmo\+\_\+mobile\+\_\+identity instead. 

Return a human readable representation of a Mobile Identity in dynamically-\/allocated buffer. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Mobile Identity buffer containing 3GPP TS 04.\+08 style MI type and data. \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+len} & Length of mi. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A string like \char`\"{}\+IMSI-\/1234567\char`\"{}, \char`\"{}\+TMSI-\/0x1234\+ABCD\char`\"{} or \char`\"{}unknown\char`\"{}, \char`\"{}\+TMSI-\/invalid\char`\"{} in a dynamically-\/allocated output buffer. 
\end{DoxyReturn}


References \textbf{ GSM48\+\_\+\+MI\+\_\+\+SIZE}, \textbf{ mi}, \textbf{ mi\+\_\+len}, and \textbf{ osmo\+\_\+mi\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga408251a93753e85052d4708f523c96f9}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_cmp@{osmo\_mobile\_identity\_cmp}}
\index{osmo\_mobile\_identity\_cmp@{osmo\_mobile\_identity\_cmp}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_cmp()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+cmp (\begin{DoxyParamCaption}\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{a,  }\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{b }\end{DoxyParamCaption})}



Compare two osmo\+\_\+mobile\+\_\+identity structs, returning typical cmp() result. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em a} & Left side osmo\+\_\+mobile\+\_\+identity. \\
\hline
\mbox{\texttt{ in}}  & {\em b} & Right side osmo\+\_\+mobile\+\_\+identity. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 if both are equal, -\/1 if a $<$ b, 1 if a $>$ b. 
\end{DoxyReturn}


References \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, and \textbf{ OSMO\+\_\+\+CMP}.

\mbox{\label{group__gsm0408_gade408ad8edb1d58f6b61a4a5f046c92f}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_decode@{osmo\_mobile\_identity\_decode}}
\index{osmo\_mobile\_identity\_decode@{osmo\_mobile\_identity\_decode}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_decode()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+decode (\begin{DoxyParamCaption}\item[{struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{const uint8\+\_\+t $\ast$}]{mi\+\_\+data,  }\item[{uint8\+\_\+t}]{mi\+\_\+len,  }\item[{bool}]{allow\+\_\+hex }\end{DoxyParamCaption})}



Extract Mobile Identity from encoded bytes (3GPP TS 24.\+008 10.\+5.\+1.\+4). 

On failure (negative return value), mi-\/$>$type == GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+NONE, mi-\/$>$string[] is all-\/zero and mi-\/$>$tmsi == GSM\+\_\+\+RESERVED\+\_\+\+TMSI.

On success, mi-\/$>$type reflects the decoded Mobile Identity type (GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI, GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI, GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI or GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV).

On success, mi-\/$>$string always contains a human readable representation of the Mobile Identity digits\+: IMSI, IMEI and IMEISV as digits like \char`\"{}12345678\char`\"{}, and TMSI as \char`\"{}0x\char`\"{} and 8 hexadecimal digits like \char`\"{}0x1234abcd\char`\"{}.

mi-\/$>$tmsi contains the uint32\+\_\+t TMSI value iff the extracted Mobile Identity was a TMSI, or GSM\+\_\+\+RESERVED\+\_\+\+TMSI otherwise.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em mi} & Return buffer for decoded Mobile Identity. \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+data} & The encoded Mobile Identity octets. \\
\hline
\mbox{\texttt{ in}}  & {\em mi\+\_\+len} & Number of octets in mi\+\_\+data. \\
\hline
\mbox{\texttt{ in}}  & {\em allow\+\_\+hex} & If false, hexadecimal digits ($>$9) result in an error return value. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative on error\+: -\/EBADMSG = invalid length indication or invalid data, -\/EINVAL = unknown Mobile Identity type. 
\end{DoxyReturn}


References \textbf{ GSM23003\+\_\+\+IMEI\+\_\+\+NUM\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+IMEI\+\_\+\+NUM\+\_\+\+DIGITS\+\_\+\+NO\+\_\+\+CHK}, \textbf{ GSM23003\+\_\+\+IMEISV\+\_\+\+NUM\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+IMSI\+\_\+\+MAX\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+TMSI\+\_\+\+NUM\+\_\+\+BYTES}, \textbf{ GSM\+\_\+\+MI\+\_\+\+ODD}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+MASK}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+NONE}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, \textbf{ GSM\+\_\+\+RESERVED\+\_\+\+TMSI}, \textbf{ mi}, \textbf{ mi\+\_\+len}, \textbf{ osmo\+\_\+bcd2str()}, and \textbf{ value\+\_\+string\+::str}.



Referenced by \textbf{ osmo\+\_\+bssmap\+\_\+le\+\_\+ie\+\_\+dec\+\_\+imei()}, \textbf{ osmo\+\_\+bssmap\+\_\+le\+\_\+ie\+\_\+dec\+\_\+imsi()}, and \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga9b261e7c60cecc98a9cc61cc34a8bc75}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_decode\_from\_l3@{osmo\_mobile\_identity\_decode\_from\_l3}}
\index{osmo\_mobile\_identity\_decode\_from\_l3@{osmo\_mobile\_identity\_decode\_from\_l3}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_decode\_from\_l3()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3 (\begin{DoxyParamCaption}\item[{struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{bool}]{allow\+\_\+hex }\end{DoxyParamCaption})}



Extract Mobile Identity from a Complete Layer 3 message. 

Determine the Mobile Identity data and call \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+decode()}{p.}{group__gsm0408_gade408ad8edb1d58f6b61a4a5f046c92f} to return a decoded struct osmo\+\_\+mobile\+\_\+identity.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em mi} & Return buffer for decoded Mobile Identity. \\
\hline
\mbox{\texttt{ in}}  & {\em msg} & The Complete Layer 3 message to extract from (LU, CM Service Req or Paging Resp). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative on error\+: return codes as defined in \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+decode()}{p.}{group__gsm0408_gade408ad8edb1d58f6b61a4a5f046c92f}, or -\/ENOTSUP = not a Complete Layer 3 message, 
\end{DoxyReturn}


References \textbf{ mi}, \textbf{ msg}, \textbf{ msgb\+\_\+l3}, \textbf{ msgb\+\_\+l3len()}, and \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3\+\_\+buf()}.

\mbox{\label{group__gsm0408_gaa423a6d7ec320cd7647ca500c3e8db1d}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_decode\_from\_l3\_buf@{osmo\_mobile\_identity\_decode\_from\_l3\_buf}}
\index{osmo\_mobile\_identity\_decode\_from\_l3\_buf@{osmo\_mobile\_identity\_decode\_from\_l3\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_decode\_from\_l3\_buf()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3\+\_\+buf (\begin{DoxyParamCaption}\item[{struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{const uint8\+\_\+t $\ast$}]{l3\+\_\+data,  }\item[{size\+\_\+t}]{l3\+\_\+len,  }\item[{bool}]{allow\+\_\+hex }\end{DoxyParamCaption})}



Extract Mobile Identity from a Complete Layer 3 message. 

Determine the Mobile Identity data and call \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+decode()}{p.}{group__gsm0408_gade408ad8edb1d58f6b61a4a5f046c92f} to return a decoded struct osmo\+\_\+mobile\+\_\+identity.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em mi} & Return buffer for decoded Mobile Identity. \\
\hline
\mbox{\texttt{ in}}  & {\em l3\+\_\+data} & The Complete Layer 3 message to extract from (LU, CM Service Req or Paging Resp). \\
\hline
\mbox{\texttt{ in}}  & {\em l3\+\_\+len} & Length of l3\+\_\+data in bytes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative on error\+: return codes as defined in \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+decode()}{p.}{group__gsm0408_gade408ad8edb1d58f6b61a4a5f046c92f}, or -\/ENOTSUP = not a Complete Layer 3 message, 
\end{DoxyReturn}


References \textbf{ cm2\+\_\+len}, \textbf{ gsm48\+\_\+hdr\+::data}, \textbf{ ENOTSUP}, \textbf{ gsm48\+\_\+hdr\+\_\+msg\+\_\+type}, \textbf{ gsm48\+\_\+hdr\+\_\+pdisc()}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+CM\+\_\+\+REEST\+\_\+\+REQ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+CM\+\_\+\+SERV\+\_\+\+REQ}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+ID\+\_\+\+RESP}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+IMSI\+\_\+\+DETACH\+\_\+\+IND}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+MM\+\_\+\+LOC\+\_\+\+UPD\+\_\+\+REQUEST}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+RR\+\_\+\+PAG\+\_\+\+RESP}, \textbf{ GSM48\+\_\+\+MT\+\_\+\+RR\+\_\+\+TALKER\+\_\+\+IND}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+MM}, \textbf{ GSM48\+\_\+\+PDISC\+\_\+\+RR}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+NONE}, \textbf{ GSM\+\_\+\+RESERVED\+\_\+\+TMSI}, \textbf{ if()}, \textbf{ mi}, \textbf{ gsm48\+\_\+imsi\+\_\+detach\+\_\+ind\+::mi}, \textbf{ mi\+\_\+len}, \textbf{ gsm48\+\_\+imsi\+\_\+detach\+\_\+ind\+::mi\+\_\+len}, and \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode()}.



Referenced by \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+decode\+\_\+from\+\_\+l3()}.

\mbox{\label{group__gsm0408_ga735b08032f8d6cc212e7f32fbc6895f9}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_encode\_buf@{osmo\_mobile\_identity\_encode\_buf}}
\index{osmo\_mobile\_identity\_encode\_buf@{osmo\_mobile\_identity\_encode\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_encode\_buf()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+buf (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buflen,  }\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{bool}]{allow\+\_\+hex }\end{DoxyParamCaption})}



Encode Mobile Identity from uint32\+\_\+t (TMSI) or digits string (all others) (3GPP TS 24.\+008 10.\+5.\+1.\+4). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Return buffer for encoded Mobile Identity. \\
\hline
\mbox{\texttt{ in}}  & {\em buflen} & sizeof(buf). \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Mobile identity to encode. \\
\hline
\mbox{\texttt{ in}}  & {\em allow\+\_\+hex} & If false, hexadecimal digits ($>$9) result in an error return value. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Amount of bytes written to buf, or negative on error. 
\end{DoxyReturn}


References \textbf{ ENOTSUP}, \textbf{ GSM\+\_\+\+MI\+\_\+\+ODD}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+MASK}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, \textbf{ mi}, \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encoded\+\_\+len()}, and \textbf{ osmo\+\_\+str2bcd()}.



Referenced by \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb()}.

\mbox{\label{group__gsm0408_ga1e91bd5177d2f2abd99850ab736df333}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_encode\_msgb@{osmo\_mobile\_identity\_encode\_msgb}}
\index{osmo\_mobile\_identity\_encode\_msgb@{osmo\_mobile\_identity\_encode\_msgb}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_encode\_msgb()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{bool}]{allow\+\_\+hex }\end{DoxyParamCaption})}



Encode Mobile Identity type and BCD digits, appended to a msgb. 

Example to add a GSM48\+\_\+\+IE\+\_\+\+MOBILE\+\_\+\+ID IEI with tag and length to a msgb\+:

struct osmo\+\_\+mobile\+\_\+identity mi = \{ .type = GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI \}; OSMO\+\_\+\+STRLCPY\+\_\+\+ARRAY(mi.\+imsi, \char`\"{}1234567890123456\char`\"{}); uint8\+\_\+t $\ast$l = msgb\+\_\+tl\+\_\+put(msg, GSM48\+\_\+\+IE\+\_\+\+MOBILE\+\_\+\+ID); int rc = osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb(msg, \&mi, false); if (rc $<$ 0) goto error; $\ast$l = rc;

Example to add a BSSGP\+\_\+\+IE\+\_\+\+IMSI with tag and variable-\/size length, where the length needs to be known at the time of writing the IE tag-\/length header\+:

struct osmo\+\_\+mobile\+\_\+identity mi = \{ .type = GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI, \}; OSMO\+\_\+\+STRLCPY\+\_\+\+ARRAY(mi.\+imsi, pinfo-\/$>$imsi); msgb\+\_\+tvl\+\_\+put(msg, BSSGP\+\_\+\+IE\+\_\+\+IMSI, osmo\+\_\+mobile\+\_\+identity\+\_\+encoded\+\_\+len(\&mi, NULL)); if (osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb(msg, \&mi, false) $<$ 0) goto error; 

References \textbf{ mi}, \textbf{ msg}, \textbf{ msgb\+\_\+put()}, \textbf{ msgb\+\_\+tailroom()}, and \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+buf()}.



Referenced by \textbf{ gsm0808\+\_\+create\+\_\+common\+\_\+id()}, \textbf{ gsm0808\+\_\+create\+\_\+perform\+\_\+location\+\_\+request()}, \textbf{ gsm0808\+\_\+create\+\_\+uplink\+\_\+request()}, and \textbf{ osmo\+\_\+bssmap\+\_\+le\+\_\+enc\+\_\+perform\+\_\+loc\+\_\+req()}.

\mbox{\label{group__gsm0408_gad31b3e59b24438a9e0706d13b9cde724}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_encoded\_len@{osmo\_mobile\_identity\_encoded\_len}}
\index{osmo\_mobile\_identity\_encoded\_len@{osmo\_mobile\_identity\_encoded\_len}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_encoded\_len()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+encoded\+\_\+len (\begin{DoxyParamCaption}\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi,  }\item[{int $\ast$}]{mi\+\_\+digits }\end{DoxyParamCaption})}



Return the number of encoded Mobile Identity octets, without actually encoding. 

Useful to write tag-\/length header before encoding the MI. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em mi} & Mobile Identity. \\
\hline
\mbox{\texttt{ out}}  & {\em mi\+\_\+digits} & If not NULL, store the number of nibbles of used MI data (i.\+e. strlen(mi-\/$>$string) or 8 for a TMSI). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
octets that \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+msgb()}{p.}{group__gsm0408_ga1e91bd5177d2f2abd99850ab736df333} will write for this mi. 
\end{DoxyReturn}


References \textbf{ ENOTSUP}, \textbf{ GSM23003\+\_\+\+IMEI\+\_\+\+NUM\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+IMEI\+\_\+\+NUM\+\_\+\+DIGITS\+\_\+\+NO\+\_\+\+CHK}, \textbf{ GSM23003\+\_\+\+IMEISV\+\_\+\+NUM\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+IMSI\+\_\+\+MAX\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+IMSI\+\_\+\+MIN\+\_\+\+DIGITS}, \textbf{ GSM23003\+\_\+\+TMSI\+\_\+\+NUM\+\_\+\+BYTES}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, and \textbf{ mi}.



Referenced by \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+encode\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga2314c30d9470ecf1e15949ba1827bf0a}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_to\_str\_buf@{osmo\_mobile\_identity\_to\_str\_buf}}
\index{osmo\_mobile\_identity\_to\_str\_buf@{osmo\_mobile\_identity\_to\_str\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_to\_str\_buf()}
{\footnotesize\ttfamily int osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buflen,  }\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi }\end{DoxyParamCaption})}



Return a human readable representation of a struct osmo\+\_\+mobile\+\_\+identity. 

Write a string like \char`\"{}\+IMSI-\/1234567\char`\"{}, \char`\"{}\+TMSI-\/0x1234\+ABCD\char`\"{} or \char`\"{}\+NONE\char`\"{}, \char`\"{}\+NULL\char`\"{}. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & String buffer to write to. \\
\hline
\mbox{\texttt{ in}}  & {\em buflen} & sizeof(buf). \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Decoded Mobile Identity data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the strlen() of the string written when buflen is sufficiently large, like snprintf(). 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+strbuf\+::buf}, \textbf{ osmo\+\_\+strbuf\+::chars\+\_\+needed}, \textbf{ gsm48\+\_\+mi\+\_\+type\+\_\+name()}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMEISV}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+IMSI}, \textbf{ GSM\+\_\+\+MI\+\_\+\+TYPE\+\_\+\+TMSI}, \textbf{ mi}, and \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+PRINTF}.



Referenced by \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+c()}.

\mbox{\label{group__gsm0408_ga2d8532896eaccfacdc7abb6527789d11}} 
\index{Gsm0408@{Gsm0408}!osmo\_mobile\_identity\_to\_str\_c@{osmo\_mobile\_identity\_to\_str\_c}}
\index{osmo\_mobile\_identity\_to\_str\_c@{osmo\_mobile\_identity\_to\_str\_c}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_mobile\_identity\_to\_str\_c()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+c (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{const struct osmo\+\_\+mobile\+\_\+identity $\ast$}]{mi }\end{DoxyParamCaption})}



Like \doxyref{osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf()}{p.}{group__gsm0408_ga2314c30d9470ecf1e15949ba1827bf0a}, but return the string in a talloc buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & Talloc context to allocate from. \\
\hline
\mbox{\texttt{ in}}  & {\em mi} & Decoded Mobile Identity data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
a string like \char`\"{}\+IMSI-\/1234567\char`\"{}, \char`\"{}\+TMSI-\/0x1234\+ABCD\char`\"{} or \char`\"{}\+NONE\char`\"{}, \char`\"{}\+NULL\char`\"{}. 
\end{DoxyReturn}


References \textbf{ mi}, \textbf{ osmo\+\_\+mobile\+\_\+identity\+\_\+to\+\_\+str\+\_\+buf()}, and \textbf{ OSMO\+\_\+\+NAME\+\_\+\+C\+\_\+\+IMPL}.

\mbox{\label{group__gsm0408_ga41a5d192039741e0b08be3283bdadb36}} 
\index{Gsm0408@{Gsm0408}!osmo\_rai\_name@{osmo\_rai\_name}}
\index{osmo\_rai\_name@{osmo\_rai\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_rai\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+rai\+\_\+name (\begin{DoxyParamCaption}\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{rai }\end{DoxyParamCaption})}



Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in a static buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em rai} & RAI to encode. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Static string buffer. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+rai\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_gafce867a0e711136eb3f5b91c1067bd70}} 
\index{Gsm0408@{Gsm0408}!osmo\_rai\_name\_buf@{osmo\_rai\_name\_buf}}
\index{osmo\_rai\_name\_buf@{osmo\_rai\_name\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_rai\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+rai\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{rai }\end{DoxyParamCaption})}



Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in a caller-\/provided output buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & caller-\/provided output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & size of buf in bytes \\
\hline
\mbox{\texttt{ in}}  & {\em rai} & RAI to encode. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
buf 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ osmo\+\_\+mcc\+\_\+name()}, \textbf{ osmo\+\_\+mnc\+\_\+name()}, and \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}.



Referenced by \textbf{ osmo\+\_\+rai\+\_\+name()}, and \textbf{ osmo\+\_\+rai\+\_\+name\+\_\+c()}.

\mbox{\label{group__gsm0408_ga4996cc60e56c0d1729dfb284c1d5c402}} 
\index{Gsm0408@{Gsm0408}!osmo\_rai\_name\_c@{osmo\_rai\_name\_c}}
\index{osmo\_rai\_name\_c@{osmo\_rai\_name\_c}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_rai\_name\_c()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+rai\+\_\+name\+\_\+c (\begin{DoxyParamCaption}\item[{const void $\ast$}]{ctx,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{rai }\end{DoxyParamCaption})}



Return MCC-\/\+MNC-\/\+LAC-\/\+RAC as string, in dynamically-\/allocated output buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em rai} & RAI to encode. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
string representation in dynamically-\/allocated output buffer. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+rai\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_gaad0a20e4607c6264792365755d952d49}} 
\index{Gsm0408@{Gsm0408}!osmo\_rai\_to\_gprs@{osmo\_rai\_to\_gprs}}
\index{osmo\_rai\_to\_gprs@{osmo\_rai\_to\_gprs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_rai\_to\_gprs()}
{\footnotesize\ttfamily void osmo\+\_\+rai\+\_\+to\+\_\+gprs (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{dest,  }\item[{const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$}]{src }\end{DoxyParamCaption})}



Convert \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} (new) into \doxyref{gprs\+\_\+ra\+\_\+id}{p.}{structgprs__ra__id} (old) 



References \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::lac}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::lac}, \textbf{ gprs\+\_\+ra\+\_\+id\+::lac}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mcc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mcc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc}, \textbf{ osmo\+\_\+plmn\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ gprs\+\_\+ra\+\_\+id\+::mnc\+\_\+3\+\_\+digits}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+location\+\_\+area\+\_\+id\+::plmn}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::rac}, and \textbf{ gprs\+\_\+ra\+\_\+id\+::rac}.

\mbox{\label{group__gsm0408_ga63265ea43314fb62a149608fe301c3f2}} 
\index{Gsm0408@{Gsm0408}!osmo\_routing\_area\_id\_decode@{osmo\_routing\_area\_id\_decode}}
\index{osmo\_routing\_area\_id\_decode@{osmo\_routing\_area\_id\_decode}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_routing\_area\_id\_decode()}
{\footnotesize\ttfamily int osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+decode (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$}]{dst,  }\item[{const uint8\+\_\+t $\ast$}]{ra\+\_\+data,  }\item[{size\+\_\+t}]{ra\+\_\+data\+\_\+len }\end{DoxyParamCaption})}



Decode to struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} from a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em dst} & Store the decoded result here. \\
\hline
\mbox{\texttt{ in}}  & {\em ra\+\_\+data} & The start of a Routing Area ID in encoded form, to be decoded. \\
\hline
\mbox{\texttt{ in}}  & {\em ra\+\_\+data\+\_\+len} & Buffer size available to read from at $\ast$ra\+\_\+data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the number of decoded bytes on success, or negative on error (if the input buffer is too small). 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+decode\+\_\+lai2()}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::lac}, \textbf{ ra\+\_\+id}, and \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::rac}.

\mbox{\label{group__gsm0408_gafbf5b1871f3c343826e9c5e0b43744f8}} 
\index{Gsm0408@{Gsm0408}!osmo\_routing\_area\_id\_encode\_buf@{osmo\_routing\_area\_id\_encode\_buf}}
\index{osmo\_routing\_area\_id\_encode\_buf@{osmo\_routing\_area\_id\_encode\_buf}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_routing\_area\_id\_encode\_buf()}
{\footnotesize\ttfamily int osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+buf (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buflen,  }\item[{const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$}]{src }\end{DoxyParamCaption})}



Encode struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} to a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification\+: write to a buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & Return buffer for encoded Mobile Identity. \\
\hline
\mbox{\texttt{ in}}  & {\em buflen} & sizeof(buf). \\
\hline
\mbox{\texttt{ in}}  & {\em src} & RA to encode. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Amount of bytes written to buf, or negative on error. 
\end{DoxyReturn}


References \textbf{ gsm48\+\_\+generate\+\_\+lai2()}, \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::lac}, \textbf{ ra\+\_\+id}, and \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+::rac}.



Referenced by \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+msgb()}.

\mbox{\label{group__gsm0408_ga2dfac865cb6456abddc174c815daf8e0}} 
\index{Gsm0408@{Gsm0408}!osmo\_routing\_area\_id\_encode\_msgb@{osmo\_routing\_area\_id\_encode\_msgb}}
\index{osmo\_routing\_area\_id\_encode\_msgb@{osmo\_routing\_area\_id\_encode\_msgb}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_routing\_area\_id\_encode\_msgb()}
{\footnotesize\ttfamily int osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+msgb (\begin{DoxyParamCaption}\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{const struct \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id} $\ast$}]{src }\end{DoxyParamCaption})}



Encode struct \doxyref{osmo\+\_\+routing\+\_\+area\+\_\+id}{p.}{structosmo__routing__area__id} to a 3GPP TS 24.\+008 § 10.\+5.\+5.\+15 Routing area identification\+: append to msgb. 

To succeed, the msgb must have tailroom $>$= sizeof(struct gsm48\+\_\+ra\+\_\+id). 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em msg} & Append to this msgb. \\
\hline
\mbox{\texttt{ in}}  & {\em src} & Encode this Routing Area ID. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Number of bytes appended to msgb, or negative on error. 
\end{DoxyReturn}


References \textbf{ msg}, \textbf{ msgb\+\_\+put()}, \textbf{ msgb\+\_\+tailroom()}, and \textbf{ osmo\+\_\+routing\+\_\+area\+\_\+id\+\_\+encode\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga0ef7b95cfd2d4901cd9a4e87b164985c}} 
\index{Gsm0408@{Gsm0408}!rr\_cause\_name@{rr\_cause\_name}}
\index{rr\_cause\_name@{rr\_cause\_name}!Gsm0408@{Gsm0408}}
\doxysubsubsection{rr\_cause\_name()}
{\footnotesize\ttfamily const char $\ast$ rr\+\_\+cause\+\_\+name (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{cause }\end{DoxyParamCaption})}



return string representation of RR Cause value 



References \textbf{ cause}, \textbf{ get\+\_\+value\+\_\+string()}, and \textbf{ rr\+\_\+cause\+\_\+names}.

\mbox{\label{group__gsm0408_gabceb35251804f253febcf974d5dd8a95}} 
\index{Gsm0408@{Gsm0408}!smod@{smod}}
\index{smod@{smod}!Gsm0408@{Gsm0408}}
\doxysubsubsection{smod()}
{\footnotesize\ttfamily static int32\+\_\+t smod (\begin{DoxyParamCaption}\item[{int32\+\_\+t}]{n,  }\item[{int32\+\_\+t}]{m }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ n}, and \textbf{ res}.



Referenced by \textbf{ gsm48\+\_\+decode\+\_\+freq\+\_\+list()}.



\doxysubsection{Variable Documentation}
\mbox{\label{group__gsm0408_ga8e9ca861c7d04d6fe8d9b11eb23211a1}} 
\index{Gsm0408@{Gsm0408}!bcd\_num\_digits@{bcd\_num\_digits}}
\index{bcd\_num\_digits@{bcd\_num\_digits}!Gsm0408@{Gsm0408}}
\doxysubsubsection{bcd\_num\_digits}
{\footnotesize\ttfamily const char bcd\+\_\+num\+\_\+digits[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \textcolor{charliteral}{'0'}, \textcolor{charliteral}{'1'}, \textcolor{charliteral}{'2'}, \textcolor{charliteral}{'3'}, \textcolor{charliteral}{'4'}, \textcolor{charliteral}{'5'}, \textcolor{charliteral}{'6'}, \textcolor{charliteral}{'7'},}
\DoxyCodeLine{        \textcolor{charliteral}{'8'}, \textcolor{charliteral}{'9'}, \textcolor{charliteral}{'*'}, \textcolor{charliteral}{'\#'}, \textcolor{charliteral}{'a'}, \textcolor{charliteral}{'b'}, \textcolor{charliteral}{'c'}, \textcolor{charliteral}{'\(\backslash\)0'}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ asc\+\_\+to\+\_\+bcd()}, and \textbf{ gsm48\+\_\+decode\+\_\+bcd\+\_\+number2()}.

\mbox{\label{group__gsm0408_ga03f74e08ca9fcc8170b3ca01dc52df48}} 
\index{Gsm0408@{Gsm0408}!cc\_msg\_names@{cc\_msg\_names}}
\index{cc\_msg\_names@{cc\_msg\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{cc\_msg\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} cc\+\_\+msg\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ gsm48\+\_\+cc\+\_\+msg\+\_\+name()}.

\mbox{\label{group__gsm0408_gadc38376da4f87d1afeb42b2294940c80}} 
\index{Gsm0408@{Gsm0408}!cc\_state\_names@{cc\_state\_names}}
\index{cc\_state\_names@{cc\_state\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{cc\_state\_names}
{\footnotesize\ttfamily const char$\ast$ cc\+\_\+state\+\_\+names[32]\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ gsm48\+\_\+cc\+\_\+state\+\_\+name()}.

\mbox{\label{group__gsm0408_ga071c5078dca2735d2a710c9c3e0d11a3}} 
\index{Gsm0408@{Gsm0408}!gprs\_att\_t\_strs@{gprs\_att\_t\_strs}}
\index{gprs\_att\_t\_strs@{gprs\_att\_t\_strs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_att\_t\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gprs\+\_\+att\+\_\+t\+\_\+strs = \textbf{ gprs\+\_\+att\+\_\+t\+\_\+strs\+\_\+}}

\mbox{\label{group__gsm0408_gab71db25dbd8eb6fb1ba2843728d26cf9}} 
\index{Gsm0408@{Gsm0408}!gprs\_att\_t\_strs\_@{gprs\_att\_t\_strs\_}}
\index{gprs\_att\_t\_strs\_@{gprs\_att\_t\_strs\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_att\_t\_strs\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+att\+\_\+t\+\_\+strs\+\_\+[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GPRS\_ATT\_T\_ATTACH,           \textcolor{stringliteral}{"{}GPRS attach"{}} \},}
\DoxyCodeLine{        \{ GPRS\_ATT\_T\_ATT\_WHILE\_IMSI,   \textcolor{stringliteral}{"{}GPRS attach while IMSI attached"{}} \},}
\DoxyCodeLine{        \{ GPRS\_ATT\_T\_COMBINED,               \textcolor{stringliteral}{"{}Combined GPRS/IMSI attach"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GPRS Attach types according to 10.\+5.\+5.\+2. 

\mbox{\label{group__gsm0408_ga919f27d574c7a1b154eee0b139e79dd4}} 
\index{Gsm0408@{Gsm0408}!gprs\_det\_t\_mo\_strs@{gprs\_det\_t\_mo\_strs}}
\index{gprs\_det\_t\_mo\_strs@{gprs\_det\_t\_mo\_strs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_det\_t\_mo\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs = \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs\+\_\+}}

\mbox{\label{group__gsm0408_gab9ed84be63d689f7e192e5a55976bf23}} 
\index{Gsm0408@{Gsm0408}!gprs\_det\_t\_mo\_strs\_@{gprs\_det\_t\_mo\_strs\_}}
\index{gprs\_det\_t\_mo\_strs\_@{gprs\_det\_t\_mo\_strs\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_det\_t\_mo\_strs\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+det\+\_\+t\+\_\+mo\+\_\+strs\+\_\+[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MO\_GPRS,         \textcolor{stringliteral}{"{}GPRS detach"{}} \},}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MO\_IMSI,         \textcolor{stringliteral}{"{}IMSI detach"{}} \},}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MO\_COMBINED, \textcolor{stringliteral}{"{}Combined GPRS/IMSI detach"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GMM MO Detach Types according to 10.\+5.\+5.\+5. 

\mbox{\label{group__gsm0408_ga34fba983c4885c011de6a93d7a5dc167}} 
\index{Gsm0408@{Gsm0408}!gprs\_det\_t\_mt\_strs@{gprs\_det\_t\_mt\_strs}}
\index{gprs\_det\_t\_mt\_strs@{gprs\_det\_t\_mt\_strs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_det\_t\_mt\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs = \textbf{ gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs\+\_\+}}

\mbox{\label{group__gsm0408_ga39b78912d467b85ef89bc2fac7f3ee9b}} 
\index{Gsm0408@{Gsm0408}!gprs\_det\_t\_mt\_strs\_@{gprs\_det\_t\_mt\_strs\_}}
\index{gprs\_det\_t\_mt\_strs\_@{gprs\_det\_t\_mt\_strs\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_det\_t\_mt\_strs\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+det\+\_\+t\+\_\+mt\+\_\+strs\+\_\+[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MT\_REATT\_REQ,       \textcolor{stringliteral}{"{}re-\/attach required"{}} \},}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MT\_REATT\_NOTREQ, \textcolor{stringliteral}{"{}re-\/attach not required"{}} \},}
\DoxyCodeLine{        \{ GPRS\_DET\_T\_MT\_IMSI,         \textcolor{stringliteral}{"{}IMSI detach (after VLR failure)"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GMM MT Detach Types according to 10.\+5.\+5.\+5. 

\mbox{\label{group__gsm0408_ga7078bf50a332af170ca5e3eff89c0899}} 
\index{Gsm0408@{Gsm0408}!gprs\_msgt\_gmm\_names@{gprs\_msgt\_gmm\_names}}
\index{gprs\_msgt\_gmm\_names@{gprs\_msgt\_gmm\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_msgt\_gmm\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+msgt\+\_\+gmm\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ATTACH\_REQ,               \textcolor{stringliteral}{"{}ATTACH REQUEST"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ATTACH\_ACK,               \textcolor{stringliteral}{"{}ATTACH ACK"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ATTACH\_COMPL,           \textcolor{stringliteral}{"{}ATTACH COMPLETE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ATTACH\_REJ,               \textcolor{stringliteral}{"{}ATTACH REJECT"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_DETACH\_REQ,               \textcolor{stringliteral}{"{}DETACH REQUEST"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_DETACH\_ACK,               \textcolor{stringliteral}{"{}DETACH ACK"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_RA\_UPD\_REQ,               \textcolor{stringliteral}{"{}RA UPDATE REQUEST"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_RA\_UPD\_ACK,               \textcolor{stringliteral}{"{}RA UPDATE ACK"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_RA\_UPD\_COMPL,           \textcolor{stringliteral}{"{}RA UPDATE COMPLETE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_RA\_UPD\_REJ,               \textcolor{stringliteral}{"{}RA UPDATE REJECT"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_PTMSI\_REALL\_CMD,             \textcolor{stringliteral}{"{}PTMSI REALLOC CMD"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_PTMSI\_REALL\_COMPL, \textcolor{stringliteral}{"{}PTMSI REALLOC COMPLETE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_AUTH\_CIPH\_REQ,         \textcolor{stringliteral}{"{}AUTH \& CIPHER REQUEST"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_AUTH\_CIPH\_RESP,               \textcolor{stringliteral}{"{}AUTH \& CIPHER RESPONSE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_AUTH\_CIPH\_REJ,         \textcolor{stringliteral}{"{}AUTH \& CIPHER REJECT"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_AUTH\_CIPH\_FAIL,               \textcolor{stringliteral}{"{}AUTH \& CIPHER FAILURE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ID\_REQ,                       \textcolor{stringliteral}{"{}IDENTITY REQUEST"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_ID\_RESP,                     \textcolor{stringliteral}{"{}IDENTITY RESPONSE"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_STATUS,                       \textcolor{stringliteral}{"{}STATUS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_GMM\_INFO,                   \textcolor{stringliteral}{"{}INFO"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GMM message types. 

\mbox{\label{group__gsm0408_gafcf8c77183c88bcd0ebfff1d70ca94e1}} 
\index{Gsm0408@{Gsm0408}!gprs\_service\_t\_strs@{gprs\_service\_t\_strs}}
\index{gprs\_service\_t\_strs@{gprs\_service\_t\_strs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_service\_t\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gprs\+\_\+service\+\_\+t\+\_\+strs = \textbf{ gprs\+\_\+service\+\_\+t\+\_\+strs\+\_\+}}

\mbox{\label{group__gsm0408_ga0ba81dcdc632ec86ee69046045383420}} 
\index{Gsm0408@{Gsm0408}!gprs\_service\_t\_strs\_@{gprs\_service\_t\_strs\_}}
\index{gprs\_service\_t\_strs\_@{gprs\_service\_t\_strs\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_service\_t\_strs\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+service\+\_\+t\+\_\+strs\+\_\+[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GPRS\_SERVICE\_T\_SIGNALLING,   \textcolor{stringliteral}{"{}signalling"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SERVICE\_T\_DATA,               \textcolor{stringliteral}{"{}data"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SERVICE\_T\_PAGING\_RESP, \textcolor{stringliteral}{"{}paging response"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SERVICE\_T\_MBMS\_MC\_SERV,       \textcolor{stringliteral}{"{}MBMS multicast service"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SERVICE\_T\_MBMS\_BC\_SERV,       \textcolor{stringliteral}{"{}MBMS broadcast service"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GMM Service Types. 

\mbox{\label{group__gsm0408_ga603a3f9dc1155c1a4004267ee22d4e0e}} 
\index{Gsm0408@{Gsm0408}!gprs\_upd\_t\_strs@{gprs\_upd\_t\_strs}}
\index{gprs\_upd\_t\_strs@{gprs\_upd\_t\_strs}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_upd\_t\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gprs\+\_\+upd\+\_\+t\+\_\+strs = \textbf{ gprs\+\_\+upd\+\_\+t\+\_\+strs\+\_\+}}

\mbox{\label{group__gsm0408_ga3d42a519f88987fd0767f071caecdab8}} 
\index{Gsm0408@{Gsm0408}!gprs\_upd\_t\_strs\_@{gprs\_upd\_t\_strs\_}}
\index{gprs\_upd\_t\_strs\_@{gprs\_upd\_t\_strs\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gprs\_upd\_t\_strs\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+upd\+\_\+t\+\_\+strs\+\_\+[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GPRS\_UPD\_T\_RA,           \textcolor{stringliteral}{"{}RA updating"{}} \},}
\DoxyCodeLine{        \{ GPRS\_UPD\_T\_RA\_LA,             \textcolor{stringliteral}{"{}combined RA/LA updating"{}} \},}
\DoxyCodeLine{        \{ GPRS\_UPD\_T\_RA\_LA\_IMSI\_ATT,   \textcolor{stringliteral}{"{}combined RA/LA updating + IMSI attach"{}} \},}
\DoxyCodeLine{        \{ GPRS\_UPD\_T\_PERIODIC,               \textcolor{stringliteral}{"{}periodic updating"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


String names of GPRS Location Update Types. 

\mbox{\label{group__gsm0408_gaf1cae679a01a7d3cab83e7e8b48560fd}} 
\index{Gsm0408@{Gsm0408}!gsm48\_att\_tlvdef@{gsm48\_att\_tlvdef}}
\index{gsm48\_att\_tlvdef@{gsm48\_att\_tlvdef}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_att\_tlvdef}
{\footnotesize\ttfamily const struct \textbf{ tlv\+\_\+definition} gsm48\+\_\+att\+\_\+tlvdef}



TLV parser definitions for TS 04.\+08 CC. 

\mbox{\label{group__gsm0408_gaeaa5d6558a2c3eea1697e13cdc775b05}} 
\index{Gsm0408@{Gsm0408}!gsm48\_cc\_cause\_names@{gsm48\_cc\_cause\_names}}
\index{gsm48\_cc\_cause\_names@{gsm48\_cc\_cause\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_cc\_cause\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+cc\+\_\+cause\+\_\+names[$\,$]}



TS 04.\+08 10.\+5..4.\+11 Call Control Cause Values. 



Referenced by \textbf{ gsm48\+\_\+cc\+\_\+cause\+\_\+name()}.

\mbox{\label{group__gsm0408_gae513c5a01fdd79ee27d89e9af53eb2a1}} 
\index{Gsm0408@{Gsm0408}!gsm48\_cc\_msgtype\_names@{gsm48\_cc\_msgtype\_names}}
\index{gsm48\_cc\_msgtype\_names@{gsm48\_cc\_msgtype\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_cc\_msgtype\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+cc\+\_\+msgtype\+\_\+names[$\,$]}



TS 04.\+08 CC Message Type names. 



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_gaeae15077989ae2403e06f13a3945bb96}} 
\index{Gsm0408@{Gsm0408}!gsm48\_chan\_mode\_names@{gsm48\_chan\_mode\_names}}
\index{gsm48\_chan\_mode\_names@{gsm48\_chan\_mode\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_chan\_mode\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+chan\+\_\+mode\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SIGN,             \textcolor{stringliteral}{"{}SIGNALLING"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V1,   \textcolor{stringliteral}{"{}SPEECH\_V1"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_EFR, \textcolor{stringliteral}{"{}SPEECH\_EFR"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_AMR, \textcolor{stringliteral}{"{}SPEECH\_AMR"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V4,   \textcolor{stringliteral}{"{}SPEECH\_V4"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V5,   \textcolor{stringliteral}{"{}SPEECH\_V5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V6,   \textcolor{stringliteral}{"{}SPEECH\_V6"{}} \},}
\DoxyCodeLine{}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_43k5\_14k5, \textcolor{stringliteral}{"{}DATA\_43k5\_14k5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_29k0\_14k5, \textcolor{stringliteral}{"{}DATA\_29k0\_14k5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_43k5\_29k0, \textcolor{stringliteral}{"{}DATA\_43k5\_29k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_14k5\_43k5, \textcolor{stringliteral}{"{}DATA\_14k5\_43k5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_14k5\_29k0, \textcolor{stringliteral}{"{}DATA\_14k5\_29k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_29k0\_43k5, \textcolor{stringliteral}{"{}DATA\_29k0\_43k5"{}} \},}
\DoxyCodeLine{}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_43k5,   \textcolor{stringliteral}{"{}DATA\_43k5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_32k0,   \textcolor{stringliteral}{"{}DATA\_32k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_29k0,   \textcolor{stringliteral}{"{}DATA\_29k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_14k5,   \textcolor{stringliteral}{"{}DATA\_14k5"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_12k0,   \textcolor{stringliteral}{"{}DATA\_12k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_6k0,             \textcolor{stringliteral}{"{}DATA\_6k0"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_DATA\_3k6,             \textcolor{stringliteral}{"{}DATA\_3k6"{}} \},}
\DoxyCodeLine{}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V1\_VAMOS,       \textcolor{stringliteral}{"{}SPEECH\_V1\_VAMOS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V2\_VAMOS,       \textcolor{stringliteral}{"{}SPEECH\_V2\_VAMOS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V3\_VAMOS,       \textcolor{stringliteral}{"{}SPEECH\_V3\_VAMOS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMODE\_SPEECH\_V5\_VAMOS,       \textcolor{stringliteral}{"{}SPEECH\_V5\_VAMOS"{}} \},}
\DoxyCodeLine{        \{ 0,                            NULL \},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ gsm48\+\_\+chan\+\_\+mode\+\_\+name()}.

\mbox{\label{group__gsm0408_gab1e8ceaa3873af05c6c1884f0fbdf3ac}} 
\index{Gsm0408@{Gsm0408}!gsm48\_gmm\_cause\_names@{gsm48\_gmm\_cause\_names}}
\index{gsm48\_gmm\_cause\_names@{gsm48\_gmm\_cause\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_gmm\_cause\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gsm48\+\_\+gmm\+\_\+cause\+\_\+names = \textbf{ gsm48\+\_\+gmm\+\_\+cause\+\_\+names\+\_\+}}



Referenced by \textbf{ osmo\+\_\+oap\+\_\+client\+\_\+handle()}.

\mbox{\label{group__gsm0408_gabaea0a8fdd7104315a1c2ff167f99fc9}} 
\index{Gsm0408@{Gsm0408}!gsm48\_gmm\_cause\_names\_@{gsm48\_gmm\_cause\_names\_}}
\index{gsm48\_gmm\_cause\_names\_@{gsm48\_gmm\_cause\_names\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_gmm\_cause\_names\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+gmm\+\_\+cause\+\_\+names\+\_\+[$\,$]}



10.\+5.\+5.\+14 GPRS MM Cause / Table 10.\+5.\+147 

\mbox{\label{group__gsm0408_ga3c5039d26d24d56d442809cdd67fd917}} 
\index{Gsm0408@{Gsm0408}!gsm48\_gsm\_cause\_names@{gsm48\_gsm\_cause\_names}}
\index{gsm48\_gsm\_cause\_names@{gsm48\_gsm\_cause\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_gsm\_cause\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string}$\ast$ gsm48\+\_\+gsm\+\_\+cause\+\_\+names = \textbf{ gsm48\+\_\+gsm\+\_\+cause\+\_\+names\+\_\+}}

\mbox{\label{group__gsm0408_ga297f2eb96d140ea7d255242e129ab096}} 
\index{Gsm0408@{Gsm0408}!gsm48\_gsm\_cause\_names\_@{gsm48\_gsm\_cause\_names\_}}
\index{gsm48\_gsm\_cause\_names\_@{gsm48\_gsm\_cause\_names\_}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_gsm\_cause\_names\_}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+gsm\+\_\+cause\+\_\+names\+\_\+[$\,$]}



10.\+5.\+6.\+6 SM Cause / Table 10.\+5.\+157 

\mbox{\label{group__gsm0408_gaab47ba9a689cae82d98f1f3c0bd57c41}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mm\_att\_tlvdef@{gsm48\_mm\_att\_tlvdef}}
\index{gsm48\_mm\_att\_tlvdef@{gsm48\_mm\_att\_tlvdef}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mm\_att\_tlvdef}
{\footnotesize\ttfamily const struct \textbf{ tlv\+\_\+definition} gsm48\+\_\+mm\+\_\+att\+\_\+tlvdef}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .def = \{}
\DoxyCodeLine{                [GSM48\_IE\_MOBILE\_ID]          = \{ TLV\_TYPE\_TLV \},}
\DoxyCodeLine{                [GSM48\_IE\_NAME\_LONG]          = \{ TLV\_TYPE\_TLV \},}
\DoxyCodeLine{                [GSM48\_IE\_NAME\_SHORT]                = \{ TLV\_TYPE\_TLV \},}
\DoxyCodeLine{                [GSM48\_IE\_UTC]                      = \{ TLV\_TYPE\_TV \},}
\DoxyCodeLine{                [GSM48\_IE\_NET\_TIME\_TZ]              = \{ TLV\_TYPE\_FIXED, 7 \},}
\DoxyCodeLine{                [GSM48\_IE\_LSA\_IDENT]          = \{ TLV\_TYPE\_TLV \},}
\DoxyCodeLine{                [GSM48\_IE\_NET\_DST]              = \{ TLV\_TYPE\_TLV \},}
\DoxyCodeLine{}
\DoxyCodeLine{                [GSM48\_IE\_LOCATION\_AREA]  = \{ TLV\_TYPE\_FIXED, 5 \},}
\DoxyCodeLine{                [GSM48\_IE\_PRIORITY\_LEV\_HO]      = \{ TLV\_TYPE\_SINGLE\_TV \},}
\DoxyCodeLine{                [GSM48\_IE\_FOLLOW\_ON\_PROC]        = \{ TLV\_TYPE\_T \},}
\DoxyCodeLine{                [GSM48\_IE\_CTS\_PERMISSION]        = \{ TLV\_TYPE\_T \},}
\DoxyCodeLine{        \},}
\DoxyCodeLine{\}}

\end{DoxyCode}


TLV parser definitions for TS 04.\+08 MM. 

\mbox{\label{group__gsm0408_ga6e3797cbcbacba722535b0fa77df0875}} 
\index{Gsm0408@{Gsm0408}!gsm48\_mm\_msgtype\_names@{gsm48\_mm\_msgtype\_names}}
\index{gsm48\_mm\_msgtype\_names@{gsm48\_mm\_msgtype\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_mm\_msgtype\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+mm\+\_\+msgtype\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_IMSI\_DETACH\_IND),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_LOC\_UPD\_ACCEPT),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_LOC\_UPD\_REJECT),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_LOC\_UPD\_REQUEST),}
\DoxyCodeLine{}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_AUTH\_REJ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_AUTH\_REQ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_AUTH\_RESP),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_AUTH\_FAIL),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_ID\_REQ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_ID\_RESP),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_TMSI\_REALL\_CMD),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_TMSI\_REALL\_COMPL),}
\DoxyCodeLine{}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_SERV\_ACC),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_SERV\_REJ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_SERV\_ABORT),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_SERV\_REQ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_SERV\_PROMPT),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_CM\_REEST\_REQ),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_ABORT),}
\DoxyCodeLine{}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_NULL),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_STATUS),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM48\_MT\_MM\_INFO),}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


TS 04.\+08 MM Message Type names. 



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga7913c494a75fe612714c54f3325f3409}} 
\index{Gsm0408@{Gsm0408}!gsm48\_nc\_ss\_msgtype\_names@{gsm48\_nc\_ss\_msgtype\_names}}
\index{gsm48\_nc\_ss\_msgtype\_names@{gsm48\_nc\_ss\_msgtype\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_nc\_ss\_msgtype\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+nc\+\_\+ss\+\_\+msgtype\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM0480\_MTYPE\_RELEASE\_COMPLETE),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM0480\_MTYPE\_FACILITY),}
\DoxyCodeLine{        OSMO\_VALUE\_STRING(GSM0480\_MTYPE\_REGISTER),}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


TS 04.\+80, section 3.\+4 Messages for supplementary services control. 



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_ga51820f203e69c5705c76039999ba43a4}} 
\index{Gsm0408@{Gsm0408}!gsm48\_pdisc\_names@{gsm48\_pdisc\_names}}
\index{gsm48\_pdisc\_names@{gsm48\_pdisc\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_pdisc\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+pdisc\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_PDISC\_GROUP\_CC,             \textcolor{stringliteral}{"{}VGCC"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_BCAST\_CC,             \textcolor{stringliteral}{"{}VBCC"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_PDSS1,           \textcolor{stringliteral}{"{}PDSS1"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_CC,         \textcolor{stringliteral}{"{}CC"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_PDSS2,           \textcolor{stringliteral}{"{}PDSS2"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_MM,         \textcolor{stringliteral}{"{}MM"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_RR,         \textcolor{stringliteral}{"{}RR"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_MM\_GPRS,               \textcolor{stringliteral}{"{}GMM"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_SMS,               \textcolor{stringliteral}{"{}SMS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_SM\_GPRS,               \textcolor{stringliteral}{"{}SM"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_NC\_SS,           \textcolor{stringliteral}{"{}NCSS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_LOC,               \textcolor{stringliteral}{"{}LCS"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_EXTEND,         \textcolor{stringliteral}{"{}EXTD"{}} \},}
\DoxyCodeLine{        \{ GSM48\_PDISC\_MASK,             \textcolor{stringliteral}{"{}MASK"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


TS 04.\+08 Protocol Descriptor names. 



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+name()}.

\mbox{\label{group__gsm0408_ga07237aa493556fe5a857062b3349f237}} 
\index{Gsm0408@{Gsm0408}!gsm48\_reject\_value\_names@{gsm48\_reject\_value\_names}}
\index{gsm48\_reject\_value\_names@{gsm48\_reject\_value\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_reject\_value\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+reject\+\_\+value\+\_\+names[$\,$]}



Referenced by \textbf{ gsm48\+\_\+reject\+\_\+value\+\_\+name()}.

\mbox{\label{group__gsm0408_ga7578c8e453c5cc3d7bf4ea6a6aff4d8c}} 
\index{Gsm0408@{Gsm0408}!gsm48\_rr\_att\_tlvdef@{gsm48\_rr\_att\_tlvdef}}
\index{gsm48\_rr\_att\_tlvdef@{gsm48\_rr\_att\_tlvdef}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_rr\_att\_tlvdef}
{\footnotesize\ttfamily const struct \textbf{ tlv\+\_\+definition} gsm48\+\_\+rr\+\_\+att\+\_\+tlvdef}



TLV parser definitions for TS 04.\+08 RR. 

\mbox{\label{group__gsm0408_ga034f4894d2801290e6636e19a3386523}} 
\index{Gsm0408@{Gsm0408}!gsm48\_rr\_msgtype\_names@{gsm48\_rr\_msgtype\_names}}
\index{gsm48\_rr\_msgtype\_names@{gsm48\_rr\_msgtype\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm48\_rr\_msgtype\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm48\+\_\+rr\+\_\+msgtype\+\_\+names[$\,$]}



TS 04.\+08 RR Message Type names. 



Referenced by \textbf{ gsm48\+\_\+pdisc\+\_\+msgtype\+\_\+name\+\_\+buf()}.

\mbox{\label{group__gsm0408_gacea173936ccc4dbdd6492fe9b8b82b1d}} 
\index{Gsm0408@{Gsm0408}!gsm\_chan\_t\_names@{gsm\_chan\_t\_names}}
\index{gsm\_chan\_t\_names@{gsm\_chan\_t\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{gsm\_chan\_t\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gsm\+\_\+chan\+\_\+t\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM\_LCHAN\_NONE, \textcolor{stringliteral}{"{}NONE"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_SDCCH,       \textcolor{stringliteral}{"{}SDCCH"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_TCH\_F,       \textcolor{stringliteral}{"{}TCH\_F"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_TCH\_H,       \textcolor{stringliteral}{"{}TCH\_H"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_UNKNOWN,   \textcolor{stringliteral}{"{}UNKNOWN"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_CCCH, \textcolor{stringliteral}{"{}CCCH"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_PDTCH,       \textcolor{stringliteral}{"{}PDTCH"{}} \},}
\DoxyCodeLine{        \{ GSM\_LCHAN\_CBCH, \textcolor{stringliteral}{"{}CBCH"{}} \},}
\DoxyCodeLine{        \{ 0,                    NULL \},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ gsm\+\_\+chan\+\_\+t\+\_\+name()}.

\mbox{\label{group__gsm0408_gaa0bdfcd099a299406a5a9513ccfe6292}} 
\index{Gsm0408@{Gsm0408}!mi\_type\_names@{mi\_type\_names}}
\index{mi\_type\_names@{mi\_type\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{mi\_type\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} mi\+\_\+type\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM\_MI\_TYPE\_NONE,     \textcolor{stringliteral}{"{}NONE"{}} \},}
\DoxyCodeLine{        \{ GSM\_MI\_TYPE\_IMSI,     \textcolor{stringliteral}{"{}IMSI"{}} \},}
\DoxyCodeLine{        \{ GSM\_MI\_TYPE\_IMEI,     \textcolor{stringliteral}{"{}IMEI"{}} \},}
\DoxyCodeLine{        \{ GSM\_MI\_TYPE\_IMEISV, \textcolor{stringliteral}{"{}IMEI-\/SV"{}} \},}
\DoxyCodeLine{        \{ GSM\_MI\_TYPE\_TMSI,     \textcolor{stringliteral}{"{}TMSI"{}} \},}
\DoxyCodeLine{        \{ 0,                    NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ gsm48\+\_\+mi\+\_\+type\+\_\+name()}.

\mbox{\label{group__gsm0408_gae903aa4d02489ff6a92098706aa49c36}} 
\index{Gsm0408@{Gsm0408}!osmo\_cm\_service\_type\_names@{osmo\_cm\_service\_type\_names}}
\index{osmo\_cm\_service\_type\_names@{osmo\_cm\_service\_type\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_cm\_service\_type\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} osmo\+\_\+cm\+\_\+service\+\_\+type\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_MO\_CALL\_PACKET, \textcolor{stringliteral}{"{}MO-\/Call"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_EMERGENCY, \textcolor{stringliteral}{"{}Emergency-\/Call"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_SMS, \textcolor{stringliteral}{"{}Short-\/Messaging-\/Service"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_SUP\_SERV, \textcolor{stringliteral}{"{}Supplementary-\/Service"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_VGCS, \textcolor{stringliteral}{"{}Voice-\/Group-\/Call"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_VBS, \textcolor{stringliteral}{"{}Voice-\/Broadcast-\/Call"{}} \},}
\DoxyCodeLine{        \{ GSM48\_CMSERV\_LOC\_SERV, \textcolor{stringliteral}{"{}Location-\/Service"{}} \},}
\DoxyCodeLine{        \{\}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+cm\+\_\+service\+\_\+type\+\_\+name()}.

\mbox{\label{group__gsm0408_gaa6371c71b1209c13636d5c5bd54d49fb}} 
\index{Gsm0408@{Gsm0408}!osmo\_lu\_type\_names@{osmo\_lu\_type\_names}}
\index{osmo\_lu\_type\_names@{osmo\_lu\_type\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{osmo\_lu\_type\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} osmo\+\_\+lu\+\_\+type\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_LUPD\_NORMAL, \textcolor{stringliteral}{"{}NORMAL"{}} \},}
\DoxyCodeLine{        \{ GSM48\_LUPD\_PERIODIC, \textcolor{stringliteral}{"{}PERIODIC"{}} \},}
\DoxyCodeLine{        \{ GSM48\_LUPD\_IMSI\_ATT, \textcolor{stringliteral}{"{}IMSI-\/ATTACH"{}} \},}
\DoxyCodeLine{        \{ GSM48\_LUPD\_RESERVED, \textcolor{stringliteral}{"{}RESERVED"{}} \},}
\DoxyCodeLine{        \{\}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+lu\+\_\+type\+\_\+name()}.

\mbox{\label{group__gsm0408_ga0199c778dfdb6133c63bbe08ba7683f3}} 
\index{Gsm0408@{Gsm0408}!rr\_cause\_names@{rr\_cause\_names}}
\index{rr\_cause\_names@{rr\_cause\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{rr\_cause\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} rr\+\_\+cause\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_NORMAL,           \textcolor{stringliteral}{"{}Normal event"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_ABNORMAL\_UNSPEC, \textcolor{stringliteral}{"{}Abnormal release, unspecified"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_ABNORMAL\_UNACCT, \textcolor{stringliteral}{"{}Abnormal release, channel unacceptable"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_ABNORMAL\_TIMER,   \textcolor{stringliteral}{"{}Abnormal release, timer expired"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_ABNORMAL\_NOACT,   \textcolor{stringliteral}{"{}Abnormal release, no activity on radio path"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_PREMPTIVE\_REL,             \textcolor{stringliteral}{"{}Preemptive release"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_UTRAN\_CFG\_UNK,             \textcolor{stringliteral}{"{}UTRAN configuration unknown"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_HNDOVER\_IMP,         \textcolor{stringliteral}{"{}Handover impossible, timing advance out of range"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_CHAN\_MODE\_UNACCT,       \textcolor{stringliteral}{"{}Channel mode unacceptable"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_FREQ\_NOT\_IMPL,             \textcolor{stringliteral}{"{}Frequency not implemented"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_LEAVE\_GROUP\_CA,   \textcolor{stringliteral}{"{}Originator or talker leaving group call area"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_LOW\_LEVEL\_FAIL,   \textcolor{stringliteral}{"{}Lower layer failure"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_CALL\_CLEARED,               \textcolor{stringliteral}{"{}Call already cleared"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_SEMANT\_INCORR,             \textcolor{stringliteral}{"{}Semantically incorrect message"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_INVALID\_MAND\_INF,       \textcolor{stringliteral}{"{}Invalid mandatory information"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_MSG\_TYPE\_N,           \textcolor{stringliteral}{"{}Message type non-\/existent or not implemented"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_MSG\_TYPE\_N\_COMPAT,     \textcolor{stringliteral}{"{}Message type not compatible with protocol state"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_COND\_IE\_ERROR,             \textcolor{stringliteral}{"{}Conditional IE error"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_NO\_CELL\_ALLOC\_A, \textcolor{stringliteral}{"{}No cell allocation available"{}} \},}
\DoxyCodeLine{        \{ GSM48\_RR\_CAUSE\_PROT\_ERROR\_UNSPC,       \textcolor{stringliteral}{"{}Protocol error unspecified"{}} \},}
\DoxyCodeLine{        \{ 0,                                    NULL \},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ rr\+\_\+cause\+\_\+name()}.

\mbox{\label{group__gsm0408_ga60affab7863ad96b98a260b2ea5ef1ae}} 
\index{Gsm0408@{Gsm0408}!rr\_msg\_names@{rr\_msg\_names}}
\index{rr\_msg\_names@{rr\_msg\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{rr\_msg\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} rr\+\_\+msg\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ gsm48\+\_\+rr\+\_\+msg\+\_\+name()}.

\mbox{\label{group__gsm0408_ga2f842be6a8a4413531fd761658c7c9f2}} 
\index{Gsm0408@{Gsm0408}!rr\_msg\_type\_short\_names@{rr\_msg\_type\_short\_names}}
\index{rr\_msg\_type\_short\_names@{rr\_msg\_type\_short\_names}!Gsm0408@{Gsm0408}}
\doxysubsubsection{rr\_msg\_type\_short\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} rr\+\_\+msg\+\_\+type\+\_\+short\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_SI10,               \textcolor{stringliteral}{"{}System Information Type 10"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_FACCH,             \textcolor{stringliteral}{"{}Notification/FACCH"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_UL\_FREE, \textcolor{stringliteral}{"{}Uplink Free"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_MEAS\_REP,       \textcolor{stringliteral}{"{}Enhanced Measurement Report (uplink)"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_MEAS\_INFO,     \textcolor{stringliteral}{"{}Measurement Information (downlink)"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_VGCS\_RECON,   \textcolor{stringliteral}{"{}VBS/VGCS Reconfigure"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_VGCS\_RECON2, \textcolor{stringliteral}{"{}VBS/VGCS Reconfigure2"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_VGCS\_INFO,     \textcolor{stringliteral}{"{}VGCS Additional Information"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_VGCS\_SMS,       \textcolor{stringliteral}{"{}VGCS SMS Information"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_SI10bis, \textcolor{stringliteral}{"{}System Information Type 10bis"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_SI10ter, \textcolor{stringliteral}{"{}System Information Type 10ter"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_VGCS\_NEIGH,   \textcolor{stringliteral}{"{}VGCS Neighbour Cell Information"{}} \},}
\DoxyCodeLine{        \{ GSM48\_MT\_RR\_SH\_APP\_DATA,       \textcolor{stringliteral}{"{}Notify Application Data"{}} \},}
\DoxyCodeLine{        \{ 0,                            NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ gsm48\+\_\+rr\+\_\+short\+\_\+pd\+\_\+msg\+\_\+name()}.

