\doxysection{src/gb/bssgp\+\_\+bvc\+\_\+fsm.c File Reference}
\label{bssgp__bvc__fsm_8c}\index{src/gb/bssgp\_bvc\_fsm.c@{src/gb/bssgp\_bvc\_fsm.c}}
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/fsm.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/tdef.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/gsm48.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/tlv.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+bssgp.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/gprs\+\_\+bssgp2.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gprs/bssgp\+\_\+bvc\+\_\+fsm.\+h$>$}\newline
{\ttfamily \#include \char`\"{}common\+\_\+vty.\+h\char`\"{}}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ bvc\+\_\+fsm\+\_\+priv}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ S}(\textbf{ x})~(1 $<$$<$ (\textbf{ x}))
\item 
\#define \textbf{ T1}~1
\item 
\#define \textbf{ T2}~2
\item 
\#define \textbf{ T1\+\_\+\+SECS}~\textbf{ osmo\+\_\+tdef\+\_\+get}(\textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs}, 1, \textbf{ OSMO\+\_\+\+TDEF\+\_\+S}, 5)
\item 
\#define \textbf{ T2\+\_\+\+SECS}~\textbf{ osmo\+\_\+tdef\+\_\+get}(\textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs}, 2, \textbf{ OSMO\+\_\+\+TDEF\+\_\+S}, 10)
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static int \textbf{ fi\+\_\+tx\+\_\+ptp} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static int \textbf{ fi\+\_\+tx\+\_\+sig} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static void \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint8\+\_\+t \textbf{ cause})
\item 
static void \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static void \textbf{ \+\_\+tx\+\_\+status} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, enum \textbf{ gprs\+\_\+bssgp\+\_\+cause} \textbf{ cause}, const struct \textbf{ msgb} $\ast$rx)
\item 
static void \textbf{ update\+\_\+negotiated\+\_\+features} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ tlv\+\_\+parsed} $\ast$tp)
\item 
static void \textbf{ \+\_\+onenter\+\_\+tail} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t prev\+\_\+state)
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+null} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked\+\_\+onenter} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t prev\+\_\+state)
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+wait\+\_\+reset\+\_\+ack} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+unblocked} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+allstate} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint32\+\_\+t \textbf{ event}, void $\ast$\textbf{ data})
\item 
static int \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+timer\+\_\+cb} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\item 
static struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc} (void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, bool role\+\_\+sgsn, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t \textbf{ bvci})
\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+bss} (void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, uint32\+\_\+t features)
\begin{DoxyCompactList}\small\item\em Allocate a SIGNALING-\/\+BVC FSM for the BSS role (facing a remote SGSN). \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+bss} (void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t \textbf{ bvci}, const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$\textbf{ ra\+\_\+id}, uint16\+\_\+t cell\+\_\+id)
\begin{DoxyCompactList}\small\item\em Allocate a PTP-\/\+BVC FSM for the BSS role (facing a remote SGSN). \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+sgsn} (void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, uint32\+\_\+t features)
\begin{DoxyCompactList}\small\item\em Allocate a SIGNALING-\/\+BVC FSM for the SGSN role (facing a remote BSS). \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+sgsn} (void $\ast$ctx, struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$nsi, uint16\+\_\+t \textbf{ nsei}, uint16\+\_\+t \textbf{ bvci})
\begin{DoxyCompactList}\small\item\em Allocate a PTP-\/\+BVC FSM for the SGSN role (facing a remote BSS). \end{DoxyCompactList}\item 
void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+ops} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, const struct \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops} $\ast$ops, void $\ast$ops\+\_\+priv)
\begin{DoxyCompactList}\small\item\em Set the \textquotesingle{}operations\textquotesingle{} callbacks + private data. \end{DoxyCompactList}\item 
bool \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+is\+\_\+unblocked} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Return if the given BVC FSM is in UNBLOCKED state. \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+block\+\_\+cause} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Determine the cause value why given BVC FSM is blocked. \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+advertised} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Return the advertised features / extended features. \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+received} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Return the received features / extended features. \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+negotiated} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Return the negotiated features / extended features. \end{DoxyCompactList}\item 
void \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+max\+\_\+pdu\+\_\+len} (struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi, uint16\+\_\+t max\+\_\+pdu\+\_\+len)
\begin{DoxyCompactList}\small\item\em Set the maximum size of a BSSGP PDU. \end{DoxyCompactList}\item 
uint16\+\_\+t \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+max\+\_\+pdu\+\_\+len} (const struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$fi)
\begin{DoxyCompactList}\small\item\em Return the maximum size of a BSSGP PDU ! On the NS layer this corresponds to the size of an NS SDU in NS-\/\+UNITDATA (3GPP TS 48.\+016 Ch. \end{DoxyCompactList}\item 
static \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+} ((constructor))
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ osmo\+\_\+tdef} \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs} [$\,$]
\item 
static struct \textbf{ osmo\+\_\+fsm} \textbf{ bssgp\+\_\+bvc\+\_\+fsm}
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ ptp\+\_\+bvc\+\_\+event\+\_\+names} [$\,$]
\item 
static const struct \textbf{ osmo\+\_\+fsm\+\_\+state} \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+states} [$\,$]
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{bssgp__bvc__fsm_8c_ac4a3ed3432929804c708f7760fb79e28}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!S@{S}}
\index{S@{S}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{S}
{\footnotesize\ttfamily \#define S(\begin{DoxyParamCaption}\item[{}]{\textbf{ x} }\end{DoxyParamCaption})~(1 $<$$<$ (\textbf{ x}))}

\mbox{\label{bssgp__bvc__fsm_8c_ac16509a75e3d3fc46b9df1726be486ec}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!T1@{T1}}
\index{T1@{T1}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{T1}
{\footnotesize\ttfamily \#define T1~1}

\mbox{\label{bssgp__bvc__fsm_8c_adf7f58e03a45f696d20842af8ed02741}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!T1\_SECS@{T1\_SECS}}
\index{T1\_SECS@{T1\_SECS}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{T1\_SECS}
{\footnotesize\ttfamily \#define T1\+\_\+\+SECS~\textbf{ osmo\+\_\+tdef\+\_\+get}(\textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs}, 1, \textbf{ OSMO\+\_\+\+TDEF\+\_\+S}, 5)}

\mbox{\label{bssgp__bvc__fsm_8c_a259c2993ee45e06a4ea8150451a7a70e}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!T2@{T2}}
\index{T2@{T2}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{T2}
{\footnotesize\ttfamily \#define T2~2}

\mbox{\label{bssgp__bvc__fsm_8c_a57ba30b7e44cce08d578a18bdef86d99}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!T2\_SECS@{T2\_SECS}}
\index{T2\_SECS@{T2\_SECS}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{T2\_SECS}
{\footnotesize\ttfamily \#define T2\+\_\+\+SECS~\textbf{ osmo\+\_\+tdef\+\_\+get}(\textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs}, 2, \textbf{ OSMO\+\_\+\+TDEF\+\_\+S}, 10)}



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



References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+register()}.

\mbox{\label{bssgp__bvc__fsm_8c_ab803d38e7b96fbc8ee80f3246f583d3e}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!\_bvc\_fsm\_alloc@{\_bvc\_fsm\_alloc}}
\index{\_bvc\_fsm\_alloc@{\_bvc\_fsm\_alloc}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{\_bvc\_fsm\_alloc()}
{\footnotesize\ttfamily static struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ \+\_\+bvc\+\_\+fsm\+\_\+alloc (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$}]{nsi,  }\item[{bool}]{role\+\_\+sgsn,  }\item[{uint16\+\_\+t}]{nsei,  }\item[{uint16\+\_\+t}]{bvci }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvci}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ LOGL\+\_\+\+INFO}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::max\+\_\+pdu\+\_\+len}, \textbf{ nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsi}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+alloc()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+free()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+bss()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+sgsn()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+bss()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+sgsn()}.

\mbox{\label{bssgp__bvc__fsm_8c_a97807422600111ec24e2b26d9040457c}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!\_onenter\_tail@{\_onenter\_tail}}
\index{\_onenter\_tail@{\_onenter\_tail}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{\_onenter\_tail()}
{\footnotesize\ttfamily static void \+\_\+onenter\+\_\+tail (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{prev\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops\+\_\+priv}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops\+::state\+\_\+chg\+\_\+notification}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked\+\_\+onenter()}.

\mbox{\label{bssgp__bvc__fsm_8c_a6ef00065e7f8c0b9047df93401cb9114}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!\_tx\_bvc\_reset@{\_tx\_bvc\_reset}}
\index{\_tx\_bvc\_reset@{\_tx\_bvc\_reset}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{\_tx\_bvc\_reset()}
{\footnotesize\ttfamily static void \+\_\+tx\+\_\+bvc\+\_\+reset (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint8\+\_\+t}]{cause }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+reset()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ cause}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::cell\+\_\+id}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ra\+\_\+id}, and \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+allstate()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+timer\+\_\+cb()}.

\mbox{\label{bssgp__bvc__fsm_8c_af5ade0f7183898dc5296adc58b53c5fe}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!\_tx\_bvc\_reset\_ack@{\_tx\_bvc\_reset\_ack}}
\index{\_tx\_bvc\_reset\_ack@{\_tx\_bvc\_reset\_ack}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{\_tx\_bvc\_reset\_ack()}
{\footnotesize\ttfamily static void \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+reset\+\_\+ack()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::cell\+\_\+id}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ra\+\_\+id}, and \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+allstate()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+timer\+\_\+cb()}.

\mbox{\label{bssgp__bvc__fsm_8c_ae5703e3c24dc9209f13660cbcb184589}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!\_tx\_status@{\_tx\_status}}
\index{\_tx\_status@{\_tx\_status}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{\_tx\_status()}
{\footnotesize\ttfamily static void \+\_\+tx\+\_\+status (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{enum \textbf{ gprs\+\_\+bssgp\+\_\+cause}}]{cause,  }\item[{const struct \textbf{ msgb} $\ast$}]{rx }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bssgp2\+\_\+enc\+\_\+status()}, \textbf{ BSSGP\+\_\+\+CAUSE\+\_\+\+BVCI\+\_\+\+BLOCKED}, \textbf{ BSSGP\+\_\+\+CAUSE\+\_\+\+UNKNOWN\+\_\+\+BVCI}, \textbf{ bvci}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ cause}, \textbf{ fi\+\_\+tx\+\_\+ptp()}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::max\+\_\+pdu\+\_\+len}, \textbf{ msgb\+\_\+bvci}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+unblocked()}.

\mbox{\label{bssgp__bvc__fsm_8c_a3e479a5d63c7e1760f025fa4ca8e7576}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_alloc\_ptp\_bss@{bssgp\_bvc\_fsm\_alloc\_ptp\_bss}}
\index{bssgp\_bvc\_fsm\_alloc\_ptp\_bss@{bssgp\_bvc\_fsm\_alloc\_ptp\_bss}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_alloc\_ptp\_bss()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+bss (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$}]{nsi,  }\item[{uint16\+\_\+t}]{nsei,  }\item[{uint16\+\_\+t}]{bvci,  }\item[{const struct \textbf{ gprs\+\_\+ra\+\_\+id} $\ast$}]{ra\+\_\+id,  }\item[{uint16\+\_\+t}]{cell\+\_\+id }\end{DoxyParamCaption})}



