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


NS Sub-\/\+Network Service Protocol implementation 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.  


{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$netinet/in.\+h$>$}\newline
{\ttfamily \#include $<$arpa/inet.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/fsm.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/socket.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/sockaddr\+\_\+str.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/tlv.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+ns2.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/protocol/gsm\+\_\+08\+\_\+16.\+h$>$}\newline
{\ttfamily \#include \char`\"{}gprs\+\_\+ns2\+\_\+internal.\+h\char`\"{}}\newline
{\ttfamily \#include $<$osmocom/vty/vty.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/misc.\+h$>$}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ sns\+\_\+endpoint}
\item 
struct \textbf{ ns2\+\_\+sns\+\_\+bind}
\item 
struct \textbf{ ns2\+\_\+sns\+\_\+procedure}
\item 
struct \textbf{ ns2\+\_\+sns\+\_\+elems}
\item 
struct \textbf{ ns2\+\_\+sns\+\_\+state}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ S}(x)~(1 $<$$<$ (x))
\item 
\#define \textbf{ GPRS\+\_\+\+SNS\+\_\+\+FLAG\+\_\+\+KEEP\+\_\+\+SELECT\+\_\+\+ENDPOINT\+\_\+\+ORDER}~(void $\ast$) 1
\item 
\#define \textbf{ sns\+\_\+failed}(fi,  reason)~ \textbf{ \+\_\+sns\+\_\+failed}(fi, reason, \+\_\+\+\_\+\+FILE\+\_\+\+\_\+, \+\_\+\+\_\+\+LINE\+\_\+\+\_\+)
\item 
\#define \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+data}(elems)~\textbf{ ip4\+\_\+weight\+\_\+sum}(elems, true)
\item 
\#define \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+sig}(elems)~\textbf{ ip4\+\_\+weight\+\_\+sum}(elems, false)
\item 
\#define \textbf{ ip6\+\_\+weight\+\_\+sum\+\_\+data}(elems)~\textbf{ ip6\+\_\+weight\+\_\+sum}(elems, true)
\item 
\#define \textbf{ ip6\+\_\+weight\+\_\+sum\+\_\+sig}(elems)~\textbf{ ip6\+\_\+weight\+\_\+sum}(elems, false)
\item 
\#define \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+data}(elems)~\textbf{ ip46\+\_\+weight\+\_\+sum}(elems, true)
\item 
\#define \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+sig}(elems)~\textbf{ ip46\+\_\+weight\+\_\+sum}(elems, false)
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ ns2\+\_\+sns\+\_\+role} \{ \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}
 \}
\item 
enum \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+state} \{ \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG\+\_\+\+ACK}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SIZE}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+BSS}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+SGSN}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}
 \}
\item 
enum \textbf{ sns\+\_\+procedure} \{ \newline
\textbf{ SNS\+\_\+\+PROC\+\_\+\+NONE}
, \newline
\textbf{ SNS\+\_\+\+PROC\+\_\+\+ADD}
, \newline
\textbf{ SNS\+\_\+\+PROC\+\_\+\+DEL}
, \newline
\textbf{ SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$ \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static void \textbf{ \+\_\+sns\+\_\+failed} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const char $\ast$reason, const char $\ast$\textbf{ file}, int line)
\item 
static int \textbf{ ip4\+\_\+weight\+\_\+sum} (const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, bool \textbf{ data\+\_\+weight})
\item 
static int \textbf{ ip6\+\_\+weight\+\_\+sum} (const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, bool \textbf{ data\+\_\+weight})
\item 
static int \textbf{ ip46\+\_\+weight\+\_\+sum} (const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, bool \textbf{ data\+\_\+weight})
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ nsvc\+\_\+by\+\_\+ip6\+\_\+elem} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
const struct \textbf{ osmo\+\_\+sockaddr} $\ast$ \textbf{ gprs\+\_\+ns2\+\_\+nse\+\_\+sns\+\_\+remote} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em Return the initial SNS remote socket address. \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+sns\+\_\+replace\+\_\+nsvc} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc)
\begin{DoxyCompactList}\small\item\em called when a nsvc is beeing freed or the nsvc became dead \end{DoxyCompactList}\item 
static void \textbf{ ns2\+\_\+clear\+\_\+elems} (struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems)
\item 
static void \textbf{ ns2\+\_\+clear\+\_\+procedures} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss)
\item 
static void \textbf{ ns2\+\_\+vc\+\_\+create\+\_\+ip} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote, uint8\+\_\+t \textbf{ sig\+\_\+weight}, uint8\+\_\+t \textbf{ data\+\_\+weight})
\item 
static void \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip4} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static void \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip6} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ \textbf{ nsvc\+\_\+for\+\_\+bind\+\_\+and\+\_\+remote} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$remote)
\item 
static int \textbf{ create\+\_\+missing\+\_\+nsvcs} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static int \textbf{ add\+\_\+ip4\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ remove\+\_\+ip4\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ update\+\_\+ip4\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ add\+\_\+ip6\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static int \textbf{ remove\+\_\+ip6\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static int \textbf{ update\+\_\+ip6\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static int \textbf{ remove\+\_\+bind\+\_\+elem} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind)
\item 
static int \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static int \textbf{ do\+\_\+sns\+\_\+delete} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static int \textbf{ do\+\_\+sns\+\_\+add} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+unconfigured} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+count\+\_\+num\+\_\+local\+\_\+ep} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, int ip\+\_\+proto)
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+copy\+\_\+local\+\_\+endpoints} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+choose\+\_\+next\+\_\+bind} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+bss} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+bss\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static int \textbf{ ns\+\_\+sns\+\_\+configured\+\_\+timeout} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static int \textbf{ ns\+\_\+sns\+\_\+append\+\_\+remote\+\_\+eps} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+delete} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+change} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ create\+\_\+nsvc\+\_\+for\+\_\+new\+\_\+sbind} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+fsm\+\_\+bss\+\_\+timer\+\_\+cb} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ \textbf{ ns2\+\_\+get\+\_\+sbind\+\_\+ip4\+\_\+entry} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$endpoints)
\item 
static struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ \textbf{ ns2\+\_\+get\+\_\+sbind\+\_\+ip6\+\_\+entry} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$endpoints)
\item 
static int \textbf{ ns2\+\_\+update\+\_\+weight\+\_\+entry} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$endpoints)
\item 
static void \textbf{ ns2\+\_\+add\+\_\+procedure} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind, enum \textbf{ sns\+\_\+procedure} procedure\+\_\+type)
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+add\+\_\+elements} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$sbind, struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$elems)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+bss\+\_\+valid\+\_\+configuration} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ ns2\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+alloc} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const char $\ast$id)
\begin{DoxyCompactList}\small\item\em Allocate an IP-\/\+SNS FSM for the BSS side. \end{DoxyCompactList}\item 
int \textbf{ ns2\+\_\+sns\+\_\+rx} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc, struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\begin{DoxyCompactList}\small\item\em main entry point for receiving SNS messages from the network. \end{DoxyCompactList}\item 
static void \textbf{ vty\+\_\+dump\+\_\+sns\+\_\+ip4} (struct \textbf{ vty} $\ast$\textbf{ vty}, const char $\ast$prefix, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static void \textbf{ vty\+\_\+dump\+\_\+sns\+\_\+ip6} (struct \textbf{ vty} $\ast$\textbf{ vty}, const char $\ast$prefix, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ip6)
\item 
void \textbf{ ns2\+\_\+sns\+\_\+dump\+\_\+vty} (struct \textbf{ vty} $\ast$\textbf{ vty}, const char $\ast$prefix, const struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, bool stats)
\begin{DoxyCompactList}\small\item\em Dump the IP-\/\+SNS state to a vty. \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+sns\+\_\+write\+\_\+vty} (struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em write IP-\/\+SNS to a vty \end{DoxyCompactList}\item 
static struct \textbf{ sns\+\_\+endpoint} $\ast$ \textbf{ ns2\+\_\+get\+\_\+sns\+\_\+endpoint} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$state, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$saddr)
\item 
int \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+endpoint} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$saddr)
\begin{DoxyCompactList}\small\item\em gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+endpoint \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+endpoint} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const struct \textbf{ osmo\+\_\+sockaddr} $\ast$saddr)
\begin{DoxyCompactList}\small\item\em gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+endpoint \end{DoxyCompactList}\item 
int \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+count} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse)
\begin{DoxyCompactList}\small\item\em gprs\+\_\+ns2\+\_\+sns\+\_\+count \end{DoxyCompactList}\item 
void \textbf{ ns2\+\_\+sns\+\_\+notify\+\_\+alive} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$nsvc, bool alive)
\item 
int \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+bind} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind)
\item 
int \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+bind} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind)
\item 
void \textbf{ ns2\+\_\+sns\+\_\+update\+\_\+weights} (struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$bind)
\item 
static void \textbf{ ns2\+\_\+clear\+\_\+sgsn} (struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$gss, struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$size\+\_\+nsvc)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+unconfigured\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+unconfigured} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static int \textbf{ ns2\+\_\+sns\+\_\+fsm\+\_\+sgsn\+\_\+timer\+\_\+cb} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static void \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm\+\_\+alloc} (struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$nse, const char $\ast$id)
\begin{DoxyCompactList}\small\item\em Allocate an IP-\/\+SNS FSM for the SGSN side. \end{DoxyCompactList}\item 
static \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+} ((constructor))
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ gprs\+\_\+sns\+\_\+event\+\_\+names} [$\,$]
\item 
static const struct \textbf{ osmo\+\_\+fsm\+\_\+state} \textbf{ ns2\+\_\+sns\+\_\+bss\+\_\+states} [$\,$]
\item 
static struct \textbf{ osmo\+\_\+fsm} \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+bss\+\_\+fsm}
\item 
static const struct \textbf{ osmo\+\_\+fsm\+\_\+state} \textbf{ ns2\+\_\+sns\+\_\+sgsn\+\_\+states} [$\,$]
\item 
static struct \textbf{ osmo\+\_\+fsm} \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
NS Sub-\/\+Network Service Protocol implementation 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. 



