Project

General

Profile

Virtual Um » History » Version 8

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