\doxysection{src/gb/gprs\+\_\+ns\+\_\+sns.c File Reference}
\label{gprs__ns__sns_8c}\index{src/gb/gprs\_ns\_sns.c@{src/gb/gprs\_ns\_sns.c}}
{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$netinet/in.\+h$>$}\newline
{\ttfamily \#include $<$arpa/inet.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/fsm.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/signal.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/socket.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/tlv.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+ns.\+h$>$}\newline
{\ttfamily \#include \char`\"{}common\+\_\+vty.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}gb\+\_\+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{ gprs\+\_\+sns\+\_\+state}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ S}(x)~(1 $<$$<$ (x))
\item 
\#define \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+data}(x,  y)~\textbf{ ip4\+\_\+weight\+\_\+sum}(x, y, true)
\item 
\#define \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+sig}(x,  y)~\textbf{ ip4\+\_\+weight\+\_\+sum}(x, y, false)
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\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{ gprs\+\_\+sns\+\_\+event} \{ \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+START}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE\+\_\+\+ACK}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+END}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+ACK}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+ADD}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+DELETE}
, \newline
\textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CHANGE\+\_\+\+WEIGHT}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$ \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static int \textbf{ ip4\+\_\+weight\+\_\+sum} (const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4, unsigned int num, bool \textbf{ data\+\_\+weight})
\item 
static struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static struct \textbf{ gprs\+\_\+nsvc} $\ast$ \textbf{ gprs\+\_\+nsvc\+\_\+create\+\_\+ip4} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ create\+\_\+missing\+\_\+nsvcs} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static int \textbf{ add\+\_\+remote\+\_\+ip4\+\_\+elem} (struct \textbf{ gprs\+\_\+sns\+\_\+state} $\ast$gss, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ remove\+\_\+remote\+\_\+ip4\+\_\+elem} (struct \textbf{ gprs\+\_\+sns\+\_\+state} $\ast$gss, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ update\+\_\+remote\+\_\+ip4\+\_\+elem} (struct \textbf{ gprs\+\_\+sns\+\_\+state} $\ast$gss, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\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)
\item 
static int \textbf{ do\+\_\+sns\+\_\+delete} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static int \textbf{ do\+\_\+sns\+\_\+add} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+unconfigured} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+size} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+size\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+config\+\_\+bss} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+config\+\_\+bss\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+config\+\_\+sgsn} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+configured} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+configured\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t old\+\_\+state)
\item 
static int \textbf{ gprs\+\_\+sns\+\_\+fsm\+\_\+bss\+\_\+timer\+\_\+cb} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+alloc} (void $\ast$ctx, struct \textbf{ gprs\+\_\+nsvc} $\ast$nsvc, const char $\ast$id)
\item 
int \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+start} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi)
\item 
int \textbf{ gprs\+\_\+ns\+\_\+rx\+\_\+sns} (struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, struct \textbf{ msgb} $\ast$\textbf{ msg}, struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
int \textbf{ gprs\+\_\+sns\+\_\+init} (void)
\item 
static void \textbf{ vty\+\_\+dump\+\_\+sns\+\_\+ip4} (struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$ip4)
\item 
void \textbf{ gprs\+\_\+sns\+\_\+dump\+\_\+vty} (struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$nsi, bool stats)
\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{ gprs\+\_\+sns\+\_\+bss\+\_\+states} [$\,$]
\item 
static struct \textbf{ osmo\+\_\+fsm} \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+fsm}
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{gprs__ns__sns_8c_a8a1cc8ea200d518a3300e449ca2cea24}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!ip4\_weight\_sum\_data@{ip4\_weight\_sum\_data}}
\index{ip4\_weight\_sum\_data@{ip4\_weight\_sum\_data}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{ip4\_weight\_sum\_data}
{\footnotesize\ttfamily \#define ip4\+\_\+weight\+\_\+sum\+\_\+data(\begin{DoxyParamCaption}\item[{}]{x,  }\item[{}]{y }\end{DoxyParamCaption})~\textbf{ ip4\+\_\+weight\+\_\+sum}(x, y, true)}

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

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



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{gprs__ns__sns_8c_aff00e0f915fdcf2f61a70410aa51d27b}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_bss\_state@{gprs\_sns\_bss\_state}}
\index{gprs\_sns\_bss\_state@{gprs\_sns\_bss\_state}!gprs\_ns\_sns.c@{gprs\_ns\_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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_BSS\_SIZE@{GPRS\_SNS\_ST\_BSS\_SIZE}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS@{GPRS\_SNS\_ST\_BSS\_CONFIG\_BSS}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_BSS\_CONFIG\_SGSN}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK@{GPRS\_SNS\_ST\_SGSN\_WAIT\_CONFIG\_ACK}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_LOCAL\_PROCEDURE@{GPRS\_SNS\_ST\_LOCAL\_PROCEDURE}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_UNCONFIGURED@{GPRS\_SNS\_ST\_UNCONFIGURED}}}\mbox{\label{gprs__ns__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba656d8aae7c7ee15097186562e236ecf8}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_ST\_SIZE@{GPRS\_SNS\_ST\_SIZE}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_SIZE@{GPRS\_SNS\_ST\_SIZE}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_CONFIG\_BSS@{GPRS\_SNS\_ST\_CONFIG\_BSS}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_CONFIG\_SGSN@{GPRS\_SNS\_ST\_CONFIG\_SGSN}}}\mbox{\label{gprs__ns__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\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_ST\_CONFIGURED@{GPRS\_SNS\_ST\_CONFIGURED}}}\mbox{\label{gprs__ns__sns_8c_aff00e0f915fdcf2f61a70410aa51d27ba2ad6975f70b9c84279439b80acbe5056}} 
GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_event@{gprs\_sns\_event}}
\index{gprs\_sns\_event@{gprs\_sns\_event}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_event}
{\footnotesize\ttfamily enum \textbf{ gprs\+\_\+sns\+\_\+event}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_START@{GPRS\_SNS\_EV\_START}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_START@{GPRS\_SNS\_EV\_START}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a2aa9ed61db071c5039d11c1ce9ef9c8c}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+START&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_SIZE@{GPRS\_SNS\_EV\_SIZE}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_SIZE@{GPRS\_SNS\_EV\_SIZE}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30ab871e2ab4cc057e58d35e0097241e89f}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_SIZE\_ACK@{GPRS\_SNS\_EV\_SIZE\_ACK}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_SIZE\_ACK@{GPRS\_SNS\_EV\_SIZE\_ACK}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a1f12740f0318a00e136f7f9cd3bf70ad}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_CONFIG@{GPRS\_SNS\_EV\_CONFIG}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_CONFIG@{GPRS\_SNS\_EV\_CONFIG}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a97d63d5a950dcd8d8e48260c1ce4bd25}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_CONFIG\_END@{GPRS\_SNS\_EV\_CONFIG\_END}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_CONFIG\_END@{GPRS\_SNS\_EV\_CONFIG\_END}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a403098bf63afe9fe37043d956069d6a1}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+END&SNS-\/\+CONFIG with end flag received. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_CONFIG\_ACK@{GPRS\_SNS\_EV\_CONFIG\_ACK}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_CONFIG\_ACK@{GPRS\_SNS\_EV\_CONFIG\_ACK}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a04dc60212358a4730355a61f67a1abae}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_ADD@{GPRS\_SNS\_EV\_ADD}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_ADD@{GPRS\_SNS\_EV\_ADD}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30a880591637fbc4c69b91553326142c934}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+ADD&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_DELETE@{GPRS\_SNS\_EV\_DELETE}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_DELETE@{GPRS\_SNS\_EV\_DELETE}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30aa6d5d2281c563baa9d782b929c3e3e7f}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+DELETE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{GPRS\_SNS\_EV\_CHANGE\_WEIGHT@{GPRS\_SNS\_EV\_CHANGE\_WEIGHT}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!GPRS\_SNS\_EV\_CHANGE\_WEIGHT@{GPRS\_SNS\_EV\_CHANGE\_WEIGHT}}}\mbox{\label{gprs__ns__sns_8c_a7e62c11ab45dccd0e96d4acb1bfc8b30afbd491a0fb84441144db8eb81a14b1b3}} 
GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CHANGE\+\_\+\+WEIGHT&\\
\hline