\doxysubsection{Macro Definition Documentation}
\mbox{\label{gprs__ns2__sns_8c_a064e3344c4a91d2513766f73e0dcb67c}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_FLAG\_KEEP\_SELECT\_ENDPOINT\_ORDER@{GPRS\_SNS\_FLAG\_KEEP\_SELECT\_ENDPOINT\_ORDER}}
\index{GPRS\_SNS\_FLAG\_KEEP\_SELECT\_ENDPOINT\_ORDER@{GPRS\_SNS\_FLAG\_KEEP\_SELECT\_ENDPOINT\_ORDER}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{GPRS\_SNS\_FLAG\_KEEP\_SELECT\_ENDPOINT\_ORDER}
{\footnotesize\ttfamily \#define GPRS\+\_\+\+SNS\+\_\+\+FLAG\+\_\+\+KEEP\+\_\+\+SELECT\+\_\+\+ENDPOINT\+\_\+\+ORDER~(void $\ast$) 1}

\mbox{\label{gprs__ns2__sns_8c_aed013901bc1e8ebd5f870616d8f9561d}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip46\_weight\_sum\_data@{ip46\_weight\_sum\_data}}
\index{ip46\_weight\_sum\_data@{ip46\_weight\_sum\_data}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip46\_weight\_sum\_data}
{\footnotesize\ttfamily \#define ip46\+\_\+weight\+\_\+sum\+\_\+data(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip46\+\_\+weight\+\_\+sum}(elems, true)}

\mbox{\label{gprs__ns2__sns_8c_ac1d7959e1c1ab1b652a8028cabd9f5de}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip46\_weight\_sum\_sig@{ip46\_weight\_sum\_sig}}
\index{ip46\_weight\_sum\_sig@{ip46\_weight\_sum\_sig}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip46\_weight\_sum\_sig}
{\footnotesize\ttfamily \#define ip46\+\_\+weight\+\_\+sum\+\_\+sig(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip46\+\_\+weight\+\_\+sum}(elems, false)}

\mbox{\label{gprs__ns2__sns_8c_af1cd8a9c0f03ec758d0e35ea06374bb6}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip4\_weight\_sum\_data@{ip4\_weight\_sum\_data}}
\index{ip4\_weight\_sum\_data@{ip4\_weight\_sum\_data}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip4\_weight\_sum\_data}
{\footnotesize\ttfamily \#define ip4\+\_\+weight\+\_\+sum\+\_\+data(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip4\+\_\+weight\+\_\+sum}(elems, true)}

\mbox{\label{gprs__ns2__sns_8c_a37f27d41db3ba7a61f89faf591c82e7d}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip4\_weight\_sum\_sig@{ip4\_weight\_sum\_sig}}
\index{ip4\_weight\_sum\_sig@{ip4\_weight\_sum\_sig}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip4\_weight\_sum\_sig}
{\footnotesize\ttfamily \#define ip4\+\_\+weight\+\_\+sum\+\_\+sig(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip4\+\_\+weight\+\_\+sum}(elems, false)}

\mbox{\label{gprs__ns2__sns_8c_a0e53ff4841033c336d19ec7c76a17e1e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip6\_weight\_sum\_data@{ip6\_weight\_sum\_data}}
\index{ip6\_weight\_sum\_data@{ip6\_weight\_sum\_data}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip6\_weight\_sum\_data}
{\footnotesize\ttfamily \#define ip6\+\_\+weight\+\_\+sum\+\_\+data(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip6\+\_\+weight\+\_\+sum}(elems, true)}

\mbox{\label{gprs__ns2__sns_8c_a598f5c7ab54bdb9753b83ee069448c55}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip6\_weight\_sum\_sig@{ip6\_weight\_sum\_sig}}
\index{ip6\_weight\_sum\_sig@{ip6\_weight\_sum\_sig}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip6\_weight\_sum\_sig}
{\footnotesize\ttfamily \#define ip6\+\_\+weight\+\_\+sum\+\_\+sig(\begin{DoxyParamCaption}\item[{}]{elems }\end{DoxyParamCaption})~\textbf{ ip6\+\_\+weight\+\_\+sum}(elems, false)}

\mbox{\label{gprs__ns2__sns_8c_ac4a3ed3432929804c708f7760fb79e28}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!S@{S}}
\index{S@{S}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{S}
{\footnotesize\ttfamily \#define S(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~(1 $<$$<$ (x))}

\mbox{\label{gprs__ns2__sns_8c_acba9feffeb2bd4ed5993e326b461bd62}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!sns\_failed@{sns\_failed}}
\index{sns\_failed@{sns\_failed}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{sns\_failed}
{\footnotesize\ttfamily \#define sns\+\_\+failed(\begin{DoxyParamCaption}\item[{}]{fi,  }\item[{}]{reason }\end{DoxyParamCaption})~ \textbf{ \+\_\+sns\+\_\+failed}(fi, reason, \+\_\+\+\_\+\+FILE\+\_\+\+\_\+, \+\_\+\+\_\+\+LINE\+\_\+\+\_\+)}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_sns\_bss\_state@{gprs\_sns\_bss\_state}}
\index{gprs\_sns\_bss\_state@{gprs\_sns\_bss\_state}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_sns\_bss\_state}
{\footnotesize\ttfamily enum \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+state}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba656d8aae7c7ee15097186562e236ecf8}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_BSS\_SIZE@{GPRS\_SNS\_ST\_BSS\_SIZE}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_BSS\_SIZE@{GPRS\_SNS\_ST\_BSS\_SIZE}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba1ae4b46e89af36fe8e2136c54c9b7857}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE&SNS-\/\+SIZE procedure ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS@{GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS@{GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba2f9213da0e81cec489e3302ecbb8ae74}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS&SNS-\/\+CONFIG procedure (BSS-\/$>$SGSN) ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba77621d4cc27bb4a12d4673e5649bae5a}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN&SNS-\/\+CONFIG procedure (SGSN-\/$>$BSS) ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba2ad6975f70b9c84279439b80acbe5056}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba39d93f070be172682f101f75164b31fd}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27bac901a06516f76fd1c39c355f75cb5734}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_LOCAL\_PROCEDURE@{GPRS\_SNS\_ST\_LOCAL\_PROCEDURE}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_LOCAL\_PROCEDURE@{GPRS\_SNS\_ST\_LOCAL\_PROCEDURE}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27bae492b8e35f6c6e0f69d401c781d9d1e2}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE&in process of a ADD/\+DEL/\+CHANGE procedure towards SGSN (BSS-\/$>$SGSN) \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba656d8aae7c7ee15097186562e236ecf8}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_SIZE@{GPRS\_SNS\_ST\_SIZE}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_SIZE@{GPRS\_SNS\_ST\_SIZE}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27badd224a13667c4a7cf52b9f4a04b7d594}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SIZE&SNS-\/\+SIZE procedure ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_CONFIG\_BSS@{GPRS\_SNS\_ST\_CONFIG\_BSS}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_CONFIG\_BSS@{GPRS\_SNS\_ST\_CONFIG\_BSS}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba4d85b65c8f4bdf25dd0ee5cea6ea5b26}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+BSS&SNS-\/\+CONFIG procedure (BSS-\/$>$SGSN) ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_CONFIG\_SGSN}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_CONFIG\_SGSN}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27bafc4c5c8849aa681d0fc02d4188a2e7ab}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+SGSN&SNS-\/\+CONFIG procedure (SGSN-\/$>$BSS) ongoing. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}}}\mbox{\label{gprs__ns2__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba2ad6975f70b9c84279439b80acbe5056}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns2__sns_8c_a26e7b7bdcdd7b230ec2d2c6b94ee32db}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_role@{ns2\_sns\_role}}
\index{ns2\_sns\_role@{ns2\_sns\_role}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_role}
{\footnotesize\ttfamily enum \textbf{ ns2\+\_\+sns\+\_\+role}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ROLE\_BSS@{GPRS\_SNS\_ROLE\_BSS}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ROLE\_BSS@{GPRS\_SNS\_ROLE\_BSS}}}\mbox{\label{gprs__ns2__sns_8c_a26e7b7bdcdd7b230ec2d2c6b94ee32dba8db2f068864e145e9da4a0fdd3df4398}} 
GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ROLE\_SGSN@{GPRS\_SNS\_ROLE\_SGSN}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!GPRS\_SNS\_ROLE\_SGSN@{GPRS\_SNS\_ROLE\_SGSN}}}\mbox{\label{gprs__ns2__sns_8c_a26e7b7bdcdd7b230ec2d2c6b94ee32dba08d9bb62bf56618d693ae70a88ef3d45}} 
GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns2__sns_8c_a3fa17d07f4ea644a9dba53569a11be80}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!sns\_procedure@{sns\_procedure}}
\index{sns\_procedure@{sns\_procedure}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{sns\_procedure}
{\footnotesize\ttfamily enum \textbf{ sns\+\_\+procedure}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{SNS\_PROC\_NONE@{SNS\_PROC\_NONE}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!SNS\_PROC\_NONE@{SNS\_PROC\_NONE}}}\mbox{\label{gprs__ns2__sns_8c_a3fa17d07f4ea644a9dba53569a11be80a1ddf447de0c48c3d93e1fb6d31f1325f}} 
SNS\+\_\+\+PROC\+\_\+\+NONE&used as invalid/idle value \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SNS\_PROC\_ADD@{SNS\_PROC\_ADD}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!SNS\_PROC\_ADD@{SNS\_PROC\_ADD}}}\mbox{\label{gprs__ns2__sns_8c_a3fa17d07f4ea644a9dba53569a11be80a68b0496cc7c2ca2800668616f8e76c78}} 
SNS\+\_\+\+PROC\+\_\+\+ADD&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SNS\_PROC\_DEL@{SNS\_PROC\_DEL}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!SNS\_PROC\_DEL@{SNS\_PROC\_DEL}}}\mbox{\label{gprs__ns2__sns_8c_a3fa17d07f4ea644a9dba53569a11be80a50d279495f27f2602925f92ba10c2842}} 
SNS\+\_\+\+PROC\+\_\+\+DEL&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{SNS\_PROC\_CHANGE\_WEIGHT@{SNS\_PROC\_CHANGE\_WEIGHT}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!SNS\_PROC\_CHANGE\_WEIGHT@{SNS\_PROC\_CHANGE\_WEIGHT}}}\mbox{\label{gprs__ns2__sns_8c_a3fa17d07f4ea644a9dba53569a11be80ab8d9efe5dd577571d6441b5ad8d23194}} 
SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{gprs__ns2__sns_8c_a9ed16867a9394d9ccf1132194edae298}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!\_\_attribute\_\_@{\_\_attribute\_\_}}
\index{\_\_attribute\_\_@{\_\_attribute\_\_}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{\_\_attribute\_\_()}
{\footnotesize\ttfamily static \+\_\+\+\_\+attribute\+\_\+\+\_\+ (\begin{DoxyParamCaption}\item[{(constructor)}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+bss\+\_\+fsm}, \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+register()}.

\mbox{\label{gprs__ns2__sns_8c_a69686507c6edff877bfea8b7f6d51b30}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!\_sns\_failed@{\_sns\_failed}}
\index{\_sns\_failed@{\_sns\_failed}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{\_sns\_failed()}
{\footnotesize\ttfamily static void \+\_\+sns\+\_\+failed (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const char $\ast$}]{reason,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch()}, \textbf{ \+\_\+osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ file()}, \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nse()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSMLSRC}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+SELECT\+\_\+\+ENDPOINT}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsei}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::persistent}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::role}.

