1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
\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}
|