Project

General

Profile

Virtual Um » History » Version 13

msuraev, 10/24/2018 02:10 PM

1 1 laforge
h1. Virtual Um
2
3
In July 2017, the Osmocom project has inroduced 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
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 13 msuraev
Alternative implementation which does not use multicast is described in [[cellular-infrastructure:FakeTRX|FakeTRX]]
14
15 1 laforge
h1. The big picture
16
17 2 laforge
h2. Using OsmoNITB
18 1 laforge
19 2 laforge
{{graphviz_link()
20
digraph G {
21
  rankdir = LR;
22
  bts [label="osmo-bts-virtual"];
23 3 laforge
  mobile [label="OsmocomBB\nmobile"];
24 2 laforge
  network [label="GSMTAP multicast\nUDP/IP" shape="diamond"];
25
  subgraph cluster_ms {
26
    label = "Mobile Station side"
27
    mobile -> virtphy
28
  }
29
  virtphy -> network
30
  network -> bts
31
  subgraph cluster_net {
32
    label = "Network side"
33
    bts -> OsmoNITB
34
  }
35
}
36
}}
37
38
h2. Using OsmoBSC, OsmoMSC, OsmoHLR
39
40
{{graphviz_link()
41
digraph G {
42
  rankdir = LR;
43
  bts [label="osmo-bts-virtual"];
44 3 laforge
  mobile [label="OsmocomBB\nmobile"];
45 2 laforge
  network [label="GSMTAP multicast\nUDP/IP" shape="diamond"];
46
  subgraph cluster_ms {
47
    label = "Mobile Station side"
48
    mobile -> virtphy
49
  }
50
  virtphy -> network
51
  network -> bts
52
  subgraph cluster_net {
53
    label = "Network side"
54
    bts -> OsmoBSC
55 11 neels
    OsmoBSC -> OsmoSTP -> OsmoMSC
56 2 laforge
    OsmoMSC -> OsmoHLR
57
  }
58
}
59
}}
60 1 laforge
61
h1. The BTS side
62
63 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.
64 4 laforge
65 9 neels
An example configuration file is provided as part of the osmo-bts source code: @doc/examples/virtual/osmobts-virtual.cfg@ (http://git.osmocom.org/osmo-bts/tree/doc/examples/virtual/osmobts-virtual.cfg)
66 4 laforge
67
The only parameters that you must ensure to match your local configuration are:
68
<pre>
69
bts 0
70
 band DCS1800
71
 ipa unit-id 6969 0
72
 oml remote-ip 127.0.0.1
73
</pre>
74
75
* *band* must match the frequency band of your simulated radio layer
76
* *ipa unit-id* must match what you have configured on the BSC ([[OsmoBSC:]] or [[OsmoNITB:]])
77
* *oml remote-ip* must point to the IP address to which your BSC is listening
78
79
You can subsequently start @osmo-bts-virtual@ using the following commands:
80
<pre>
81
$ ./osmo-bts-virtual -c osmo-bts.cfg
82
</pre>
83
whre of course @osmo-bts.cfg@ is the file name (in current directory or with path) of your configuration file, starting from the provided example.
84
85
You should get output like this:
86
<pre>
87
((*))
88
  |
89
 / \ OsmoBTS
90
<000f> main.c:117 Unimplemneted bts_model_phy_instance_set_defaults
91
<0017> control_if.c:788 CTRL at 127.0.0.1 4238
92
<0006> bts_model.c:175 Unimplemneted bts_model_ctrl_cmds_install
93
<0010> telnet_interface.c:102 telnet at 127.0.0.1 4241
94
<0012> input/ipaccess.c:884 enabling ipaccess BTS mode, OML connecting to 127.0.0.1:3002
95
<000d> abis.c:207 Input Signal 4 received
96
<0006> phy_link.c:58 PHY link state change shutdown -> connecting
97
<0006> scheduler.c:216 Init scheduler for trx=0
98
<0007> scheduler_virtbts.c:637 starting VBTS scheduler
99
<0006> phy_link.c:58 PHY link state change connecting -> connected
100
<0006> phy_link.c:68 trx_set_avail(1)
101
<0012> input/ipa.c:129 connection done.
102
<0012> input/ipaccess.c:705 received ID get
103
<000d> abis.c:101 OML Signalling link up
104
</pre>
105
106 12 stsp
followed by the usual OML initialization sequence according to TS 12.21 and, once the mobile program connects, the RSL initialization:
107 4 laforge
108
<pre>
109
<0000> rsl.c:299  Rx RSL BCCH INFO (SI1, 23 bytes)
110
<0000> rsl.c:299  Rx RSL BCCH INFO (SI2, 23 bytes)
111
<0000> rsl.c:299  Rx RSL BCCH INFO (SI3, 23 bytes)
112
<0000> bts.c:374 Updated AGCH max queue length to 25
113
<0000> rsl.c:299  Rx RSL BCCH INFO (SI4, 23 bytes)
114
<0000> rsl.c:506  Rx RSL SACCH FILLING (SI5, 19 bytes)
115
<0000> rsl.c:506  Rx RSL SACCH FILLING (SI6, 13 bytes)
116
</pre>
117
118 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.
119
120 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.
121 1 laforge
122 5 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 attached file @osmo_bts_virtual_gsmtap.pcapng@ for an example of how the traffic should look like.
123 1 laforge
124
h1. The MS side
125 6 laforge
126
On the MS side, you will need to compile the classic [[OsmocomBB:]] host-side programs, particularly @layer23/mobile@ and also the new @virtphy@ program
127
128
h2. virtphy
129
130
@virtphy@ is a small program that does not much more than to
131
* bind a local UDP socket to port 4729
132
* subscribe to the downlink IP multicast group 239.193.23.1 to receive downlink messages from the BTS(s)
133
* provide the @/tmp/osmcom_l2@ unix domain socket to whcih 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.
134
135
You don't need to configure anything, simply run the program 
136
<pre>
137
$ ./virtphy
138
</pre>
139
140
h2. mobile
141
142
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.
143
144
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.
145
146
You can then start the program like this:
147
<pre>
148
$ ./mobile -c mobile.cfg
149
</pre>
150
151
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).
152 1 laforge
153 7 laforge
A protocol trace of the location update as captured on the Virtual UM layer can be found attached as @gsmtap_virtphy_lu.pcapng@.
154 6 laforge
155
!wireshark_gsmtap_virtphy_lu.png!
Add picture from clipboard (Maximum size: 48.8 MB)