Allocate a PTP-\/\+BVC FSM for the BSS role (facing a remote SGSN). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate \\
\hline
\mbox{\texttt{ in}}  & {\em nsi} & NS Instance on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em nsei} & NS Entity Identifier on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em bvci} & BVCI of this FSM \\
\hline
\mbox{\texttt{ in}}  & {\em ra\+\_\+id} & Routing Area Identity of the cell (reported to SGSN) \\
\hline
\mbox{\texttt{ in}}  & {\em cell\+\_\+id} & Cell Identifier of the cell (reported to SGSN) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
newly-\/allocated FSM Instance; NULL in case of error 
\end{DoxyReturn}


References \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc()}, \textbf{ bvci}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::cell\+\_\+id}, \textbf{ nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsi}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ra\+\_\+id}.

\mbox{\label{bssgp__bvc__fsm_8c_a9a1103beb7f81878c3aca6a615eb0eec}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_alloc\_ptp\_sgsn@{bssgp\_bvc\_fsm\_alloc\_ptp\_sgsn}}
\index{bssgp\_bvc\_fsm\_alloc\_ptp\_sgsn@{bssgp\_bvc\_fsm\_alloc\_ptp\_sgsn}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_alloc\_ptp\_sgsn()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+ptp\+\_\+sgsn (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$}]{nsi,  }\item[{uint16\+\_\+t}]{nsei,  }\item[{uint16\+\_\+t}]{bvci }\end{DoxyParamCaption})}



