\doxysection{src/tcap\+\_\+as\+\_\+loadshare.c File Reference}
\label{tcap__as__loadshare_8c}\index{src/tcap\_as\_loadshare.c@{src/tcap\_as\_loadshare.c}}
{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/bit32gen.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/byteswap.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/linuxlist.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/rate\+\_\+ctr.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/talloc.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/netif/ipa.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sccp/sccp\+\_\+types.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sigtran/osmo\+\_\+ss7.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sigtran/protocol/m3ua.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sigtran/protocol/sua.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sigtran/protocol/mtp.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/sigtran/sccp\+\_\+sap.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/tcap/\+OCTET\+\_\+\+STRING.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/tcap/\+TCAP\+\_\+\+TCMessage.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/tcap/tcap.\+h$>$}\newline
{\ttfamily \#include \char`\"{}mtp3\+\_\+hmrt.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}ss7\+\_\+as.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}sccp\+\_\+internal.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}ss7\+\_\+asp.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}ss7\+\_\+internal.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}ss7\+\_\+vty.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tcap\+\_\+as\+\_\+loadshare.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tcap\+\_\+trans\+\_\+tracking.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}xua\+\_\+internal.\+h\char`\"{}}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ tcap\+\_\+parsed}
\item 
struct \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr}
\item 
struct \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+add\+\_\+range}
\item 
struct \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+nack}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ OTID\+\_\+\+SET}~1 $<$$<$ 0
\item 
\#define \textbf{ DTID\+\_\+\+SET}~1 $<$$<$ 1
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+msg\+\_\+types} \{ \textbf{ MT\+\_\+\+TID\+\_\+\+ADD\+\_\+\+RANGE} = 0x01
, \textbf{ MT\+\_\+\+TID\+\_\+\+ACK} = 0x02
, \textbf{ MT\+\_\+\+TID\+\_\+\+NACK} = 0x03
 \}
\item 
enum \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+nack\+\_\+error} \{ \textbf{ NACK\+\_\+\+ERR\+\_\+\+SYS\+\_\+\+FAILURE} = 0x01
, \textbf{ NACK\+\_\+\+ERR\+\_\+\+EALREADY} = 0x72
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static int \textbf{ tcap\+\_\+id\+\_\+from\+\_\+octet\+\_\+str} (uint32\+\_\+t $\ast$tid, const OCTET\+\_\+\+STRING\+\_\+t $\ast$src)
\item 
static int \textbf{ parse\+\_\+tcap} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, const uint8\+\_\+t $\ast$\textbf{ data}, size\+\_\+t \textbf{ len}, struct \textbf{ tcap\+\_\+parsed} $\ast$ids)
\item 
static uint32\+\_\+t \textbf{ tcap\+\_\+gen\+\_\+hash} (uint32\+\_\+t \textbf{ pc}, uint8\+\_\+t \textbf{ ssn})
\item 
static uint64\+\_\+t \textbf{ tcap\+\_\+gen\+\_\+hash\+\_\+addr} (const struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$addr)
\item 
static struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ \textbf{ tcap\+\_\+hlist\+\_\+get} (const struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, uint32\+\_\+t \textbf{ pc}, uint8\+\_\+t \textbf{ ssn}, uint32\+\_\+t tid)
\item 
struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ \textbf{ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$calling\+\_\+addr, struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$called\+\_\+addr, uint32\+\_\+t otid)
\item 
static struct \textbf{ tcap\+\_\+range} $\ast$ \textbf{ tcap\+\_\+overlap\+\_\+tid} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, uint32\+\_\+t \textbf{ pc}, uint8\+\_\+t \textbf{ ssn}, uint32\+\_\+t \textbf{ tid\+\_\+start}, uint32\+\_\+t \textbf{ tid\+\_\+end})
\item 
static struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ \textbf{ find\+\_\+asp\+\_\+no\+\_\+tcap\+\_\+range} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as)
\item 
static bool \textbf{ ssn\+\_\+contains\+\_\+tcap} (uint8\+\_\+t \textbf{ ssn})
\item 
int \textbf{ tcap\+\_\+as\+\_\+rx\+\_\+sccp\+\_\+asp} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp, uint32\+\_\+t \textbf{ opc}, uint32\+\_\+t \textbf{ dpc}, struct msgb $\ast$sccp\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Traffic from the TCAP ASP -\/$>$ AS -\/$>$ osmo-\/stp, only used to update transaction tracking. \end{DoxyCompactList}\item 
static int \textbf{ send\+\_\+back\+\_\+udts} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, const struct \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param} $\ast$orig\+\_\+mtp, const struct \textbf{ xua\+\_\+msg} $\ast$orig\+\_\+sua, uint8\+\_\+t cause\+\_\+code)
\begin{DoxyCompactList}\small\item\em Send UDTS to indicate that the originating UDT could not be delivered to its destination. \end{DoxyCompactList}\item 
static int \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp} (struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$$\ast$rasp, struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, const struct \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param} $\ast$mtp, struct msgb $\ast$sccp\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Traffic STP -\/$>$ AS -\/$>$ ASP (Tx path) Loadshare towards the TCAP routing AS. \end{DoxyCompactList}\item 
int \textbf{ tcap\+\_\+as\+\_\+select\+\_\+asp\+\_\+loadshare} (struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$$\ast$asp, struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, const struct \textbf{ xua\+\_\+msg} $\ast$xua)
\begin{DoxyCompactList}\small\item\em Entrypoint for M3\+UA messages towards the TCAP nodes. \end{DoxyCompactList}\item 
struct \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr} \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+} ((packed))
\item 
static struct msgb $\ast$ \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+alloc} (uint32\+\_\+t seq\+\_\+nr, uint8\+\_\+t \textbf{ mt})
\item 
static int \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+ack} (struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp, uint32\+\_\+t seq\+\_\+nr)
\item 
static int \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+nack} (struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp, uint32\+\_\+t seq\+\_\+nr, uint8\+\_\+t err\+\_\+code)
\item 
int \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing} (struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp, struct msgb $\ast$msg)
\begin{DoxyCompactList}\small\item\em Entrypoint for IPA TCAP Routing messages, parses and handles those. \end{DoxyCompactList}\item 
static void \textbf{ tcap\+\_\+range\+\_\+as\+\_\+update\+\_\+pc\+\_\+ssn} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as)
\item 
struct \textbf{ tcap\+\_\+range} $\ast$ \textbf{ tcap\+\_\+range\+\_\+alloc} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp, uint32\+\_\+t \textbf{ tid\+\_\+start}, uint32\+\_\+t \textbf{ tid\+\_\+end}, uint32\+\_\+t \textbf{ pc}, uint8\+\_\+t \textbf{ ssn})
\begin{DoxyCompactList}\small\item\em Create and alloc a new TCAP range entry. \end{DoxyCompactList}\item 
void \textbf{ tcap\+\_\+range\+\_\+free} (struct \textbf{ tcap\+\_\+range} $\ast$tcrng)
\begin{DoxyCompactList}\small\item\em Remove and free a single TCAP range entry. \end{DoxyCompactList}\item 
bool \textbf{ tcap\+\_\+range\+\_\+matches} (const struct \textbf{ tcap\+\_\+range} $\ast$tcrng, uint32\+\_\+t tid)
\begin{DoxyCompactList}\small\item\em Checks if a tid matches to a specific range. \end{DoxyCompactList}\item 
bool \textbf{ tcap\+\_\+range\+\_\+overlaps} (const struct \textbf{ tcap\+\_\+range} $\ast$a, uint32\+\_\+t \textbf{ tid\+\_\+start}, uint32\+\_\+t \textbf{ tid\+\_\+end})
\begin{DoxyCompactList}\small\item\em Checks if a tid rnage overlaps with another range. \end{DoxyCompactList}\item 
static void \textbf{ \+\_\+tcap\+\_\+range\+\_\+asp\+\_\+down} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp)
\item 
void \textbf{ tcap\+\_\+as\+\_\+del\+\_\+asp} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as, struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$asp)
\item 
void \textbf{ tcap\+\_\+enable} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as)
\item 
void \textbf{ tcap\+\_\+disable} (struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$as)
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
uint8\+\_\+t \textbf{ mt}
\item 
uint32\+\_\+t \textbf{ seq}
\item 
uint8\+\_\+t \textbf{ data} [0]
\item 
uint32\+\_\+t \textbf{ tid\+\_\+start}
\item 
uint32\+\_\+t \textbf{ tid\+\_\+end}
\item 
uint32\+\_\+t \textbf{ pc}
\item 
uint8\+\_\+t \textbf{ ssn}
\item 
uint8\+\_\+t \textbf{ err}
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{tcap__as__loadshare_8c_a349a140fe55ed86b0497651f3fe7d858}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!DTID\_SET@{DTID\_SET}}
\index{DTID\_SET@{DTID\_SET}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{DTID\_SET}
{\footnotesize\ttfamily \#define DTID\+\_\+\+SET~1 $<$$<$ 1}

\mbox{\label{tcap__as__loadshare_8c_aabea942d4d033cfb031216ebced5b032}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!OTID\_SET@{OTID\_SET}}
\index{OTID\_SET@{OTID\_SET}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{OTID\_SET}
{\footnotesize\ttfamily \#define OTID\+\_\+\+SET~1 $<$$<$ 0}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{tcap__as__loadshare_8c_a50f05d3490e4b716d11533e93f3c1e1c}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_tcap\_routing\_msg\_types@{ipa\_tcap\_routing\_msg\_types}}
\index{ipa\_tcap\_routing\_msg\_types@{ipa\_tcap\_routing\_msg\_types}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_tcap\_routing\_msg\_types}
{\footnotesize\ttfamily enum \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+msg\+\_\+types}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{MT\_TID\_ADD\_RANGE@{MT\_TID\_ADD\_RANGE}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!MT\_TID\_ADD\_RANGE@{MT\_TID\_ADD\_RANGE}}}\mbox{\label{tcap__as__loadshare_8c_a50f05d3490e4b716d11533e93f3c1e1ca80e760b63d95983d0f7d1049cbd3c2cf}} 
MT\+\_\+\+TID\+\_\+\+ADD\+\_\+\+RANGE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{MT\_TID\_ACK@{MT\_TID\_ACK}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!MT\_TID\_ACK@{MT\_TID\_ACK}}}\mbox{\label{tcap__as__loadshare_8c_a50f05d3490e4b716d11533e93f3c1e1caa3e2801f351c84d837765ab740c87d29}} 
MT\+\_\+\+TID\+\_\+\+ACK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{MT\_TID\_NACK@{MT\_TID\_NACK}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!MT\_TID\_NACK@{MT\_TID\_NACK}}}\mbox{\label{tcap__as__loadshare_8c_a50f05d3490e4b716d11533e93f3c1e1ca50d9082bb600b24568062f911b19dbcd}} 
MT\+\_\+\+TID\+\_\+\+NACK&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{tcap__as__loadshare_8c_acc8a4c926265cd8b2b1f88b1783e0005}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_tcap\_routing\_nack\_error@{ipa\_tcap\_routing\_nack\_error}}
\index{ipa\_tcap\_routing\_nack\_error@{ipa\_tcap\_routing\_nack\_error}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_tcap\_routing\_nack\_error}
{\footnotesize\ttfamily enum \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+nack\+\_\+error}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{NACK\_ERR\_SYS\_FAILURE@{NACK\_ERR\_SYS\_FAILURE}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!NACK\_ERR\_SYS\_FAILURE@{NACK\_ERR\_SYS\_FAILURE}}}\mbox{\label{tcap__as__loadshare_8c_acc8a4c926265cd8b2b1f88b1783e0005a473e6d69c5e07521520ce5d56257cd4e}} 
NACK\+\_\+\+ERR\+\_\+\+SYS\+\_\+\+FAILURE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NACK\_ERR\_EALREADY@{NACK\_ERR\_EALREADY}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!NACK\_ERR\_EALREADY@{NACK\_ERR\_EALREADY}}}\mbox{\label{tcap__as__loadshare_8c_acc8a4c926265cd8b2b1f88b1783e0005ac324cacf310f2470ec4de673861900cb}} 
NACK\+\_\+\+ERR\+\_\+\+EALREADY&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{tcap__as__loadshare_8c_a9e1e6f338fa7f5fb08779b084c9b8ebf}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!\_\_attribute\_\_@{\_\_attribute\_\_}}
\index{\_\_attribute\_\_@{\_\_attribute\_\_}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{\_\_attribute\_\_()}
{\footnotesize\ttfamily struct \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr} \+\_\+\+\_\+attribute\+\_\+\+\_\+ (\begin{DoxyParamCaption}\item[{(packed)}]{ }\end{DoxyParamCaption})}