\end{DoxyEnumFields}


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



References \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}, and \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}.



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

\mbox{\label{gprs__ns__sns_8c_addcf2730ff79acd69000a6987cdb1d5b}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!create\_missing\_nsvcs@{create\_missing\_nsvcs}}
\index{create\_missing\_nsvcs@{create\_missing\_nsvcs}!gprs\_ns\_sns.c@{gprs\_ns\_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{ gprs\+\_\+nsvc\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str()}, \textbf{ gprs\+\_\+nsvc\+\_\+create\+\_\+ip4()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+nsvc\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ gprs\+\_\+nsvc\+::sig\+\_\+weight}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}.



Referenced by \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+config\+\_\+sgsn()}.

\mbox{\label{gprs__ns__sns_8c_a12fb0ec3704cb0d7a3817e7cb9e71e8e}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!do\_sns\_add@{do\_sns\_add}}
\index{do\_sns\_add@{do\_sns\_add}!gprs\_ns\_sns.c@{gprs\_ns\_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 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+remote\+\_\+ip4\+\_\+elem()}, \textbf{ gprs\+\_\+nsvc\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str()}, \textbf{ gprs\+\_\+nsvc\+\_\+create\+\_\+ip4()}, \textbf{ gprs\+\_\+nsvc\+\_\+start\+\_\+test()}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+EQUIP\+\_\+\+FAIL}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+NS\+\_\+\+VC}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+PROTO\+\_\+\+ERR\+\_\+\+UNSPEC}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+nsvc\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ remove\+\_\+remote\+\_\+ip4\+\_\+elem()}, and \textbf{ gprs\+\_\+nsvc\+::sig\+\_\+weight}.



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