\mbox{\label{gprs__ns2__sns_8c_a28f704a663406e5c37a550a9640896d3}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!add\_ip4\_elem@{add\_ip4\_elem}}
\index{add\_ip4\_elem@{add\_ip4\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{add\_ip4\_elem()}
{\footnotesize\ttfamily static int add\+\_\+ip4\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, and \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ ns2\+\_\+sns\+\_\+add\+\_\+elements()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_ae629251e731210de1ee55c11ab576d44}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!add\_ip6\_elem@{add\_ip6\_elem}}
\index{add\_ip6\_elem@{add\_ip6\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{add\_ip6\_elem()}
{\footnotesize\ttfamily static int add\+\_\+ip6\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ ns2\+\_\+sns\+\_\+add\+\_\+elements()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_addcf2730ff79acd69000a6987cdb1d5b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!create\_missing\_nsvcs@{create\_missing\_nsvcs}}
\index{create\_missing\_nsvcs@{create\_missing\_nsvcs}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{create\_missing\_nsvcs()}
{\footnotesize\ttfamily static int create\+\_\+missing\+\_\+nsvcs (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect\+\_\+inactive()}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ list}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::ll}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::nsvc}, \textbf{ nsvc\+\_\+for\+\_\+bind\+\_\+and\+\_\+remote()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack()}.

\mbox{\label{gprs__ns2__sns_8c_a87e1d6f008cf4329d6cd46c7e3fc8998}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!create\_nsvc\_for\_new\_sbind@{create\_nsvc\_for\_new\_sbind}}
\index{create\_nsvc\_for\_new\_sbind@{create\_nsvc\_for\_new\_sbind}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{create\_nsvc\_for\_new\_sbind()}
{\footnotesize\ttfamily static void create\+\_\+nsvc\+\_\+for\+\_\+new\+\_\+sbind (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect\+\_\+inactive()}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::ll}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nsvc\+\_\+for\+\_\+bind\+\_\+and\+\_\+remote()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sns\+\_\+only}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_a62cbc6256b77e6d646feb52096b3f79f}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!do\_sns\_add@{do\_sns\_add}}
\index{do\_sns\_add@{do\_sns\_add}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{do\_sns\_add()}
{\footnotesize\ttfamily static int do\+\_\+sns\+\_\+add (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+ip4\+\_\+elem()}, \textbf{ add\+\_\+ip6\+\_\+elem()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::fi}, \textbf{ gprs\+\_\+ns2\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs()}, \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip4()}, \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip6()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+NS\+\_\+\+VC}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+PROTO\+\_\+\+ERR\+\_\+\+UNSPEC}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem()}, \textbf{ nsvc\+\_\+by\+\_\+ip6\+\_\+elem()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add()}.

\mbox{\label{gprs__ns2__sns_8c_abe00940c152a70b76c69d6df49e830fb}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!do\_sns\_change\_weight@{do\_sns\_change\_weight}}
\index{do\_sns\_change\_weight@{do\_sns\_change\_weight}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{do\_sns\_change\_weight()}
{\footnotesize\ttfamily static int do\+\_\+sns\+\_\+change\+\_\+weight (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+vc\+\_\+remote()}, \textbf{ gprs\+\_\+ns2\+\_\+ll\+\_\+str()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+UNKN\+\_\+\+IP\+\_\+\+EP}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+sockaddr\+\_\+cmp()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}, \textbf{ update\+\_\+ip4\+\_\+elem()}, and \textbf{ update\+\_\+ip6\+\_\+elem()}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+change()}.

\mbox{\label{gprs__ns2__sns_8c_a96770b457e5aa2174fa49a479886bea2}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!do\_sns\_delete@{do\_sns\_delete}}
\index{do\_sns\_delete@{do\_sns\_delete}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{do\_sns\_delete()}
{\footnotesize\ttfamily static int do\+\_\+sns\+\_\+delete (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc()}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+vc\+\_\+remote()}, \textbf{ gprs\+\_\+ns2\+\_\+ll\+\_\+str()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+UNKN\+\_\+\+IP\+\_\+\+EP}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+sockaddr\+\_\+cmp()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ remove\+\_\+ip4\+\_\+elem()}, \textbf{ remove\+\_\+ip6\+\_\+elem()}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+delete()}.

\mbox{\label{gprs__ns2__sns_8c_a7d15977f0b7abac1779dbbdc9fc475c5}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_nse\_sns\_remote@{gprs\_ns2\_nse\_sns\_remote}}
\index{gprs\_ns2\_nse\_sns\_remote@{gprs\_ns2\_nse\_sns\_remote}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_nse\_sns\_remote()}
{\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+sockaddr} $\ast$ gprs\+\_\+ns2\+\_\+nse\+\_\+sns\+\_\+remote (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse }\end{DoxyParamCaption})}



Return the initial SNS remote socket address. 


\begin{DoxyParams}{Parameters}
{\em nse} & NS Entity \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
address of the initial SNS connection; NULL in case of error 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ sns\+\_\+endpoint\+::saddr}.

\mbox{\label{gprs__ns2__sns_8c_ac4e486186e2d10273538c27f48178fba}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_add\_bind@{gprs\_ns2\_sns\_add\_bind}}
\index{gprs\_ns2\_sns\_add\_bind@{gprs\_ns2\_sns\_add\_bind}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_add\_bind()}
{\footnotesize\ttfamily int gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+bind (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$}]{bind }\end{DoxyParamCaption})}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns2\+\_\+is\+\_\+ip\+\_\+bind()}, \textbf{ list}, \textbf{ ns2\+\_\+sns\+\_\+bind\+::list}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ llist\+\_\+empty()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+ADD\+\_\+\+BIND}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ DEFUN()}, \textbf{ ns2\+\_\+create\+\_\+vc\+\_\+sns()}, and \textbf{ ns2\+\_\+sns\+\_\+add\+\_\+sns\+\_\+default\+\_\+binds()}.

\mbox{\label{gprs__ns2__sns_8c_aa216819fe14309d37c671be36bc5262b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_add\_endpoint@{gprs\_ns2\_sns\_add\_endpoint}}
\index{gprs\_ns2\_sns\_add\_endpoint@{gprs\_ns2\_sns\_add\_endpoint}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_add\_endpoint()}
{\footnotesize\ttfamily int gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+endpoint (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ osmo\+\_\+sockaddr} $\ast$}]{saddr }\end{DoxyParamCaption})}



gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+endpoint 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nse} & \\
\hline
\mbox{\texttt{ in}}  & {\em sockaddr} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\end{DoxyReturn}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::dialect}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+DIALECT\+\_\+\+SNS}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ sns\+\_\+endpoint\+::list}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::ll}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ llist\+\_\+empty()}, \textbf{ ns2\+\_\+get\+\_\+sns\+\_\+endpoint()}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+SELECT\+\_\+\+ENDPOINT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+endpoint\+::saddr}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ DEFUN()}.

\mbox{\label{gprs__ns2__sns_8c_ad5b987338009b124290109789c811840}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_count@{gprs\_ns2\_sns\_count}}
\index{gprs\_ns2\_sns\_count@{gprs\_ns2\_sns\_count}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_count()}
{\footnotesize\ttfamily int gprs\+\_\+ns2\+\_\+sns\+\_\+count (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse }\end{DoxyParamCaption})}



gprs\+\_\+ns2\+\_\+sns\+\_\+count 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nse} & NS Entity whose IP-\/\+SNS endpoints shall be printed \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the count of endpoints or $<$ 0 if NSE doesn\textquotesingle{}t contain sns. 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::dialect}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+DIALECT\+\_\+\+SNS}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ list}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::ll}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ vty\+\_\+nse\+\_\+check\+\_\+sns()}.

\mbox{\label{gprs__ns2__sns_8c_abe907a6b3594778c58291723a5ab7ca9}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_del\_bind@{gprs\_ns2\_sns\_del\_bind}}
\index{gprs\_ns2\_sns\_del\_bind@{gprs\_ns2\_sns\_del\_bind}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_del\_bind()}
{\footnotesize\ttfamily int gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+bind (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$}]{bind }\end{DoxyParamCaption})}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial\+\_\+bind}, \textbf{ list}, \textbf{ ns2\+\_\+sns\+\_\+bind\+::list}, \textbf{ llist\+\_\+del()}, \textbf{ llist\+\_\+entry}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+DELETE\+\_\+\+BIND}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ llist\+\_\+head\+::prev}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ DEFUN()}, and \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+bind()}.

\mbox{\label{gprs__ns2__sns_8c_af7ce29702d239e804ee31e3ddcb4f51b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_del\_endpoint@{gprs\_ns2\_sns\_del\_endpoint}}
\index{gprs\_ns2\_sns\_del\_endpoint@{gprs\_ns2\_sns\_del\_endpoint}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_del\_endpoint()}
{\footnotesize\ttfamily int gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+endpoint (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ osmo\+\_\+sockaddr} $\ast$}]{saddr }\end{DoxyParamCaption})}



gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+endpoint 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nse} & \\
\hline
\mbox{\texttt{ in}}  & {\em sockaddr} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, otherwise $<$ 0 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::dialect}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+DIALECT\+\_\+\+SNS}, \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvcs()}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial}, \textbf{ list}, \textbf{ sns\+\_\+endpoint\+::list}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::ll}, \textbf{ llist\+\_\+del()}, \textbf{ llist\+\_\+entry}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGNSE}, \textbf{ llist\+\_\+head\+::next}, \textbf{ ns2\+\_\+get\+\_\+sns\+\_\+endpoint()}, \textbf{ llist\+\_\+head\+::prev}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+endpoint\+::saddr}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ DEFUN()}.