References \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}, \textbf{ xua\+\_\+msg\+\_\+part\+::dat}, \textbf{ xua\+\_\+msg\+::hdr}, \textbf{ xua\+\_\+msg\+\_\+part\+::len}, \textbf{ LOGPAS}, \textbf{ M3\+UA\+\_\+\+IEI\+\_\+\+PROT\+\_\+\+DATA}, \textbf{ M3\+UA\+\_\+\+MSGC\+\_\+\+XFER}, \textbf{ M3\+UA\+\_\+\+XFER\+\_\+\+DATA}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+class}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+type}, \textbf{ xua\+\_\+msg\+::mtp}, \textbf{ MTP\+\_\+\+SI\+\_\+\+SCCP}, \textbf{ NULL}, \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param\+::sio}, and \textbf{ xua\+\_\+msg\+\_\+find\+\_\+tag()}.

\mbox{\label{tcap__as__loadshare_8c_ac90e0a52014ab8d3f303b80da068ac9a}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!\_tcap\_range\_asp\_down@{\_tcap\_range\_asp\_down}}
\index{\_tcap\_range\_asp\_down@{\_tcap\_range\_asp\_down}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{\_tcap\_range\_asp\_down()}
{\footnotesize\ttfamily static void \+\_\+tcap\+\_\+range\+\_\+asp\+\_\+down (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ tcap\+\_\+range\+::asp}, \textbf{ tcap\+\_\+range\+\_\+free()}, and \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+entries\+\_\+free\+\_\+by\+\_\+asp()}.



Referenced by \textbf{ tcap\+\_\+as\+\_\+del\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_a35bc8f40a10ed7f243a2879a0c87e0ec}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!asp\_loadshare\_tcap\_sccp@{asp\_loadshare\_tcap\_sccp}}
\index{asp\_loadshare\_tcap\_sccp@{asp\_loadshare\_tcap\_sccp}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{asp\_loadshare\_tcap\_sccp()}
{\footnotesize\ttfamily static int asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$$\ast$}]{rasp,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{const struct \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param} $\ast$}]{mtp,  }\item[{struct msgb $\ast$}]{sccp\+\_\+msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Traffic STP -\/$>$ AS -\/$>$ ASP (Tx path) Loadshare towards the TCAP routing AS. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em rasp} & the selected ASP if any, can be NULL \\
\hline
\mbox{\texttt{ in}}  & {\em as} & \\
\hline
\mbox{\texttt{ in}}  & {\em opc} & the OPC from MTP \\
\hline
\mbox{\texttt{ in}}  & {\em dpc} & the DPC from MTP \\
\hline
\mbox{\texttt{ in}}  & {\em mtp} & MTP routing information \\
\hline
\mbox{\texttt{ in}}  & {\em sccp\+\_\+msg} & the SCCP message. Callee takes ownership. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0\+: on succcess (msg handled by the callee), -\/EPROTONOSUPPORT\+: let caller (regular loadsharing) handle those. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+ss7\+\_\+as\+::ctrg}, \textbf{ xua\+\_\+msg\+\_\+part\+::dat}, \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param\+::dpc}, \textbf{ tcap\+\_\+parsed\+::dtid}, \textbf{ DTID\+\_\+\+SET}, \textbf{ find\+\_\+asp\+\_\+no\+\_\+tcap\+\_\+range()}, \textbf{ xua\+\_\+msg\+::hdr}, \textbf{ xua\+\_\+msg\+\_\+part\+::len}, \textbf{ LOGPAS}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+class}, \textbf{ NULL}, \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param\+::opc}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+PC}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+SSN}, \textbf{ osmo\+\_\+sccp\+\_\+to\+\_\+xua()}, \textbf{ tcap\+\_\+parsed\+::otid}, \textbf{ OTID\+\_\+\+SET}, \textbf{ parse\+\_\+tcap()}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::pc}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::presence}, \textbf{ tcap\+\_\+parsed\+::present}, \textbf{ send\+\_\+back\+\_\+udts()}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::ssn}, \textbf{ ssn\+\_\+contains\+\_\+tcap()}, \textbf{ sua\+\_\+addr\+\_\+parse()}, \textbf{ SUA\+\_\+\+CL\+\_\+\+CLDT}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+DATA}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+DEST\+\_\+\+ADDR}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+SRC\+\_\+\+ADDR}, \textbf{ SUA\+\_\+\+MSGC\+\_\+\+CL}, \textbf{ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+begin()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+continue()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+end()}, \textbf{ xua\+\_\+msg\+\_\+find\+\_\+tag()}, and \textbf{ xua\+\_\+msg\+\_\+free()}.



Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{tcap__as__loadshare_8c_ada752806b6dfb13697edf6a80fe26cbd}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!find\_asp\_no\_tcap\_range@{find\_asp\_no\_tcap\_range}}
\index{find\_asp\_no\_tcap\_range@{find\_asp\_no\_tcap\_range}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{find\_asp\_no\_tcap\_range()}
{\footnotesize\ttfamily static struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ find\+\_\+asp\+\_\+no\+\_\+tcap\+\_\+range (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ss7\+\_\+as\+\_\+asp\+\_\+assoc\+::as}, \textbf{ ss7\+\_\+as\+\_\+asp\+\_\+assoc\+::asp}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::cfg}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::last\+\_\+asp\+\_\+idx\+\_\+sent}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::loadshare}, \textbf{ NULL}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::num\+\_\+assoc\+\_\+asps}, \textbf{ osmo\+\_\+ss7\+\_\+asp\+\_\+active()}, and \textbf{ ss7\+\_\+as\+\_\+asp\+\_\+assoc\+\_\+llist\+\_\+round\+\_\+robin}.



