Project

General

Profile

FakeTRX » History » Version 30

fixeria, 01/17/2019 02:23 PM

1 1 fixeria
h1. FakeTRX (Virtual Um-interface)
2 1 fixeria
3 8 fixeria
FakeTRX is a virtual Um-interface implementation written in Python, which allows you to connect [[OsmocomBB:]] and [[OsmoBTS:]] without actual RF hardware. The main purpose of this software is to facilitate and simplify the development and testing process. In other words, you don't need to physically run your GSM network nor use any kind of special hardware - just run a few scripts and do anything you want / need in your virtual GSM network!
4 1 fixeria
5 1 fixeria
h2. FAQ
6 1 fixeria
7 3 fixeria
h3. What is the difference from [[cellular-infrastructure:Virtual_Um|VIRT-PHY]]?
8 1 fixeria
9 3 fixeria
The main difference is that FakeTRX actually works on GSM L1, while [[cellular-infrastructure:Virtual_Um|VIRT-PHY]] works on higher levels, using GSMTAP and multicast sockets to exchange the data. It means that FakeTRX provides the [[TRX Interface]] for both [[OsmocomBB:]] and [[OsmoBTS:]], and forwards GSM bursts between both sides. So, no need to do any modifications in the [[OsmoBTS:]] source code, just use osmo-bts-trx.
10 1 fixeria
11 1 fixeria
h3. Python?
12 1 fixeria
13 1 fixeria
Of course, Python is slower than C, for example. But it's more than enough for exchanging UDP messages between [[OsmocomBB:]] and [[OsmoBTS:]], and vice versa. Moreover, it can be easily reimplemented in C, if someone interested in better performance.
14 1 fixeria
15 19 msuraev
Once multiple instances are supported, we can benchmark to see what's the preformance bottleneck.
16 19 msuraev
17 5 fixeria
h3. What about RSSI and ToA (Timing of Arrival)?
18 1 fixeria
19 5 fixeria
Since we are talking about the virtual interface, it's possible to emulate any values for both RSSI and ToA.
20 1 fixeria
21 1 fixeria
h3. Can I run multiple BTS and / or multiple MS instances?
22 1 fixeria
23 28 fixeria
Yes (since #3667 is done)!
24 1 fixeria
25 1 fixeria
h2. Running
26 1 fixeria
27 1 fixeria
This guide assumes that you already have the Osmocom GSM [[cellular-infrastructure:|network side stack]] compiled and installed. If not, the simplest way is to use the [[osmonitb:|Network in the Box]].
28 1 fixeria
29 13 msuraev
{{graphviz_link()
30 13 msuraev
digraph G {
31 13 msuraev
    rankdir = LR;
32 13 msuraev
    subgraph cluster_M {
33 30 fixeria
        L23APP1 [label="L2&3 application (such as mobile)"];
34 30 fixeria
        L23APP2 [label="L2&3 application (such as mobile)"];
35 30 fixeria
        TTCN3MS [label="TTCN-3 test case (MS side)"];
36 30 fixeria
        TRXcon1 [label="trxcon"];
37 30 fixeria
        TRXcon2 [label="trxcon"];
38 30 fixeria
        TRXcon3 [label="trxcon"];
39 1 fixeria
        label = "Mobile side";
40 13 msuraev
    }
41 30 fixeria
42 30 fixeria
    FakeTRX [label="FakeTRX"];
43 30 fixeria
44 1 fixeria
    subgraph cluster_N {
45 1 fixeria
        OsmoBSC;
46 30 fixeria
        TTCN3NET [label="TTCN-3 test case (network side)"];
47 1 fixeria
        OsmoBTS1 [label="osmo-bts-trx"];
48 1 fixeria
        OsmoBTS2 [label="osmo-bts-trx"];
49 30 fixeria
        OsmoBTS3 [label="osmo-bts-trx"];
50 1 fixeria
        label = "Network side";
51 1 fixeria
    }
52 30 fixeria
53 30 fixeria
    L23APP1 -> TRXcon1 [label="L1CTL"];
54 30 fixeria
    L23APP2 -> TRXcon2 [label="L1CTL"];
55 30 fixeria
    TTCN3MS -> TRXcon3 [label="L1CTL"];
56 30 fixeria
57 30 fixeria
    TRXcon1 -> FakeTRX [label="TRX Interface"];
58 30 fixeria
    TRXcon2 -> FakeTRX [label="TRX Interface"];
59 30 fixeria
    TRXcon3 -> FakeTRX [label="TRX Interface"];
60 30 fixeria
61 30 fixeria
    FakeTRX -> OsmoBTS1 [label="TRX Interface"];
62 30 fixeria
    FakeTRX -> OsmoBTS2 [label="TRX Interface"];
63 30 fixeria
    FakeTRX -> OsmoBTS3 [label="TRX Interface"];
64 13 msuraev
    OsmoBTS1 -> OsmoBSC;
65 13 msuraev
    OsmoBTS2 -> OsmoBSC;
66 30 fixeria
    OsmoBTS3 -> TTCN3NET;
67 13 msuraev
    }
68 13 msuraev
}
69 13 msuraev
}}
70 29 fixeria
71 30 fixeria
[[TRX Interface]] is a part of the upstream [[OsmocomBB:]], just make sure that you have compiled the latest version of [[TRX Interface#The-trxcon-application|trxcon]] application. FakeTRX is a part of TRX toolkit, that is located in 'src/target/trx_toolkit/'. See README for more details.
72 1 fixeria
73 1 fixeria
_Tip: feel free to use tmux or screen to avoid a mess with multiple windows_
74 1 fixeria
75 1 fixeria
1. Run the network side stack you have. In this example we will use the [[osmonitb:|Network in the Box]]:
76 1 fixeria
77 1 fixeria
<pre>
78 1 fixeria
$ osmo-nitb -c ./openbsc.cfg -l ./hlr.sqlite3 -P -C --debug=DRLL:DCC:DMM:DRR:DRSL:DNM
79 1 fixeria
</pre>
80 1 fixeria
81 1 fixeria
2. Run the fake transceiver:
82 1 fixeria
83 6 fixeria
<pre>
84 23 msuraev
$ cd osmocom-bb/src/target/trx_toolkit/
85 1 fixeria
$ python ./fake_trx.py -R 127.0.0.3 -r 127.0.0.23 -b 127.0.0.13
86 1 fixeria
</pre>
87 23 msuraev
88 23 msuraev
Here we assume that osmo-bts-trx is available on 127.0.0.3, osmocom-bb (mobile or other program) is available on 127.0.0.23 and we use 127.0.0.13 as our own address. This allow us to run multiple transceivers (and mobiles) in parallel. In simple setups with only single fake_trx all IP-related parameters can be omitted.
89 11 osmith
90 1 fixeria
3. Start [[OsmoBTS:]] (in case you want to [[cellular-infrastructure:build from source]], enable the TRX backend with @./configure --enable-trx=yes@).
91 1 fixeria
92 1 fixeria
<pre>
93 1 fixeria
$ osmo-bts-trx -c ./osmo-bts.cfg
94 1 fixeria
</pre>
95 23 msuraev
96 23 msuraev
If using explicit IP addresses as specified above, your osmo-bts.cfg should have following options set:
97 23 msuraev
<pre>
98 23 msuraev
phy 0
99 23 msuraev
 osmotrx ip local 127.0.0.3
100 23 msuraev
 osmotrx ip remote 127.0.0.13
101 23 msuraev
</pre>
102 1 fixeria
103 1 fixeria
Congratulations! Now you have a virtual GSM network running. As you can see, the virtual transceiver emulates the clock source, as this is required for [[OsmoBTS:]]. Also, it handles only a few important commands, such as RXTUNE and TXTUNE, but ignores other irrelevant ones.
104 1 fixeria
105 1 fixeria
4. In order to make [[OsmocomBB:]] applications able to work with FakeTRX, you need to run [[TRX Interface#The-trxcon-application|trxcon]]:
106 1 fixeria
107 1 fixeria
<pre>
108 23 msuraev
$ cd osmocom-bb/src/host/trxcon/
109 1 fixeria
$ ./trxcon --trx-remote 127.0.0.13 --trx-bind 127.0.0.23
110 23 msuraev
</pre>
111 23 msuraev
112 1 fixeria
Here we assume that trxcon is available on 127.0.0.13 and we use 127.0.0.23 as our own address. This allow us to run multiple transceivers (and mobiles) in parallel. In simple setups with only single fake_trx/trxcon all IP-related parameters can be omitted.
113 1 fixeria
114 1 fixeria
5. Finally, run any L2&3 application, e.g. ccch_scan:
115 1 fixeria
116 1 fixeria
<pre>
117 1 fixeria
$ cd osmocom-bb/src/host/layer23/src/misc/
118 1 fixeria
$ ./ccch_scan -a ARFCN -i 127.0.0.1
119 1 fixeria
</pre>
120 1 fixeria
121 1 fixeria
Please note that ARFCN value should match the one your BTS configured to.
122 1 fixeria
123 1 fixeria
Since this step, you should see the broadcast messages coming from the virtual network, like in case of a real one. You can use Wireshark to analyze them.
124 1 fixeria
125 1 fixeria
h2. Running [[mobile]] application
126 12 osmith
127 1 fixeria
As you should already know, [[mobile]] applications implements a simple mobile phone with SMS, USSD and voice calls. In the virtual network we can benefit from using a virtual SIM card. Just configure one according to your network configuration, see the example below. If you are starting with the default config from the source tree (@osmocom-bb/doc/examples/mobile/default.cfg@), make sure to change @sim reader@ to @sim test@ in the @ms 1@ section.
128 1 fixeria
129 1 fixeria
<pre>
130 1 fixeria
test-sim
131 1 fixeria
  imsi 901700000000000
132 1 fixeria
  no barred-access
133 1 fixeria
  rplmn 901 70
134 1 fixeria
</pre>
135 1 fixeria
136 1 fixeria
Make sure you have the virtual network running, then run mobile the same way as in case of a Calypso based phone:
137 1 fixeria
138 1 fixeria
<pre>
139 1 fixeria
$ cd osmocom-bb/src/host/layer23/src/mobile/
140 1 fixeria
$ ./mobile -i 127.0.0.1
141 1 fixeria
</pre>
142 1 fixeria
143 1 fixeria
Now you can use mobile's telnet interface to manage your virtual phone:
144 1 fixeria
145 1 fixeria
<pre>
146 1 fixeria
$ telnet localhost 4247
147 1 fixeria
$ ...
148 1 fixeria
</pre>
149 1 fixeria
150 1 fixeria
h2. Demo
151 1 fixeria
152 1 fixeria
https://www.youtube.com/watch?v=Uxdaui8EkjY
153 1 fixeria
154 1 fixeria
h2. Project status
155 10 fixeria
156 10 fixeria
Supported:
157 10 fixeria
158 10 fixeria
* Simulation and randomization of both RSSI and ToA
159 10 fixeria
* Burst capture to file (see data_dump.py)
160 10 fixeria
* Injection of bursts and commands
161 1 fixeria
162 1 fixeria
Further plans:
163 21 msuraev
164 22 msuraev
* Allow multiple BTS to work with multiple BB instances: https://osmocom.org/issues/3666 https://osmocom.org/issues/3667
165 1 fixeria
* Distinguish between various debug messages (BTS / MS, ID)
Add picture from clipboard (Maximum size: 48.8 MB)