\mbox{\label{gprs__ns2__sns_8c_a42bd24031c91f12acbd26e652902dc7f}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip46\_weight\_sum@{ip46\_weight\_sum}}
\index{ip46\_weight\_sum@{ip46\_weight\_sum}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip46\_weight\_sum()}
{\footnotesize\ttfamily static int ip46\+\_\+weight\+\_\+sum (\begin{DoxyParamCaption}\item[{const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{bool}]{data\+\_\+weight }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data\+\_\+weight}, \textbf{ ip4\+\_\+weight\+\_\+sum()}, and \textbf{ ip6\+\_\+weight\+\_\+sum()}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}.

\mbox{\label{gprs__ns2__sns_8c_a5d0b69ae2f1af170f145a99640b4ba04}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip4\_weight\_sum@{ip4\_weight\_sum}}
\index{ip4\_weight\_sum@{ip4\_weight\_sum}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip4\_weight\_sum()}
{\footnotesize\ttfamily static int ip4\+\_\+weight\+\_\+sum (\begin{DoxyParamCaption}\item[{const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{bool}]{data\+\_\+weight }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}.



Referenced by \textbf{ ip46\+\_\+weight\+\_\+sum()}.

\mbox{\label{gprs__ns2__sns_8c_a65f5e3ea67212475e2ef7a32ef450be4}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ip6\_weight\_sum@{ip6\_weight\_sum}}
\index{ip6\_weight\_sum@{ip6\_weight\_sum}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ip6\_weight\_sum()}
{\footnotesize\ttfamily static int ip6\+\_\+weight\+\_\+sum (\begin{DoxyParamCaption}\item[{const struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{bool}]{data\+\_\+weight }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}.



Referenced by \textbf{ ip46\+\_\+weight\+\_\+sum()}.

\mbox{\label{gprs__ns2__sns_8c_a84a1d97336817a68c35c0ab25bc8bd21}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_add\_procedure@{ns2\_add\_procedure}}
\index{ns2\_add\_procedure@{ns2\_add\_procedure}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_add\_procedure()}
{\footnotesize\ttfamily static void ns2\+\_\+add\+\_\+procedure (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind,  }\item[{enum \textbf{ sns\+\_\+procedure}}]{procedure\+\_\+type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ list}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::list}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::procedure}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::running}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::sbind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+data\+\_\+weight}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+ADD}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+DEL}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+sig\+\_\+weight}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}.

\mbox{\label{gprs__ns2__sns_8c_ac1a33cb9b97398633fbe0f6a44c2857c}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_clear\_elems@{ns2\_clear\_elems}}
\index{ns2\_clear\_elems@{ns2\_clear\_elems}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_clear\_elems()}
{\footnotesize\ttfamily static void ns2\+\_\+clear\+\_\+elems (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, and \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}.



Referenced by \textbf{ ns2\+\_\+clear\+\_\+sgsn()}, \textbf{ ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss()}.

\mbox{\label{gprs__ns2__sns_8c_a2158474926235eda220414658b893294}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_clear\_procedures@{ns2\_clear\_procedures}}
\index{ns2\_clear\_procedures@{ns2\_clear\_procedures}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_clear\_procedures()}
{\footnotesize\ttfamily static void ns2\+\_\+clear\+\_\+procedures (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::current\+\_\+procedure}, \textbf{ list}, \textbf{ llist\+\_\+del()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::procedure}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}.



Referenced by \textbf{ ns2\+\_\+clear\+\_\+sgsn()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size\+\_\+onenter()}.

\mbox{\label{gprs__ns2__sns_8c_a283293e0195c79c1405ff4686da1d454}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_clear\_sgsn@{ns2\_clear\_sgsn}}
\index{ns2\_clear\_sgsn@{ns2\_clear\_sgsn}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_clear\_sgsn()}
{\footnotesize\ttfamily static void ns2\+\_\+clear\+\_\+sgsn (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$}]{size\+\_\+nsvc }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+clear\+\_\+elems()}, \textbf{ ns2\+\_\+clear\+\_\+procedures()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+unconfigured\+\_\+onenter()}.

\mbox{\label{gprs__ns2__sns_8c_aa0195088758cc9d4cc961764ad0ebd81}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_get\_sbind\_ip4\_entry@{ns2\_get\_sbind\_ip4\_entry}}
\index{ns2\_get\_sbind\_ip4\_entry@{ns2\_get\_sbind\_ip4\_entry}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_get\_sbind\_ip4\_entry()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ ns2\+\_\+get\+\_\+sbind\+\_\+ip4\+\_\+entry (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{endpoints }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::u}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+update\+\_\+weight\+\_\+entry()}.

\mbox{\label{gprs__ns2__sns_8c_a2f52638173d3c74b315f7db653372732}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_get\_sbind\_ip6\_entry@{ns2\_get\_sbind\_ip6\_entry}}
\index{ns2\_get\_sbind\_ip6\_entry@{ns2\_get\_sbind\_ip6\_entry}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_get\_sbind\_ip6\_entry()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$ ns2\+\_\+get\+\_\+sbind\+\_\+ip6\+\_\+entry (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{endpoints }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ osmo\+\_\+sockaddr\+::u}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+update\+\_\+weight\+\_\+entry()}.

\mbox{\label{gprs__ns2__sns_8c_a95973eb77da6c456387443b276fbe3f3}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_get\_sns\_endpoint@{ns2\_get\_sns\_endpoint}}
\index{ns2\_get\_sns\_endpoint@{ns2\_get\_sns\_endpoint}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_get\_sns\_endpoint()}
{\footnotesize\ttfamily static struct \textbf{ sns\+\_\+endpoint} $\ast$ ns2\+\_\+get\+\_\+sns\+\_\+endpoint (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{state,  }\item[{const struct \textbf{ osmo\+\_\+sockaddr} $\ast$}]{saddr }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ osmo\+\_\+sockaddr\+\_\+cmp()}, \textbf{ sns\+\_\+endpoint\+::saddr}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+add\+\_\+endpoint()}, and \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+del\+\_\+endpoint()}.

\mbox{\label{gprs__ns2__sns_8c_ada1807754c4ba7adb4f90b5de0a41445}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_nsvc\_create\_ip4@{ns2\_nsvc\_create\_ip4}}
\index{ns2\_nsvc\_create\_ip4@{ns2\_nsvc\_create\_ip4}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_nsvc\_create\_ip4()}
{\footnotesize\ttfamily static void ns2\+\_\+nsvc\+\_\+create\+\_\+ip4 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+vc\+\_\+create\+\_\+ip()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::u}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}.

\mbox{\label{gprs__ns2__sns_8c_ac0bcf9c6a3054a677cc38e45899416c9}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_nsvc\_create\_ip6@{ns2\_nsvc\_create\_ip6}}
\index{ns2\_nsvc\_create\_ip6@{ns2\_nsvc\_create\_ip6}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_nsvc\_create\_ip6()}
{\footnotesize\ttfamily static void ns2\+\_\+nsvc\+\_\+create\+\_\+ip6 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+vc\+\_\+create\+\_\+ip()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ osmo\+\_\+sockaddr\+::u}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}.

\mbox{\label{gprs__ns2__sns_8c_a16616b0caa99280206b57af2d736cd95}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_add\_elements@{ns2\_sns\_add\_elements}}
\index{ns2\_sns\_add\_elements@{ns2\_sns\_add\_elements}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_add\_elements()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+add\+\_\+elements (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+ip4\+\_\+elem()}, \textbf{ add\+\_\+ip6\+\_\+elem()}, \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}.

\mbox{\label{gprs__ns2__sns_8c_a3c691dbefe35ae253e6d6b7586056cb8}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_bss\_fsm\_alloc@{ns2\_sns\_bss\_fsm\_alloc}}
\index{ns2\_sns\_bss\_fsm\_alloc@{ns2\_sns\_bss\_fsm\_alloc}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_bss\_fsm\_alloc()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ ns2\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+alloc (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const char $\ast$}]{id }\end{DoxyParamCaption})}



Allocate an IP-\/\+SNS FSM for the BSS side. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nse} & NS Entity in which the FSM runs \\
\hline
\mbox{\texttt{ in}}  & {\em id} & string identifier \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
FSM instance on success; NULL on error 
\end{DoxyReturn}


References \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+bss\+\_\+fsm}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ INIT\+\_\+\+LLIST\+\_\+\+HEAD}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+alloc()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+term}, \textbf{ OSMO\+\_\+\+FSM\+\_\+\+TERM\+\_\+\+ERROR}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ ns2\+\_\+nse\+\_\+set\+\_\+dialect()}.

\mbox{\label{gprs__ns2__sns_8c_a6171720f3f6ac5345efcd14c378d0d62}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_bss\_valid\_configuration@{ns2\_sns\_bss\_valid\_configuration}}
\index{ns2\_sns\_bss\_valid\_configuration@{ns2\_sns\_bss\_valid\_configuration}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_bss\_valid\_configuration()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+bss\+\_\+valid\+\_\+configuration (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ list}, \textbf{ llist\+\_\+empty()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ sns\+\_\+endpoint\+::saddr}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+sig\+\_\+weight}, and \textbf{ osmo\+\_\+sockaddr\+::u}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss()}.

\mbox{\label{gprs__ns2__sns_8c_aa03d27c5d62c8857176d54c6413c5be9}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_choose\_next\_bind@{ns2\_sns\_choose\_next\_bind}}
\index{ns2\_sns\_choose\_next\_bind@{ns2\_sns\_choose\_next\_bind}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_choose\_next\_bind()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+choose\+\_\+next\+\_\+bind (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial\+\_\+bind}, \textbf{ list}, \textbf{ ns2\+\_\+sns\+\_\+bind\+::list}, \textbf{ llist\+\_\+entry}, \textbf{ llist\+\_\+first\+\_\+entry\+\_\+or\+\_\+null}, and \textbf{ llist\+\_\+head\+::next}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size\+\_\+onenter()}.

\mbox{\label{gprs__ns2__sns_8c_aa8748ec1bd45a55766ce71d917cb1063}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_compute\_local\_ep\_from\_binds@{ns2\_sns\_compute\_local\_ep\_from\_binds}}
\index{ns2\_sns\_compute\_local\_ep\_from\_binds@{ns2\_sns\_compute\_local\_ep\_from\_binds}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_compute\_local\_ep\_from\_binds()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+vc\+\_\+remote()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ list}, \textbf{ llist\+\_\+count()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ ns2\+\_\+clear\+\_\+elems()}, \textbf{ ns2\+\_\+sns\+\_\+copy\+\_\+local\+\_\+endpoints()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ OSMO\+\_\+\+MAX}, \textbf{ osmo\+\_\+sockaddr\+\_\+local\+\_\+ip()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ sns\+\_\+endpoint\+::saddr}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size\+\_\+onenter()}.

\mbox{\label{gprs__ns2__sns_8c_a7e30ab1453379e929170240450b0d44b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_copy\_local\_endpoints@{ns2\_sns\_copy\_local\_endpoints}}
\index{ns2\_sns\_copy\_local\_endpoints@{ns2\_sns\_copy\_local\_endpoints}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_copy\_local\_endpoints()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+copy\+\_\+local\+\_\+endpoints (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local\+\_\+procedure}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, and \textbf{ OSMO\+\_\+\+ASSERT}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds()}.

\mbox{\label{gprs__ns2__sns_8c_af0db4cbe4fdceff1129b18d4bae82242}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_count\_num\_local\_ep@{ns2\_sns\_count\_num\_local\_ep}}
\index{ns2\_sns\_count\_num\_local\_ep@{ns2\_sns\_count\_num\_local\_ep}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_count\_num\_local\_ep()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+count\+\_\+num\+\_\+local\+\_\+ep (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{int}]{ip\+\_\+proto }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ osmo\+\_\+sockaddr\+::sa}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn()}.

