\doxysection{include/osmocom/gprs/gprs\+\_\+ns.h File Reference}
\label{gprs__ns_8h}\index{include/osmocom/gprs/gprs\_ns.h@{include/osmocom/gprs/gprs\_ns.h}}
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$netinet/in.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/linuxlist.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/timer.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/select.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/protocol/gsm\+\_\+08\+\_\+16.\+h$>$}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ gprs\+\_\+ns\+\_\+inst}
\begin{DoxyCompactList}\small\item\em An instance of the NS protocol stack. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc}
\begin{DoxyCompactList}\small\item\em Structure representing a single NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ ns\+\_\+signal\+\_\+data}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ NS\+\_\+\+TIMERS\+\_\+\+COUNT}~8
\item 
\#define \textbf{ NS\+\_\+\+TIMERS}~\char`\"{}(tns-\/block$\vert$tns-\/block-\/retries$\vert$tns-\/reset$\vert$tns-\/reset-\/retries$\vert$tns-\/test$\vert$tns-\/alive$\vert$tns-\/alive-\/retries$\vert$tsns-\/prov)\char`\"{}
\item 
\#define \textbf{ NS\+\_\+\+TIMERS\+\_\+\+HELP}
\item 
\#define \textbf{ NS\+\_\+\+ALLOC\+\_\+\+SIZE}~3072
\item 
\#define \textbf{ NS\+\_\+\+ALLOC\+\_\+\+HEADROOM}~20
\item 
\#define \textbf{ NSE\+\_\+\+S\+\_\+\+BLOCKED}~0x0001
\item 
\#define \textbf{ NSE\+\_\+\+S\+\_\+\+ALIVE}~0x0002
\item 
\#define \textbf{ NSE\+\_\+\+S\+\_\+\+RESET}~0x0004
\item 
\#define \textbf{ NS\+\_\+\+DESC\+\_\+B}(st)~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+BLOCKED} ? \char`\"{}BLOCKED\char`\"{} \+: \char`\"{}UNBLOCKED\char`\"{})
\item 
\#define \textbf{ NS\+\_\+\+DESC\+\_\+A}(st)~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+ALIVE} ? \char`\"{}ALIVE\char`\"{} \+: \char`\"{}DEAD\char`\"{})
\item 
\#define \textbf{ NS\+\_\+\+DESC\+\_\+R}(st)~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+RESET} ? \char`\"{}RESET\char`\"{} \+: \char`\"{}UNRESET\char`\"{})
\end{DoxyCompactItemize}
\doxysubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef int \textbf{ gprs\+\_\+ns\+\_\+cb\+\_\+t}(enum \textbf{ gprs\+\_\+ns\+\_\+evt} \textbf{ event}, struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint16\+\_\+t \textbf{ bvci})
\begin{DoxyCompactList}\small\item\em Osmocom GPRS callback function type. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ ns\+\_\+timeout} \{ \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+BLOCK}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+BLOCK\+\_\+\+RETRIES}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+RESET}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+RESET\+\_\+\+RETRIES}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+TEST}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE\+\_\+\+RETRIES}
, \newline
\textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}
 \}
\item 
enum \textbf{ gprs\+\_\+ns\+\_\+ll} \{ \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+UDP}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+E1}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+FR\+\_\+\+GRE}
 \}
\begin{DoxyCompactList}\small\item\em Osmocom NS link layer types. \end{DoxyCompactList}\item 
enum \textbf{ gprs\+\_\+ns\+\_\+evt} \{ \textbf{ GPRS\+\_\+\+NS\+\_\+\+EVT\+\_\+\+UNIT\+\_\+\+DATA}
 \}
\begin{DoxyCompactList}\small\item\em Osmoco NS events. \end{DoxyCompactList}\item 
enum \textbf{ gprs\+\_\+ns\+\_\+cs} \{ \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+CREATED}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+FOUND}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+REJECTED}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+SKIPPED}
, \newline
\textbf{ GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+ERROR}
 \}
\begin{DoxyCompactList}\small\item\em Osmocom NS VC create status. \end{DoxyCompactList}\item 
enum \textbf{ nsvc\+\_\+timer\+\_\+mode} \{ \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+TEST}
, \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+ALIVE}
, \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+RESET}
, \newline
\textbf{ \+\_\+\+NSVC\+\_\+\+TIMER\+\_\+\+NR}
, \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+TEST}
, \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+ALIVE}
, \newline
\textbf{ NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+RESET}
, \newline
\textbf{ \+\_\+\+NSVC\+\_\+\+TIMER\+\_\+\+NR}
 \}
