\doxysection{bssgp\+\_\+flow\+\_\+control Struct Reference}
\label{structbssgp__flow__control}\index{bssgp\_flow\_control@{bssgp\_flow\_control}}


BSSGP flow control (SGSN side) According to Section 8.\+2.  




{\ttfamily \#include $<$gprs\+\_\+bssgp.\+h$>$}

\doxysubsection*{Data Fields}
\begin{DoxyCompactItemize}
\item 
uint32\+\_\+t \textbf{ bucket\+\_\+size\+\_\+max}
\begin{DoxyCompactList}\small\item\em maximum size of the bucket (octets) \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ bucket\+\_\+leak\+\_\+rate}
\begin{DoxyCompactList}\small\item\em leak rate of the bucket (octets/sec) \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ bucket\+\_\+counter}
\begin{DoxyCompactList}\small\item\em number of tokens in the bucket \end{DoxyCompactList}\item 
struct timeval \textbf{ time\+\_\+last\+\_\+pdu}
\begin{DoxyCompactList}\small\item\em timestamp of last PDU sent \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ max\+\_\+queue\+\_\+depth}
\begin{DoxyCompactList}\small\item\em how many packets to queue (mgs) \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ queue\+\_\+depth}
\begin{DoxyCompactList}\small\item\em current length of queue (msgs) \end{DoxyCompactList}\item 
struct \textbf{ llist\+\_\+head} \textbf{ queue}
\begin{DoxyCompactList}\small\item\em linked list of msgb\textquotesingle{}s \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+timer\+\_\+list} \textbf{ timer}
\begin{DoxyCompactList}\small\item\em timer-\/based dequeueing \end{DoxyCompactList}\item 
int($\ast$ \textbf{ out\+\_\+cb} )(struct \textbf{ bssgp\+\_\+flow\+\_\+control} $\ast$fc, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint32\+\_\+t llc\+\_\+pdu\+\_\+len, void $\ast$priv)
\begin{DoxyCompactList}\small\item\em callback to be called at output of flow control \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
BSSGP flow control (SGSN side) According to Section 8.\+2. 

\doxysubsection{Field Documentation}
\mbox{\label{structbssgp__flow__control_a421fbe82ca00c98c9b0a360a965dfeb2}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!bucket\_counter@{bucket\_counter}}
\index{bucket\_counter@{bucket\_counter}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{bucket\_counter}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+flow\+\_\+control\+::bucket\+\_\+counter}



number of tokens in the bucket 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+needs\+\_\+queueing()}, and \textbf{ dump\+\_\+bvc()}.

\mbox{\label{structbssgp__flow__control_ae2b5d1130393e74a14121a23d4c9bb45}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!bucket\_leak\_rate@{bucket\_leak\_rate}}
\index{bucket\_leak\_rate@{bucket\_leak\_rate}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{bucket\_leak\_rate}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+flow\+\_\+control\+::bucket\+\_\+leak\+\_\+rate}



leak rate of the bucket (octets/sec) 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+init()}, \textbf{ bssgp\+\_\+fc\+\_\+needs\+\_\+queueing()}, \textbf{ bssgp\+\_\+rx\+\_\+fc\+\_\+bvc()}, \textbf{ dump\+\_\+bvc()}, and \textbf{ fc\+\_\+queue\+\_\+timer\+\_\+cfg()}.

\mbox{\label{structbssgp__flow__control_ad1832c9493151b6f8a2f60f50c5cb95e}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!bucket\_size\_max@{bucket\_size\_max}}
\index{bucket\_size\_max@{bucket\_size\_max}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{bucket\_size\_max}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+flow\+\_\+control\+::bucket\+\_\+size\+\_\+max}



maximum size of the bucket (octets) 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+in()}, \textbf{ bssgp\+\_\+fc\+\_\+init()}, \textbf{ bssgp\+\_\+rx\+\_\+fc\+\_\+bvc()}, and \textbf{ dump\+\_\+bvc()}.

