Project

General

Profile

Virtual Um » History » Version 23

fixeria, 03/10/2023 10:09 AM

1 1 laforge
h1. Virtual Um
2
3 17 osmith
In July 2017, the Osmocom project has introduced a _Virtual Um interface_ (i.e. virtual radio layer) between [[OsmoBTS:]] and [[OsmocomBB:]].  This allows us to run a complete GSM network with 1-N BTSs and 1-M MSs without any actual radio hardware, which is of course excellent for all kinds of testing scenarios.
4 1 laforge
5
The Virtual Um layer is based on sending L2 frames (blocks) encapsulated via GSMTAP UDP multicast packets.  There are two separate multicast groups, one for uplink and one for downlink.  The multicast nature simulates the shared medium and enables any simulated phone to receive the signal from multiple BTSs via the downlink multicast group.
6
7
In [[OsmoBTS:]], this is implemented via the new @osmo-bts-virtual@ BTS model.
8
9 8 laforge
In [[OsmocomBB:]], this is realized by adding @virtphy@ virtual L1, which speask the same [[OsmocomBB:L1A_L23_Interface|L1CTL]] protocol that is used between the _real_ OsmcoomBB Layer1 and the Layer2/3 programs such as [[OsmocomBB:Mobile]] and the like.
10 1 laforge
11
This page describes how to set up the Virtual Um layer.  It assumes that you are famliar with classic operation of [[OsmocomBB:]] and [[OsmoBTS:]] and [[OsmoNITB:]] with a real radio layer.  In case of doubt, look at the genric documentation and tutorials for real RF hardware.
12
13 23 fixeria
A working example configuration of Virtual Um with two MS, one BTS and a complete core network setup can be found in "osmo-dev.git/virt-nitb":https://cgit.osmocom.org/osmo-dev/tree/virt-nitb ; see its "README":https://cgit.osmocom.org/osmo-dev/tree/virt-nitb/README
14 22 neels
15 14 msuraev
Alternative implementation which does not use multicast is described in https://osmocom.org/projects/baseband/wiki/FakeTRX/
16 13 msuraev
17 1 laforge
h1. The big picture
18
19 2 laforge
h2. Using OsmoNITB
20 1 laforge
21 2 laforge
{{graphviz_link()
22
digraph G {
23
  rankdir = LR;
24
  bts [label="osmo-bts-virtual"];
25 3 laforge
  mobile [label="OsmocomBB\nmobile"];
26 2 laforge
  network [label="GSMTAP multicast\nUDP/IP" shape="diamond"];
27
  subgraph cluster_ms {
28
    label = "Mobile Station side"
29
    mobile -> virtphy
30
  }
31
  virtphy -> network
32
  network -> bts
33
  subgraph cluster_net {
34
    label = "Network side"
35
    bts -> OsmoNITB
36
  }
37
}
38
}}
39
40
h2. Using OsmoBSC, OsmoMSC, OsmoHLR
41
42
{{graphviz_link()
43
digraph G {
44
  rankdir = LR;
45
  bts [label="osmo-bts-virtual"];
46 15 msuraev
  mobile1 [label="OsmocomBB\nmobile"];
47
  virtphy1 [label="virtphy"];
48
  mobile2 [label="OsmocomBB\nmobile"];
49
  virtphy2 [label="virtphy"];
50 2 laforge
  network [label="GSMTAP multicast\nUDP/IP" shape="diamond"];
51 1 laforge
  subgraph cluster_ms {
52
    label = "Mobile Station side"
53 15 msuraev
    mobile1 -> virtphy1
54
    mobile2 -> virtphy2
55 2 laforge
  }
56 15 msuraev
  virtphy1 -> network
57
  virtphy2 -> network
58 2 laforge
  network -> bts
59
  subgraph cluster_net {
60
    label = "Network side"
61
    bts -> OsmoBSC
62 11 neels
    OsmoBSC -> OsmoSTP -> OsmoMSC
63 2 laforge
    OsmoMSC -> OsmoHLR
64
  }
65
}
66
}}
67 1 laforge
68
h1. The BTS side
69
70 10 neels
Setting up [[OsmoBTS:]] in its @osmo-bts-virtual@ flavor isn't really much different from setting it up with real hardware.  The amount of required configuration at the BTS configuration file is (as always) very minimal; the GSM network architecture provides almost all relevant configuration to the BTS from the BSC.
71 4 laforge
72 21 laforge
An example configuration file is provided as part of the osmo-bts source code: @doc/examples/virtual/osmobts-virtual.cfg@ (https://gitea.osmocom.org/cellular-infrastructure/osmo-bts/src/branch/master/doc/examples/virtual/osmo-bts-virtual.cfg)
73 4 laforge
74
The only parameters that you must ensure to match your local configuration are:
75
<pre>
76
bts 0
77
 band DCS1800
78
 ipa unit-id 6969 0
79
 oml remote-ip 127.0.0.1
80
</pre>
81
82
* *band* must match the frequency band of your simulated radio layer
83
* *ipa unit-id* must match what you have configured on the BSC ([[OsmoBSC:]] or [[OsmoNITB:]])
84
* *oml remote-ip* must point to the IP address to which your BSC is listening
85
86
You can subsequently start @osmo-bts-virtual@ using the following commands:
87
<pre>
88
$ ./osmo-bts-virtual -c osmo-bts.cfg
89
</pre>
90 18 osmith
where of course @osmo-bts.cfg@ is the file name (in current directory or with path) of your configuration file, starting from the provided example.
91 4 laforge
92
You should get output like this:
93
<pre>
94
((*))
95
  |
96
 / \ OsmoBTS
97
<000f> main.c:117 Unimplemneted bts_model_phy_instance_set_defaults
98
<0017> control_if.c:788 CTRL at 127.0.0.1 4238
99
<0006> bts_model.c:175 Unimplemneted bts_model_ctrl_cmds_install
100
<0010> telnet_interface.c:102 telnet at 127.0.0.1 4241
101
<0012> input/ipaccess.c:884 enabling ipaccess BTS mode, OML connecting to 127.0.0.1:3002
102
<000d> abis.c:207 Input Signal 4 received
103
<0006> phy_link.c:58 PHY link state change shutdown -> connecting
104
<0006> scheduler.c:216 Init scheduler for trx=0
105
<0007> scheduler_virtbts.c:637 starting VBTS scheduler
106
<0006> phy_link.c:58 PHY link state change connecting -> connected
107
<0006> phy_link.c:68 trx_set_avail(1)
108
<0012> input/ipa.c:129 connection done.
109
<0012> input/ipaccess.c:705 received ID get
110
<000d> abis.c:101 OML Signalling link up
111
</pre>
112
113 12 stsp
followed by the usual OML initialization sequence according to TS 12.21 and, once the mobile program connects, the RSL initialization:
114 4 laforge
115
<pre>
116
<0000> rsl.c:299  Rx RSL BCCH INFO (SI1, 23 bytes)
117
<0000> rsl.c:299  Rx RSL BCCH INFO (SI2, 23 bytes)
118
<0000> rsl.c:299  Rx RSL BCCH INFO (SI3, 23 bytes)
119
<0000> bts.c:374 Updated AGCH max queue length to 25
120
<0000> rsl.c:299  Rx RSL BCCH INFO (SI4, 23 bytes)
121
<0000> rsl.c:506  Rx RSL SACCH FILLING (SI5, 19 bytes)
122
<0000> rsl.c:506  Rx RSL SACCH FILLING (SI6, 13 bytes)
123
</pre>
124
125 5 laforge
If the BTS process exits immediately, it is likely you have an error in your configuration file syntax, or your BSC does not know any BTS with the unit-id that you have specified in the config file.
126
127 4 laforge
At this point your virtual BTS should be happily transmitting virtual radio frames.  How can you verify that?  Check in wireshark if you see it emitting UDP multicast packets to *239.193.23.1 port 4729*.  Those packets should be properly displayed/decoded by the wireshark GSMTAP dissector, and you should see e.g. the repeated transmission of the SYSTEM INFORMATION messages on BCCH.
128 1 laforge
129 19 laforge
If you cannot see related packets, it might be that your network stack (routing, packet filter) is configured in a way that multiast is disabled/filtered.  On a typical workstation permitting all outbound IP traffic in the firewall and having a default route to eth0, the multicast traffic should appear on that interface.  Please see attachment:osmo_bts_virtual_gsmtap.pcapng for an example of how the traffic should look like.
130 1 laforge
131
h1. The MS side
132 6 laforge
133
On the MS side, you will need to compile the classic [[OsmocomBB:]] host-side programs, particularly @layer23/mobile@ and also the new @virtphy@ program
134
135
h2. virtphy
136
137
@virtphy@ is a small program that does not much more than to
138
* bind a local UDP socket to port 4729
139
* subscribe to the downlink IP multicast group 239.193.23.1 to receive downlink messages from the BTS(s)
140 16 osmith
* provide the @/tmp/osmcom_l2@ unix domain socket to which L1CTL-using programs such as @mobile@ can connect.  This socket is traditionally provided by the [[OsmocomBB:osmocon]] demultiplexer program, which is only used in context with physical phones.
141 6 laforge
142
You don't need to configure anything, simply run the program 
143
<pre>
144
$ ./virtphy
145
</pre>
146
147
h2. mobile
148
149
The [[OsmocomBB:Mobile]] program did not need any modifications and hence does not know whether it is talking to a real L1/PHY or to the @virtphy@ program.  So there's nothing _Virtual Um_ specific regarding its configuration, just configure it as usual.
150
151
One notable requirement is that you use the built-in software SIM card emulation, though, as @virtphy@ doesn't implement the handling of any virtual or physical SIM Card.
152
153
You can then start the program like this:
154
<pre>
155
$ ./mobile -c mobile.cfg
156
</pre>
157
158
Once the @mobile@ program is running, it will instruct @virtphy@ to perform a network scan (which basically just listens for some multicast frames and reports for which ARFCN we have seen CCCH/BCCH frames) and perform operator selection and subsequently the first Location Update (LU).
159 1 laforge
160 20 laforge
A protocol trace of the location update as captured on the Virtual UM layer can be found at attachment:gsmtap_virtphy_lu.pcapng.
161 6 laforge
162
!wireshark_gsmtap_virtphy_lu.png!
Add picture from clipboard (Maximum size: 48.8 MB)