Referenced by \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}.

\mbox{\label{tcap__as__loadshare_8c_aecaf1a049ad8d7fc1a09c59bde0b3068}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_rx\_msg\_osmo\_ext\_tcap\_routing@{ipa\_rx\_msg\_osmo\_ext\_tcap\_routing}}
\index{ipa\_rx\_msg\_osmo\_ext\_tcap\_routing@{ipa\_rx\_msg\_osmo\_ext\_tcap\_routing}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_rx\_msg\_osmo\_ext\_tcap\_routing()}
{\footnotesize\ttfamily int ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp,  }\item[{struct msgb $\ast$}]{msg }\end{DoxyParamCaption})}



Entrypoint for IPA TCAP Routing messages, parses and handles those. 


\begin{DoxyParams}{Parameters}
{\em asp} & \\
\hline
{\em msg} & the message buffer. It is kept owned by the caller. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success 
\end{DoxyReturn}


References \textbf{ tcap\+\_\+range\+::asp}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::cfg}, \textbf{ osmo\+\_\+ss7\+\_\+asp\+::cfg}, \textbf{ cs7\+\_\+role}, \textbf{ CS7\+\_\+\+ROLE\+\_\+\+SG}, \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+ack()}, \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+nack()}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::loadshare}, \textbf{ LOGPASP}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::mode}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr\+::mt}, \textbf{ MT\+\_\+\+TID\+\_\+\+ACK}, \textbf{ MT\+\_\+\+TID\+\_\+\+ADD\+\_\+\+RANGE}, \textbf{ MT\+\_\+\+TID\+\_\+\+NACK}, \textbf{ NACK\+\_\+\+ERR\+\_\+\+EALREADY}, \textbf{ NACK\+\_\+\+ERR\+\_\+\+SYS\+\_\+\+FAILURE}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::name}, \textbf{ osmo\+\_\+ss7\+\_\+asp\+::name}, \textbf{ OSMO\+\_\+\+SS7\+\_\+\+AS\+\_\+\+TMOD\+\_\+\+LOADSHARE}, \textbf{ osmo\+\_\+ss7\+\_\+as\+\_\+traffic\+\_\+mode\+\_\+name()}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+add\+\_\+range\+::pc}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr\+::seq}, \textbf{ ss7\+\_\+asp\+\_\+get\+\_\+first\+\_\+as()}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+add\+\_\+range\+::ssn}, \textbf{ tcap\+\_\+overlap\+\_\+tid()}, \textbf{ TCAP\+\_\+\+PC\+\_\+\+WILDCARD}, \textbf{ tcap\+\_\+range\+\_\+alloc()}, \textbf{ TCAP\+\_\+\+SSN\+\_\+\+WILDCARD}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+add\+\_\+range\+::tid\+\_\+end}, \textbf{ tcap\+\_\+range\+::tid\+\_\+end}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+add\+\_\+range\+::tid\+\_\+start}, and \textbf{ tcap\+\_\+range\+::tid\+\_\+start}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg()}.

\mbox{\label{tcap__as__loadshare_8c_ad38f62e1b9a6d39cedc503c3640d51f4}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_tcap\_routing\_alloc@{ipa\_tcap\_routing\_alloc}}
\index{ipa\_tcap\_routing\_alloc@{ipa\_tcap\_routing\_alloc}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_tcap\_routing\_alloc()}
{\footnotesize\ttfamily static struct msgb $\ast$ ipa\+\_\+tcap\+\_\+routing\+\_\+alloc (\begin{DoxyParamCaption}\item[{uint32\+\_\+t}]{seq\+\_\+nr,  }\item[{uint8\+\_\+t}]{mt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ mt}, \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+hdr\+::mt}, and \textbf{ NULL}.



Referenced by \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+ack()}, and \textbf{ ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+nack()}.