Allocate a PTP-\/\+BVC FSM for the SGSN role (facing a remote BSS). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate \\
\hline
\mbox{\texttt{ in}}  & {\em nsi} & NS Instance on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em nsei} & NS Entity Identifier on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em bvci} & BVCI of this FSM \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
newly-\/allocated FSM Instance; NULL in case of error 
\end{DoxyReturn}


References \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc()}, \textbf{ bvci}, \textbf{ nsei}, and \textbf{ OSMO\+\_\+\+ASSERT}.

\mbox{\label{bssgp__bvc__fsm_8c_afec5232a8c3c5b2ec1f5418ef325f4e7}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_alloc\_sig\_bss@{bssgp\_bvc\_fsm\_alloc\_sig\_bss}}
\index{bssgp\_bvc\_fsm\_alloc\_sig\_bss@{bssgp\_bvc\_fsm\_alloc\_sig\_bss}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_alloc\_sig\_bss()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+bss (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$}]{nsi,  }\item[{uint16\+\_\+t}]{nsei,  }\item[{uint32\+\_\+t}]{features }\end{DoxyParamCaption})}



Allocate a SIGNALING-\/\+BVC FSM for the BSS role (facing a remote SGSN). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate \\
\hline
\mbox{\texttt{ in}}  & {\em nsi} & NS Instance on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em nsei} & NS Entity Identifier on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em features} & Feature [byte 0] and Extended Feature [byte 1] bitmap \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
newly-\/allocated FSM Instance; NULL in case of error 
\end{DoxyReturn}