\mbox{\label{gprs__ns__sns_8c_ab082608a84b6a59c4223e5096fb5374f}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!do\_sns\_change\_weight@{do\_sns\_change\_weight}}
\index{do\_sns\_change\_weight@{do\_sns\_change\_weight}!gprs\_ns\_sns.c@{gprs\_ns\_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 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+nsvc\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str()}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+NSVC\+\_\+\+UNKNOWN}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+nsvc\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ gprs\+\_\+nsvc\+::sig\+\_\+weight}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, and \textbf{ update\+\_\+remote\+\_\+ip4\+\_\+elem()}.



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

\mbox{\label{gprs__ns__sns_8c_a1da0f766cc2e06e5cc7a613f942af059}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!do\_sns\_delete@{do\_sns\_delete}}
\index{do\_sns\_delete@{do\_sns\_delete}!gprs\_ns\_sns.c@{gprs\_ns\_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 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ gprs\+\_\+ns\+\_\+ll\+\_\+str()}, \textbf{ gprs\+\_\+nsvc\+\_\+delete()}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+NSVC\+\_\+\+UNKNOWN}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+UNKN\+\_\+\+IP\+\_\+\+EP}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+nsvc\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ nsvc\+\_\+by\+\_\+ip4\+\_\+elem()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ remove\+\_\+remote\+\_\+ip4\+\_\+elem()}.



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

\mbox{\label{gprs__ns__sns_8c_adeeafe99a980eb2612867f0d0cd92703}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_ns\_rx\_sns@{gprs\_ns\_rx\_sns}}
\index{gprs\_ns\_rx\_sns@{gprs\_ns\_rx\_sns}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_ns\_rx\_sns()}
{\footnotesize\ttfamily int gprs\+\_\+ns\+\_\+rx\+\_\+sns (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$}]{nsi,  }\item[{struct \textbf{ msgb} $\ast$}]{msg,  }\item[{struct \textbf{ tlv\+\_\+parsed} $\ast$}]{tp }\end{DoxyParamCaption})}



