\doxysection{src/gb/gprs\+\_\+ns2.c File Reference}
\label{gprs__ns2_8c}\index{src/gb/gprs\_ns2.c@{src/gb/gprs\_ns2.c}}


GPRS Networks Service (NS) messages on the Gb interface.  


{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include $<$unistd.\+h$>$}\newline
{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$sys/types.\+h$>$}\newline
{\ttfamily \#include $<$sys/socket.\+h$>$}\newline
{\ttfamily \#include $<$arpa/inet.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/fsm.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/rate\+\_\+ctr.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/socket.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/sockaddr\+\_\+str.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/stats.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/stat\+\_\+item.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/talloc.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/prim.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/tlv.\+h$>$}\newline
{\ttfamily \#include \char`\"{}gprs\+\_\+ns2\+\_\+internal.\+h\char`\"{}}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ ns\+\_\+set\+\_\+state}(ns\+\_\+,  st\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state\+\_\+with\+\_\+log}(ns\+\_\+, st\+\_\+, false, \+\_\+\+\_\+\+FILE\+\_\+\+\_\+, \+\_\+\+\_\+\+LINE\+\_\+\+\_\+)
\item 
\#define \textbf{ ns\+\_\+set\+\_\+remote\+\_\+state}(ns\+\_\+,  st\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state\+\_\+with\+\_\+log}(ns\+\_\+, st\+\_\+, true, \+\_\+\+\_\+\+FILE\+\_\+\+\_\+, \+\_\+\+\_\+\+LINE\+\_\+\+\_\+)
\item 
\#define \textbf{ ns\+\_\+mark\+\_\+blocked}(ns\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state}(ns\+\_\+, (ns\+\_\+)-\/$>$state $\vert$ \textbf{ NSE\+\_\+\+S\+\_\+\+BLOCKED})
\item 
\#define \textbf{ ns\+\_\+mark\+\_\+unblocked}(ns\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state}(ns\+\_\+, (ns\+\_\+)-\/$>$state \& ($\sim$\textbf{ NSE\+\_\+\+S\+\_\+\+BLOCKED}));
\item 
\#define \textbf{ ns\+\_\+mark\+\_\+alive}(ns\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state}(ns\+\_\+, (ns\+\_\+)-\/$>$state $\vert$ \textbf{ NSE\+\_\+\+S\+\_\+\+ALIVE})
\item 
\#define \textbf{ ns\+\_\+mark\+\_\+dead}(ns\+\_\+)~\textbf{ ns\+\_\+set\+\_\+state}(ns\+\_\+, (ns\+\_\+)-\/$>$state \& ($\sim$\textbf{ NSE\+\_\+\+S\+\_\+\+ALIVE}));
\item 
\#define \textbf{ NS2\+\_\+\+LL\+\_\+\+MAX\+\_\+\+STR}~4+2$\ast$(INET6\+\_\+\+ADDRSTRLEN+9)+8
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
char $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ll\+\_\+str\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em string-\/format a given NS-\/\+VC into a user-\/supplied buffer. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ll\+\_\+str} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em string-\/format a given NS-\/\+VC to a thread-\/local static buffer. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ll\+\_\+str\+\_\+c} (const void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em string-\/format a given NS-\/\+VC to a dynamically allocated string. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+nsvc\+\_\+state\+\_\+name} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Return the current state name of a given NS-\/\+VC to a thread-\/local static buffer. \end{DoxyCompactList}\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+load\+\_\+sharing\+\_\+signal} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+load\+\_\+sharing\+\_\+modulo} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t \textbf{ bvci}, uint32\+\_\+t load\+\_\+selector)
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+load\+\_\+sharing\+\_\+weight\+\_\+modulo} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t \textbf{ bvci}, uint32\+\_\+t load\+\_\+selector)
\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+load\+\_\+sharing\+\_\+first} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+load\+\_\+sharing} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t \textbf{ bvci}, uint32\+\_\+t link\+\_\+selector)
\item 
int \textbf{ gprs\+\_\+ns2\+\_\+recv\+\_\+prim} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, struct \textbf{ osmo\+\_\+prim\+\_\+hdr} $\ast$oph)
\begin{DoxyCompactList}\small\item\em Receive a primitive from the NS User (Gb). \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+prim\+\_\+status\+\_\+ind} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc, uint16\+\_\+t \textbf{ bvci}, enum \textbf{ gprs\+\_\+ns2\+\_\+affecting\+\_\+cause} \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Send a STATUS.\+ind primitive to the specified NS instance user. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ ns2\+\_\+vc\+\_\+alloc} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, bool initiater, enum \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+mode} vc\+\_\+mode, const char $\ast$id)
\begin{DoxyCompactList}\small\item\em Allocate a NS-\/\+VC within the given bind + NSE. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Destroy/release given NS-\/\+VC. \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+free\+\_\+nsvcs} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvcs} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em Destroy/release all NS-\/\+VC of given NSE. \end{DoxyCompactList}\item 
struct \textbf{ msgb} $\ast$ \textbf{ ns2\+\_\+msgb\+\_\+alloc} (void)
\begin{DoxyCompactList}\small\item\em Allocate a message buffer for use with the NS2 stack. \end{DoxyCompactList}\item 
static int \textbf{ reject\+\_\+status\+\_\+msg} (struct \textbf{ msgb} $\ast$orig\+\_\+msg, struct \textbf{ tlv\+\_\+parsed} $\ast$tp, struct \textbf{ msgb} $\ast$$\ast$reject, enum \textbf{ ns\+\_\+cause} \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Create a status message to be sent over a new connection. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+nse\+\_\+by\+\_\+nsei} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei})
\begin{DoxyCompactList}\small\item\em Resolve a NS Entity based on its NSEI. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+nsvc\+\_\+by\+\_\+nsvci} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Resolve a NS-\/\+VC Entity based on its NS-\/\+VCI. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+create\+\_\+nse2} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, enum \textbf{ gprs\+\_\+ns2\+\_\+ll} linklayer, enum \textbf{ gprs\+\_\+ns2\+\_\+dialect} dialect, bool ip\+\_\+sns\+\_\+role\+\_\+sgsn)
\begin{DoxyCompactList}\small\item\em Create a NS Entity within given NS instance. \end{DoxyCompactList}\item 
int \textbf{ ns2\+\_\+nse\+\_\+set\+\_\+dialect} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, enum \textbf{ gprs\+\_\+ns2\+\_\+dialect} dialect)
\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+create\+\_\+nse} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, enum \textbf{ gprs\+\_\+ns2\+\_\+ll} linklayer, enum \textbf{ gprs\+\_\+ns2\+\_\+dialect} dialect)
\begin{DoxyCompactList}\small\item\em Create a NS Entity within given NS instance. \end{DoxyCompactList}\item 
uint16\+\_\+t \textbf{ gprs\+\_\+ns2\+\_\+nse\+\_\+nsei} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em Return the NSEI. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nse} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em Destroy given NS Entity. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nses} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi)
\item 
static int \textbf{ ns2\+\_\+tlv\+\_\+parse} (struct \textbf{ tlv\+\_\+parsed} $\ast$dec, const uint8\+\_\+t $\ast$buf, int buf\+\_\+len, uint8\+\_\+t lv\+\_\+tag, uint8\+\_\+t lv\+\_\+tag2)
\item 
static enum \textbf{ ns2\+\_\+cs} \textbf{ ns2\+\_\+create\+\_\+vc\+\_\+sns} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$$\ast$success, uint16\+\_\+t \textbf{ nsei})
\item 
enum \textbf{ ns2\+\_\+cs} \textbf{ ns2\+\_\+create\+\_\+vc} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, struct \textbf{ msgb} $\ast$\textbf{ msg}, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, const char $\ast$logname, struct \textbf{ msgb} $\ast$$\ast$reject, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$$\ast$success)
\begin{DoxyCompactList}\small\item\em Create a new NS-\/\+VC based on a [received] message. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect\+\_\+inactive} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Create, and connect an inactive, new IP-\/based NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Create, connect and activate a new IP-\/based NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect2} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t nsvci, enum \textbf{ gprs\+\_\+ns2\+\_\+dialect} dialect)
\begin{DoxyCompactList}\small\item\em Create, connect and activate a new IP-\/based NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+nsvc\+\_\+by\+\_\+sockaddr\+\_\+nse} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$sockaddr)
\begin{DoxyCompactList}\small\item\em Find NS-\/\+VC for given socket address. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns2\+\_\+nse\+\_\+foreach\+\_\+nsvc} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, \textbf{ gprs\+\_\+ns2\+\_\+foreach\+\_\+nsvc\+\_\+cb} cb, void $\ast$cb\+\_\+data)
\begin{DoxyCompactList}\small\item\em Iterate over all nsvc of a NS Entity and call the callback. \end{DoxyCompactList}\item 
int \textbf{ ns2\+\_\+recv\+\_\+vc} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc, struct \textbf{ msgb} $\ast$\textbf{ msg})
\begin{DoxyCompactList}\small\item\em Bottom-\/side entry-\/point for received NS PDU from the driver/bind. \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+nse\+\_\+data\+\_\+sum} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\item 
void \textbf{ ns2\+\_\+nse\+\_\+notify\+\_\+unblocked} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc, bool unblocked)
\begin{DoxyCompactList}\small\item\em Notify a nse about the change of a NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+instantiate} (void $\ast$ctx, \textbf{ osmo\+\_\+prim\+\_\+cb} cb, void $\ast$cb\+\_\+data)
\begin{DoxyCompactList}\small\item\em Create a new GPRS NS instance. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi)
\begin{DoxyCompactList}\small\item\em Destroy a NS Instance (including all its NSEs, binds, ...). \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em Start the NS-\/\+ALIVE FSM in all NS-\/\+VCs of given NSE. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+bind} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind)
\begin{DoxyCompactList}\small\item\em Destroy a given bind. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+binds} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi)
\item 
struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+bind\+\_\+by\+\_\+name} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, const char $\ast$\textbf{ name})
\begin{DoxyCompactList}\small\item\em Search for a bind with a unique name. \end{DoxyCompactList}\item 
enum \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+mode} \textbf{ ns2\+\_\+dialect\+\_\+to\+\_\+vc\+\_\+mode} (enum \textbf{ gprs\+\_\+ns2\+\_\+dialect} dialect)
\item 
static void \textbf{ add\+\_\+bind\+\_\+array} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$$\ast$array, struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, int size)
\item 
void \textbf{ ns2\+\_\+nse\+\_\+update\+\_\+mtu} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\item 
int \textbf{ ns2\+\_\+count\+\_\+transfer\+\_\+cap} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, uint16\+\_\+t \textbf{ bvci})
\begin{DoxyCompactList}\small\item\em calculate the transfer capabilities for a nse \end{DoxyCompactList}\item 
int \textbf{ ns2\+\_\+bind\+\_\+alloc} (struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, const char $\ast$\textbf{ name}, struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$$\ast$result)
\begin{DoxyCompactList}\small\item\em common allocation + low-\/level initialization of a bind. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static const struct \textbf{ tlv\+\_\+definition} \textbf{ ns\+\_\+att\+\_\+tlvdef1}
\item 
static const struct \textbf{ tlv\+\_\+definition} \textbf{ ns\+\_\+att\+\_\+tlvdef2}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+ns2\+\_\+cause\+\_\+strs} [$\,$]
\item 
static const struct \textbf{ rate\+\_\+ctr\+\_\+desc} \textbf{ ns\+\_\+ctr\+\_\+description} [$\,$]
\item 
static const struct \textbf{ rate\+\_\+ctr\+\_\+group\+\_\+desc} \textbf{ nse\+\_\+ctrg\+\_\+desc}
\item 
static const struct \textbf{ rate\+\_\+ctr\+\_\+group\+\_\+desc} \textbf{ nsvc\+\_\+ctrg\+\_\+desc}
\item 
static const struct \textbf{ osmo\+\_\+stat\+\_\+item\+\_\+desc} \textbf{ nsvc\+\_\+stat\+\_\+description} [$\,$]
\item 
static const struct \textbf{ osmo\+\_\+stat\+\_\+item\+\_\+group\+\_\+desc} \textbf{ nsvc\+\_\+statg\+\_\+desc}
\item 
const struct \textbf{ osmo\+\_\+stat\+\_\+item\+\_\+desc} \textbf{ nsbind\+\_\+stat\+\_\+description} [$\,$]
\item 
static const struct \textbf{ osmo\+\_\+stat\+\_\+item\+\_\+group\+\_\+desc} \textbf{ nsbind\+\_\+statg\+\_\+desc}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+ns2\+\_\+aff\+\_\+cause\+\_\+prim\+\_\+strs} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+ns2\+\_\+prim\+\_\+strs} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+ns2\+\_\+lltype\+\_\+strs} [$\,$]
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
GPRS Networks Service (NS) messages on the Gb interface. 

3GPP TS 08.\+16 version 8.\+0.\+1 Release 1999 / ETSI TS 101 299 V8.\+0.\+1 (2002-\/05) as well as its successor 3GPP TS 48.\+016