\mbox{\label{tcap__as__loadshare_8c_a139a10f6b6377aed2bccfa707c10391c}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_tx\_tcap\_routing\_ack@{ipa\_tx\_tcap\_routing\_ack}}
\index{ipa\_tx\_tcap\_routing\_ack@{ipa\_tx\_tcap\_routing\_ack}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_tx\_tcap\_routing\_ack()}
{\footnotesize\ttfamily static int ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+ack (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp,  }\item[{uint32\+\_\+t}]{seq\+\_\+nr }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+alloc()}, \textbf{ MT\+\_\+\+TID\+\_\+\+ACK}, and \textbf{ osmo\+\_\+ss7\+\_\+asp\+\_\+send()}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing()}.

\mbox{\label{tcap__as__loadshare_8c_a35784baa9e6e28308ba3a134286844f1}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ipa\_tx\_tcap\_routing\_nack@{ipa\_tx\_tcap\_routing\_nack}}
\index{ipa\_tx\_tcap\_routing\_nack@{ipa\_tx\_tcap\_routing\_nack}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ipa\_tx\_tcap\_routing\_nack()}
{\footnotesize\ttfamily static int ipa\+\_\+tx\+\_\+tcap\+\_\+routing\+\_\+nack (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp,  }\item[{uint32\+\_\+t}]{seq\+\_\+nr,  }\item[{uint8\+\_\+t}]{err\+\_\+code }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+alloc()}, \textbf{ MT\+\_\+\+TID\+\_\+\+NACK}, and \textbf{ osmo\+\_\+ss7\+\_\+asp\+\_\+send()}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing()}.

\mbox{\label{tcap__as__loadshare_8c_a53302ebe3aab9861167512c6f615ef27}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!parse\_tcap@{parse\_tcap}}
\index{parse\_tcap@{parse\_tcap}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{parse\_tcap()}
{\footnotesize\ttfamily static int parse\+\_\+tcap (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{const uint8\+\_\+t $\ast$}]{data,  }\item[{size\+\_\+t}]{len,  }\item[{struct \textbf{ tcap\+\_\+parsed} $\ast$}]{ids }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ data}, \textbf{ tcap\+\_\+parsed\+::dtid}, \textbf{ DTID\+\_\+\+SET}, \textbf{ len}, \textbf{ LOGPAS}, \textbf{ tcap\+\_\+parsed\+::otid}, \textbf{ OTID\+\_\+\+SET}, \textbf{ tcap\+\_\+parsed\+::present}, and \textbf{ tcap\+\_\+id\+\_\+from\+\_\+octet\+\_\+str()}.



Referenced by \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}, and \textbf{ tcap\+\_\+as\+\_\+rx\+\_\+sccp\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_abef5404cd62a5ed574d25a39b5d317b7}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!send\_back\_udts@{send\_back\_udts}}
\index{send\_back\_udts@{send\_back\_udts}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{send\_back\_udts()}
{\footnotesize\ttfamily static int send\+\_\+back\+\_\+udts (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{const struct \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param} $\ast$}]{orig\+\_\+mtp,  }\item[{const struct \textbf{ xua\+\_\+msg} $\ast$}]{orig\+\_\+sua,  }\item[{uint8\+\_\+t}]{cause\+\_\+code }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Send UDTS to indicate that the originating UDT could not be delivered to its destination. 


\begin{DoxyParams}{Parameters}
{\em as} & \\
\hline
{\em orig\+\_\+mtp} & MTP routing information of the originating message (message that could not be delivered) \\
\hline
{\em orig\+\_\+sua} & Originating message that could not be delivered \\
\hline
{\em cause\+\_\+code} & the return cause of the UDTS \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative on error 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param\+::dpc}, \textbf{ xua\+\_\+msg\+::hdr}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::inst}, \textbf{ LOGPAS}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+class}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+type}, \textbf{ mtp3\+\_\+hmrt\+\_\+mtp\+\_\+xfer\+\_\+request\+\_\+l4\+\_\+to\+\_\+l3()}, \textbf{ osmo\+\_\+mtp\+\_\+transfer\+\_\+param\+::opc}, \textbf{ osmo\+\_\+sua\+\_\+to\+\_\+sccp()}, \textbf{ SUA\+\_\+\+CL\+\_\+\+CLDT}, \textbf{ sua\+\_\+gen\+\_\+cldr()}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+PROTO\+\_\+\+CLASS}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+ROUTE\+\_\+\+CTX}, \textbf{ SUA\+\_\+\+MSGC\+\_\+\+CL}, \textbf{ xua\+\_\+dialect\+\_\+sua}, \textbf{ xua\+\_\+msg\+\_\+dump()}, \textbf{ xua\+\_\+msg\+\_\+find\+\_\+tag()}, \textbf{ xua\+\_\+msg\+\_\+free()}, \textbf{ xua\+\_\+msg\+\_\+get\+\_\+u32p()}, and \textbf{ xua\+\_\+msg\+\_\+part\+\_\+get\+\_\+u32()}.



Referenced by \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}.

\mbox{\label{tcap__as__loadshare_8c_a20e6d734d9edfb7e44ae25e0de4c4631}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ssn\_contains\_tcap@{ssn\_contains\_tcap}}
\index{ssn\_contains\_tcap@{ssn\_contains\_tcap}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ssn\_contains\_tcap()}
{\footnotesize\ttfamily static bool ssn\+\_\+contains\+\_\+tcap (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{ssn }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+AUC}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+CAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+EIR}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+GGSN\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+GMLC\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+gsm\+SCF\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+HLR}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+MSC}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+SGSN\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+SIWF\+\_\+\+MAP}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+TC\+\_\+\+TEST}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+SSN\+\_\+\+VLR}, and \textbf{ ssn}.



Referenced by \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}, and \textbf{ tcap\+\_\+as\+\_\+rx\+\_\+sccp\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_a5b9a86c4809a8ea28225a1101f23c158}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_as\_asp\_find\_by\_tcap\_id@{tcap\_as\_asp\_find\_by\_tcap\_id}}
\index{tcap\_as\_asp\_find\_by\_tcap\_id@{tcap\_as\_asp\_find\_by\_tcap\_id}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_as\_asp\_find\_by\_tcap\_id()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$}]{calling\+\_\+addr,  }\item[{struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$}]{called\+\_\+addr,  }\item[{uint32\+\_\+t}]{otid }\end{DoxyParamCaption})}



References \textbf{ NULL}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+PC}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+SSN}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::pc}, \textbf{ pc}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::presence}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::ssn}, \textbf{ ssn}, \textbf{ tcap\+\_\+hlist\+\_\+get()}, \textbf{ TCAP\+\_\+\+PC\+\_\+\+WILDCARD}, and \textbf{ TCAP\+\_\+\+SSN\+\_\+\+WILDCARD}.



Referenced by \textbf{ asp\+\_\+loadshare\+\_\+tcap\+\_\+sccp()}.

\mbox{\label{tcap__as__loadshare_8c_aec60e38ceb0b16dc6a8e9b9561f9e5c7}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_as\_del\_asp@{tcap\_as\_del\_asp}}
\index{tcap\_as\_del\_asp@{tcap\_as\_del\_asp}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_as\_del\_asp()}
{\footnotesize\ttfamily void tcap\+\_\+as\+\_\+del\+\_\+asp (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp }\end{DoxyParamCaption})}



