\doxysection{include/osmocom/gprs/bssgp\+\_\+bvc\+\_\+fsm.h File Reference}
\label{bssgp__bvc__fsm_8h}\index{include/osmocom/gprs/bssgp\_bvc\_fsm.h@{include/osmocom/gprs/bssgp\_bvc\_fsm.h}}
{\ttfamily \#include $<$stdint.\+h$>$}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ bssgp\+\_\+bvc\+\_\+fsm\+\_\+ops}
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ bssp\+\_\+ptp\+\_\+bvc\+\_\+fsm\+\_\+state} \{ \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+NULL}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+WAIT\+\_\+\+RESET\+\_\+\+ACK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED}
 \}
\item 
enum \textbf{ bssgp\+\_\+ptp\+\_\+bvc\+\_\+fsm\+\_\+event} \{ \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK\+\_\+\+ACK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK\+\_\+\+ACK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET\+\_\+\+ACK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC\+\_\+\+ACK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+BLOCK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+UNBLOCK}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+RESET}
, \newline
\textbf{ BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+FC\+\_\+\+BVC}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\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}\end{DoxyCompactItemize}


\doxysubsection{Enumeration Type Documentation}
\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!bssgp\_ptp\_bvc\_fsm\_event@{bssgp\_ptp\_bvc\_fsm\_event}}
\index{bssgp\_ptp\_bvc\_fsm\_event@{bssgp\_ptp\_bvc\_fsm\_event}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}
\doxysubsubsection{bssgp\_ptp\_bvc\_fsm\_event}
{\footnotesize\ttfamily enum \textbf{ bssgp\+\_\+ptp\+\_\+bvc\+\_\+fsm\+\_\+event}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_BLOCK@{BSSGP\_BVCFSM\_E\_RX\_BLOCK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_BLOCK@{BSSGP\_BVCFSM\_E\_RX\_BLOCK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7ab604803b9365c6f650defc8b935d2ced}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_BLOCK\_ACK@{BSSGP\_BVCFSM\_E\_RX\_BLOCK\_ACK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_BLOCK\_ACK@{BSSGP\_BVCFSM\_E\_RX\_BLOCK\_ACK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a1607085a8c54ac153a9966480e3fd926}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+BLOCK\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK@{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_UNBLOCK@{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7ada127e4d61a197c53da1bce8d7cfd240}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK\_ACK@{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK\_ACK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_UNBLOCK\_ACK@{BSSGP\_BVCFSM\_E\_RX\_UNBLOCK\_ACK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a292e98dbcbbd49a64455fe5867d435ce}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+UNBLOCK\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_RESET@{BSSGP\_BVCFSM\_E\_RX\_RESET}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_RESET@{BSSGP\_BVCFSM\_E\_RX\_RESET}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7ab7d3e7bc9d3dae274ff224a21e78ae04}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_RESET\_ACK@{BSSGP\_BVCFSM\_E\_RX\_RESET\_ACK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_RESET\_ACK@{BSSGP\_BVCFSM\_E\_RX\_RESET\_ACK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7ae5596738447e36545b21da681cfc41e3}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+RESET\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC@{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_FC\_BVC@{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a3f7ca5ce17e0b6d288dc238d4871c5d0}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC\_ACK@{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC\_ACK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_RX\_FC\_BVC\_ACK@{BSSGP\_BVCFSM\_E\_RX\_FC\_BVC\_ACK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a074975700fca43410926927ede9dcabc}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+RX\+\_\+\+FC\+\_\+\+BVC\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_REQ\_BLOCK@{BSSGP\_BVCFSM\_E\_REQ\_BLOCK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_REQ\_BLOCK@{BSSGP\_BVCFSM\_E\_REQ\_BLOCK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a4e2be90d6db58ae7eff65b06ade4eaa3}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+BLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_REQ\_UNBLOCK@{BSSGP\_BVCFSM\_E\_REQ\_UNBLOCK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_REQ\_UNBLOCK@{BSSGP\_BVCFSM\_E\_REQ\_UNBLOCK}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a67682a96893ab161d552668bc8ce3919}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+UNBLOCK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_REQ\_RESET@{BSSGP\_BVCFSM\_E\_REQ\_RESET}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_REQ\_RESET@{BSSGP\_BVCFSM\_E\_REQ\_RESET}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a887f12f8afb8fd49cabb7914f58fca07}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+RESET&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_E\_REQ\_FC\_BVC@{BSSGP\_BVCFSM\_E\_REQ\_FC\_BVC}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_E\_REQ\_FC\_BVC@{BSSGP\_BVCFSM\_E\_REQ\_FC\_BVC}}}\mbox{\label{bssgp__bvc__fsm_8h_aedc9800bcd95976bc56f3d7415edd4a7a20a8fb2d2a2e8071f8fdb87a2ea559c5}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+E\+\_\+\+REQ\+\_\+\+FC\+\_\+\+BVC&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{bssgp__bvc__fsm_8h_a9c671abc17ec21f6b316aedbfcddf421}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!bssp\_ptp\_bvc\_fsm\_state@{bssp\_ptp\_bvc\_fsm\_state}}
\index{bssp\_ptp\_bvc\_fsm\_state@{bssp\_ptp\_bvc\_fsm\_state}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}
\doxysubsubsection{bssp\_ptp\_bvc\_fsm\_state}
{\footnotesize\ttfamily enum \textbf{ bssp\+\_\+ptp\+\_\+bvc\+\_\+fsm\+\_\+state}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_S\_NULL@{BSSGP\_BVCFSM\_S\_NULL}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_S\_NULL@{BSSGP\_BVCFSM\_S\_NULL}}}\mbox{\label{bssgp__bvc__fsm_8h_a9c671abc17ec21f6b316aedbfcddf421aeae1b99ed4e3681bb34aa16faa1208d8}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+NULL&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_S\_BLOCKED@{BSSGP\_BVCFSM\_S\_BLOCKED}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_S\_BLOCKED@{BSSGP\_BVCFSM\_S\_BLOCKED}}}\mbox{\label{bssgp__bvc__fsm_8h_a9c671abc17ec21f6b316aedbfcddf421adca23b35c984d986a1dc909fa59ebd62}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+BLOCKED&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_S\_WAIT\_RESET\_ACK@{BSSGP\_BVCFSM\_S\_WAIT\_RESET\_ACK}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_S\_WAIT\_RESET\_ACK@{BSSGP\_BVCFSM\_S\_WAIT\_RESET\_ACK}}}\mbox{\label{bssgp__bvc__fsm_8h_a9c671abc17ec21f6b316aedbfcddf421a30e4e6a206ddc0ba3c85420b94d9d692}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+WAIT\+\_\+\+RESET\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{BSSGP\_BVCFSM\_S\_UNBLOCKED@{BSSGP\_BVCFSM\_S\_UNBLOCKED}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!BSSGP\_BVCFSM\_S\_UNBLOCKED@{BSSGP\_BVCFSM\_S\_UNBLOCKED}}}\mbox{\label{bssgp__bvc__fsm_8h_a9c671abc17ec21f6b316aedbfcddf421aa01f5c82d5aab85bb46615404b4bd329}} 
BSSGP\+\_\+\+BVCFSM\+\_\+\+S\+\_\+\+UNBLOCKED&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{bssgp__bvc__fsm_8h_a3e479a5d63c7e1760f025fa4ca8e7576}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a9a1103beb7f81878c3aca6a615eb0eec}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_afec5232a8c3c5b2ec1f5418ef325f4e7}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a7affab582f86dc3d68ff88232fa73844}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a61a8d3c073379f72e29b3e03afe80b7e}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_ad50d06c709d7d0ffeda4132948d65118}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a72abbcaa099cbf23f2fc4caffbbb14c5}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_ae81c2998cbbfecb8208715ebc91ae7e8}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a68da073d73b8d03be80590fc94abe197}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_aaa626dcd9226d284941b0355cf542470}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!bssgp\_bvc\_fsm\_is\_unblocked@{bssgp\_bvc\_fsm\_is\_unblocked}}
\index{bssgp\_bvc\_fsm\_is\_unblocked@{bssgp\_bvc\_fsm\_is\_unblocked}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a594e61f9eddffccead43e932ec534649}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!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.h@{bssgp\_bvc\_fsm.h}}
\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_8h_a177522223d0c571c1d6e35e62b65bade}} 
\index{bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}!bssgp\_bvc\_fsm\_set\_ops@{bssgp\_bvc\_fsm\_set\_ops}}
\index{bssgp\_bvc\_fsm\_set\_ops@{bssgp\_bvc\_fsm\_set\_ops}!bssgp\_bvc\_fsm.h@{bssgp\_bvc\_fsm.h}}
\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}.