\mbox{\label{structbssgp__flow__control_a5236a16a21929c51af0556de28c85433}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!max\_queue\_depth@{max\_queue\_depth}}
\index{max\_queue\_depth@{max\_queue\_depth}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{max\_queue\_depth}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+flow\+\_\+control\+::max\+\_\+queue\+\_\+depth}



how many packets to queue (mgs) 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+init()}, \textbf{ dump\+\_\+bvc()}, and \textbf{ fc\+\_\+enqueue()}.

\mbox{\label{structbssgp__flow__control_a81c7752a60661b1aa0f14c2af3c419f3}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!out\_cb@{out\_cb}}
\index{out\_cb@{out\_cb}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{out\_cb}
{\footnotesize\ttfamily int($\ast$ bssgp\+\_\+flow\+\_\+control\+::out\+\_\+cb) (struct \textbf{ bssgp\+\_\+flow\+\_\+control} $\ast$fc, struct \textbf{ msgb} $\ast$\textbf{ msg}, uint32\+\_\+t llc\+\_\+pdu\+\_\+len, void $\ast$priv)}



callback to be called at output of flow control 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+in()}, \textbf{ bssgp\+\_\+fc\+\_\+init()}, and \textbf{ fc\+\_\+timer\+\_\+cb()}.

\mbox{\label{structbssgp__flow__control_a4989dbc5d0422d5ef4ffe0b9fb9ff741}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!queue@{queue}}
\index{queue@{queue}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{queue}
{\footnotesize\ttfamily struct \textbf{ llist\+\_\+head} bssgp\+\_\+flow\+\_\+control\+::queue}



linked list of msgb\textquotesingle{}s 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+flush\+\_\+queue()}, \textbf{ bssgp\+\_\+fc\+\_\+init()}, \textbf{ fc\+\_\+enqueue()}, \textbf{ fc\+\_\+queue\+\_\+timer\+\_\+cfg()}, and \textbf{ fc\+\_\+timer\+\_\+cb()}.

\mbox{\label{structbssgp__flow__control_add61dc2188734b484f1d0dd8fb0d4ce1}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!queue\_depth@{queue\_depth}}
\index{queue\_depth@{queue\_depth}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{queue\_depth}
{\footnotesize\ttfamily uint32\+\_\+t bssgp\+\_\+flow\+\_\+control\+::queue\+\_\+depth}



current length of queue (msgs) 



Referenced by \textbf{ dump\+\_\+bvc()}, \textbf{ fc\+\_\+enqueue()}, and \textbf{ fc\+\_\+timer\+\_\+cb()}.

\mbox{\label{structbssgp__flow__control_a40b8707c552487f74d2b13458c205bdf}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!time\_last\_pdu@{time\_last\_pdu}}
\index{time\_last\_pdu@{time\_last\_pdu}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{time\_last\_pdu}
{\footnotesize\ttfamily struct timeval bssgp\+\_\+flow\+\_\+control\+::time\+\_\+last\+\_\+pdu}



timestamp of last PDU sent 



Referenced by \textbf{ bssgp\+\_\+fc\+\_\+in()}, \textbf{ bssgp\+\_\+fc\+\_\+init()}, \textbf{ bssgp\+\_\+fc\+\_\+needs\+\_\+queueing()}, and \textbf{ fc\+\_\+timer\+\_\+cb()}.

\mbox{\label{structbssgp__flow__control_a5c6a0e940d9b61574903408865daa2b9}} 
\index{bssgp\_flow\_control@{bssgp\_flow\_control}!timer@{timer}}
\index{timer@{timer}!bssgp\_flow\_control@{bssgp\_flow\_control}}
\doxysubsubsection{timer}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+timer\+\_\+list} bssgp\+\_\+flow\+\_\+control\+::timer}



timer-\/based dequeueing 



Referenced by \textbf{ bssgp\+\_\+bvc\+\_\+ctx\+\_\+free()}, and \textbf{ fc\+\_\+queue\+\_\+timer\+\_\+cfg()}.



The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
include/osmocom/gprs/\textbf{ gprs\+\_\+bssgp.\+h}\end{DoxyCompactItemize}
