summaryrefslogtreecommitdiff
path: root/2018/osmodevcon2018-reintroducing_e1/osmodevcon2018-reintroducing_e1.adoc
blob: 2e5bd746a118c5b10ef3de2017bc525208a3007d (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
Re-introducing E1 in OsmoBSC
============================
:author:	Harald Welte <laforge@gnumonks.org>
:copyright:	2018 by Harald Welte (License: CC-BY-SA)
:backend:	slidy
:max-width:	45em

== Intro

* OpenBSC (later OsmoNITB) started with E1 BTS
* until NITB Split, E1 support remained present
* even old OsmoBSC (sccplite) never had E1 BTS suport
* new OsmoBSC also has no E1 BTS support
* let's change that!

== Classic OsmoNITB with E1-BTS + ext MNCC

image::osmo-userplane1_e1_mncc.svg[width="100%"]

* Abis/E1 with 16k sub-slots in 64k slots
* E1 device offers 64k timeslots only
** 16k sub-channel mux/demux done in software
* TRAU frames in 16k sub-slots decoded (to FR/EFR codec frames)
* passed next to MNCC signaling over MNCC socket

== Classic OsmoNITB with E1-BTS + ext MNCC + RTP

image::osmo-userplane2-e1_rtp.svg[width="100%"]

* just like previous example, but we generate RTP from TRAU frames
* MNCC interface is signaling only
* user voice frames handled via RTP

== Classic OsmoNITB with IP-BTS + ext MNCC + RTP proxy

image::osmo-userplane3-rtp_proxy.svg[width="100%"]

* Abis/IP BTS use RTP transport for speech frames
* OsmoNITB is asked to provide RTP proxy functionality

== Classic OsmoNITB with IP-BTS + ext MNCC + direct RTP

image::osmo-userplane4-rtp_direct.svg[width="100%"]

* Abis/IP BTS use RTP transport for speech frames
* OsmoNITB rtp_proxy is disabled
* RTP data passes directly from BTS to external PBX and vice-versa

== IP-BTS User Plane in post-NITB 

When using IP-based BTS like OsmoBTS, this looks like this:

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

  BSC [label="OsmoBSC"];
  MSC [label="OsmoMSC"];
  MGWb [label="OsmoMGW\n(BSC)"];
  MGWm [label="OsmoMGW\n(MSC)"];

  { rank=same; BSC; MGWb; };
  { rank=same; MSC; MGWm; };

  BTS -> BSC [label="A-bis/IP (RSL+OML)"];
  BSC -> MSC [label="A (BSSAP)"];
  BTS -> MGWb [label="RTP"];
  MGWb -> MGWm [label="RTP"];
  MSC -> PBX [label="MNCC"];
  MGWm -> PBX [label="RTP"];

  BSC -> MGWb [label="MGCP"];
  MSC -> MGWm [label="MGCP"];
}
----

* RTP to/from the BTS is handled by the BSC-colocated OsmoMGW


== E1-BTS User Plane in post-NITB

When using E1-based BTS, it should look like this:

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

  BSC [label="OsmoBSC"];
  MSC [label="OsmoMSC"];
  MGWb [label="OsmoMGW\n(BSC)"];
  MGWm [label="OsmoMGW\n(MSC)"];

  { rank=same; BSC; MGWb; };
  { rank=same; MSC; MGWm; };

  BTS -> BSC [label="A-bis/E1 (RSL+OML)"];
  BSC -> MSC [label="A (BSSAP)"];
  BTS -> MGWb [label="TRAU-Frames\nover E1"];
  MGWb -> MGWm [label="RTP"];
  MSC -> PBX [label="MNCC"];
  MGWm -> PBX [label="RTP"];

  BSC -> MGWb [label="MGCP"];
  MSC -> MGWm [label="MGCP"];
}
----

* TRAU frames in 16k E1 sub-slots to/from the BTS are handled by the BSC-colocated OsmoMGW
* OsmoMGW needs real media gateway functionality from E1 sub-slots to RTP
* E1 driver needs to support single E1 span (line) that
** opens RSL/OML LAPDm signaling on one TS from OsmoBSC
** opens TRAU on other TS from OsmoMGW
* `osmo-bsc.cfg` states which Um TS maps to which E1 TS/SS 
* `osmo-bsc` uses MGCP EP naming scheme like `E1/Line1/TS4/SS2@mgw`


== EOF

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