\mbox{\label{gprs__ns2__sns_8c_ae2267f26b99bd01aab670f39e9961431}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_dump\_vty@{ns2\_sns\_dump\_vty}}
\index{ns2\_sns\_dump\_vty@{ns2\_sns\_dump\_vty}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_dump\_vty()}
{\footnotesize\ttfamily void ns2\+\_\+sns\+\_\+dump\+\_\+vty (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const char $\ast$}]{prefix,  }\item[{const struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{bool}]{stats }\end{DoxyParamCaption})}



Dump the IP-\/\+SNS state to a vty. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY to which the state shall be printed \\
\hline
\mbox{\texttt{ in}}  & {\em prefix} & prefix to print at start of each line (typically indenting) \\
\hline
\mbox{\texttt{ in}}  & {\em nse} & NS Entity whose IP-\/\+SNS state shall be printed \\
\hline
\mbox{\texttt{ in}}  & {\em stats} & Whether or not statistics shall also be printed \\
\hline
\end{DoxyParams}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ vty\+\_\+dump\+\_\+sns\+\_\+ip4()}, \textbf{ vty\+\_\+dump\+\_\+sns\+\_\+ip6()}, \textbf{ VTY\+\_\+\+NEWLINE}, \textbf{ vty\+\_\+out()}, and \textbf{ vty\+\_\+out\+\_\+fsm\+\_\+inst2()}.



Referenced by \textbf{ dump\+\_\+nse()}.

\mbox{\label{gprs__ns2__sns_8c_a34a1689ce09b0b50bc48909582c75717}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_fsm\_bss\_timer\_cb@{ns2\_sns\_fsm\_bss\_timer\_cb}}
\index{ns2\_sns\_fsm\_bss\_timer\_cb@{ns2\_sns\_fsm\_bss\_timer\_cb}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_fsm\_bss\_timer\_cb()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+fsm\+\_\+bss\+\_\+timer\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+CONFIG\+\_\+\+RETRIES}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+SIZE\+\_\+\+RETRIES}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+failed}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::T}, and \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}.

\mbox{\label{gprs__ns2__sns_8c_a1a17dffd54e486d8e25d82fa37cb8ae6}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_fsm\_sgsn\_timer\_cb@{ns2\_sns\_fsm\_sgsn\_timer\_cb}}
\index{ns2\_sns\_fsm\_sgsn\_timer\_cb@{ns2\_sns\_fsm\_sgsn\_timer\_cb}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_fsm\_sgsn\_timer\_cb()}
{\footnotesize\ttfamily static int ns2\+\_\+sns\+\_\+fsm\+\_\+sgsn\+\_\+timer\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+CONFIG\+\_\+\+RETRIES}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROCEDURES\+\_\+\+RETRIES}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+failed}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::T}, and \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}.

\mbox{\label{gprs__ns2__sns_8c_aa00bc6bb30e9c934094f7918d327f55d}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_notify\_alive@{ns2\_sns\_notify\_alive}}
\index{ns2\_sns\_notify\_alive@{ns2\_sns\_notify\_alive}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_notify\_alive()}
{\footnotesize\ttfamily void ns2\+\_\+sns\+\_\+notify\+\_\+alive (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$}]{nsvc,  }\item[{bool}]{alive }\end{DoxyParamCaption})}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+NO\+\_\+\+NSVC}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+NSVC\+\_\+\+ALIVE}, \textbf{ ns2\+\_\+sns\+\_\+replace\+\_\+nsvc()}, \textbf{ ns2\+\_\+vc\+\_\+is\+\_\+unblocked()}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+failed}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, and \textbf{ gprs\+\_\+ns2\+\_\+nse\+::sum\+\_\+sig\+\_\+weight}.



Referenced by \textbf{ ns2\+\_\+nse\+\_\+notify\+\_\+unblocked()}.

\mbox{\label{gprs__ns2__sns_8c_adfd57f8125425556f7b4fb4cdf25d3ac}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_replace\_nsvc@{ns2\_sns\_replace\_nsvc}}
\index{ns2\_sns\_replace\_nsvc@{ns2\_sns\_replace\_nsvc}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_replace\_nsvc()}
{\footnotesize\ttfamily void ns2\+\_\+sns\+\_\+replace\+\_\+nsvc (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$}]{nsvc }\end{DoxyParamCaption})}



called when a nsvc is beeing freed or the nsvc became dead 



References \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ if()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+NO\+\_\+\+NSVC}, \textbf{ ns2\+\_\+vc\+\_\+is\+\_\+unblocked()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}.



Referenced by \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc()}, and \textbf{ ns2\+\_\+sns\+\_\+notify\+\_\+alive()}.

\mbox{\label{gprs__ns2__sns_8c_a748970869dfd797c71c35f1456a62cea}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_rx@{ns2\_sns\_rx}}
\index{ns2\_sns\_rx@{ns2\_sns\_rx}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_rx()}
{\footnotesize\ttfamily int ns2\+\_\+sns\+\_\+rx (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$}]{nsvc,  }\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})}



main entry point for receiving SNS messages from the network. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nsvc} & NS-\/\+VC on which the message was received \\
\hline
\mbox{\texttt{ in}}  & {\em msg} & message buffer of the IP-\/\+SNS message \\
\hline
\mbox{\texttt{ in}}  & {\em tp} & parsed TLV structure of message \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns\+\_\+hdr\+::data}, \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ gprs\+\_\+ns\+\_\+pdu\+\_\+strings}, \textbf{ if()}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGNSVC}, \textbf{ LOGPFSML}, \textbf{ msg}, \textbf{ msgb\+\_\+free()}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+ACK}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+ADD}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+END}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+DELETE}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+SIZE}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+SIZE\+\_\+\+ACK}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::nse}, \textbf{ nsei}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsei}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ gprs\+\_\+ns\+\_\+hdr\+::pdu\+\_\+type}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+ACK}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+ADD}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+CONFIG}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+DELETE}, \textbf{ SNS\+\_\+\+PDUT\+\_\+\+SIZE}, and \textbf{ SNS\+\_\+\+PDUT\+\_\+\+SIZE\+\_\+\+ACK}.

\mbox{\label{gprs__ns2__sns_8c_afec7869847907b90ac7d4cbf55bd8157}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_sgsn\_fsm\_alloc@{ns2\_sns\_sgsn\_fsm\_alloc}}
\index{ns2\_sns\_sgsn\_fsm\_alloc@{ns2\_sns\_sgsn\_fsm\_alloc}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_sgsn\_fsm\_alloc()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm\+\_\+alloc (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const char $\ast$}]{id }\end{DoxyParamCaption})}



Allocate an IP-\/\+SNS FSM for the SGSN side. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em nse} & NS Entity in which the FSM runs \\
\hline
\mbox{\texttt{ in}}  & {\em id} & string identifier \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
FSM instance on success; NULL on error 
\end{DoxyReturn}


References \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ INIT\+\_\+\+LLIST\+\_\+\+HEAD}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+alloc()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+term}, \textbf{ OSMO\+\_\+\+FSM\+\_\+\+TERM\+\_\+\+ERROR}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}.



Referenced by \textbf{ ns2\+\_\+nse\+\_\+set\+\_\+dialect()}.

\mbox{\label{gprs__ns2__sns_8c_aeb94864810238461c1e8934a83299b0e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_all\_action@{ns2\_sns\_st\_all\_action}}
\index{ns2\_sns\_st\_all\_action@{ns2\_sns\_st\_all\_action}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_all\_action()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::alive}, \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ data}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+FLAG\+\_\+\+KEEP\+\_\+\+SELECT\+\_\+\+ENDPOINT\+\_\+\+ORDER}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ip46\+\_\+weight\+\_\+sum()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local\+\_\+procedure}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ ns2\+\_\+add\+\_\+procedure()}, \textbf{ ns2\+\_\+sns\+\_\+add\+\_\+elements()}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+ADD\+\_\+\+BIND}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+DELETE\+\_\+\+BIND}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+SELECT\+\_\+\+ENDPOINT}, \textbf{ ns2\+\_\+update\+\_\+weight\+\_\+entry()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsei}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ remove\+\_\+bind\+\_\+elem()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ sns\+\_\+failed}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+ADD}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+DEL}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, and \textbf{ gprs\+\_\+ns2\+\_\+nse\+::sum\+\_\+sig\+\_\+weight}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn()}.

\mbox{\label{gprs__ns2__sns_8c_a9822cc5a14e273cf84c06bb242d78ef7}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_all\_action\_bss@{ns2\_sns\_st\_all\_action\_bss}}
\index{ns2\_sns\_st\_all\_action\_bss@{ns2\_sns\_st\_all\_action\_bss}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_all\_action\_bss()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ data}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+AFF\+\_\+\+CAUSE\+\_\+\+SNS\+\_\+\+NO\+\_\+\+ENDPOINTS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial}, \textbf{ list}, \textbf{ sns\+\_\+endpoint\+::list}, \textbf{ llist\+\_\+entry}, \textbf{ llist\+\_\+first\+\_\+entry}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ llist\+\_\+head\+::next}, \textbf{ ns2\+\_\+clear\+\_\+elems()}, \textbf{ ns2\+\_\+free\+\_\+nsvcs()}, \textbf{ ns2\+\_\+prim\+\_\+status\+\_\+ind()}, \textbf{ ns2\+\_\+sns\+\_\+bss\+\_\+valid\+\_\+configuration()}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+FREE\+\_\+\+NSVCS}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+NO\+\_\+\+NSVC}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+SELECT\+\_\+\+ENDPOINT}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::reselection\+\_\+running}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ sns\+\_\+endpoint\+::saddr}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}, \textbf{ sns\+\_\+failed}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, and \textbf{ osmo\+\_\+sockaddr\+::u}.

\mbox{\label{gprs__ns2__sns_8c_a6c87c2bb95a14d32a144f99429827248}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_all\_action\_sgsn@{ns2\_sns\_st\_all\_action\_sgsn}}
\index{ns2\_sns\_st\_all\_action\_sgsn@{ns2\_sns\_st\_all\_action\_sgsn}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_all\_action\_sgsn()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+sgsn (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::block\+\_\+no\+\_\+nsvc\+\_\+events}, \textbf{ cause}, \textbf{ data}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ ns2\+\_\+clear\+\_\+sgsn()}, \textbf{ ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds()}, \textbf{ ns2\+\_\+sns\+\_\+count\+\_\+num\+\_\+local\+\_\+ep()}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+FREE\+\_\+\+NSVCS}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+SIZE}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+size\+\_\+ack()}, \textbf{ ns2\+\_\+vc\+\_\+force\+\_\+unconfigured()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv6\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+NS\+\_\+\+VC}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+MISSING\+\_\+\+ESSENT\+\_\+\+IE}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+EP\+\_\+\+NR}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv6\+\_\+\+EP\+\_\+\+NR}, \textbf{ NS\+\_\+\+IE\+\_\+\+MAX\+\_\+\+NR\+\_\+\+NSVC}, \textbf{ NS\+\_\+\+IE\+\_\+\+RESET\+\_\+\+FLAG}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip6\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sig\+\_\+weight}, \textbf{ sns\+\_\+failed}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, \textbf{ TLVP\+\_\+\+PRES\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ tlvp\+\_\+val16be()}.

