Project

General

Profile

SDR OsmoTRX network from scratch » History » Version 32

laforge, 02/19/2016 10:48 PM

1 32 laforge
{{>toc}}
2 31 laforge
3 32 laforge
h1. Installing a [[OsmoTRX]] based GSM network from scratch
4 1 jolly
5
6 32 laforge
*This document is outdated by now and only applies if you would like to use hardware based on [[OsmoTRX]]!*
7
8
This document describes how to install, configure and run [[OsmoTRX]], [[OsmoBTS]], [[osmo-nitb|OsmoNITB]] and LCR.
9
10 1 jolly
In order to use this quick howto, you must have basic knowledge about GIT and be familiar with compiling packages from source.
11
12
13
14 32 laforge
h2. Prerequisite
15
16
17 23 jolly
These packages may be available from you distribution. If not, install them by hand as follows.
18
19 17 jolly
20 32 laforge
h3. opencore-amr (optional, for LCR only)
21 1 jolly
22
23 32 laforge
This package installs GSM adaptive multirate codecs and the EFR codec. The Full-Rate codec is included in LCR's repository.
24
25
<pre>
26 1 jolly
tar xvzf opencore-amr-x.x.x.tar.gz
27
cd opencore-amr-x.x.x
28
./configure
29
make
30
make install
31
ldconfig
32
cd ..
33 32 laforge
</pre>
34 1 jolly
35
36
37 32 laforge
h3. Sip-Sofia (optional, for LCR only)
38
39
40 1 jolly
This package installs the open source SIP stack of Nokia Research Center.
41
42 32 laforge
It can downloaded at [http://sourceforge.net/projects/sofia-sip/files/sofia-sip/":http://sourceforge.net/projects/opencore-amr/files/opencore-amr/].
43 1 jolly
44 32 laforge
<pre>
45 1 jolly
tar xvzf sofia-sip-x.xx.xx.tar.gz
46
cd sofia-sip-x.xx.xx
47
./configure
48
make
49
make install
50
ldconfig
51
cd ..
52 32 laforge
</pre>
53 1 jolly
54
55
56 32 laforge
h3. oRTP
57 1 jolly
58
59 32 laforge
This package installs the open source RTP protocol required for libosmo-abis.
60
61
<pre>
62 1 jolly
tar xvzf ortp-x.xx.x.tar.gz
63
cd ortp-x.xx.x
64
./configure
65
make
66
make install
67
ldconfig
68
cd ..
69 32 laforge
</pre>
70 1 jolly
71
72
73 32 laforge
h3. others
74
75
76 1 jolly
sqlite3, libdbi, dbd-sqlite3 (driver) should should be available from your distribution.
77
78
79
80
81 32 laforge
h2. Installing 
82 1 jolly
83 32 laforge
84
85
h3. libosmocore
86
87
88 1 jolly
This package installs the core utility library for various Osmocom projects.
89 3 jolly
90 1 jolly
The latest version can downloaded via git:
91 32 laforge
<pre>
92 3 jolly
git clone git://git.osmocom.org/libosmocore.git
93 32 laforge
</pre>
94 3 jolly
95 2 jolly
Finish the installation:
96 32 laforge
<pre>
97 1 jolly
cd libosmocore
98 2 jolly
autoreconf -i
99 1 jolly
./configure
100 3 jolly
make
101 1 jolly
make install
102
ldconfig
103
cd ..
104 32 laforge
</pre>
105 1 jolly
106
107
108 32 laforge
h3. libosmo-abis
109 1 jolly
110 32 laforge
111
[[span(style=background: yellow, Use jolly/multi-trx branch. It is required for multiple TRX support, until it is applied to master. jolly/trx branch of osmo-bts will not compile without it.)":http://download.savannah.gnu.org/releases/linphone/ortp/sources/].]
112
113 1 jolly
This package installs the core utility library for various Osmocom projects.
114 3 jolly
115
The latest version can downloaded via git:
116 32 laforge
<pre>
117 3 jolly
git clone git://git.osmocom.org/libosmo-abis.git
118 32 laforge
</pre>
119 3 jolly
120
Sometimes it is necessary to point to different pkgconfig path, because your distribution may use other pkgconfig path than the default path of the packages above. Use the following prefix:
121 32 laforge
<pre>
122 1 jolly
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....
123 32 laforge
</pre>
124 1 jolly
125 2 jolly
Finish the installation:
126 32 laforge
<pre>
127 1 jolly
cd libosmo-abis
128
# change branch:
129
git checkout -b jolly/multi-trx origin/jolly/multi-trx
130 2 jolly
autoreconf -i
131 1 jolly
./configure
132
(sometimes it is necessary to point to different .../lib/pkgconfig/ path: PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....)
133
make
134
make install
135 3 jolly
ldconfig
136 1 jolly
cd ..
137 32 laforge
</pre>
138 1 jolly
139 19 ipse
140 2 jolly
141 32 laforge
h3. [[OsmoNITB]]
142 1 jolly
143 32 laforge
144
This package installs the [[osmo-nitb|Osmocom Network In The Box]] software
145
146 1 jolly
The latest version can downloaded via git:
147 32 laforge
<pre>
148 1 jolly
git clone git://git.osmocom.org/openbsc.git
149 32 laforge
</pre>
150 1 jolly
151
Finish the installation:
152 32 laforge
<pre>
153 1 jolly
cd openbsc/openbsc/
154
# change branch:
155
git checkout -b jolly/testing origin/jolly/testing
156
autoreconf -i
157
./configure
158
(sometimes it is necessary to point to different .../lib/pkgconfig/ path: PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....)
159
make
160
make install
161
cd ../..
162 32 laforge
</pre>
163 1 jolly
164 19 ipse
165 27 ipse
166 32 laforge
h3. [[OsmoBTS]]
167 1 jolly
168 32 laforge
169
[[OsmoBTS]]: (BTS software)
170
171 1 jolly
This package installs the open source Base Transceiver Station.
172
173
The latest version can downloaded via git:
174 32 laforge
<pre>
175 1 jolly
git clone git://git.osmocom.org/osmo-bts.git
176 32 laforge
</pre>
177 1 jolly
178
Finish the installation:
179 32 laforge
<pre>
180 1 jolly
cd osmo-bts
181
#change branch:
182
git checkout -b jolly/trx origin/jolly/trx
183
autoreconf -i
184
./configure --enable-trx
185
(sometimes it is necessary to point to different .../lib/pkgconfig/ path: PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....)
186
make
187
make install
188
cd ..
189 32 laforge
</pre>
190 1 jolly
191
192 32 laforge
h3. [[OsmoTRX]]
193 1 jolly
194 28 ipse
195 32 laforge
Refer to the [[OsmoTRX]] page for build instructions.
196 27 ipse
197 32 laforge
198
199
h3. Linux-Call-Router (LCR) (optional)
200
201
202 17 jolly
This package installs the open source PBX software to bridge ISDN (DSS1) / SIP / GSM (MNCC protocol)
203
204
The latest version can downloaded via git:
205 32 laforge
<pre>
206 17 jolly
git clone git://git.misdn.eu/lcr.git/
207 32 laforge
</pre>
208 17 jolly
209
Now configure, as described here:
210
211 32 laforge
<pre>
212 18 jolly
cd lcr
213 1 jolly
autoreconf -i
214 18 jolly
./configure --with-sip --with-gsm-bs --with-gsm-ms
215 32 laforge
</pre>
216 1 jolly
217
I strongly suggest not to use the Half-Rate codec (--enable-gsmhr) except for testing, because this codec is so slow, that only one or two calls may occupy CPU completely.
218
219 17 jolly
Sometimes it is necessary to point to different pkgconfig path, because your distribution may use other pkgconfig path than the default path of the packages above. Use the following prefix:
220 32 laforge
<pre>
221 1 jolly
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....
222 32 laforge
</pre>
223 17 jolly
224
The configure result should include:
225 32 laforge
<pre>
226 17 jolly
configure: Compiled with GSM network side support
227 1 jolly
configure: Compiled with GSM mobile side support
228
configure: Compiled with GSM half rate codec support
229 17 jolly
configure: Compiled with GSM AMR codec support
230
configure: Compiled with SIP support
231 32 laforge
</pre>
232 17 jolly
233
Finish the installation:
234 32 laforge
<pre>
235 17 jolly
make
236
make install
237
ldconfig
238
cd ..
239 32 laforge
</pre>
240 17 jolly
241
242
243 32 laforge
h2. Configuration examples
244 17 jolly
245 32 laforge
246
247
h3. [[OsmoBTS]]
248
249
250
<pre>
251 3 jolly
mkdir ~/.osmocom
252
edit ~/.osmocom/osmo-bts.cfg
253 32 laforge
</pre>
254 3 jolly
255 32 laforge
<pre>
256 2 jolly
bts 0
257 3 jolly
 band DCS1800
258 2 jolly
 ipa unit-id 1801 0
259
 oml remote-ip 127.0.0.1
260
 rtp bind-ip 127.0.0.1
261
 rtp jitter-buffer 0
262
 paging lifetime 0
263
 gsmtap-sapi bcch
264
 gsmtap-sapi ccch
265
 gsmtap-sapi rach
266
 gsmtap-sapi agch
267 1 jolly
 gsmtap-sapi pch
268 2 jolly
 gsmtap-sapi sdcch
269
 gsmtap-sapi pacch
270
 gsmtap-sapi pdtch
271
 gsmtap-sapi sacch
272
 fn-advance 20
273
 ms-power-loop -10
274
 timing-advance-loop
275
 trx 0
276
  rxgain 0
277
  power 0
278 32 laforge
</pre>
279 1 jolly
280 4 jolly
281
282 32 laforge
h3. [[OpenBSC]]
283
284
285
<pre>
286 4 jolly
mkdir ~/.osmocom
287
edit ~/.osmocom/open-bsc.cfg
288 32 laforge
</pre>
289 4 jolly
290 32 laforge
*Be sure to change 'arfcn' to a frequency you have license for!*
291 4 jolly
292 32 laforge
<pre>
293 4 jolly
e1_input
294
 e1_line 0 driver ipa
295
 e1_line 0 port 0
296
network
297
 network country code 262
298
 mobile network code 42
299 32 laforge
 short name [[OpenBSC]]
300
 long name [[OpenBSC]]
301 4 jolly
 auth policy accept-all
302
 location updating reject cause 13
303
 encryption a5 0
304
 neci 1
305
 paging any use tch 0
306 1 jolly
 rrlp mode ms-based
307 4 jolly
 mm info 1
308 1 jolly
 handover 0
309
 handover window rxlev averaging 10
310
 handover window rxqual averaging 1
311
 handover window rxlev neighbor averaging 10
312
 handover power budget interval 6
313
 handover power budget hysteresis 3
314
 handover maximum distance 9999
315
 timer t3101 10
316 4 jolly
 timer t3103 0
317 1 jolly
 timer t3105 0
318
 timer t3107 0
319 4 jolly
 timer t3109 0
320
 timer t3111 0
321 1 jolly
 timer t3113 60
322
 timer t3115 0
323
 timer t3117 0
324 22 jolly
 timer t3119 0
325 1 jolly
 timer t3122 10
326
 timer t3141 0
327 4 jolly
 dtx-used 0
328
 subscriber-keep-in-ram 0
329 1 jolly
 bts 0
330 4 jolly
  type sysmobts
331
  band DCS1800
332
  cell_identity 0
333
  location_area_code 1
334 1 jolly
  training_sequence_code 7
335
  base_station_id_code 63
336
  ms max power 0
337
  cell reselection hysteresis 4
338
  rxlev access min 0
339
  periodic location update 30
340 4 jolly
  channel allocator descending
341
  rach tx integer 9
342 1 jolly
  rach max transmission 7
343 4 jolly
  channel-descrption attach 1
344
  channel-descrption bs-pa-mfrms 5
345
  channel-descrption bs-ag-blks-res 1
346
  ip.access unit_id 1801 0
347
  oml ip.access stream_id 255 line 0
348
  neighbor-list mode automatic
349 1 jolly
  trx 0
350 4 jolly
   rf_locked 0
351
   arfcn 869
352
   nominal power 0
353
   max_power_red 0
354
   rsl e1 tei 0
355
    timeslot 0
356 1 jolly
     phys_chan_config CCCH+SDCCH4
357
     hopping enabled 0
358
    timeslot 1
359 4 jolly
     phys_chan_config TCH/F
360 1 jolly
     hopping enabled 0
361
    timeslot 2
362
     phys_chan_config TCH/F
363
     hopping enabled 0
364
    timeslot 3
365
     phys_chan_config TCH/F
366
     hopping enabled 0
367
    timeslot 4
368
     phys_chan_config TCH/F
369 4 jolly
     hopping enabled 0
370
    timeslot 5
371 5 jolly
     phys_chan_config TCH/F
372 4 jolly
     hopping enabled 0
373 1 jolly
    timeslot 6
374 4 jolly
     phys_chan_config TCH/F
375 17 jolly
     hopping enabled 0
376 4 jolly
    timeslot 7
377 12 jolly
     phys_chan_config TCH/F
378
     hopping enabled 0
379 32 laforge
</pre>
380 12 jolly
381
382 1 jolly
383 32 laforge
h3. Linux-Call-Router (LCR) (optional)
384 1 jolly
385 32 laforge
386
387
h4. options.conf
388
389
390
<pre>
391 12 jolly
edit /usr/local/etc/lcr/options.conf
392 32 laforge
</pre>
393 12 jolly
394
Add a line to show logging to the console:
395 32 laforge
<pre>
396 4 jolly
debug 0x100000
397 32 laforge
</pre>
398 4 jolly
399 1 jolly
400
401 32 laforge
h4. interface.conf
402
403
404 1 jolly
The simplest configuration uses only the GSM interface. It allows LCR to forward calls from GSM to GSM or from GSM to a call test feature.
405
406 32 laforge
<pre>
407 1 jolly
edit /usr/local/etc/lcr/interface.conf
408 32 laforge
</pre>
409 1 jolly
410
You can remove (or comment out) everything and just add this interface:
411
412 32 laforge
<pre>
413 4 jolly
[gsm]
414 1 jolly
gsm-bs
415
tones yes
416
earlyb no
417
extern
418 32 laforge
</pre>
419 4 jolly
420
421 32 laforge
h4. routing.conf
422
423
424
<pre>
425 4 jolly
edit /usr/local/etc/lcr/routing.conf
426 32 laforge
</pre>
427 4 jolly
428
You can remove (or comment out) everything and just add these rulesets:
429
430 32 laforge
<pre>
431 4 jolly
[main]
432
interface=gsm                           : goto ruleset=gsm
433
                                        : disconnect cause=31
434
435 1 jolly
[gsm]
436
dialing=99                              : test
437 4 jolly
                                        : extern interfaces=gsm
438 32 laforge
</pre>
439 1 jolly
440 6 jolly
Look at the main rule set. All calls from interface 'gsm' are forwarded to rule set 'gsm'.
441
442
Look at the gsm rule set. All calls that dial '99' prefix, will be test calls. All other calls will be forwarded back to 'gsm' interface.
443
444
445
446 32 laforge
h2. Running
447
448
449 17 jolly
I suggest to have one shell for every process to run, rather than stating all processes as damon from one shell. Not starting as deamon allows to easily see the debugging output.
450 1 jolly
451 9 jolly
452 32 laforge
h3. [[OpenBSC]]
453 1 jolly
454 32 laforge
455
Open a shell and start [[OpenBSC]]:
456
457
<pre>
458 1 jolly
osmo-nitb -c ~/.osmocom/open-bsc.cfg -l ~/.osmocom/hlr.sqlite3 -P -C --debug=DRLL:DCC:DMM:DRR:DRSL:DNM
459 32 laforge
</pre>
460 1 jolly
461 32 laforge
[[OpenBSC]] runs as a stand-alone network with given config file and data base. In order to use LCR, add '-m' option. In this case the LCR replaces the built-in call control.
462 1 jolly
463 32 laforge
<pre>
464 6 jolly
osmo-nitb -c ~/.osmocom/open-bsc.cfg -l ~/.osmocom/hlr.sqlite3 -P -m -C --debug=DRLL:DCC:DMM:DRR:DRSL:DNM
465 32 laforge
</pre>
466 1 jolly
467 6 jolly
Very important is the option '-C'. On certain machines, osmo-nitb will halt from time to time while writing counters to database. This Without this option, audio might interrupt several seconds from time to time.
468
469 1 jolly
The debugging is usefull for early tests, because you will quickly see what happens if a mobile requests something.
470
471 32 laforge
<pre>
472 6 jolly
<0005> bsc_init.c:422 
473
WARNING: You are running an 'accept-all' network on a BTS that is not barred.
474 1 jolly
This configuration is likely to interfere with production GSM networks and
475
should only be used in a RF shielded environment such as a faraday cage!
476
477 6 jolly
<0019> input/ipaccess.c:925 enabling ipaccess BSC mode
478
DB: Database initialized.
479 1 jolly
DB: Database prepared.
480
<001d> sms_queue.c:220 Attempting to send 20 SMS
481 32 laforge
</pre>
482 6 jolly
483 1 jolly
484
485 32 laforge
h3. [[OsmoBTS]]
486 1 jolly
487 32 laforge
488
Open a shell and start [[OsmoBTS]]:
489
490
<pre>
491 6 jolly
osmobts-trx -c ~/.osmocom/osmo-bts.cfg
492 32 laforge
</pre>
493 1 jolly
494 32 laforge
<pre>
495 1 jolly
((*))
496
  |
497 32 laforge
 / \ [[OsmoBTS]]
498 1 jolly
Using MAC address of eth0: 'xx:xx:xx:xx:xx:xx'
499 6 jolly
...
500
<000a> trx_if.c:176 No response from tranceiver
501 1 jolly
<000a> trx_if.c:176 No response from tranceiver
502 6 jolly
<000a> trx_if.c:176 No response from tranceiver
503 32 laforge
</pre>
504 1 jolly
505
506
507 32 laforge
h3. [[OsmoTRX]]
508 6 jolly
509
510 32 laforge
Refer to the [[OsmoTRX]] page on how to run [[OsmoTRX]].
511 1 jolly
512
513 32 laforge
h4. [[UmTRX]]
514 6 jolly
515 32 laforge
516
The installation/setup/calibration of [[UmTRX]] is beyond the scope of this document. Please refer to:
517
518
* https://github.com/fairwaves
519
* http://files.ettus.com/uhd_docs/manual/html/build.html
520
* http://wush.net/trac/rangepublic/wiki/BuildInstallRun
521
522
523
h4. calypso-BTS
524
525
526 7 jolly
Building Osmocom-BB with arm-elf toolchain is also beyond the scope of this document. If you managed to compile and run Osmocom-BB you should be able to run the transceiver too.
527
528
The latest version can downloaded via git:
529 32 laforge
<pre>
530 7 jolly
git clone git://git.osmocom.org/libosmo-dsp.git
531
git clone git://git.osmocom.org/osmocom-bb.git
532 32 laforge
</pre>
533 7 jolly
534 1 jolly
In order to compile Osmocom-BB with transceiver support, do the following:
535 32 laforge
<pre>
536 13 jolly
cd libosmo-dsp
537 17 jolly
autoreconf -i
538 1 jolly
./configure
539 20 jolly
(sometimes it is necessary to point to different .../lib/pkgconfig/ path: PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure .....)
540
make
541
make install
542
cd ..
543
544
cd osmocom-bb
545 17 jolly
# change branch:
546 13 jolly
git checkout -b jolly/testing origin/jolly/testing
547 20 jolly
cd src
548
make
549
# after it compiles, just enable transceiver support
550
cd host/layer23
551
./configure --enable-transceiver
552
make
553 32 laforge
</pre>
554 20 jolly
555 32 laforge
*NOTE: "ms-power-loop" at osmo-bts.cfg should be set to -65, in order to prevent saturating the input. Also if the phone is only one or few meters away, "ms max power" should be set to 0. In case of long distance test it can be set to 30 (DCS) or 33 (GSM 900).*
556 13 jolly
557
Now you should start with a single phone for one timeslot only. If it works, you can try two phones to serve two timeslots. Since you have only one slot, you will only be able to transmit broadcast, do location updating and send/receive SMS. Here is the "osmo-bts.cfg" for a single timeslot:
558
559 32 laforge
<pre>
560 13 jolly
bts 0
561
 band DCS1800
562
 ipa unit-id 1801 0
563
 oml remote-ip 127.0.0.1
564
 rtp jitter-buffer 0
565 1 jolly
 paging queue-size 200
566 21 jolly
 paging lifetime 0
567 26 jolly
 fn-advance 30
568
 ms-power-loop -60
569
 timing-advance-loop
570
 settsc
571
 setbsic
572
 trx 0
573
  rxgain 0
574
  power 0
575
  slotmask 1 0 0 0 0 0 0 0
576 32 laforge
</pre>
577 26 jolly
578
Run osmocon and transceiver application in separate shells:
579
580 32 laforge
<pre>
581 26 jolly
# Please refer to Osmocom-BB wiki for compiling and running own firmware on compal phones...
582
osmocon -p /dev/ttyUSB0 -m c123xor -c path_to/trx.highram.bin -r 99
583 32 laforge
</pre>
584 26 jolly
585 32 laforge
<pre>
586 26 jolly
transceiver -e 5 -r 99
587 32 laforge
</pre>
588 26 jolly
589
When using two phones, two timeslots can be served. I suggest to configure second timeslot (TS 1) as TCH/H at openbsc.cnf. This way it is possible to allow two traffic channels on a single timeslot. If you do a call from one phone to another, you will need one channel for each phone. In order to use two phones, you need to change the alot map of osmo-bts.cnf:
590
591 32 laforge
<pre>
592 26 jolly
  slotmask 1 1 0 0 0 0 0 0
593 32 laforge
</pre>
594 26 jolly
595
Run two osmocon and transceiver application in separate shells:
596
597 32 laforge
<pre>
598 26 jolly
osmocon -p /dev/ttyUSB0 -m c123xor -c path_to/trx.highram.bin -r 99
599 32 laforge
</pre>
600 26 jolly
601 32 laforge
<pre>
602 26 jolly
# This osmocon connects to the serial interface of the second phone.
603
# Note: "/tmp/osmocom_l2.2" is the second socket to which the transceiver will connect.
604
osmocon -p /dev/ttyUSB1 -s /tmp/osmocom_l2.2 -m c123xor -c path_to/trx.highram.bin -r 99
605 32 laforge
</pre>
606 26 jolly
607 32 laforge
<pre>
608 26 jolly
transceiver -e 5 -r 99 -2
609 32 laforge
</pre>
610 26 jolly
611
612
613 32 laforge
h3. Linux-Call-Router (LCR) (optional)
614
615
616 26 jolly
Run LCR with debugging output.
617
618 32 laforge
<pre>
619 26 jolly
lcr start
620 32 laforge
</pre>
621 7 jolly
622 32 laforge
<pre>
623 17 jolly
** LCR  Version 1.14
624 7 jolly
625
LCR 1.14 started, waiting for calls...
626 32 laforge
</pre>
627 7 jolly
628
629
630 32 laforge
h2. Test
631 7 jolly
632 32 laforge
633
634
h3. Location Updating
635
636
637 1 jolly
Switch on the phone.
638 9 jolly
639 32 laforge
If you have a SIM card for your network 262 42, you can use it and do automatic network search. If not, do a manual network and select this network. You should see debugging output on [[OpenBSC]] like this:
640
<pre>
641 9 jolly
...
642
 <0002> gsm_04_08.c:424 -> LOCATION UPDATE ACCEPT
643
...
644 32 laforge
</pre>
645 9 jolly
646
647
648 32 laforge
h3. Call the music (LCR required)
649
650
651 9 jolly
Now enter phone number 995 to select the test function 5 of LCR. This test function just plays the hold music.
652 17 jolly
653 9 jolly
654
655 32 laforge
h3. Echo and BFI test (LCR required)
656
657
658 9 jolly
Enter phone number 993 to select the test function 3 of LCR. This test function echoes back everything that is received. Note that it will re-transcode the speech data, so the audio from your voice is compressed and decompressed twice until you can hear a fraction of a second later.
659
660
You may experience short beeps. These beeps represent all bad frames that could not be decoded or got lost over the air. (Without this test, the missing frames will be extrapolated from previous frame, so some loss rate will not be recognized by the remote end.)
661
662 30 9600
663 32 laforge
h2. See also
664
665
666
* [[multi-BTS_with_handover]] -- NITB plus two dual channel BTS (based on [[OsmoBTS]]) with handover support
Add picture from clipboard (Maximum size: 48.8 MB)