
\section{Core Network protocol implementations}

\subsection{Erlang implementations}

\begin{frame}{Erlang osmo\_ss7}
\begin{itemize}
	\item Signalling link management
	\item Signalling linkset management
	\item MTP-level routing
	\item Protocol codecs
	\begin{itemize}
		\item BSSMAP, ISUP, M2PA, M2UA, M3UA, MTP3, SCCP, SUA
	\end{itemize}
	\item Various different protocol implementations
	\begin{itemize}
		\item SIGTRAN: M3UA, M2PA, M2UA, SUA
		\item IPA multiplex / SCCP lite
	\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Erlang osmo\_sccp}
SCCP implementation, typcially used on top of osmo\_sccp
\begin{itemize}
	\item SCCP connectionless (SCLC)
	\item SCCP connection oriented (SCOC)
	\item SCCP routing / gtt (SCRC)
	\item applications can bind to SSN numbers
\end{itemize}
\end{frame}

\begin{frame}{Erlang osmo\_map}
\begin{itemize}
	\item Not a full-blown MAP end-user implementation
	\item Primarily a set of integrated TCAP+MAP codec
	\item Used for protocol analysis/dissection
	\item Used for transparent MAP mangling engines
	\item Think of FTP/IRC NAT in TCP/IP, where you need to modify
		addresses contained in the payload (not header) of the
		messages
\end{itemize}
\end{frame}

\begin{frame}{Erlang mgw\_nat}
\begin{itemize}
	\item Strange transparent SCCP/TCAP/MAP gateway
	\item Supports all kinds of strange operations
	\begin{itemize}
		\item SCCP Global Title Masquerade (dynamic GT pool)
		\item Replace VLR/MSC GT inside MAP payload
		\item Supported Camel Phase patching
		\item 1:1 IMSI mapping in MAP payload
		\item ISUP GT mangling
		\item national/international numbering plan conversions
	\end{itemize}
	\item Used in multiple production installations for ~ 1 year
\end{itemize}
\end{frame}

\begin{frame}{Erlang signerl TCAP}
\begin{itemize}
	\item Full ITU-T TCAP implementation
	\item 1:1 mapping of ITU-T TCAP state machines to Erlang gen\_fsm
	\begin{itemize}
		\item DHA - Dialogue Handling
		\item TSM - Transaction State Machine
		\item ISM - Invocation State Machine
	\end{itemize}
	\item 1:1 mapping of other ITU-T entities to Erlang gen\_server
	\begin{itemize}
		\item CCO - Componen Coordinator
		\item TCO - Transaction Coordinator
	\end{itemize}
	\item Some old/incomplete/bit-rotten ANSI TCAP code
\end{itemize}
\end{frame}

\begin{frame}{Erlang signerl TCAP}
\begin{itemize}
	\item properly implements the N-primitives to lower level
	\item properly implements all TR-primitives internally (TC / TR
		split)
	\item properly implements all TC-primitives towards the TCAP user
	\item Can be used on top of osmo\_sccp
	\item Can be used directly by application servers or via signerl MAP
\end{itemize}
\end{frame}

\begin{frame}{Erlang signerl MAP}
\begin{itemize}
	\item Interface between MAP primitives and TCAP primitives
	\item Provides very little benefit over using TCAP directly
	\item Not used much so far, I always use TCAP user API instead
\end{itemize}
\end{frame}

\begin{frame}{Erlang application servers}
\begin{itemize}
	\item No complete implementation of any GSM core network node
		yet
	\item Lots of testing / experimentation code for generating
		single MAP transactions against existing/proprietary
		core network components
	\item Work on a HLR based on Mnesia DB should be starting soon
\end{itemize}
\end{frame}

\subsection{C implementations}

\begin{frame}{libosmo-sccp}
\begin{itemize}
	\item minimalistic SCCP implementation
	\item only used inside IPA multiplex / SCCP lite
	\item no retransmissions / GT routing / translation
	\item stable, used in production (osmo-bsc)
\end{itemize}
\end{frame}

\begin{frame}{libosmo-asn1-tcap}
\begin{itemize}
	\item asn1c-generated TCAP codec
	\item almost no manual code
	\item built as shared library
\end{itemize}
\end{frame}

\begin{frame}{libosmo-tcap}
\begin{itemize}
	\item First attempt of Harald to implement TCAP (before Erlang)
	\item 1:1 mapping of ITU-T TCAP components to C source files
	\item Heavily based on asn1c-generated data structures
	\item Uses libosmo-asn1-tcap
\end{itemize}
\end{frame}

\begin{frame}{libosmo-asn1-map}
\begin{itemize}
	\item asn1c-generated MAP code
	\item almost no manual code
	\item built as shared library
\end{itemize}
\end{frame}

\begin{frame}{Future of C implementation?}
\begin{itemize}
	\item unclear at this point
	\item first finish testing/deploying Erlang implementations
	\item possible use case for Gc interface of osmo-sgsn (SGSN-HLR)
	\item Do we interface C code with Erlang MAP or maintain C implementation in parallel?
\end{itemize}
\end{frame}