References \textbf{ \+\_\+tcap\+\_\+range\+\_\+asp\+\_\+down()}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::cfg}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::last\+\_\+asp\+\_\+idx\+\_\+sent}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::loadshare}, \textbf{ ss7\+\_\+as\+\_\+del\+\_\+asp\+\_\+update\+\_\+llist\+\_\+round\+\_\+robin()}, and \textbf{ tcap\+\_\+range\+\_\+as\+\_\+update\+\_\+pc\+\_\+ssn()}.



Referenced by \textbf{ common\+\_\+asp\+\_\+fsm\+\_\+down\+\_\+onenter()}, and \textbf{ ss7\+\_\+as\+\_\+del\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_a2090314e36156ae8f7903db34d2926cb}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_as\_rx\_sccp\_asp@{tcap\_as\_rx\_sccp\_asp}}
\index{tcap\_as\_rx\_sccp\_asp@{tcap\_as\_rx\_sccp\_asp}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_as\_rx\_sccp\_asp()}
{\footnotesize\ttfamily int tcap\+\_\+as\+\_\+rx\+\_\+sccp\+\_\+asp (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp,  }\item[{uint32\+\_\+t}]{opc,  }\item[{uint32\+\_\+t}]{dpc,  }\item[{struct msgb $\ast$}]{sccp\+\_\+msg }\end{DoxyParamCaption})}



Traffic from the TCAP ASP -\/$>$ AS -\/$>$ osmo-\/stp, only used to update transaction tracking. 


\begin{DoxyParams}{Parameters}
{\em as} & \\
\hline
{\em asp} & asp sent the sccp\+\_\+msg message towards osmo-\/stp \\
\hline
{\em opc} & M3\+UA opc \\
\hline
{\em dpc} & M3\+UA DPC \\
\hline
{\em sccp\+\_\+msg} & pointer to a msg. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on successful handling (TCAP fully processed, non-\/\+TCAP ignored), $<$ 0 on error cases (missing IE, decoding errors) 
\end{DoxyReturn}


References \textbf{ xua\+\_\+msg\+\_\+part\+::dat}, \textbf{ dpc}, \textbf{ tcap\+\_\+parsed\+::dtid}, \textbf{ DTID\+\_\+\+SET}, \textbf{ xua\+\_\+msg\+::hdr}, \textbf{ xua\+\_\+msg\+\_\+part\+::len}, \textbf{ LOGPAS}, \textbf{ xua\+\_\+common\+\_\+hdr\+::msg\+\_\+class}, \textbf{ NULL}, \textbf{ opc}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+PC}, \textbf{ osmo\+\_\+sccp\+\_\+to\+\_\+xua()}, \textbf{ tcap\+\_\+parsed\+::otid}, \textbf{ OTID\+\_\+\+SET}, \textbf{ parse\+\_\+tcap()}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::pc}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::presence}, \textbf{ tcap\+\_\+parsed\+::present}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::ssn}, \textbf{ ssn\+\_\+contains\+\_\+tcap()}, \textbf{ sua\+\_\+addr\+\_\+parse()}, \textbf{ SUA\+\_\+\+CL\+\_\+\+CLDT}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+DATA}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+DEST\+\_\+\+ADDR}, \textbf{ SUA\+\_\+\+IEI\+\_\+\+SRC\+\_\+\+ADDR}, \textbf{ SUA\+\_\+\+MSGC\+\_\+\+CL}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+continue()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+end()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+entry\+\_\+create()}, and \textbf{ xua\+\_\+msg\+\_\+find\+\_\+tag()}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+up()}.

\mbox{\label{tcap__as__loadshare_8c_a34aad551a7344d6cfdd623d84613522b}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_as\_select\_asp\_loadshare@{tcap\_as\_select\_asp\_loadshare}}
\index{tcap\_as\_select\_asp\_loadshare@{tcap\_as\_select\_asp\_loadshare}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_as\_select\_asp\_loadshare()}
{\footnotesize\ttfamily int tcap\+\_\+as\+\_\+select\+\_\+asp\+\_\+loadshare (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$$\ast$}]{asp,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{const struct \textbf{ xua\+\_\+msg} $\ast$}]{xua }\end{DoxyParamCaption})}



Entrypoint for M3\+UA messages towards the TCAP nodes. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em asp} & Result pointer of the selected asp. Set to NULL if return code is != 0 \\
\hline
\mbox{\texttt{ in}}  & {\em as} & \\
\hline
\mbox{\texttt{ in}}  & {\em xua} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0\+: on succcess (msg handled by the callee), -\/EPROTONOSUPPORT\+: let caller (regular loadsharing) handle those. 
\end{DoxyReturn}


Referenced by \textbf{ ss7\+\_\+as\+\_\+select\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_a04f4d9a175722f22aac9572f9c9baa79}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_disable@{tcap\_disable}}
\index{tcap\_disable@{tcap\_disable}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_disable()}
{\footnotesize\ttfamily void tcap\+\_\+disable (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+ss7\+\_\+as\+::cfg}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::last\+\_\+asp\+\_\+idx\+\_\+sent}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::loadshare}, \textbf{ NULL}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+entries\+\_\+free\+\_\+all()}, and \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+garbage\+\_\+collect\+\_\+stop()}.



Referenced by \textbf{ osmo\+\_\+ss7\+\_\+as\+\_\+destroy()}.

\mbox{\label{tcap__as__loadshare_8c_a1cc1e1a23c01d06a5552c9b0398003b0}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_enable@{tcap\_enable}}
\index{tcap\_enable@{tcap\_enable}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_enable()}
{\footnotesize\ttfamily void tcap\+\_\+enable (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+ss7\+\_\+as\+::cfg}, \textbf{ osmo\+\_\+ss7\+\_\+as\+::loadshare}, and \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+garbage\+\_\+collect\+\_\+start()}.

\mbox{\label{tcap__as__loadshare_8c_a22eefaf2c61c37cc9d56605ba8655057}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_gen\_hash@{tcap\_gen\_hash}}
\index{tcap\_gen\_hash@{tcap\_gen\_hash}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_gen\_hash()}
{\footnotesize\ttfamily static uint32\+\_\+t tcap\+\_\+gen\+\_\+hash (\begin{DoxyParamCaption}\item[{uint32\+\_\+t}]{pc,  }\item[{uint8\+\_\+t}]{ssn }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ pc}, and \textbf{ ssn}.



Referenced by \textbf{ tcap\+\_\+gen\+\_\+hash\+\_\+addr()}, \textbf{ tcap\+\_\+hlist\+\_\+get()}, \textbf{ tcap\+\_\+overlap\+\_\+tid()}, and \textbf{ tcap\+\_\+range\+\_\+alloc()}.

\mbox{\label{tcap__as__loadshare_8c_a2b66e48b2e0daa94a15f9811fc24c6d3}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_gen\_hash\_addr@{tcap\_gen\_hash\_addr}}
\index{tcap\_gen\_hash\_addr@{tcap\_gen\_hash\_addr}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_gen\_hash\_addr()}
{\footnotesize\ttfamily static uint64\+\_\+t tcap\+\_\+gen\+\_\+hash\+\_\+addr (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+sccp\+\_\+addr} $\ast$}]{addr }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+PC}, \textbf{ OSMO\+\_\+\+SCCP\+\_\+\+ADDR\+\_\+\+T\+\_\+\+SSN}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::pc}, \textbf{ pc}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::presence}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+::ssn}, \textbf{ ssn}, and \textbf{ tcap\+\_\+gen\+\_\+hash()}.