References \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ nsei}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_a7affab582f86dc3d68ff88232fa73844}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_alloc\_sig\_sgsn@{bssgp\_bvc\_fsm\_alloc\_sig\_sgsn}}
\index{bssgp\_bvc\_fsm\_alloc\_sig\_sgsn@{bssgp\_bvc\_fsm\_alloc\_sig\_sgsn}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_alloc\_sig\_sgsn()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$ bssgp\+\_\+bvc\+\_\+fsm\+\_\+alloc\+\_\+sig\+\_\+sgsn (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{struct \textbf{ gprs\+\_\+ns2\+\_\+inst} $\ast$}]{nsi,  }\item[{uint16\+\_\+t}]{nsei,  }\item[{uint32\+\_\+t}]{features }\end{DoxyParamCaption})}



Allocate a SIGNALING-\/\+BVC FSM for the SGSN role (facing a remote BSS). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context from which to allocate \\
\hline
\mbox{\texttt{ in}}  & {\em nsi} & NS Instance on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em nsei} & NS Entity Identifier on which this BVC operates \\
\hline
\mbox{\texttt{ in}}  & {\em features} & Feature [byte 0] and Extended Feature [byte 1] bitmap \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
newly-\/allocated FSM Instance; NULL in case of error 
\end{DoxyReturn}


References \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ nsei}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_aa43f98d4eb8d15cdb22a48f1eb5ccf8c}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_allstate@{bssgp\_bvc\_fsm\_allstate}}
\index{bssgp\_bvc\_fsm\_allstate@{bssgp\_bvc\_fsm\_allstate}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_allstate()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+allstate (\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{ \+\_\+tx\+\_\+bvc\+\_\+reset()}, \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack()}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+RESET}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+WAIT\+\_\+\+RESET\+\_\+\+ACK}, \textbf{ bssgp\+\_\+cause\+\_\+str()}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+CELL\+\_\+\+ID}, \textbf{ bssgp\+\_\+parse\+\_\+cell\+\_\+id()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ cause}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::cell\+\_\+id}, \textbf{ data}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::last\+\_\+reset\+\_\+cause}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::locally\+\_\+blocked}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ msgb\+\_\+bcid}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops\+\_\+priv}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ra\+\_\+id}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops\+::reset\+\_\+notification}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}, \textbf{ T2}, \textbf{ T2\+\_\+\+SECS}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ update\+\_\+negotiated\+\_\+features()}.

\mbox{\label{bssgp__bvc__fsm_8c_a566461c248c101dae736bc188399acde}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_blocked@{bssgp\_bvc\_fsm\_blocked}}
\index{bssgp\_bvc\_fsm\_blocked@{bssgp\_bvc\_fsm\_blocked}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_blocked()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked (\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{ \+\_\+tx\+\_\+status()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+block\+\_\+ack()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+unblock()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+unblock\+\_\+ack()}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+UNBLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK\+\_\+\+ACK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, \textbf{ BSSGP\+\_\+\+CAUSE\+\_\+\+SEM\+\_\+\+INCORR\+\_\+\+PDU}, \textbf{ bssgp\+\_\+cause\+\_\+str()}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ cause}, \textbf{ data}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::locally\+\_\+blocked}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ msgb\+\_\+bcid}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}, \textbf{ T1}, \textbf{ T1\+\_\+\+SECS}, and \textbf{ TLVP\+\_\+\+VAL}.