\item 
enum \textbf{ signal\+\_\+ns} \{ \newline
\textbf{ S\+\_\+\+NS\+\_\+\+RESET}
, \newline
\textbf{ S\+\_\+\+NS\+\_\+\+BLOCK}
, \newline
\textbf{ S\+\_\+\+NS\+\_\+\+UNBLOCK}
, \newline
\textbf{ S\+\_\+\+NS\+\_\+\+ALIVE\+\_\+\+EXP}
, \newline
\textbf{ S\+\_\+\+NS\+\_\+\+REPLACED}
, \newline
\textbf{ S\+\_\+\+NS\+\_\+\+MISMATCH}
, \newline
\textbf{ S\+\_\+\+SNS\+\_\+\+CONFIGURED}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$ \textbf{ gprs\+\_\+ns\+\_\+instantiate} (\textbf{ gprs\+\_\+ns\+\_\+cb\+\_\+t} $\ast$cb, void $\ast$ctx)
\begin{DoxyCompactList}\small\item\em Create a new GPRS NS instance. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns\+\_\+close} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\item 
void \textbf{ gprs\+\_\+ns\+\_\+destroy} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\begin{DoxyCompactList}\small\item\em Destroy an entire NS instance. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+nsip\+\_\+listen} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\begin{DoxyCompactList}\small\item\em Create a listening socket for GPRS NS/\+UDP/\+IP. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+ns\+\_\+nsip\+\_\+connect} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, struct sockaddr\+\_\+in $\ast$dest, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Establish a NS connection (from the BSS) to the SGSN. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+ns\+\_\+nsip\+\_\+connect\+\_\+sns} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, struct sockaddr\+\_\+in $\ast$dest, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Establish a NS connection (from the BSS) to the SGSN using SNS auto-\/configuration. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+sendmsg} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, struct \textbf{ msgb} $\ast$\textbf{ msg})
\begin{DoxyCompactList}\small\item\em High-\/level function for transmitting a NS-\/\+UNITDATA messsage. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+rcvmsg} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, struct \textbf{ msgb} $\ast$\textbf{ msg}, struct sockaddr\+\_\+in $\ast$saddr, enum \textbf{ gprs\+\_\+ns\+\_\+ll} ll)
\begin{DoxyCompactList}\small\item\em Receive incoming NS message from underlying transport layer. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+alive} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Transmit a NS-\/\+ALIVE on a given NS-\/\+VC. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+alive\+\_\+ack} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Transmit a NS-\/\+ALIVE-\/\+ACK on a given NS-\/\+VC. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+reset} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, uint8\+\_\+t \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Transmit a NS-\/\+RESET on a given NSVC. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+block} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, uint8\+\_\+t \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Transmit a NS-\/\+BLOCK on a given NS-\/\+VC. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+unblock} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Transmit a NS-\/\+UNBLOCK on a given NS-\/\+VC. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+frgre\+\_\+listen} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+create2} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, uint16\+\_\+t nsvci, uint8\+\_\+t \textbf{ sig\+\_\+weight}, uint8\+\_\+t \textbf{ data\+\_\+weight})
\begin{DoxyCompactList}\small\item\em Create a new NS-\/\+VC (Virtual Circuit) within given instance. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+nsvc\+\_\+delete} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Delete given NS-\/\+VC. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+by\+\_\+nsei} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei})
\begin{DoxyCompactList}\small\item\em Lookup struct \doxyref{gprs\+\_\+nsvc}{p.}{structgprs__nsvc} based on NSEI. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+by\+\_\+nsvci} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, uint16\+\_\+t nsvci)
\begin{DoxyCompactList}\small\item\em Lookup struct \doxyref{gprs\+\_\+nsvc}{p.}{structgprs__nsvc} based on NSVCI. \end{DoxyCompactList}\item 
struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+by\+\_\+rem\+\_\+addr} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, const struct sockaddr\+\_\+in $\ast$sin)
\begin{DoxyCompactList}\small\item\em Lookup NS-\/\+VC based on specified remote peer socket addr. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+nsvc\+\_\+reset} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, uint8\+\_\+t \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Initiate a RESET procedure. \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns\+\_\+vty\+\_\+init} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\item 
const char $\ast$ \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str} (const struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\item 
char $\ast$ \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\item 
char $\ast$ \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str\+\_\+c} (const void $\ast$ctx, const struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\item 
void \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+copy} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, struct \textbf{ gprs\+\_\+nsvc} $\ast$other)
\item 
void \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+clear} (struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\item 
struct \textbf{ msgb} $\ast$ \textbf{ gprs\+\_\+ns\+\_\+msgb\+\_\+alloc} (void)
\item 
const char $\ast$ \textbf{ gprs\+\_\+ns\+\_\+cause\+\_\+str} (enum \textbf{ ns\+\_\+cause} \textbf{ cause})
\begin{DoxyCompactList}\small\item\em Obtain a human-\/readable string for NS cause value. \end{DoxyCompactList}\item 
void \textbf{ gprs\+\_\+ns\+\_\+set\+\_\+log\+\_\+ss} (int ss)
\item 
char $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+state\+\_\+append} (char $\ast$s, struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em Append the nsvc state to a talloc string. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+ns\+\_\+signal\+\_\+ns\+\_\+names} [$\,$]
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{gprs__ns_8h_a21dcafeca8157bed0188c7aa3c516bb3}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_ALLOC\_HEADROOM@{NS\_ALLOC\_HEADROOM}}
\index{NS\_ALLOC\_HEADROOM@{NS\_ALLOC\_HEADROOM}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_ALLOC\_HEADROOM}
{\footnotesize\ttfamily \#define NS\+\_\+\+ALLOC\+\_\+\+HEADROOM~20}

\mbox{\label{gprs__ns_8h_af5363aace93ed474cb25cd097313ae55}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_ALLOC\_SIZE@{NS\_ALLOC\_SIZE}}
\index{NS\_ALLOC\_SIZE@{NS\_ALLOC\_SIZE}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_ALLOC\_SIZE}
{\footnotesize\ttfamily \#define NS\+\_\+\+ALLOC\+\_\+\+SIZE~3072}

\mbox{\label{gprs__ns_8h_af601813cfa22b316bb8681b29a2b0bab}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_DESC\_A@{NS\_DESC\_A}}
\index{NS\_DESC\_A@{NS\_DESC\_A}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_DESC\_A}
{\footnotesize\ttfamily \#define NS\+\_\+\+DESC\+\_\+A(\begin{DoxyParamCaption}\item[{}]{st }\end{DoxyParamCaption})~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+ALIVE} ? \char`\"{}ALIVE\char`\"{} \+: \char`\"{}DEAD\char`\"{})}

\mbox{\label{gprs__ns_8h_a197ee2afe1666dce1146bcaa8a00df33}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_DESC\_B@{NS\_DESC\_B}}
\index{NS\_DESC\_B@{NS\_DESC\_B}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_DESC\_B}
{\footnotesize\ttfamily \#define NS\+\_\+\+DESC\+\_\+B(\begin{DoxyParamCaption}\item[{}]{st }\end{DoxyParamCaption})~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+BLOCKED} ? \char`\"{}BLOCKED\char`\"{} \+: \char`\"{}UNBLOCKED\char`\"{})}

\mbox{\label{gprs__ns_8h_aa179c38f7aa2575a5109fd2b40bfc3dc}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_DESC\_R@{NS\_DESC\_R}}
\index{NS\_DESC\_R@{NS\_DESC\_R}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_DESC\_R}
{\footnotesize\ttfamily \#define NS\+\_\+\+DESC\+\_\+R(\begin{DoxyParamCaption}\item[{}]{st }\end{DoxyParamCaption})~((st) \& \textbf{ NSE\+\_\+\+S\+\_\+\+RESET} ? \char`\"{}RESET\char`\"{} \+: \char`\"{}UNRESET\char`\"{})}

\mbox{\label{gprs__ns_8h_aedf7b460e889da2bb26efa3e858946c6}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TIMERS@{NS\_TIMERS}}
\index{NS\_TIMERS@{NS\_TIMERS}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_TIMERS}
{\footnotesize\ttfamily \#define NS\+\_\+\+TIMERS~\char`\"{}(tns-\/block$\vert$tns-\/block-\/retries$\vert$tns-\/reset$\vert$tns-\/reset-\/retries$\vert$tns-\/test$\vert$tns-\/alive$\vert$tns-\/alive-\/retries$\vert$tsns-\/prov)\char`\"{}}

\mbox{\label{gprs__ns_8h_a8893f811b32e1d3d8b81a043e90a1c2d}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TIMERS\_COUNT@{NS\_TIMERS\_COUNT}}
\index{NS\_TIMERS\_COUNT@{NS\_TIMERS\_COUNT}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_TIMERS\_COUNT}
{\footnotesize\ttfamily \#define NS\+\_\+\+TIMERS\+\_\+\+COUNT~8}

\mbox{\label{gprs__ns_8h_a57477386d3c188b4cce27f3cec0ed5aa}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TIMERS\_HELP@{NS\_TIMERS\_HELP}}
\index{NS\_TIMERS\_HELP@{NS\_TIMERS\_HELP}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NS\_TIMERS\_HELP}
{\footnotesize\ttfamily \#define NS\+\_\+\+TIMERS\+\_\+\+HELP}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}(un)blocking Timer (Tns-\/block) timeout\(\backslash\)n"{}}              \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}(un)blocking Timer (Tns-\/block) number of retries\(\backslash\)n"{}}    \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Reset Timer (Tns-\/reset) timeout\(\backslash\)n"{}}                     \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Reset Timer (Tns-\/reset) number of retries\(\backslash\)n"{}}           \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Test Timer (Tns-\/test) timeout\(\backslash\)n"{}}                       \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Alive Timer (Tns-\/alive) timeout\(\backslash\)n"{}}                     \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Alive Timer (Tns-\/alive) number of retries\(\backslash\)n"{}}           \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}SNS Provision Timer (Tsns-\/prov) timeout\(\backslash\)n"{}}}

\end{DoxyCode}
\mbox{\label{gprs__ns_8h_a6301bf5438b51498dd61144880b487bc}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NSE\_S\_ALIVE@{NSE\_S\_ALIVE}}
\index{NSE\_S\_ALIVE@{NSE\_S\_ALIVE}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NSE\_S\_ALIVE}
{\footnotesize\ttfamily \#define NSE\+\_\+\+S\+\_\+\+ALIVE~0x0002}

\mbox{\label{gprs__ns_8h_a2710f3dc87f800f2b6182a339043fe6a}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NSE\_S\_BLOCKED@{NSE\_S\_BLOCKED}}
\index{NSE\_S\_BLOCKED@{NSE\_S\_BLOCKED}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NSE\_S\_BLOCKED}
{\footnotesize\ttfamily \#define NSE\+\_\+\+S\+\_\+\+BLOCKED~0x0001}

\mbox{\label{gprs__ns_8h_ab3e4e8ac0fd5bc7bdc3d4889e9bc032d}} 
\index{gprs\_ns.h@{gprs\_ns.h}!NSE\_S\_RESET@{NSE\_S\_RESET}}
\index{NSE\_S\_RESET@{NSE\_S\_RESET}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{NSE\_S\_RESET}
{\footnotesize\ttfamily \#define NSE\+\_\+\+S\+\_\+\+RESET~0x0004}



\doxysubsection{Typedef Documentation}
\mbox{\label{gprs__ns_8h_ab674581cacde83373846bb6f6cce80ed}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_cb\_t@{gprs\_ns\_cb\_t}}
\index{gprs\_ns\_cb\_t@{gprs\_ns\_cb\_t}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_cb\_t}
{\footnotesize\ttfamily typedef int gprs\+\_\+ns\+\_\+cb\+\_\+t(enum \textbf{ gprs\+\_\+ns\+\_\+evt} \textbf{ event}, struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint16\+\_\+t \textbf{ bvci})}



Osmocom GPRS callback function type. 



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_cs@{gprs\_ns\_cs}}
\index{gprs\_ns\_cs@{gprs\_ns\_cs}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_cs}
{\footnotesize\ttfamily enum \textbf{ gprs\+\_\+ns\+\_\+cs}}



Osmocom NS VC create status. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_CS\_CREATED@{GPRS\_NS\_CS\_CREATED}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_CS\_CREATED@{GPRS\_NS\_CS\_CREATED}}}\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555a454ee63f041bc11653cad28053433731}} 
GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+CREATED&A NSVC object has been created. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_CS\_FOUND@{GPRS\_NS\_CS\_FOUND}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_CS\_FOUND@{GPRS\_NS\_CS\_FOUND}}}\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555a296fc67d238f06a39fbfd972cf3f91e9}} 
GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+FOUND&A NSVC object has been found. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_CS\_REJECTED@{GPRS\_NS\_CS\_REJECTED}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_CS\_REJECTED@{GPRS\_NS\_CS\_REJECTED}}}\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555a5e62149e2a2f158d1f9597649b5513c1}} 
GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+REJECTED&Rejected and answered message. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_CS\_SKIPPED@{GPRS\_NS\_CS\_SKIPPED}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_CS\_SKIPPED@{GPRS\_NS\_CS\_SKIPPED}}}\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555a98489970daba731bd7b74d5e30344462}} 
GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+SKIPPED&Skipped message. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_CS\_ERROR@{GPRS\_NS\_CS\_ERROR}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_CS\_ERROR@{GPRS\_NS\_CS\_ERROR}}}\mbox{\label{gprs__ns_8h_a1f0dd4569e3f6485b92a3b07614f1555a9b6c044f121a1356dc5d478d445761b1}} 
GPRS\+\_\+\+NS\+\_\+\+CS\+\_\+\+ERROR&Failed to process message. \\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns_8h_a8507d6b23c322e80fdf2357817ae0183}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_evt@{gprs\_ns\_evt}}
\index{gprs\_ns\_evt@{gprs\_ns\_evt}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_evt}
{\footnotesize\ttfamily enum \textbf{ gprs\+\_\+ns\+\_\+evt}}