\mbox{\label{tcap__as__loadshare_8c_a1d4225a7795f4c2285d01903177cdff4}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_hlist\_get@{tcap\_hlist\_get}}
\index{tcap\_hlist\_get@{tcap\_hlist\_get}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_hlist\_get()}
{\footnotesize\ttfamily static struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$ tcap\+\_\+hlist\+\_\+get (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{uint32\+\_\+t}]{pc,  }\item[{uint8\+\_\+t}]{ssn,  }\item[{uint32\+\_\+t}]{tid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ tcap\+\_\+range\+::asp}, \textbf{ osmo\+\_\+ss7\+\_\+asp\+::list}, \textbf{ NULL}, \textbf{ pc}, \textbf{ tcap\+\_\+range\+::pc}, \textbf{ ssn}, \textbf{ tcap\+\_\+range\+::ssn}, \textbf{ tcap\+\_\+gen\+\_\+hash()}, and \textbf{ tcap\+\_\+range\+\_\+matches()}.



Referenced by \textbf{ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id()}.

\mbox{\label{tcap__as__loadshare_8c_a277030a8edaf09cfafd628de87764df2}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_id\_from\_octet\_str@{tcap\_id\_from\_octet\_str}}
\index{tcap\_id\_from\_octet\_str@{tcap\_id\_from\_octet\_str}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_id\_from\_octet\_str()}
{\footnotesize\ttfamily static int tcap\+\_\+id\+\_\+from\+\_\+octet\+\_\+str (\begin{DoxyParamCaption}\item[{uint32\+\_\+t $\ast$}]{tid,  }\item[{const OCTET\+\_\+\+STRING\+\_\+t $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ load\+\_\+24be()}.



Referenced by \textbf{ parse\+\_\+tcap()}.

\mbox{\label{tcap__as__loadshare_8c_a5861c90b1da5e6c76d3e4492b987ece3}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_overlap\_tid@{tcap\_overlap\_tid}}
\index{tcap\_overlap\_tid@{tcap\_overlap\_tid}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_overlap\_tid()}
{\footnotesize\ttfamily static struct \textbf{ tcap\+\_\+range} $\ast$ tcap\+\_\+overlap\+\_\+tid (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{uint32\+\_\+t}]{pc,  }\item[{uint8\+\_\+t}]{ssn,  }\item[{uint32\+\_\+t}]{tid\+\_\+start,  }\item[{uint32\+\_\+t}]{tid\+\_\+end }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ tcap\+\_\+range\+::list}, \textbf{ NULL}, \textbf{ pc}, \textbf{ tcap\+\_\+range\+::pc}, \textbf{ ssn}, \textbf{ tcap\+\_\+range\+::ssn}, \textbf{ tcap\+\_\+gen\+\_\+hash()}, \textbf{ tcap\+\_\+range\+\_\+overlaps()}, \textbf{ tid\+\_\+end}, and \textbf{ tid\+\_\+start}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing()}.

\mbox{\label{tcap__as__loadshare_8c_ab643244d59fec50d266f106caf31b9ca}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_range\_alloc@{tcap\_range\_alloc}}
\index{tcap\_range\_alloc@{tcap\_range\_alloc}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_range\_alloc()}
{\footnotesize\ttfamily struct \textbf{ tcap\+\_\+range} $\ast$ tcap\+\_\+range\+\_\+alloc (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as,  }\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+asp} $\ast$}]{asp,  }\item[{uint32\+\_\+t}]{tid\+\_\+start,  }\item[{uint32\+\_\+t}]{tid\+\_\+end,  }\item[{uint32\+\_\+t}]{pc,  }\item[{uint8\+\_\+t}]{ssn }\end{DoxyParamCaption})}



Create and alloc a new TCAP range entry. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em as} & \\
\hline
\mbox{\texttt{ in}}  & {\em asp} & \\
\hline
\mbox{\texttt{ in}}  & {\em tid\+\_\+start} & \\
\hline
\mbox{\texttt{ in}}  & {\em tid\+\_\+end} & \\
\hline
\mbox{\texttt{ in}}  & {\em pc} & \\
\hline
\mbox{\texttt{ in}}  & {\em ssn} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the TCAP range entry or NULL 
\end{DoxyReturn}


References \textbf{ tcap\+\_\+range\+::asp}, \textbf{ tcap\+\_\+range\+::list}, \textbf{ NULL}, \textbf{ pc}, \textbf{ tcap\+\_\+range\+::pc}, \textbf{ ssn}, \textbf{ tcap\+\_\+range\+::ssn}, \textbf{ tcap\+\_\+gen\+\_\+hash()}, \textbf{ tid\+\_\+end}, \textbf{ tcap\+\_\+range\+::tid\+\_\+end}, \textbf{ tid\+\_\+start}, and \textbf{ tcap\+\_\+range\+::tid\+\_\+start}.



Referenced by \textbf{ ipa\+\_\+rx\+\_\+msg\+\_\+osmo\+\_\+ext\+\_\+tcap\+\_\+routing()}.

\mbox{\label{tcap__as__loadshare_8c_aac2391d320bdcec39e09cae1f1362c18}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_range\_as\_update\_pc\_ssn@{tcap\_range\_as\_update\_pc\_ssn}}
\index{tcap\_range\_as\_update\_pc\_ssn@{tcap\_range\_as\_update\_pc\_ssn}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_range\_as\_update\_pc\_ssn()}
{\footnotesize\ttfamily static void tcap\+\_\+range\+\_\+as\+\_\+update\+\_\+pc\+\_\+ssn (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ss7\+\_\+as} $\ast$}]{as }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ tcap\+\_\+range\+::pc}, \textbf{ tcap\+\_\+range\+::ssn}, \textbf{ TCAP\+\_\+\+PC\+\_\+\+WILDCARD}, and \textbf{ TCAP\+\_\+\+SSN\+\_\+\+WILDCARD}.



Referenced by \textbf{ tcap\+\_\+as\+\_\+del\+\_\+asp()}.

\mbox{\label{tcap__as__loadshare_8c_ac0e210fb3d24794616e4e0ccaeea2929}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_range\_free@{tcap\_range\_free}}
\index{tcap\_range\_free@{tcap\_range\_free}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_range\_free()}
{\footnotesize\ttfamily void tcap\+\_\+range\+\_\+free (\begin{DoxyParamCaption}\item[{struct \textbf{ tcap\+\_\+range} $\ast$}]{tcrng }\end{DoxyParamCaption})}



Remove and free a single TCAP range entry. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em tcrng} & \\
\hline
\end{DoxyParams}


References \textbf{ tcap\+\_\+range\+::list}.



Referenced by \textbf{ \+\_\+tcap\+\_\+range\+\_\+asp\+\_\+down()}.

\mbox{\label{tcap__as__loadshare_8c_a96504b368fdaba977ee3f3af39e25b00}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_range\_matches@{tcap\_range\_matches}}
\index{tcap\_range\_matches@{tcap\_range\_matches}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_range\_matches()}
{\footnotesize\ttfamily bool tcap\+\_\+range\+\_\+matches (\begin{DoxyParamCaption}\item[{const struct \textbf{ tcap\+\_\+range} $\ast$}]{tcrng,  }\item[{uint32\+\_\+t}]{tid }\end{DoxyParamCaption})}



Checks if a tid matches to a specific range. 


\begin{DoxyParams}{Parameters}
{\em tcrng} & \\
\hline
{\em tid} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true if tid is included in the range 
\end{DoxyReturn}


References \textbf{ tcap\+\_\+range\+::tid\+\_\+end}, and \textbf{ tcap\+\_\+range\+::tid\+\_\+start}.