\mbox{\label{bssgp__bvc__fsm_8c_ae057c2bba9ce0cb71882bdc16fd0a67b}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_blocked\_onenter@{bssgp\_bvc\_fsm\_blocked\_onenter}}
\index{bssgp\_bvc\_fsm\_blocked\_onenter@{bssgp\_bvc\_fsm\_blocked\_onenter}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_blocked\_onenter()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked\+\_\+onenter (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint32\+\_\+t}]{prev\+\_\+state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+onenter\+\_\+tail()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_a61a8d3c073379f72e29b3e03afe80b7e}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_get\_block\_cause@{bssgp\_bvc\_fsm\_get\_block\_cause}}
\index{bssgp\_bvc\_fsm\_get\_block\_cause@{bssgp\_bvc\_fsm\_get\_block\_cause}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_get\_block\_cause()}
{\footnotesize\ttfamily uint8\+\_\+t bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+block\+\_\+cause (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Determine the cause value why given BVC FSM is blocked. 



References \textbf{ bvc\+\_\+fsm\+\_\+priv\+::block\+\_\+cause}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_ad50d06c709d7d0ffeda4132948d65118}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_get\_features\_advertised@{bssgp\_bvc\_fsm\_get\_features\_advertised}}
\index{bssgp\_bvc\_fsm\_get\_features\_advertised@{bssgp\_bvc\_fsm\_get\_features\_advertised}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_get\_features\_advertised()}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+advertised (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Return the advertised features / extended features. 



References \textbf{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_a72abbcaa099cbf23f2fc4caffbbb14c5}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_get\_features\_negotiated@{bssgp\_bvc\_fsm\_get\_features\_negotiated}}
\index{bssgp\_bvc\_fsm\_get\_features\_negotiated@{bssgp\_bvc\_fsm\_get\_features\_negotiated}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_get\_features\_negotiated()}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+negotiated (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Return the negotiated features / extended features. 



References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::negotiated}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_ae81c2998cbbfecb8208715ebc91ae7e8}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_get\_features\_received@{bssgp\_bvc\_fsm\_get\_features\_received}}
\index{bssgp\_bvc\_fsm\_get\_features\_received@{bssgp\_bvc\_fsm\_get\_features\_received}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_get\_features\_received()}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+received (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Return the received features / extended features. 



References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, and \textbf{ bvc\+\_\+fsm\+\_\+priv\+::received}.

\mbox{\label{bssgp__bvc__fsm_8c_a68da073d73b8d03be80590fc94abe197}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_get\_max\_pdu\_len@{bssgp\_bvc\_fsm\_get\_max\_pdu\_len}}
\index{bssgp\_bvc\_fsm\_get\_max\_pdu\_len@{bssgp\_bvc\_fsm\_get\_max\_pdu\_len}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_get\_max\_pdu\_len()}
{\footnotesize\ttfamily uint16\+\_\+t bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+max\+\_\+pdu\+\_\+len (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Return the maximum size of a BSSGP PDU ! On the NS layer this corresponds to the size of an NS SDU in NS-\/\+UNITDATA (3GPP TS 48.\+016 Ch. 

9.\+2.\+10) 

References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::max\+\_\+pdu\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_aaa626dcd9226d284941b0355cf542470}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_is\_unblocked@{bssgp\_bvc\_fsm\_is\_unblocked}}
\index{bssgp\_bvc\_fsm\_is\_unblocked@{bssgp\_bvc\_fsm\_is\_unblocked}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_is\_unblocked()}
{\footnotesize\ttfamily bool bssgp\+\_\+bvc\+\_\+fsm\+\_\+is\+\_\+unblocked (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})}



Return if the given BVC FSM is in UNBLOCKED state. 



References \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}.

\mbox{\label{bssgp__bvc__fsm_8c_a0ff0d769cf1b7c40b6353079e05be938}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_null@{bssgp\_bvc\_fsm\_null}}
\index{bssgp\_bvc\_fsm\_null@{bssgp\_bvc\_fsm\_null}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_null()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+null (\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{ OSMO\+\_\+\+ASSERT}.

\mbox{\label{bssgp__bvc__fsm_8c_a594e61f9eddffccead43e932ec534649}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_set\_max\_pdu\_len@{bssgp\_bvc\_fsm\_set\_max\_pdu\_len}}
\index{bssgp\_bvc\_fsm\_set\_max\_pdu\_len@{bssgp\_bvc\_fsm\_set\_max\_pdu\_len}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_set\_max\_pdu\_len()}
{\footnotesize\ttfamily void bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+max\+\_\+pdu\+\_\+len (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{uint16\+\_\+t}]{max\+\_\+pdu\+\_\+len }\end{DoxyParamCaption})}



Set the maximum size of a BSSGP PDU. 

! On the NS layer this corresponds to the size of an NS SDU in NS-\/\+UNITDATA (3GPP TS 48.\+016 Ch. 9.\+2.\+10) 

References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::max\+\_\+pdu\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_a177522223d0c571c1d6e35e62b65bade}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_set\_ops@{bssgp\_bvc\_fsm\_set\_ops}}
\index{bssgp\_bvc\_fsm\_set\_ops@{bssgp\_bvc\_fsm\_set\_ops}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_set\_ops()}
{\footnotesize\ttfamily void bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+ops (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{const struct \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops} $\ast$}]{ops,  }\item[{void $\ast$}]{ops\+\_\+priv }\end{DoxyParamCaption})}