References \textbf{ gprs\+\_\+ns\+\_\+inst\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns\+\_\+hdr\+::data}, \textbf{ DNS}, \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ gprs\+\_\+ns\+\_\+pdu\+\_\+strings}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+ADD}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+END}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+DELETE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE\+\_\+\+ACK}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGP}, \textbf{ msg}, \textbf{ msgb\+\_\+nsei}, \textbf{ nsei}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}, \textbf{ gprs\+\_\+ns\+\_\+hdr\+::pdu\+\_\+type}, \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}.



Referenced by \textbf{ gprs\+\_\+ns\+\_\+process\+\_\+msg()}.

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



References \textbf{ gprs\+\_\+ns\+\_\+inst\+::bss\+\_\+sns\+\_\+fi}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+nsvc\+\_\+create2()}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+sns\+\_\+state\+::next\+\_\+nsvci}, \textbf{ gprs\+\_\+nsvc\+::nsei}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ create\+\_\+missing\+\_\+nsvcs()}, and \textbf{ do\+\_\+sns\+\_\+add()}.

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



References \textbf{ gprs\+\_\+nsvc\+::bts\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::data\+\_\+weight}, \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+fsm}, \textbf{ gprs\+\_\+nsvc\+::ip}, \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+local}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::local\+\_\+ip}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::local\+\_\+port}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ gprs\+\_\+sns\+\_\+state\+::next\+\_\+nsvci}, \textbf{ gprs\+\_\+nsvc\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::nsip}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+local}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+alloc()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+term}, \textbf{ OSMO\+\_\+\+FSM\+\_\+\+TERM\+\_\+\+ERROR}, \textbf{ osmo\+\_\+sock\+\_\+local\+\_\+ip()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::sig\+\_\+weight}, and \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::udp\+\_\+port}.



Referenced by \textbf{ gprs\+\_\+ns\+\_\+nsip\+\_\+connect\+\_\+sns()}.

\mbox{\label{gprs__ns__sns_8c_a0b79a9e6e7a682928f05484bde50dcc7}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_bss\_fsm\_start@{gprs\_sns\_bss\_fsm\_start}}
\index{gprs\_sns\_bss\_fsm\_start@{gprs\_sns\_bss\_fsm\_start}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_bss\_fsm\_start()}
{\footnotesize\ttfamily int gprs\+\_\+sns\+\_\+bss\+\_\+fsm\+\_\+start (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$}]{nsi }\end{DoxyParamCaption})}



References \textbf{ gprs\+\_\+ns\+\_\+inst\+::bss\+\_\+sns\+\_\+fi}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+START}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+dispatch}.



Referenced by \textbf{ gprs\+\_\+ns\+\_\+nsip\+\_\+connect\+\_\+sns()}.

\mbox{\label{gprs__ns__sns_8c_a2cb17918aa03e15bfe2792bef0335ee5}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_dump\_vty@{gprs\_sns\_dump\_vty}}
\index{gprs\_sns\_dump\_vty@{gprs\_sns\_dump\_vty}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_dump\_vty()}
{\footnotesize\ttfamily void gprs\+\_\+sns\+\_\+dump\+\_\+vty (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+inst} $\ast$}]{nsi,  }\item[{bool}]{stats }\end{DoxyParamCaption})}



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



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

\mbox{\label{gprs__ns__sns_8c_ad30de1dab1cd014d90a0f855d9d414bd}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_fsm\_bss\_timer\_cb@{gprs\_sns\_fsm\_bss\_timer\_cb}}
\index{gprs\_sns\_fsm\_bss\_timer\_cb@{gprs\_sns\_fsm\_bss\_timer\_cb}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_fsm\_bss\_timer\_cb()}
{\footnotesize\ttfamily static int gprs\+\_\+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\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SIZE}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::T}, and \textbf{ gprs\+\_\+ns\+\_\+inst\+::timeout}.