\mbox{\label{gprs__ns2__sns_8c_a672bea7f92910e23fc32a2a4c50852ac}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_config\_bss@{ns2\_sns\_st\_bss\_config\_bss}}
\index{ns2\_sns\_st\_bss\_config\_bss@{ns2\_sns\_st\_bss\_config\_bss}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_config\_bss()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+bss (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data}, \textbf{ gprs\+\_\+ns2\+\_\+cause\+\_\+str()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ TLVP\+\_\+\+VAL\+\_\+\+MINLEN}.

\mbox{\label{gprs__ns2__sns_8c_a05c8e339302b18249ca52f44e8007bce}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_config\_bss\_onenter@{ns2\_sns\_st\_bss\_config\_bss\_onenter}}
\index{ns2\_sns\_st\_bss\_config\_bss\_onenter@{ns2\_sns\_st\_bss\_config\_bss\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_config\_bss\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+bss\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+config()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}.

\mbox{\label{gprs__ns2__sns_8c_a38b11e8d79f0b466185de566b91fbae3}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_config\_sgsn@{ns2\_sns\_st\_bss\_config\_sgsn}}
\index{ns2\_sns\_st\_bss\_config\_sgsn@{ns2\_sns\_st\_bss\_config\_sgsn}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_config\_sgsn()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cause}, \textbf{ create\+\_\+missing\+\_\+nsvcs()}, \textbf{ data}, \textbf{ gprs\+\_\+ns2\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+data}, \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+sig}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+END}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+config\+\_\+ack()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+WEIGH}, \textbf{ ns\+\_\+sns\+\_\+append\+\_\+remote\+\_\+eps()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+timer\+\_\+schedule()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::timer}.

\mbox{\label{gprs__ns2__sns_8c_a709235ee49fa4236c25ddab64f92f3d0}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_config\_sgsn\_onenter@{ns2\_sns\_st\_bss\_config\_sgsn\_onenter}}
\index{ns2\_sns\_st\_bss\_config\_sgsn\_onenter@{ns2\_sns\_st\_bss\_config\_sgsn\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_config\_sgsn\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+SGSN}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::role}.

\mbox{\label{gprs__ns2__sns_8c_a4d606ec4118c39d17e99c25421569425}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_size@{ns2\_sns\_st\_bss\_size}}
\index{ns2\_sns\_st\_bss\_size@{ns2\_sns\_st\_bss\_size}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_size()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data}, \textbf{ gprs\+\_\+ns2\+\_\+cause\+\_\+str()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+SIZE\+\_\+\+ACK}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ TLVP\+\_\+\+VAL\+\_\+\+MINLEN}.

\mbox{\label{gprs__ns2__sns_8c_a6ce08197d7ef256909fb58160cb39763}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_size\_onenter@{ns2\_sns\_st\_bss\_size\_onenter}}
\index{ns2\_sns\_st\_bss\_size\_onenter@{ns2\_sns\_st\_bss\_size\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_size\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+AFF\+\_\+\+CAUSE\+\_\+\+SNS\+\_\+\+FAILURE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+BSS\+\_\+\+SIZE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial}, \textbf{ ns2\+\_\+sns\+\_\+state\+::initial\+\_\+bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ ns2\+\_\+clear\+\_\+procedures()}, \textbf{ ns2\+\_\+ip\+\_\+bind\+\_\+connect()}, \textbf{ ns2\+\_\+prim\+\_\+status\+\_\+ind()}, \textbf{ ns2\+\_\+sns\+\_\+choose\+\_\+next\+\_\+bind()}, \textbf{ ns2\+\_\+sns\+\_\+compute\+\_\+local\+\_\+ep\+\_\+from\+\_\+binds()}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+size()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ sns\+\_\+endpoint\+::saddr}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, and \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sns\+\_\+only}.

\mbox{\label{gprs__ns2__sns_8c_af8a47c5aed6af8f02567a5d8e014c5c0}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_bss\_unconfigured@{ns2\_sns\_st\_bss\_unconfigured}}
\index{ns2\_sns\_st\_bss\_unconfigured@{ns2\_sns\_st\_bss\_unconfigured}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_bss\_unconfigured()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+unconfigured (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+BSS}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::role}.

\mbox{\label{gprs__ns2__sns_8c_ad8f8997c6f31653465ab379aea20d380}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_configured@{ns2\_sns\_st\_configured}}
\index{ns2\_sns\_st\_configured@{ns2\_sns\_st\_configured}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_configured()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+configured (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+NSVC\+\_\+\+ALIVE}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+ADD}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+DELETE}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+change()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+delete()}, \textbf{ osmo\+\_\+timer\+\_\+del()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::timer}.

\mbox{\label{gprs__ns2__sns_8c_ab98006cf3563f4f6dc55ce554354ba26}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_configured\_add@{ns2\_sns\_st\_configured\_add}}
\index{ns2\_sns\_st\_configured\_add@{ns2\_sns\_st\_configured\_add}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_configured\_add()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cause}, \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+ack()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv6\+\_\+\+EP}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv6\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+TRANS\+\_\+\+ID}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_a1b13d32207847162ddbdce466f8cbb51}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_configured\_change@{ns2\_sns\_st\_configured\_change}}
\index{ns2\_sns\_st\_configured\_change@{ns2\_sns\_st\_configured\_change}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_configured\_change()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+change (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cause}, \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+ack()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv6\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+TRANS\+\_\+\+ID}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_aa2f778074fe06ebd3d0f4bedc37b0652}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_configured\_delete@{ns2\_sns\_st\_configured\_delete}}
\index{ns2\_sns\_st\_configured\_delete@{ns2\_sns\_st\_configured\_delete}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_configured\_delete()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+delete (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cause}, \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ip\+\_\+addr}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+ack()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv6\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+UNKN\+\_\+\+IP\+\_\+\+ADDR}, \textbf{ NS\+\_\+\+IE\+\_\+\+IP\+\_\+\+ADDR}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv6\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+TRANS\+\_\+\+ID}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRES\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}.

\mbox{\label{gprs__ns2__sns_8c_ae88b10d5fc681dd6a3bfc05355fecd7b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_configured\_onenter@{ns2\_sns\_st\_configured\_onenter}}
\index{ns2\_sns\_st\_configured\_onenter@{ns2\_sns\_st\_configured\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_configured\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::alive}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+AFF\+\_\+\+CAUSE\+\_\+\+SNS\+\_\+\+CONFIGURED}, \textbf{ gprs\+\_\+ns2\+\_\+free\+\_\+nsvc()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ list}, \textbf{ llist\+\_\+empty()}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ ns2\+\_\+prim\+\_\+status\+\_\+ind()}, \textbf{ ns2\+\_\+vc\+\_\+is\+\_\+unblocked()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+timer\+\_\+del()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::sns\+\_\+only}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::timer}.

\mbox{\label{gprs__ns2__sns_8c_a9617a43817dbf4bc022d23ec619f7510}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_local\_procedure@{ns2\_sns\_st\_local\_procedure}}
\index{ns2\_sns\_st\_local\_procedure@{ns2\_sns\_st\_local\_procedure}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_local\_procedure()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+ip4\+\_\+elem()}, \textbf{ add\+\_\+ip6\+\_\+elem()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ cause}, \textbf{ create\+\_\+nsvc\+\_\+for\+\_\+new\+\_\+sbind()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::current\+\_\+procedure}, \textbf{ data}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+LOCAL\+\_\+\+PROCEDURE}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::list}, \textbf{ llist\+\_\+del()}, \textbf{ llist\+\_\+empty()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+ACK}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+ADD}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+DELETE}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+add()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+change()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+delete()}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ NS\+\_\+\+IE\+\_\+\+TRANS\+\_\+\+ID}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::procedure}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ remove\+\_\+ip4\+\_\+elem()}, \textbf{ remove\+\_\+ip6\+\_\+elem()}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::sbind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ sns\+\_\+failed}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+ADD}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+DEL}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, \textbf{ TLVP\+\_\+\+PRESENT}, \textbf{ tlvp\+\_\+val8()}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::trans\+\_\+id}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.

\mbox{\label{gprs__ns2__sns_8c_a5803a1fc1d4a1c2add33040673c4957e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_local\_procedure\_onenter@{ns2\_sns\_st\_local\_procedure\_onenter}}
\index{ns2\_sns\_st\_local\_procedure\_onenter@{ns2\_sns\_st\_local\_procedure\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_local\_procedure\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::current\+\_\+procedure}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ if()}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::ip6}, \textbf{ list}, \textbf{ llist\+\_\+first\+\_\+entry\+\_\+or\+\_\+null}, \textbf{ ns2\+\_\+sns\+\_\+state\+::N}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+add()}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+change\+\_\+weight()}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+del()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::procedure}, \textbf{ ns2\+\_\+sns\+\_\+state\+::procedures}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::running}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+ADD}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ SNS\+\_\+\+PROC\+\_\+\+DEL}, \textbf{ ns2\+\_\+sns\+\_\+procedure\+::trans\+\_\+id}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::trans\+\_\+id}.

\mbox{\label{gprs__ns2__sns_8c_ae34c62f2078558ec7072471447481944}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_sgsn\_unconfigured@{ns2\_sns\_st\_sgsn\_unconfigured}}
\index{ns2\_sns\_st\_sgsn\_unconfigured@{ns2\_sns\_st\_sgsn\_unconfigured}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_sgsn\_unconfigured()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+unconfigured (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::role}.

\mbox{\label{gprs__ns2__sns_8c_a4f0622fe051841c57851268ee35221a8}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_sgsn\_unconfigured\_onenter@{ns2\_sns\_st\_sgsn\_unconfigured\_onenter}}
\index{ns2\_sns\_st\_sgsn\_unconfigured\_onenter@{ns2\_sns\_st\_sgsn\_unconfigured\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_sgsn\_unconfigured\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+unconfigured\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+clear\+\_\+sgsn()}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{gprs__ns2__sns_8c_aff25c5d3ddc7227ad47de40756236d01}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_sgsn\_wait\_config@{ns2\_sns\_st\_sgsn\_wait\_config}}
\index{ns2\_sns\_st\_sgsn\_wait\_config@{ns2\_sns\_st\_sgsn\_wait\_config}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_sgsn\_wait\_config()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ cause}, \textbf{ data}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SGSN\+\_\+\+WAIT\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+data}, \textbf{ ip46\+\_\+weight\+\_\+sum\+\_\+sig}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+END}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+config\+\_\+ack()}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+WEIGH}, \textbf{ ns\+\_\+sns\+\_\+append\+\_\+remote\+\_\+eps()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+timer\+\_\+schedule()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::timer}.