Set the \textquotesingle{}operations\textquotesingle{} callbacks + private data. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em fi} & FSM instance for which the data shall be set \\
\hline
\mbox{\texttt{ in}}  & {\em ops} & BSSGP BVC FSM operations (call-\/back functions) to register \\
\hline
\mbox{\texttt{ in}}  & {\em ops\+\_\+priv} & opaque/private data pointer passed through to call-\/backs \\
\hline
\end{DoxyParams}


References \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops\+\_\+priv}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.

\mbox{\label{bssgp__bvc__fsm_8c_af9791a8ddc0863b5a7d90482817e4a53}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_timer\_cb@{bssgp\_bvc\_fsm\_timer\_cb}}
\index{bssgp\_bvc\_fsm\_timer\_cb@{bssgp\_bvc\_fsm\_timer\_cb}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_timer\_cb()}
{\footnotesize\ttfamily static int bssgp\+\_\+bvc\+\_\+fsm\+\_\+timer\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset()}, \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::block\+\_\+cause}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+block()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+unblock()}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+WAIT\+\_\+\+RESET\+\_\+\+ACK}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::last\+\_\+reset\+\_\+cause}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::state}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::T}, \textbf{ T1}, \textbf{ T1\+\_\+\+SECS}, \textbf{ T2}, and \textbf{ T2\+\_\+\+SECS}.

\mbox{\label{bssgp__bvc__fsm_8c_a21b8af7e8bf598d1b015d4d803c103d8}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_unblocked@{bssgp\_bvc\_fsm\_unblocked}}
\index{bssgp\_bvc\_fsm\_unblocked@{bssgp\_bvc\_fsm\_unblocked}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_unblocked()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+unblocked (\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{ \+\_\+tx\+\_\+status()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::block\+\_\+cause}, \textbf{ bssgp2\+\_\+dec\+\_\+fc\+\_\+bvc()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+block()}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+block\+\_\+ack()}, \textbf{ bssgp2\+\_\+enc\+\_\+fc\+\_\+bvc()}, \textbf{ bssgp2\+\_\+enc\+\_\+fc\+\_\+bvc\+\_\+ack()}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+BLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+FC\+\_\+\+BVC}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC\+\_\+\+ACK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK\+\_\+\+ACK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, \textbf{ BSSGP\+\_\+\+CAUSE\+\_\+\+SEM\+\_\+\+INCORR\+\_\+\+PDU}, \textbf{ bssgp\+\_\+cause\+\_\+str()}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+CAUSE}, \textbf{ BSSGP\+\_\+\+PDUT\+\_\+\+BVC\+\_\+\+UNBLOCK\+\_\+\+ACK}, \textbf{ bssgp\+\_\+tx\+\_\+simple\+\_\+bvci()}, \textbf{ BSSGP\+\_\+\+XFEAT\+\_\+\+GBIT}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ data}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::fc\+\_\+granularity}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ fi\+\_\+tx\+\_\+ptp()}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::locally\+\_\+blocked}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ msgb\+\_\+bcid}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::negotiated}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops\+\_\+priv}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops\+::rx\+\_\+fc\+\_\+bvc}, \textbf{ T1}, \textbf{ T1\+\_\+\+SECS}, \textbf{ bssgp2\+\_\+flow\+\_\+ctrl\+::tag}, and \textbf{ TLVP\+\_\+\+VAL}.