\mbox{\label{gprs__ns__sns_8c_a5dc9cef920e0753b4d42b0f0419d52be}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_init@{gprs\_sns\_init}}
\index{gprs\_sns\_init@{gprs\_sns\_init}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_init()}
{\footnotesize\ttfamily int gprs\+\_\+sns\+\_\+init (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



References \textbf{ DNS}, \textbf{ gprs\+\_\+sns\+\_\+bss\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+::log\+\_\+subsys}, and \textbf{ osmo\+\_\+fsm\+\_\+register()}.



Referenced by \textbf{ gprs\+\_\+ns\+\_\+instantiate()}.

\mbox{\label{gprs__ns__sns_8c_a3ad839b8b45fff2acfe78ecdc7db89aa}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_config\_bss@{gprs\_sns\_st\_config\_bss}}
\index{gprs\_sns\_st\_config\_bss@{gprs\_sns\_st\_config\_bss}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_config\_bss()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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\+\_\+ns\+\_\+cause\+\_\+str()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+ACK}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+SGSN}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ TLVP\+\_\+\+VAL\+\_\+\+MINLEN}.

\mbox{\label{gprs__ns__sns_8c_a04dd619c38b659cf3eca190b6fcd7d88}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_config\_bss\_onenter@{gprs\_sns\_st\_config\_bss\_onenter}}
\index{gprs\_sns\_st\_config\_bss\_onenter@{gprs\_sns\_st\_config\_bss\_onenter}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_config\_bss\_onenter()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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{ gprs\+\_\+ns\+\_\+tx\+\_\+sns\+\_\+config()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+local}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+local}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{gprs__ns__sns_8c_ad129561201f8dcfefca3fbf3bb4de6fa}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_config\_sgsn@{gprs\_sns\_st\_config\_sgsn}}
\index{gprs\_sns\_st\_config\_sgsn@{gprs\_sns\_st\_config\_sgsn}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_config\_sgsn()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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\+\_\+ns\+\_\+tx\+\_\+sns\+\_\+config\+\_\+ack()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CONFIG\+\_\+\+END}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIGURED}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+UNCONFIGURED}, \textbf{ gprs\+\_\+start\+\_\+alive\+\_\+all\+\_\+nsvcs()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+data}, \textbf{ ip4\+\_\+weight\+\_\+sum\+\_\+sig}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+WEIGH}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+RESET\+\_\+\+FLAG}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.

\mbox{\label{gprs__ns__sns_8c_a398b57d897c300a7354e4910b420f129}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_configured@{gprs\_sns\_st\_configured}}
\index{gprs\_sns\_st\_configured@{gprs\_sns\_st\_configured}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_configured()}
{\footnotesize\ttfamily static void gprs\+\_\+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{ cause}, \textbf{ data}, \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}, \textbf{ do\+\_\+sns\+\_\+delete()}, \textbf{ gprs\+\_\+ns\+\_\+tx\+\_\+sns\+\_\+ack()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+ADD}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+CHANGE\+\_\+\+WEIGHT}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+DELETE}, \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, \textbf{ ip\+\_\+addr}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+INVAL\+\_\+\+NR\+\_\+\+IPv4\+\_\+\+EP}, \textbf{ NS\+\_\+\+CAUSE\+\_\+\+UNKN\+\_\+\+IP\+\_\+\+ADDR}, \textbf{ NS\+\_\+\+IE\+\_\+\+IP\+\_\+\+ADDR}, \textbf{ NS\+\_\+\+IE\+\_\+\+IPv4\+\_\+\+LIST}, \textbf{ NS\+\_\+\+IE\+\_\+\+TRANS\+\_\+\+ID}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ TLVP\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRES\+\_\+\+LEN}, \textbf{ TLVP\+\_\+\+PRESENT}, and \textbf{ TLVP\+\_\+\+VAL}.