Referenced by \textbf{ tcap\+\_\+hlist\+\_\+get()}, and \textbf{ tcap\+\_\+range\+\_\+overlaps()}.

\mbox{\label{tcap__as__loadshare_8c_a2ff86506863f50d808dc264693c13dea}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tcap\_range\_overlaps@{tcap\_range\_overlaps}}
\index{tcap\_range\_overlaps@{tcap\_range\_overlaps}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tcap\_range\_overlaps()}
{\footnotesize\ttfamily bool tcap\+\_\+range\+\_\+overlaps (\begin{DoxyParamCaption}\item[{const struct \textbf{ tcap\+\_\+range} $\ast$}]{a,  }\item[{uint32\+\_\+t}]{tid\+\_\+start,  }\item[{uint32\+\_\+t}]{tid\+\_\+end }\end{DoxyParamCaption})}



Checks if a tid rnage overlaps with another range. 


\begin{DoxyParams}{Parameters}
{\em a} & \\
\hline
{\em tid\+\_\+start} & \\
\hline
{\em tid\+\_\+end} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\end{DoxyReturn}


References \textbf{ tcap\+\_\+range\+\_\+matches()}, \textbf{ tid\+\_\+end}, \textbf{ tcap\+\_\+range\+::tid\+\_\+end}, \textbf{ tid\+\_\+start}, and \textbf{ tcap\+\_\+range\+::tid\+\_\+start}.



Referenced by \textbf{ tcap\+\_\+overlap\+\_\+tid()}.



\doxysubsection{Variable Documentation}
\mbox{\label{tcap__as__loadshare_8c_ab0c873a3738c31ba573548faa50188bc}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!data@{data}}
\index{data@{data}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{data}
{\footnotesize\ttfamily uint8\+\_\+t data}



Referenced by \textbf{ conn\+\_\+tmr\+\_\+cb()}, \textbf{ dispatch\+\_\+to\+\_\+all\+\_\+as()}, \textbf{ int\+\_\+tmr\+\_\+cb()}, \textbf{ ipa\+\_\+asp\+\_\+allstate()}, \textbf{ ipa\+\_\+asp\+\_\+fsm\+\_\+wait\+\_\+id\+\_\+get()}, \textbf{ ipa\+\_\+asp\+\_\+fsm\+\_\+wait\+\_\+id\+\_\+resp()}, \textbf{ lm\+\_\+active()}, \textbf{ lm\+\_\+rkm\+\_\+reg()}, \textbf{ lm\+\_\+wait\+\_\+notify()}, \textbf{ load\+\_\+24be()}, \textbf{ m3ua\+\_\+xfer\+\_\+from\+\_\+data()}, \textbf{ msgb\+\_\+put\+\_\+sccp\+\_\+opt()}, \textbf{ msgb\+\_\+t16l16vp\+\_\+put()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+conn\+\_\+req()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+conn\+\_\+resp()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+data()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+disconn\+\_\+data()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+unitdata()}, \textbf{ osmo\+\_\+sccp\+\_\+tx\+\_\+unitdata\+\_\+ranap()}, \textbf{ parse\+\_\+tcap()}, \textbf{ rel\+\_\+tmr\+\_\+cb()}, \textbf{ rep\+\_\+rel\+\_\+tmr\+\_\+cb()}, \textbf{ rx\+\_\+inact\+\_\+tmr\+\_\+cb()}, \textbf{ sccp\+\_\+longptr\+\_\+part\+\_\+consistent()}, \textbf{ sccp\+\_\+ptr\+\_\+part\+\_\+consistent()}, \textbf{ sccp\+\_\+to\+\_\+xua\+\_\+opt()}, \textbf{ scoc\+\_\+fsm\+\_\+active()}, \textbf{ scoc\+\_\+fsm\+\_\+conn\+\_\+pend\+\_\+in()}, \textbf{ scoc\+\_\+fsm\+\_\+conn\+\_\+pend\+\_\+out()}, \textbf{ scoc\+\_\+fsm\+\_\+idle()}, \textbf{ scoc\+\_\+fsm\+\_\+wait\+\_\+conn\+\_\+conf()}, \textbf{ sua\+\_\+parse\+\_\+gt()}, \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+garbage\+\_\+collect\+\_\+cb()}, \textbf{ tx\+\_\+inact\+\_\+tmr\+\_\+cb()}, \textbf{ xua\+\_\+as\+\_\+fsm\+\_\+active()}, \textbf{ xua\+\_\+as\+\_\+fsm\+\_\+inactive()}, \textbf{ xua\+\_\+as\+\_\+fsm\+\_\+pending()}, \textbf{ xua\+\_\+asp\+\_\+allstate()}, \textbf{ xua\+\_\+asp\+\_\+fsm\+\_\+active()}, \textbf{ xua\+\_\+asp\+\_\+fsm\+\_\+down()}, \textbf{ xua\+\_\+asp\+\_\+fsm\+\_\+inactive()}, \textbf{ xua\+\_\+from\+\_\+msg()}, \textbf{ xua\+\_\+from\+\_\+msg\+\_\+common()}, and \textbf{ xua\+\_\+t\+\_\+ack\+\_\+cb()}.