\mbox{\label{gprs__ns2__sns_8c_a8e47247673067373b692e5295f6dda54}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_sgsn\_wait\_config\_ack@{ns2\_sns\_st\_sgsn\_wait\_config\_ack}}
\index{ns2\_sns\_st\_sgsn\_wait\_config\_ack@{ns2\_sns\_st\_sgsn\_wait\_config\_ack}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_sgsn\_wait\_config\_ack()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{event,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ create\+\_\+missing\+\_\+nsvcs()}, \textbf{ data}, \textbf{ gprs\+\_\+ns2\+\_\+cause\+\_\+str()}, \textbf{ gprs\+\_\+ns2\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+RX\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ ns\+\_\+sns\+\_\+configured\+\_\+timeout()}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ TLVP\+\_\+\+VAL\+\_\+\+MINLEN}.

\mbox{\label{gprs__ns2__sns_8c_a7ea644d0cdb99a7bba708feea9064fae}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_st\_sgsn\_wait\_config\_ack\_onenter@{ns2\_sns\_st\_sgsn\_wait\_config\_ack\_onenter}}
\index{ns2\_sns\_st\_sgsn\_wait\_config\_ack\_onenter@{ns2\_sns\_st\_sgsn\_wait\_config\_ack\_onenter}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_st\_sgsn\_wait\_config\_ack\_onenter()}
{\footnotesize\ttfamily static void ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{old\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ROLE\+\_\+\+SGSN}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ ns2\+\_\+sns\+\_\+state\+::local}, \textbf{ ns2\+\_\+tx\+\_\+sns\+\_\+config()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::role}, and \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+nsvc}.

\mbox{\label{gprs__ns2__sns_8c_ab5754a216e9f9648da979c792eb1a243}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_update\_weights@{ns2\_sns\_update\_weights}}
\index{ns2\_sns\_update\_weights@{ns2\_sns\_update\_weights}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_update\_weights()}
{\footnotesize\ttfamily void ns2\+\_\+sns\+\_\+update\+\_\+weights (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$}]{bind }\end{DoxyParamCaption})}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ ns2\+\_\+sns\+\_\+state\+::binds}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ NS2\+\_\+\+SNS\+\_\+\+EV\+\_\+\+REQ\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::nsi}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ osmo\+\_\+sockaddr\+::sa}, and \textbf{ osmo\+\_\+sockaddr\+::u}.



Referenced by \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+set\+\_\+sns\+\_\+weight()}.

\mbox{\label{gprs__ns2__sns_8c_aea97419cda0623aa07a331d364734d4f}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_write\_vty@{ns2\_sns\_write\_vty}}
\index{ns2\_sns\_write\_vty@{ns2\_sns\_write\_vty}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_write\_vty()}
{\footnotesize\ttfamily void ns2\+\_\+sns\+\_\+write\+\_\+vty (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse }\end{DoxyParamCaption})}



write IP-\/\+SNS to a vty 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em vty} & VTY to which the state shall be printed \\
\hline
\mbox{\texttt{ in}}  & {\em nse} & NS Entity whose IP-\/\+SNS state shall be printed \\
\hline
\end{DoxyParams}


References \textbf{ gprs\+\_\+ns2\+\_\+nse\+::bss\+\_\+sns\+\_\+fi}, \textbf{ osmo\+\_\+sockaddr\+\_\+str\+::ip}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, \textbf{ osmo\+\_\+sockaddr\+\_\+str\+\_\+from\+\_\+sockaddr()}, \textbf{ osmo\+\_\+sockaddr\+\_\+str\+::port}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ sns\+\_\+endpoint\+::saddr}, \textbf{ osmo\+\_\+sockaddr\+::sas}, \textbf{ ns2\+\_\+sns\+\_\+state\+::sns\+\_\+endpoints}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ \+\_\+config\+\_\+write\+\_\+ns\+\_\+nse()}.

\mbox{\label{gprs__ns2__sns_8c_a94f8c3f56106d3f0fe1d43ff9d5482da}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_update\_weight\_entry@{ns2\_update\_weight\_entry}}
\index{ns2\_update\_weight\_entry@{ns2\_update\_weight\_entry}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_update\_weight\_entry()}
{\footnotesize\ttfamily static int ns2\+\_\+update\+\_\+weight\+\_\+entry (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{endpoints }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+state\+::family}, \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+data}, \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+sig}, \textbf{ ip6\+\_\+weight\+\_\+sum\+\_\+data}, \textbf{ ip6\+\_\+weight\+\_\+sum\+\_\+sig}, \textbf{ ns2\+\_\+get\+\_\+sbind\+\_\+ip4\+\_\+entry()}, \textbf{ ns2\+\_\+get\+\_\+sbind\+\_\+ip6\+\_\+entry()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+data\+\_\+weight}, and \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+sig\+\_\+weight}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}.

\mbox{\label{gprs__ns2__sns_8c_a25fb9045224622b0d7e372159d92343f}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_vc\_create\_ip@{ns2\_vc\_create\_ip}}
\index{ns2\_vc\_create\_ip@{ns2\_vc\_create\_ip}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_vc\_create\_ip()}
{\footnotesize\ttfamily static void ns2\+\_\+vc\+\_\+create\+\_\+ip (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ osmo\+\_\+sockaddr} $\ast$}]{remote,  }\item[{uint8\+\_\+t}]{sig\+\_\+weight,  }\item[{uint8\+\_\+t}]{data\+\_\+weight }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+inst\+::binding}, \textbf{ data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+connect\+\_\+inactive()}, \textbf{ GPRS\+\_\+\+NS2\+\_\+\+LL\+\_\+\+UDP}, \textbf{ list}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::ll}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ gprs\+\_\+ns2\+\_\+inst\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::nsi}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::nsvc}, and \textbf{ sig\+\_\+weight}.



Referenced by \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip4()}, and \textbf{ ns2\+\_\+nsvc\+\_\+create\+\_\+ip6()}.

\mbox{\label{gprs__ns2__sns_8c_a0477463a4d5553e6799d85dd8533b5b8}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns\_sns\_append\_remote\_eps@{ns\_sns\_append\_remote\_eps}}
\index{ns\_sns\_append\_remote\_eps@{ns\_sns\_append\_remote\_eps}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns\_sns\_append\_remote\_eps()}
{\footnotesize\ttfamily static int ns\+\_\+sns\+\_\+append\+\_\+remote\+\_\+eps (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ if()}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv6\+\_\+\+EP}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv6\+\_\+\+LIST}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ ns2\+\_\+sns\+\_\+state\+::remote}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn()}, and \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config()}.

\mbox{\label{gprs__ns2__sns_8c_a7458d66bd617ea1f6f7b5c67cef8897b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns\_sns\_configured\_timeout@{ns\_sns\_configured\_timeout}}
\index{ns\_sns\_configured\_timeout@{ns\_sns\_configured\_timeout}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns\_sns\_configured\_timeout()}
{\footnotesize\ttfamily static int ns\+\_\+sns\+\_\+configured\+\_\+timeout (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+ALIVE\+\_\+\+RETRIES}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TNS\+\_\+\+TEST}, \textbf{ nse\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsi}, and \textbf{ gprs\+\_\+ns2\+\_\+inst\+::timeout}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack()}.

\mbox{\label{gprs__ns2__sns_8c_a6f4392c5b8981ef4c7c24798d702687e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!nse\_inst\_from\_fi@{nse\_inst\_from\_fi}}
\index{nse\_inst\_from\_fi@{nse\_inst\_from\_fi}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{nse\_inst\_from\_fi()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$ nse\+\_\+inst\+\_\+from\+\_\+fi (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+state\+::nse}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ create\+\_\+missing\+\_\+nsvcs()}, \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}, \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ ns2\+\_\+sns\+\_\+fsm\+\_\+bss\+\_\+timer\+\_\+cb()}, \textbf{ ns2\+\_\+sns\+\_\+fsm\+\_\+sgsn\+\_\+timer\+\_\+cb()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action\+\_\+bss()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+bss()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+config\+\_\+sgsn()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+bss\+\_\+size()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+configured\+\_\+onenter()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+sgsn\+\_\+wait\+\_\+config\+\_\+ack()}, and \textbf{ ns\+\_\+sns\+\_\+configured\+\_\+timeout()}.

\mbox{\label{gprs__ns2__sns_8c_acc8640320f38332fe2e37238c8526357}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!nsvc\_by\_ip4\_elem@{nsvc\_by\_ip4\_elem}}
\index{nsvc\_by\_ip4\_elem@{nsvc\_by\_ip4\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{nsvc\_by\_ip4\_elem()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ nsvc\+\_\+by\+\_\+ip4\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+nsvc\+\_\+by\+\_\+sockaddr\+\_\+nse()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ osmo\+\_\+sockaddr\+::sa}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}.

\mbox{\label{gprs__ns2__sns_8c_af2bede7c0522abc9c20d549f0550e5dc}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!nsvc\_by\_ip6\_elem@{nsvc\_by\_ip6\_elem}}
\index{nsvc\_by\_ip6\_elem@{nsvc\_by\_ip6\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{nsvc\_by\_ip6\_elem()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ nsvc\+\_\+by\+\_\+ip6\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+nsvc\+\_\+by\+\_\+sockaddr\+\_\+nse()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ osmo\+\_\+sockaddr\+::sa}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+add()}.

\mbox{\label{gprs__ns2__sns_8c_a63915d9c0c61ae6d1d958136f8091d25}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!nsvc\_for\_bind\_and\_remote@{nsvc\_for\_bind\_and\_remote}}
\index{nsvc\_for\_bind\_and\_remote@{nsvc\_for\_bind\_and\_remote}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{nsvc\_for\_bind\_and\_remote()}
{\footnotesize\ttfamily static struct \textbf{ gprs\+\_\+ns2\+\_\+vc} $\ast$ nsvc\+\_\+for\+\_\+bind\+\_\+and\+\_\+remote (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+nse} $\ast$}]{nse,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind} $\ast$}]{bind,  }\item[{const struct \textbf{ osmo\+\_\+sockaddr} $\ast$}]{remote }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns2\+\_\+vc\+::bind}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+vc\+\_\+remote()}, \textbf{ list}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+::nse}, \textbf{ gprs\+\_\+ns2\+\_\+nse\+::nsvc}, and \textbf{ osmo\+\_\+sockaddr\+\_\+cmp()}.