\mbox{\label{gprs__ns__sns_8c_accda470491e192eab6bc33fb85529075}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_configured\_onenter@{gprs\_sns\_st\_configured\_onenter}}
\index{gprs\_sns\_st\_configured\_onenter@{gprs\_sns\_st\_configured\_onenter}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_configured\_onenter()}
{\footnotesize\ttfamily static void gprs\+\_\+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{ osmo\+\_\+signal\+\_\+dispatch()}, \textbf{ S\+\_\+\+SNS\+\_\+\+CONFIGURED}, and \textbf{ SS\+\_\+\+L\+\_\+\+NS}.

\mbox{\label{gprs__ns__sns_8c_a7c3666ee59e71fb9d3df734117882c74}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_size@{gprs\_sns\_st\_size}}
\index{gprs\_sns\_st\_size@{gprs\_sns\_st\_size}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_size()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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\+\_\+ns\+\_\+cause\+\_\+str()}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+EV\+\_\+\+SIZE\+\_\+\+ACK}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+CONFIG\+\_\+\+BSS}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGPFSML}, \textbf{ NS\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ gprs\+\_\+ns\+\_\+inst\+::timeout}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ TLVP\+\_\+\+VAL\+\_\+\+MINLEN}.

\mbox{\label{gprs__ns__sns_8c_a371052970ce47b1f480ed50c05fa6fd4}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_size\_onenter@{gprs\_sns\_st\_size\_onenter}}
\index{gprs\_sns\_st\_size\_onenter@{gprs\_sns\_st\_size\_onenter}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_size\_onenter()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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{ gprs\+\_\+ns\+\_\+tx\+\_\+sns\+\_\+size()}, \textbf{ gprs\+\_\+sns\+\_\+state\+::nsvc\+\_\+hack}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+ip4\+\_\+remote}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+max\+\_\+nsvcs}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{gprs__ns__sns_8c_a2a6733d1a9233db03ba27d03a5d6616b}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_st\_unconfigured@{gprs\_sns\_st\_unconfigured}}
\index{gprs\_sns\_st\_unconfigured@{gprs\_sns\_st\_unconfigured}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{gprs\_sns\_st\_unconfigured()}
{\footnotesize\ttfamily static void gprs\+\_\+sns\+\_\+st\+\_\+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\+\_\+\+EV\+\_\+\+START}, \textbf{ GPRS\+\_\+\+SNS\+\_\+\+ST\+\_\+\+SIZE}, \textbf{ ns\+\_\+inst\+\_\+from\+\_\+fi()}, \textbf{ NS\+\_\+\+TOUT\+\_\+\+TSNS\+\_\+\+PROV}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, and \textbf{ gprs\+\_\+ns\+\_\+inst\+::timeout}.

\mbox{\label{gprs__ns__sns_8c_aed3b902dc9532ac04c993486a769a844}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!ip4\_weight\_sum@{ip4\_weight\_sum}}
\index{ip4\_weight\_sum@{ip4\_weight\_sum}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{ip4\_weight\_sum()}
{\footnotesize\ttfamily static int ip4\+\_\+weight\+\_\+sum (\begin{DoxyParamCaption}\item[{const struct \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem} $\ast$}]{ip4,  }\item[{unsigned int}]{num,  }\item[{bool}]{data\+\_\+weight }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



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

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



References \textbf{ gprs\+\_\+sns\+\_\+state\+::nsi}, 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{ gprs\+\_\+sns\+\_\+fsm\+\_\+bss\+\_\+timer\+\_\+cb()}, \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+config\+\_\+sgsn()}, \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+size()}, and \textbf{ gprs\+\_\+sns\+\_\+st\+\_\+unconfigured()}.

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



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



Referenced by \textbf{ create\+\_\+missing\+\_\+nsvcs()}, \textbf{ do\+\_\+sns\+\_\+add()}, \textbf{ do\+\_\+sns\+\_\+change\+\_\+weight()}, and \textbf{ do\+\_\+sns\+\_\+delete()}.

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



References \textbf{ gprs\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, and \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}.



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

\mbox{\label{gprs__ns__sns_8c_a60a2ee285ba4b04cae2112b59993fb2a}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!update\_remote\_ip4\_elem@{update\_remote\_ip4\_elem}}
\index{update\_remote\_ip4\_elem@{update\_remote\_ip4\_elem}!gprs\_ns\_sns.c@{gprs\_ns\_sns.c}}
\doxysubsubsection{update\_remote\_ip4\_elem()}
{\footnotesize\ttfamily static int update\+\_\+remote\+\_\+ip4\+\_\+elem (\begin{DoxyParamCaption}\item[{struct \textbf{ gprs\+\_\+sns\+\_\+state} $\ast$}]{gss,  }\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\+\_\+sns\+\_\+state\+::ip4\+\_\+remote}, \textbf{ gprs\+\_\+ns\+\_\+ie\+\_\+ip4\+\_\+elem\+::ip\+\_\+addr}, \textbf{ gprs\+\_\+sns\+\_\+state\+::num\+\_\+ip4\+\_\+remote}, \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__ns__sns_8c_aa104e1b1928c14b370d24b5e229ae3d2}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!vty\_dump\_sns\_ip4@{vty\_dump\_sns\_ip4}}
\index{vty\_dump\_sns\_ip4@{vty\_dump\_sns\_ip4}!gprs\_ns\_sns.c@{gprs\_ns\_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 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{ gprs\+\_\+sns\+\_\+dump\+\_\+vty()}.



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

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}GPRS-\/SNS-\/BSS"{}},}
\DoxyCodeLine{        .states = gprs\_sns\_bss\_states,}
\DoxyCodeLine{        .num\_states = ARRAY\_SIZE(gprs\_sns\_bss\_states),}
\DoxyCodeLine{        .allstate\_event\_mask = 0,}
\DoxyCodeLine{        .allstate\_action = NULL,}
\DoxyCodeLine{        .cleanup = NULL,}
\DoxyCodeLine{        .timer\_cb = gprs\_sns\_fsm\_bss\_timer\_cb,}
\DoxyCodeLine{        }
\DoxyCodeLine{        .event\_names = gprs\_sns\_event\_names,}
\DoxyCodeLine{        .pre\_term = NULL,}
\DoxyCodeLine{\}}