\mbox{\label{tcap__as__loadshare_8c_a4028993b4bc2c4b88683e7cffeb01429}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!err@{err}}
\index{err@{err}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{err}
{\footnotesize\ttfamily uint8\+\_\+t err}



Referenced by \textbf{ \+\_\+setsockopt\+\_\+peer\+\_\+primary\+\_\+addr()}, \textbf{ m3ua\+\_\+gen\+\_\+error\+\_\+msg()}, \textbf{ m3ua\+\_\+rx\+\_\+msg()}, \textbf{ osmo\+\_\+ss7\+\_\+pointcode\+\_\+parse()}, \textbf{ sccp\+\_\+to\+\_\+xua\+\_\+err()}, \textbf{ sua\+\_\+rx\+\_\+msg()}, \textbf{ sua\+\_\+to\+\_\+sccp\+\_\+err()}, and \textbf{ tcap\+\_\+trans\+\_\+track\+\_\+entry\+\_\+create()}.

\mbox{\label{tcap__as__loadshare_8c_a9ff2206afb13a8336a38b80bac7eb64a}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!mt@{mt}}
\index{mt@{mt}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{mt}
{\footnotesize\ttfamily uint8\+\_\+t mt}



Referenced by \textbf{ ipa\+\_\+tcap\+\_\+routing\+\_\+alloc()}.

\mbox{\label{tcap__as__loadshare_8c_afaa20335217fae16f0e22b466017dae1}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!pc@{pc}}
\index{pc@{pc}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{pc}
{\footnotesize\ttfamily uint32\+\_\+t pc}



Referenced by \textbf{ \+\_\+rout\+\_\+key()}, \textbf{ DEFUN()}, \textbf{ DEFUN\+\_\+\+ATTR()}, \textbf{ format\+\_\+affected\+\_\+pcs\+\_\+c()}, \textbf{ gen\+\_\+hash()}, \textbf{ gen\+\_\+hash\+\_\+addr()}, \textbf{ mtp\+\_\+pause\+\_\+ind\+\_\+up\+\_\+to\+\_\+all\+\_\+users()}, \textbf{ mtp\+\_\+prim\+\_\+pause\+\_\+ind\+\_\+alloc()}, \textbf{ mtp\+\_\+prim\+\_\+resume\+\_\+ind\+\_\+alloc()}, \textbf{ mtp\+\_\+resume\+\_\+ind\+\_\+up\+\_\+to\+\_\+all\+\_\+users()}, \textbf{ osmo\+\_\+sccp\+\_\+simple\+\_\+server()}, \textbf{ osmo\+\_\+sccp\+\_\+simple\+\_\+server\+\_\+add\+\_\+clnt()}, \textbf{ osmo\+\_\+sccp\+\_\+simple\+\_\+server\+\_\+on\+\_\+ss7\+\_\+id()}, \textbf{ osmo\+\_\+sccp\+\_\+user\+\_\+bind\+\_\+pc()}, \textbf{ osmo\+\_\+sccp\+\_\+user\+\_\+find()}, \textbf{ osmo\+\_\+ss7\+\_\+pc\+\_\+is\+\_\+local()}, \textbf{ osmo\+\_\+ss7\+\_\+pc\+\_\+is\+\_\+valid()}, \textbf{ osmo\+\_\+ss7\+\_\+pc\+\_\+normalize()}, \textbf{ osmo\+\_\+ss7\+\_\+pointcode\+\_\+print()}, \textbf{ osmo\+\_\+ss7\+\_\+pointcode\+\_\+print2()}, \textbf{ osmo\+\_\+ss7\+\_\+pointcode\+\_\+print\+\_\+buf()}, \textbf{ pc\+\_\+comp\+\_\+shift\+\_\+and\+\_\+mask()}, \textbf{ sccp\+\_\+scmg\+\_\+tx()}, \textbf{ sccp\+\_\+user\+\_\+alloc()}, \textbf{ sccp\+\_\+user\+\_\+bind\+\_\+pc()}, \textbf{ sccp\+\_\+user\+\_\+find()}, \textbf{ ss7\+\_\+combined\+\_\+linkset\+\_\+alloc()}, \textbf{ ss7\+\_\+linkset\+\_\+find\+\_\+or\+\_\+create()}, \textbf{ ss7\+\_\+route\+\_\+alloc()}, \textbf{ ss7\+\_\+route\+\_\+create()}, \textbf{ ss7\+\_\+route\+\_\+table\+\_\+find\+\_\+or\+\_\+create\+\_\+combined\+\_\+linkset()}, \textbf{ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id()}, \textbf{ tcap\+\_\+gen\+\_\+hash()}, \textbf{ tcap\+\_\+gen\+\_\+hash\+\_\+addr()}, \textbf{ tcap\+\_\+hlist\+\_\+get()}, \textbf{ tcap\+\_\+overlap\+\_\+tid()}, \textbf{ tcap\+\_\+range\+\_\+alloc()}, \textbf{ tx\+\_\+daud\+\_\+pc()}, \textbf{ xua\+\_\+snm\+\_\+pc\+\_\+available\+\_\+to\+\_\+mtp\+\_\+users()}, \textbf{ xua\+\_\+snm\+\_\+rx\+\_\+daud()}, \textbf{ xua\+\_\+snm\+\_\+rx\+\_\+dava()}, \textbf{ xua\+\_\+snm\+\_\+rx\+\_\+duna()}, \textbf{ xua\+\_\+snm\+\_\+scon\+\_\+to\+\_\+mtp\+\_\+users()}, \textbf{ xua\+\_\+snm\+\_\+srm\+\_\+pc\+\_\+available()}, and \textbf{ xua\+\_\+snm\+\_\+srm\+\_\+pc\+\_\+available\+\_\+single()}.

\mbox{\label{tcap__as__loadshare_8c_aaf1b939170b82732448a965a5b33ad4e}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!seq@{seq}}
\index{seq@{seq}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{seq}
{\footnotesize\ttfamily uint32\+\_\+t seq}

\mbox{\label{tcap__as__loadshare_8c_a69fe6cfeacf640032a3222345f3d6bf8}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!ssn@{ssn}}
\index{ssn@{ssn}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{ssn}
{\footnotesize\ttfamily uint8\+\_\+t ssn}



Referenced by \textbf{ \+\_\+rout\+\_\+key()}, \textbf{ DEFUN()}, \textbf{ gen\+\_\+hash()}, \textbf{ gen\+\_\+hash\+\_\+addr()}, \textbf{ osmo\+\_\+sccp\+\_\+addr\+\_\+set\+\_\+ssn()}, \textbf{ osmo\+\_\+sccp\+\_\+local\+\_\+addr\+\_\+by\+\_\+instance()}, \textbf{ osmo\+\_\+sccp\+\_\+user\+\_\+bind()}, \textbf{ osmo\+\_\+sccp\+\_\+user\+\_\+bind\+\_\+pc()}, \textbf{ osmo\+\_\+sccp\+\_\+user\+\_\+find()}, \textbf{ sccp\+\_\+scmg\+\_\+rx\+\_\+ssn\+\_\+allowed()}, \textbf{ sccp\+\_\+scmg\+\_\+rx\+\_\+ssn\+\_\+prohibited()}, \textbf{ sccp\+\_\+scmg\+\_\+tx()}, \textbf{ sccp\+\_\+user\+\_\+alloc()}, \textbf{ sccp\+\_\+user\+\_\+bind\+\_\+pc()}, \textbf{ sccp\+\_\+user\+\_\+find()}, \textbf{ ssn\+\_\+contains\+\_\+tcap()}, \textbf{ sua\+\_\+encode\+\_\+daud()}, \textbf{ sua\+\_\+encode\+\_\+dava()}, \textbf{ sua\+\_\+encode\+\_\+duna()}, \textbf{ sua\+\_\+tx\+\_\+snm\+\_\+congestion()}, \textbf{ tcap\+\_\+as\+\_\+asp\+\_\+find\+\_\+by\+\_\+tcap\+\_\+id()}, \textbf{ tcap\+\_\+gen\+\_\+hash()}, \textbf{ tcap\+\_\+gen\+\_\+hash\+\_\+addr()}, \textbf{ tcap\+\_\+hlist\+\_\+get()}, \textbf{ tcap\+\_\+overlap\+\_\+tid()}, \textbf{ tcap\+\_\+range\+\_\+alloc()}, \textbf{ xua\+\_\+snm\+\_\+rx\+\_\+dava()}, and \textbf{ xua\+\_\+snm\+\_\+rx\+\_\+duna()}.

\mbox{\label{tcap__as__loadshare_8c_af89dc58f1c50b1fec1d263abca129b9f}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tid\_end@{tid\_end}}
\index{tid\_end@{tid\_end}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tid\_end}
{\footnotesize\ttfamily uint32\+\_\+t tid\+\_\+end}



Referenced by \textbf{ tcap\+\_\+overlap\+\_\+tid()}, \textbf{ tcap\+\_\+range\+\_\+alloc()}, and \textbf{ tcap\+\_\+range\+\_\+overlaps()}.

\mbox{\label{tcap__as__loadshare_8c_a09293e754f0eb86bb2b031acd3501e14}} 
\index{tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}!tid\_start@{tid\_start}}
\index{tid\_start@{tid\_start}!tcap\_as\_loadshare.c@{tcap\_as\_loadshare.c}}
\doxysubsubsection{tid\_start}
{\footnotesize\ttfamily uint32\+\_\+t tid\+\_\+start}



Referenced by \textbf{ DEFUN()}, \textbf{ tcap\+\_\+overlap\+\_\+tid()}, \textbf{ tcap\+\_\+range\+\_\+alloc()}, and \textbf{ tcap\+\_\+range\+\_\+overlaps()}.