\mbox{\label{bssgp__bvc__fsm_8c_a427e4153c2b1a0abc3cc961a67c9742e}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_wait\_reset\_ack@{bssgp\_bvc\_fsm\_wait\_reset\_ack}}
\index{bssgp\_bvc\_fsm\_wait\_reset\_ack@{bssgp\_bvc\_fsm\_wait\_reset\_ack}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_wait\_reset\_ack()}
{\footnotesize\ttfamily static void bssgp\+\_\+bvc\+\_\+fsm\+\_\+wait\+\_\+reset\+\_\+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{ bvc\+\_\+fsm\+\_\+priv\+::block\+\_\+cause}, \textbf{ bssgp2\+\_\+enc\+\_\+bvc\+\_\+block()}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET\+\_\+\+ACK}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED}, \textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+CELL\+\_\+\+ID}, \textbf{ bssgp\+\_\+parse\+\_\+cell\+\_\+id()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ cause}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::cell\+\_\+id}, \textbf{ data}, \textbf{ fi\+\_\+tx\+\_\+sig()}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::last\+\_\+reset\+\_\+cause}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::locally\+\_\+blocked}, \textbf{ msgb\+\_\+bcid}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ops\+\_\+priv}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+\_\+state\+\_\+chg}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::ra\+\_\+id}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops\+::reset\+\_\+ack\+\_\+notification}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::role\+\_\+sgsn}, \textbf{ T1}, \textbf{ T1\+\_\+\+SECS}, \textbf{ TLVP\+\_\+\+VAL}, and \textbf{ update\+\_\+negotiated\+\_\+features()}.

\mbox{\label{bssgp__bvc__fsm_8c_a1971b2789a285c02694000cf554e7585}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!fi\_tx\_ptp@{fi\_tx\_ptp}}
\index{fi\_tx\_ptp@{fi\_tx\_ptp}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{fi\_tx\_ptp()}
{\footnotesize\ttfamily static int fi\+\_\+tx\+\_\+ptp (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ msgb} $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bssgp2\+\_\+nsi\+\_\+tx\+\_\+ptp()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::bvci}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ LOGPFSM}, \textbf{ msg}, \textbf{ msgb\+\_\+bssgph}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsi}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+pdef\+\_\+bssgp}, \textbf{ osmo\+\_\+tlv\+\_\+prot\+\_\+msg\+\_\+name()}, \textbf{ bssgp\+\_\+normal\+\_\+hdr\+::pdu\+\_\+type}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ \+\_\+tx\+\_\+status()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+unblocked()}.

\mbox{\label{bssgp__bvc__fsm_8c_a509d181da315ab3d248c4ac113809a2c}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!fi\_tx\_sig@{fi\_tx\_sig}}
\index{fi\_tx\_sig@{fi\_tx\_sig}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{fi\_tx\_sig()}
{\footnotesize\ttfamily static int fi\+\_\+tx\+\_\+sig (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fsm\+\_\+inst} $\ast$}]{fi,  }\item[{struct \textbf{ msgb} $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ bssgp2\+\_\+nsi\+\_\+tx\+\_\+sig()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ LOGPFSM}, \textbf{ msg}, \textbf{ msgb\+\_\+bssgph}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsei}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::nsi}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+pdef\+\_\+bssgp}, \textbf{ osmo\+\_\+tlv\+\_\+prot\+\_\+msg\+\_\+name()}, \textbf{ bssgp\+\_\+normal\+\_\+hdr\+::pdu\+\_\+type}, and \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}.



Referenced by \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset()}, \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack()}, \textbf{ \+\_\+tx\+\_\+status()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+blocked()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+timer\+\_\+cb()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+unblocked()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+wait\+\_\+reset\+\_\+ack()}.

\mbox{\label{bssgp__bvc__fsm_8c_a04303b2381a77468dd82510bbb9e0c3e}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!update\_negotiated\_features@{update\_negotiated\_features}}
\index{update\_negotiated\_features@{update\_negotiated\_features}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{update\_negotiated\_features()}
{\footnotesize\ttfamily static void update\+\_\+negotiated\+\_\+features (\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{ bvc\+\_\+fsm\+\_\+priv\+::advertised}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+EXT\+\_\+\+FEATURE\+\_\+\+BITMAP}, \textbf{ BSSGP\+\_\+\+IE\+\_\+\+FEATURE\+\_\+\+BITMAP}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::features}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::fsm}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ LOGPFSML}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::negotiated}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fsm\+\_\+inst\+::priv}, \textbf{ bvc\+\_\+fsm\+\_\+priv\+::received}, \textbf{ TLVP\+\_\+\+PRES\+\_\+\+LEN}, and \textbf{ TLVP\+\_\+\+VAL}.



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+allstate()}, and \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+wait\+\_\+reset\+\_\+ack()}.