Osmoco NS events. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_EVT\_UNIT\_DATA@{GPRS\_NS\_EVT\_UNIT\_DATA}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_EVT\_UNIT\_DATA@{GPRS\_NS\_EVT\_UNIT\_DATA}}}\mbox{\label{gprs__ns_8h_a8507d6b23c322e80fdf2357817ae0183a3676520d51ee76c9ddeb06180755c35f}} 
GPRS\+\_\+\+NS\+\_\+\+EVT\+\_\+\+UNIT\+\_\+\+DATA&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns_8h_aa01f7a112f0ef8c85ab554ca8721d7ee}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_ll@{gprs\_ns\_ll}}
\index{gprs\_ns\_ll@{gprs\_ns\_ll}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_ll}
{\footnotesize\ttfamily enum \textbf{ gprs\+\_\+ns\+\_\+ll}}



Osmocom NS link layer types. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_LL\_UDP@{GPRS\_NS\_LL\_UDP}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_LL\_UDP@{GPRS\_NS\_LL\_UDP}}}\mbox{\label{gprs__ns_8h_aa01f7a112f0ef8c85ab554ca8721d7eeaa05b54b1d41aed29290d6da1c73f6bed}} 
GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+UDP&NS/\+UDP/\+IP. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_LL\_E1@{GPRS\_NS\_LL\_E1}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_LL\_E1@{GPRS\_NS\_LL\_E1}}}\mbox{\label{gprs__ns_8h_aa01f7a112f0ef8c85ab554ca8721d7eeabdc236710c7397159447be611a898778}} 
GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+E1&NS/\+E1. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_NS\_LL\_FR\_GRE@{GPRS\_NS\_LL\_FR\_GRE}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!GPRS\_NS\_LL\_FR\_GRE@{GPRS\_NS\_LL\_FR\_GRE}}}\mbox{\label{gprs__ns_8h_aa01f7a112f0ef8c85ab554ca8721d7eea4a2f68b7db85ee5133876d7719b9b7d2}} 
GPRS\+\_\+\+NS\+\_\+\+LL\+\_\+\+FR\+\_\+\+GRE&NS/\+FR/\+GRE/\+IP. \\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0}} 
\index{gprs\_ns.h@{gprs\_ns.h}!ns\_timeout@{ns\_timeout}}
\index{ns\_timeout@{ns\_timeout}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{ns\_timeout}
{\footnotesize\ttfamily enum \textbf{ ns\+\_\+timeout}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_BLOCK@{NS\_TOUT\_TNS\_BLOCK}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_BLOCK@{NS\_TOUT\_TNS\_BLOCK}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a1b88b04adf65281e7bcf29402e1f020b}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+BLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_BLOCK\_RETRIES@{NS\_TOUT\_TNS\_BLOCK\_RETRIES}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_BLOCK\_RETRIES@{NS\_TOUT\_TNS\_BLOCK\_RETRIES}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a693b33132aa0f6212d78d1376580fb1b}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+BLOCK\+\_\+\+RETRIES&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_RESET@{NS\_TOUT\_TNS\_RESET}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_RESET@{NS\_TOUT\_TNS\_RESET}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a48736cfedf1e8f0bd435dc0cc61d9a6f}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_RESET\_RETRIES@{NS\_TOUT\_TNS\_RESET\_RETRIES}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_RESET\_RETRIES@{NS\_TOUT\_TNS\_RESET\_RETRIES}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0aba64fc2c5555e6aff03cac04fc8c2c03}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+RESET\+\_\+\+RETRIES&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_TEST@{NS\_TOUT\_TNS\_TEST}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_TEST@{NS\_TOUT\_TNS\_TEST}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a76893fc8b4f6b3c5f27702a0a1675d78}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+TEST&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_ALIVE@{NS\_TOUT\_TNS\_ALIVE}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_ALIVE@{NS\_TOUT\_TNS\_ALIVE}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0ad767683eaf1ba4f4b9ce9ff1a45a0947}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TNS\_ALIVE\_RETRIES@{NS\_TOUT\_TNS\_ALIVE\_RETRIES}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TNS\_ALIVE\_RETRIES@{NS\_TOUT\_TNS\_ALIVE\_RETRIES}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a9336ff01b118c798994367338341a8e4}} 
NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE\+\_\+\+RETRIES&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NS\_TOUT\_TSNS\_PROV@{NS\_TOUT\_TSNS\_PROV}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NS\_TOUT\_TSNS\_PROV@{NS\_TOUT\_TSNS\_PROV}}}\mbox{\label{gprs__ns_8h_ad3688f8ecfe7122c092b4bc4a9c60da0a0e83fee5874c82abdf5158ee09b7081f}} 
NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71}} 
\index{gprs\_ns.h@{gprs\_ns.h}!nsvc\_timer\_mode@{nsvc\_timer\_mode}}
\index{nsvc\_timer\_mode@{nsvc\_timer\_mode}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{nsvc\_timer\_mode}
{\footnotesize\ttfamily enum \textbf{ nsvc\+\_\+timer\+\_\+mode}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_TEST@{NSVC\_TIMER\_TNS\_TEST}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_TEST@{NSVC\_TIMER\_TNS\_TEST}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a71d606ca3b510246d183acfab5ca8b11}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+TEST&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_ALIVE@{NSVC\_TIMER\_TNS\_ALIVE}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_ALIVE@{NSVC\_TIMER\_TNS\_ALIVE}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a1efef849296320b862e0c3c5b1b66376}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+ALIVE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_RESET@{NSVC\_TIMER\_TNS\_RESET}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_RESET@{NSVC\_TIMER\_TNS\_RESET}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a0d8bd1932d05fb987203fe77d2ef5d7e}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{\_NSVC\_TIMER\_NR@{\_NSVC\_TIMER\_NR}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!\_NSVC\_TIMER\_NR@{\_NSVC\_TIMER\_NR}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a9f9f3d4880e284c257e372128100facf}} 
\+\_\+\+NSVC\+\_\+\+TIMER\+\_\+\+NR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_TEST@{NSVC\_TIMER\_TNS\_TEST}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_TEST@{NSVC\_TIMER\_TNS\_TEST}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a71d606ca3b510246d183acfab5ca8b11}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+TEST&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_ALIVE@{NSVC\_TIMER\_TNS\_ALIVE}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_ALIVE@{NSVC\_TIMER\_TNS\_ALIVE}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a1efef849296320b862e0c3c5b1b66376}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+ALIVE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NSVC\_TIMER\_TNS\_RESET@{NSVC\_TIMER\_TNS\_RESET}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!NSVC\_TIMER\_TNS\_RESET@{NSVC\_TIMER\_TNS\_RESET}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a0d8bd1932d05fb987203fe77d2ef5d7e}} 
NSVC\+\_\+\+TIMER\+\_\+\+TNS\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{\_NSVC\_TIMER\_NR@{\_NSVC\_TIMER\_NR}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!\_NSVC\_TIMER\_NR@{\_NSVC\_TIMER\_NR}}}\mbox{\label{gprs__ns_8h_a22fa3f1397f5263438aefa3a6fd0fc71a9f9f3d4880e284c257e372128100facf}} 
\+\_\+\+NSVC\+\_\+\+TIMER\+\_\+\+NR&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52af}} 
\index{gprs\_ns.h@{gprs\_ns.h}!signal\_ns@{signal\_ns}}
\index{signal\_ns@{signal\_ns}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{signal\_ns}
{\footnotesize\ttfamily enum \textbf{ signal\+\_\+ns}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_RESET@{S\_NS\_RESET}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_RESET@{S\_NS\_RESET}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afaa6855ba31959c6ca18699e9e51f0cb74}} 
S\+\_\+\+NS\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_BLOCK@{S\_NS\_BLOCK}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_BLOCK@{S\_NS\_BLOCK}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afaa7d2b2e6ab2d668273e1f0aff80b8667}} 
S\+\_\+\+NS\+\_\+\+BLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_UNBLOCK@{S\_NS\_UNBLOCK}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_UNBLOCK@{S\_NS\_UNBLOCK}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afa7dc32d35cab15e9354b2cc82656a2b86}} 
S\+\_\+\+NS\+\_\+\+UNBLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_ALIVE\_EXP@{S\_NS\_ALIVE\_EXP}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_ALIVE\_EXP@{S\_NS\_ALIVE\_EXP}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afa9c223d46bece3021f9d2d9521dbf87bb}} 
S\+\_\+\+NS\+\_\+\+ALIVE\+\_\+\+EXP&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_REPLACED@{S\_NS\_REPLACED}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_REPLACED@{S\_NS\_REPLACED}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afabdb8825b637f16d43c982d440fe5e66f}} 
S\+\_\+\+NS\+\_\+\+REPLACED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_NS\_MISMATCH@{S\_NS\_MISMATCH}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_NS\_MISMATCH@{S\_NS\_MISMATCH}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afa73532e3748a4a43d7687d91b89b86df7}} 
S\+\_\+\+NS\+\_\+\+MISMATCH&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{S\_SNS\_CONFIGURED@{S\_SNS\_CONFIGURED}!gprs\_ns.h@{gprs\_ns.h}}\index{gprs\_ns.h@{gprs\_ns.h}!S\_SNS\_CONFIGURED@{S\_SNS\_CONFIGURED}}}\mbox{\label{gprs__ns_8h_a52310fead5e916fd47e781c0759a52afa5f2a03470347a1dc04603cd0427b3fb1}} 
S\+\_\+\+SNS\+\_\+\+CONFIGURED&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{gprs__ns_8h_a5a54120379f9a7be3948b65e7c5abb02}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_frgre\_listen@{gprs\_ns\_frgre\_listen}}
\index{gprs\_ns\_frgre\_listen@{gprs\_ns\_frgre\_listen}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_frgre\_listen()}
{\footnotesize\ttfamily int gprs\+\_\+ns\+\_\+frgre\+\_\+listen (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$}]{nsi }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+fd\+::cb}, \textbf{ osmo\+\_\+fd\+::data}, \textbf{ DNS}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::enabled}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::fd}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::frgre}, \textbf{ IPPROTO\+\_\+\+GRE}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::local\+\_\+ip}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGP}, \textbf{ nsfrgre\+\_\+fd\+\_\+cb()}, \textbf{ osmo\+\_\+htonl}, \textbf{ OSMO\+\_\+\+SOCK\+\_\+\+F\+\_\+\+BIND}, and \textbf{ osmo\+\_\+sock\+\_\+init\+\_\+ofd()}.

\mbox{\label{gprs__ns_8h_a70fb3061677b2752572e3cc380dfeeae}} 
\index{gprs\_ns.h@{gprs\_ns.h}!gprs\_ns\_vty\_init@{gprs\_ns\_vty\_init}}
\index{gprs\_ns\_vty\_init@{gprs\_ns\_vty\_init}!gprs\_ns.h@{gprs\_ns.h}}
\doxysubsubsection{gprs\_ns\_vty\_init()}
{\footnotesize\ttfamily int gprs\+\_\+ns\+\_\+vty\+\_\+init (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$}]{nsi }\end{DoxyParamCaption})}



References \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CONFIG\+\_\+\+NODE}, \textbf{ config\+\_\+write\+\_\+ns()}, \textbf{ ENABLE\+\_\+\+NODE}, \textbf{ install\+\_\+lib\+\_\+element()}, \textbf{ install\+\_\+lib\+\_\+element\+\_\+ve()}, \textbf{ install\+\_\+node()}, \textbf{ L\+\_\+\+NS\+\_\+\+NODE}, \textbf{ ns\+\_\+node}, \textbf{ gprs\+\_\+nsvc\+::nsi}, and \textbf{ vty\+\_\+nsi}.