Referenced by \textbf{ create\+\_\+missing\+\_\+nsvcs()}, and \textbf{ create\+\_\+nsvc\+\_\+for\+\_\+new\+\_\+sbind()}.

\mbox{\label{gprs__ns2__sns_8c_af9cae8aa2e17a6dd9f224a8a00b1e46e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!remove\_bind\_elem@{remove\_bind\_elem}}
\index{remove\_bind\_elem@{remove\_bind\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{remove\_bind\_elem()}
{\footnotesize\ttfamily static int remove\+\_\+bind\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+bind} $\ast$}]{sbind }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+bind\+::bind}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+ip\+\_\+bind\+\_\+sockaddr()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ remove\+\_\+ip4\+\_\+elem()}, \textbf{ remove\+\_\+ip6\+\_\+elem()}, \textbf{ osmo\+\_\+sockaddr\+::sa}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::sin}, \textbf{ osmo\+\_\+sockaddr\+::sin6}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+data\+\_\+weight}, \textbf{ gprs\+\_\+ns2\+\_\+vc\+\_\+bind\+::sns\+\_\+sig\+\_\+weight}, \textbf{ osmo\+\_\+sockaddr\+::u}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+all\+\_\+action()}.

\mbox{\label{gprs__ns2__sns_8c_a93c3d9443a4065073ef06cd15269ca8b}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!remove\_ip4\_elem@{remove\_ip4\_elem}}
\index{remove\_ip4\_elem@{remove\_ip4\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{remove\_ip4\_elem()}
{\footnotesize\ttfamily static int remove\+\_\+ip4\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, and \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}.



Referenced by \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}, and \textbf{ remove\+\_\+bind\+\_\+elem()}.

\mbox{\label{gprs__ns2__sns_8c_a531c8e418167b2669f0a120171301090}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!remove\_ip6\_elem@{remove\_ip6\_elem}}
\index{remove\_ip6\_elem@{remove\_ip6\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{remove\_ip6\_elem()}
{\footnotesize\ttfamily static int remove\+\_\+ip6\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, and \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}.



Referenced by \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ ns2\+\_\+sns\+\_\+st\+\_\+local\+\_\+procedure()}, and \textbf{ remove\+\_\+bind\+\_\+elem()}.

\mbox{\label{gprs__ns2__sns_8c_a3aa265fa84f3812be1f21c5adf24a0ac}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!update\_ip4\_elem@{update\_ip4\_elem}}
\index{update\_ip4\_elem@{update\_ip4\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{update\_ip4\_elem()}
{\footnotesize\ttfamily static int update\+\_\+ip4\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip4}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip4}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}.

\mbox{\label{gprs__ns2__sns_8c_afa35a0bbb63ab7104812025319e9a13f}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!update\_ip6\_elem@{update\_ip6\_elem}}
\index{update\_ip6\_elem@{update\_ip6\_elem}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{update\_ip6\_elem()}
{\footnotesize\ttfamily static int update\+\_\+ip6\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ ns2\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\item[{struct \textbf{ ns2\+\_\+sns\+\_\+elems} $\ast$}]{elems,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ ns2\+\_\+sns\+\_\+elems\+::num\+\_\+ip6}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}.

\mbox{\label{gprs__ns2__sns_8c_ab284c25da69ef838a462cbc3d84ba967}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!vty\_dump\_sns\_ip4@{vty\_dump\_sns\_ip4}}
\index{vty\_dump\_sns\_ip4@{vty\_dump\_sns\_ip4}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{vty\_dump\_sns\_ip4()}
{\footnotesize\ttfamily static void vty\+\_\+dump\+\_\+sns\+\_\+ip4 (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const char $\ast$}]{prefix,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+dump\+\_\+vty()}.

\mbox{\label{gprs__ns2__sns_8c_aced4ae11290eccedcebe03728a56f7b8}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!vty\_dump\_sns\_ip6@{vty\_dump\_sns\_ip6}}
\index{vty\_dump\_sns\_ip6@{vty\_dump\_sns\_ip6}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{vty\_dump\_sns\_ip6()}
{\footnotesize\ttfamily static void vty\+\_\+dump\+\_\+sns\+\_\+ip6 (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const char $\ast$}]{prefix,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem} $\ast$}]{ip6 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::data\+\_\+weight}, \textbf{ ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip6\+\_\+elem\+::udp\+\_\+port}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ ns2\+\_\+sns\+\_\+dump\+\_\+vty()}.



\doxysubsection{Variable Documentation}
\mbox{\label{gprs__ns2__sns_8c_abdbfc6380aca747f805702ea2eeba7a0}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_bss\_fsm@{gprs\_ns2\_sns\_bss\_fsm}}
\index{gprs\_ns2\_sns\_bss\_fsm@{gprs\_ns2\_sns\_bss\_fsm}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_bss\_fsm}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm} gprs\+\_\+ns2\+\_\+sns\+\_\+bss\+\_\+fsm\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}GPRS-\/NS2-\/SNS-\/BSS"{}},}
\DoxyCodeLine{        .states = ns2\_sns\_bss\_states,}
\DoxyCodeLine{        .num\_states = ARRAY\_SIZE(ns2\_sns\_bss\_states),}
\DoxyCodeLine{        .allstate\_event\_mask = S(NS2\_SNS\_EV\_REQ\_NO\_NSVC) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_FREE\_NSVCS) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_SELECT\_ENDPOINT) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_ADD\_BIND) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_CHANGE\_WEIGHT) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_DELETE\_BIND),}
\DoxyCodeLine{        .allstate\_action = ns2\_sns\_st\_all\_action\_bss,}
\DoxyCodeLine{        .cleanup = NULL,}
\DoxyCodeLine{        .timer\_cb = ns2\_sns\_fsm\_bss\_timer\_cb,}
\DoxyCodeLine{        .event\_names = gprs\_sns\_event\_names,}
\DoxyCodeLine{        .pre\_term = NULL,}
\DoxyCodeLine{        .log\_subsys = DLNS,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}, and \textbf{ ns2\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+alloc()}.

\mbox{\label{gprs__ns2__sns_8c_a00a8546fc08e897e6602871c6be7597e}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_ns2\_sns\_sgsn\_fsm@{gprs\_ns2\_sns\_sgsn\_fsm}}
\index{gprs\_ns2\_sns\_sgsn\_fsm@{gprs\_ns2\_sns\_sgsn\_fsm}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_ns2\_sns\_sgsn\_fsm}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm} gprs\+\_\+ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}GPRS-\/NS2-\/SNS-\/SGSN"{}},}
\DoxyCodeLine{        .states = ns2\_sns\_sgsn\_states,}
\DoxyCodeLine{        .num\_states = ARRAY\_SIZE(ns2\_sns\_sgsn\_states),}
\DoxyCodeLine{        .allstate\_event\_mask = S(NS2\_SNS\_EV\_RX\_SIZE) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_NO\_NSVC) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_FREE\_NSVCS) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_ADD\_BIND) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_CHANGE\_WEIGHT) |}
\DoxyCodeLine{                               S(NS2\_SNS\_EV\_REQ\_DELETE\_BIND),}
\DoxyCodeLine{        .allstate\_action = ns2\_sns\_st\_all\_action\_sgsn,}
\DoxyCodeLine{        .cleanup = NULL,}
\DoxyCodeLine{        .timer\_cb = ns2\_sns\_fsm\_sgsn\_timer\_cb,}
\DoxyCodeLine{        .event\_names = gprs\_sns\_event\_names,}
\DoxyCodeLine{        .pre\_term = NULL,}
\DoxyCodeLine{        .log\_subsys = DLNS,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}, and \textbf{ ns2\+\_\+sns\+\_\+sgsn\+\_\+fsm\+\_\+alloc()}.

\mbox{\label{gprs__ns2__sns_8c_a671f32b102ebe840125180c54060ff0c}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!gprs\_sns\_event\_names@{gprs\_sns\_event\_names}}
\index{gprs\_sns\_event\_names@{gprs\_sns\_event\_names}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{gprs\_sns\_event\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} gprs\+\_\+sns\+\_\+event\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_SELECT\_ENDPOINT, \textcolor{stringliteral}{"{}REQ\_SELECT\_ENDPOINT"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_SIZE,                 \textcolor{stringliteral}{"{}RX\_SIZE"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_SIZE\_ACK,         \textcolor{stringliteral}{"{}RX\_SIZE\_ACK"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_CONFIG,             \textcolor{stringliteral}{"{}RX\_CONFIG"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_CONFIG\_END,             \textcolor{stringliteral}{"{}RX\_CONFIG\_END"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_CONFIG\_ACK,             \textcolor{stringliteral}{"{}RX\_CONFIG\_ACK"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_ADD,                   \textcolor{stringliteral}{"{}RX\_ADD"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_DELETE,             \textcolor{stringliteral}{"{}RX\_DELETE"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_ACK,                   \textcolor{stringliteral}{"{}RX\_ACK"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_RX\_CHANGE\_WEIGHT,               \textcolor{stringliteral}{"{}RX\_CHANGE\_WEIGHT"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_NO\_NSVC,         \textcolor{stringliteral}{"{}REQ\_NO\_NSVC"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_FREE\_NSVCS,           \textcolor{stringliteral}{"{}REQ\_FREE\_NSVCS"{}} \},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_NSVC\_ALIVE,           \textcolor{stringliteral}{"{}REQ\_NSVC\_ALIVE"{}}\},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_ADD\_BIND,               \textcolor{stringliteral}{"{}REQ\_ADD\_BIND"{}}\},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_DELETE\_BIND,         \textcolor{stringliteral}{"{}REQ\_DELETE\_BIND"{}}\},}
\DoxyCodeLine{        \{ NS2\_SNS\_EV\_REQ\_CHANGE\_WEIGHT,     \textcolor{stringliteral}{"{}REQ\_CHANGE\_WEIGHT"{}}\},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}
\mbox{\label{gprs__ns2__sns_8c_abe208947e32a0a13cfe069a5a890f087}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_bss\_states@{ns2\_sns\_bss\_states}}
\index{ns2\_sns\_bss\_states@{ns2\_sns\_bss\_states}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_bss\_states}
{\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+fsm\+\_\+state} ns2\+\_\+sns\+\_\+bss\+\_\+states[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{gprs__ns2__sns_8c_a4dc37c8246ce45f237a7c1d8118b9621}} 
\index{gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}!ns2\_sns\_sgsn\_states@{ns2\_sns\_sgsn\_states}}
\index{ns2\_sns\_sgsn\_states@{ns2\_sns\_sgsn\_states}!gprs\_ns2\_sns.c@{gprs\_ns2\_sns.c}}
\doxysubsubsection{ns2\_sns\_sgsn\_states}
{\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+fsm\+\_\+state} ns2\+\_\+sns\+\_\+sgsn\+\_\+states[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

