summaryrefslogtreecommitdiff
path: root/2019/cccamp2019-how_camp_lte_works/how_the_camp_lte_works.adoc
blob: faae09be57b52ee30170608b10f0f13f23562683 (plain)
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
How the CCC Camp 2019 LTE network works
=======================================
:author:	Harald Welte <laforge@gnumonks.org>
:copyright:	2019 by Harald Welte (License: CC-BY-SA)
:backend:	slidy
:max-width:	45em

== Intro

* we had GSM networks at CCC events since 2008
** Initially using proprietary, E1-attached Siemens BTS and OpenBSC (later OsmoBSC)
* we had GSM networks at European Hacker Camps since 2009 (HAR)
* we had UMTS (3G) for a few years now, too
** using Osmocom stack with OsmoHNBGW / OsmoMSC / OsmoSGSN

== LTE

* new network elements with new acronyms

[graphviz]
----
digraph {
  rankdir = LR;
  eNB -> MME [label="S1AP"];
  MME -> HSS [label="DIAMETER"];
  MME -> SGW [label="GTPv2C"];
  SGW -> PGW [label="GTPv2C"];
  PGW -> PCRF [label="DIAMETER"];
  eNB -> SGW [label="GTP-U"];
  SGW -> PGW [label="GTP-U"];

  { rank = same; HSS; PCRF; }
}
----

== LTE

* new protocols on all layers of all interfaces
** S1AP between eNodeB and MME
** GTPv2C between MME and SGW and SGW and PGW
** DIAMETER between everyone and HSS

== FOSS LTE software

* srsLTE for eNodeB and UE
** main focus on UE; eNodeB features somewhat limited
** super simplistic srsEPC suitable for only the scarcest of use cases
* OpenAirInterface
** obscure code base; difficult to build; "
** very research oriented
** RAN part under non-free, non-opensource but 'source available' license
* nextepc

== nextepc

* Implements all key LTE network (EPC) elements
** MME
** SGW
** PGW
** HSS
** PCRF

== interfacing with Osmocom 2G/3G core

* shared subscriber (and key) database
** LTE: HSS, speaking DIAMETER
** 2G/3G: HLR, speaking MAP (Osmocom:GSUP)
* We need a so-called 'inter-working function (IWF)
** translate from DIAMETER to GSUP and vice-versa

== osmo_dia2gsup

* Best FOSS DIAMETER support contained in Erlang/OTP
* Fairwaves contributed GSUP protocol codec in Erlang
* I wrote a translator for the two minimal procedures
** AuthInfo (Obtain authentication tuples)
** UpdateLocation (registration)

== Network layout

[graphviz]
----
digraph G {
  rankdir = LR;

  { rank = same; eNB0; eNB1; eNB2; eNB3; eNB4; eNB5 };

  eNB0 -> eNB1 [label="X2"];
  eNB1 -> eNB2 [label="X2"];
  eNB2 -> eNB3 [label="X2"];
  eNB3 -> eNB4 [label="X2"];
  eNB4 -> eNB5 [label="X2"];

 eNB0 [label="eNB (RBS6402)"];
 eNB1 [label="eNB (RBS6402)"];
 eNB2 [label="eNB (RBS6402)"];
 eNB3 [label="eNB (RBS6402)"];
 eNB4 [label="eNB (RBS6402)"];
 eNB5 [label="eNB (RBS6402)"];

 { rank = same; MME; SGW; };

 MME [label="MME (nextepc)"];
 SGW [label="SGW (nextepc)"];

 eNB0 -> MME [label="S1AP"];
 eNB1 -> MME [label="S1AP"];
 eNB2 -> MME [label="S1AP"];
 eNB3 -> MME [label="S1AP"];
 eNB4 -> MME [label="S1AP"];
 eNB5 -> MME [label="S1AP"];

 MME -> dia2gsup [label="DIAMETER"];

 eNB0 -> SGW [label="GTP1U"];
 eNB1 -> SGW [label="GTP1U"];
 eNB2 -> SGW [label="GTP1U"];
 eNB3 -> SGW [label="GTP1U"];
 eNB4 -> SGW [label="GTP1U"];
 eNB5 -> SGW [label="GTP1U"];

 SGW -> PGW [label="GTP1U"];
 SGW -> PGW [label="GTPv2C"];

 dia2gsup -> OsmoHLR [label="GSUP"];
}
----

== EOF

End of File
personal git repositories of Harald Welte. Your mileage may vary