\doxysubsection{Variable Documentation}
\mbox{\label{bssgp__bvc__fsm_8c_a2c75171411137f9927bb8e5c9c47519c}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm@{bssgp\_bvc\_fsm}}
\index{bssgp\_bvc\_fsm@{bssgp\_bvc\_fsm}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm}
{\footnotesize\ttfamily static struct \textbf{ osmo\+\_\+fsm} bssgp\+\_\+bvc\+\_\+fsm\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}BSSGP-\/BVC"{}},}
\DoxyCodeLine{        .states = bssgp\_bvc\_fsm\_states,}
\DoxyCodeLine{        .num\_states = ARRAY\_SIZE(bssgp\_bvc\_fsm\_states),}
\DoxyCodeLine{        .allstate\_event\_mask = S(BSSGP\_BVCFSM\_E\_REQ\_RESET) |}
\DoxyCodeLine{                               S(BSSGP\_BVCFSM\_E\_RX\_RESET),}
\DoxyCodeLine{        .allstate\_action = bssgp\_bvc\_fsm\_allstate,}
\DoxyCodeLine{        .timer\_cb = bssgp\_bvc\_fsm\_timer\_cb,}
\DoxyCodeLine{        .log\_subsys = DLBSSGP,}
\DoxyCodeLine{        .event\_names = ptp\_bvc\_event\_names,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}, \textbf{ \+\_\+bvc\+\_\+fsm\+\_\+alloc()}, \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset()}, \textbf{ \+\_\+tx\+\_\+bvc\+\_\+reset\+\_\+ack()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+block\+\_\+cause()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+advertised()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+negotiated()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+features\+\_\+received()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+get\+\_\+max\+\_\+pdu\+\_\+len()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+max\+\_\+pdu\+\_\+len()}, \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+set\+\_\+ops()}, \textbf{ fi\+\_\+tx\+\_\+ptp()}, \textbf{ fi\+\_\+tx\+\_\+sig()}, and \textbf{ update\+\_\+negotiated\+\_\+features()}.

\mbox{\label{bssgp__bvc__fsm_8c_a5462026af5ae0d0901b7d05fd5ab289c}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_states@{bssgp\_bvc\_fsm\_states}}
\index{bssgp\_bvc\_fsm\_states@{bssgp\_bvc\_fsm\_states}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_states}
{\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+fsm\+\_\+state} bssgp\+\_\+bvc\+\_\+fsm\+\_\+states[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{bssgp__bvc__fsm_8c_aab268746b6eb1fba21db2e6f2b54a0d6}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!bssgp\_bvc\_fsm\_tdefs@{bssgp\_bvc\_fsm\_tdefs}}
\index{bssgp\_bvc\_fsm\_tdefs@{bssgp\_bvc\_fsm\_tdefs}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{bssgp\_bvc\_fsm\_tdefs}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+tdef} bssgp\+\_\+bvc\+\_\+fsm\+\_\+tdefs[$\,$]}

\mbox{\label{bssgp__bvc__fsm_8c_ad2e7e7274806cf2c99ee375461e3ae28}} 
\index{bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}!ptp\_bvc\_event\_names@{ptp\_bvc\_event\_names}}
\index{ptp\_bvc\_event\_names@{ptp\_bvc\_event\_names}!bssgp\_bvc\_fsm.c@{bssgp\_bvc\_fsm.c}}
\doxysubsubsection{ptp\_bvc\_event\_names}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} ptp\+\_\+bvc\+\_\+event\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_BLOCK, \textcolor{stringliteral}{"{}RX-\/BVC-\/BLOCK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_BLOCK\_ACK, \textcolor{stringliteral}{"{}RX-\/BVC-\/BLOCK-\/ACK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_UNBLOCK, \textcolor{stringliteral}{"{}RX-\/BVC-\/UNBLOCK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_UNBLOCK\_ACK, \textcolor{stringliteral}{"{}RX-\/BVC-\/UNBLOCK-\/ACK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_RESET, \textcolor{stringliteral}{"{}RX-\/BVC-\/RESET"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_RESET\_ACK, \textcolor{stringliteral}{"{}RX-\/BVC-\/RESET-\/ACK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_FC\_BVC, \textcolor{stringliteral}{"{}RX-\/FLOW-\/CONTROL-\/BVC"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_RX\_FC\_BVC\_ACK, \textcolor{stringliteral}{"{}RX-\/FLOW-\/CONTROL-\/BVC-\/ACK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_REQ\_BLOCK, \textcolor{stringliteral}{"{}REQ-\/BLOCK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_REQ\_UNBLOCK, \textcolor{stringliteral}{"{}REQ-\/UNBLOCK"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_REQ\_RESET, \textcolor{stringliteral}{"{}REQ-\/RESET"{}} \},}
\DoxyCodeLine{        \{ BSSGP\_BVCFSM\_E\_REQ\_FC\_BVC, \textcolor{stringliteral}{"{}REQ-\/FLOW-\/CONTROL-\/BVC"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}