\end{DoxyCode}


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

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

\mbox{\label{gprs__ns__sns_8c_a671f32b102ebe840125180c54060ff0c}} 
\index{gprs\_ns\_sns.c@{gprs\_ns\_sns.c}!gprs\_sns\_event\_names@{gprs\_sns\_event\_names}}
\index{gprs\_sns\_event\_names@{gprs\_sns\_event\_names}!gprs\_ns\_sns.c@{gprs\_ns\_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{        \{ GPRS\_SNS\_EV\_START,           \textcolor{stringliteral}{"{}START"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_SIZE,             \textcolor{stringliteral}{"{}SIZE"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_SIZE\_ACK,             \textcolor{stringliteral}{"{}SIZE\_ACK"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_CONFIG,         \textcolor{stringliteral}{"{}CONFIG"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_CONFIG\_END, \textcolor{stringliteral}{"{}CONFIG\_END"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_CONFIG\_ACK, \textcolor{stringliteral}{"{}CONFIG\_ACK"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_ADD,               \textcolor{stringliteral}{"{}ADD"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_DELETE,         \textcolor{stringliteral}{"{}DELETE"{}} \},}
\DoxyCodeLine{        \{ GPRS\_SNS\_EV\_CHANGE\_WEIGHT,   \textcolor{stringliteral}{"{}CHANGE\_WEIGHT"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}
