Project

General

Profile

NanoBTS » History » Version 12

tnt, 02/19/2016 10:48 PM
Fix ipaccess_head structure

1 11 laforge
The ip.access nanoBTS are small BTS with an A-bis over IP interface.  It's about the size of a WiFi access point.
2 1 laforge
3 11 laforge
There are multiple variants of the nanoBTS, most notably
4
 * the nanoBTS900 for GSM900
5
  * supports FR, EFR, AMR speech codecs
6
  * supports TCH/F and TCH/H based telephony
7
  * supports GPRS
8
 * the nanoBTS1800 for GSM1800, plus a GSM1900 variant thereof (almost identical hardware)
9
  * they support EDGE in addition to GPRS
10
11
The A-bis over IP interface is spoken over a  100-base-TX Ethernet as physical layer.  Power over Ethernet (PoE) is used as
12
a power supply to the nanoBTS.
13
14
A-bis RSL and OML are encapsulated by a small additional header; each run in their own TCP session.  Instead of A-bis TRAU frames, the actual TCH speech data is inside RTP/UDP.  Details are indicated below.
15
16
The OpenBSC project has never received any protocol specification or other detailed information about the nanoBTS hardware.  All
17
information here and in the source code was derived by looking at protocol traces of actual nanoBTS installations.
18
19 6 laforge
== Deploying a new nanoBTS ==
20
21
The unconfigured ip.access nanoBTS needs to be configured as follows
22
 * The BTS is configued to automatically obtain an IP address via DHCP
23
 * The BTS is listening on UDP port 3006 for broadcast packets (e.g. should be found by ipaccess-find)
24
  * a typical response by ipaccess-find will be
25 7 laforge
{{{
26 6 laforge
Trying to find ip.access BTS by broadcast UDP...
27 1 laforge
MAC Address='00:01:02:03:04:05'  IP Address='192.168.100.123'  Unit ID='65535/0/0'  Location 1=''  Location 2='BTS_NBT131G'  Equipment Version='165a029_55'  Software Version='168a302_v142b13d0'  Unit Name='nbts-00-02-95-00-4E-B3'  Serial Number='00123456'  
28
}}}
29 11 laforge
 * The BTS is listening on TCP port 3006 for incoming Abis-over-IP connections. This is called ''Secondary OML Link''
30 1 laforge
 * The BTS has an unconfigured Unit ID (65535/0/0) and will refuse to work until a Unit ID has been set
31 11 laforge
 * You can set the Unit ID and Primarly OML IP using ipaccess-config as follows:
32 7 laforge
{{{
33
$ ./ipaccess-config -u 1801/0/0 -o 192.168.100.11 -r 192.168.100.122
34
ipaccess-config (C) 2009 by Harald Welte
35
This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
36
37
Trying to connect to ip.access BTS ...
38
OML link established
39
setting Unit ID to '1801/0/0'
40
setting primary OML link IP to '192.168.100.11'
41
restarting BTS
42
Thu Apr 30 18:18:48 2009 <0020> abis_nm.c:2016 IPACCESS(0xf0): SET NVATTR ACK
43
Thu Apr 30 18:18:48 2009 <0020> abis_nm.c:2016 IPACCESS(0xf0): SET NVATTR ACK
44
}}}
45
 * Once a Unit ID and the Primary OML link IP address has been set, the BTS will try to connect to the BSC (tcp port 3002)
46
{{{
47
18:22:49.801584 IP 192.168.100.122.48000 > 192.168.100.11.3002: Flags [S], seq 3405259716, win 16000, options [mss 1460], length 0
48
}}}
49 6 laforge
50 1 laforge
== A-bis over IP protocol ==
51
52
This is the description of the A-bis over IP protocol as we have reverse engineered it by looking at protocol traces between a commercial BSC and a nanoBTS.  We did not and do not have access to the protocol specification of ip.access.
53 2 laforge
54 1 laforge
=== Common Header ===
55
56 2 laforge
Inside the TCP and UDP packets connection, every message is prefixed by a three-byte header:
57 1 laforge
{{{
58
struct ipaccess_head {
59 12 tnt
        u_int16_t len; /* network byte order */
60 1 laforge
        u_int8_t proto;
61
} __attribute__ ((packed));
62
}}}
63
64
where the first byte is zero, the second byte indicates the length of the message payload following the header, and the third byte indicates the protocol.  The following protocol values have been observed:
65
66
 * 0x00 RSL messages as per GSM 08.58
67
 * 0xfe ip.access specific messages
68
 * 0xff OML messages as per GSM 12.21
69
70
The ip.access specific messages that we have seen are of the following message types (message type is the first byte behind the ipaccess_head):
71
 * 0x00 PING (from BTS to BSC)
72
 * 0x01 PONG (from BSC to BTS), indicates that the link is still alive
73
 * 0x04 Identity Get (from BSC to BTS)
74
 * 0x05 Identity Response (from BTS to BSC)
75
 * 0x06 Identity confirm (both ways, BTS->BSC is a request, BSC->BTS is acknowledgement)
76 2 laforge
77
=== OML Signalling Link ===
78
79
After obtaining an IP address from DHCP, the nanoBTS will attempt to make TCP connections to a IP address and port number pre-configured in the device.  The standard port seems to be 3002.
80
81
==== vendor-specific OML messages ====
82
83
vendor-specific OML messages use a specific format but are closely following the spirit of GSM TS 12.21.
84
85
Look at the ''abis_nm_ipaccess_msg()'' function in ''abis_nm.c'' if you want to know the details.
86
87
=== RSL Signalling Link ===
88
89
There is a vendor-specific OML command 0xe0, which basically corresponds to what the usual ''Connect Terrestrial Signalling'' does.  Instead of connecting te RSL link to a specific TEI on a E1 timeslot, it connects the RSL link to a specified TCP port (and optionally IP address).
90
91
After this command is issued (and acknowledged by 0xe1), the BTS will initiate a TCP connection to the specified TCP port.
92 1 laforge
93 3 laforge
==== vendor-specific RSL messages ====
94
95
There are a couple of vendor-specific RSL messages extending 08.58 to accommodate the IP-based link.
96
97
They all use the GSM 08.85 message discriminator 0x7e
98
99
===== 0x70 BIND =====
100
101
This command binds a given on-air timeslot to a BTS-local RTP port.
102
103
Attributes:
104
 * 0x01 GSM 08.58 Channel Number (same as BIND)
105
106
===== 0x71 BIND ACK =====
107
108
This message (BTS->BSC) acknowledges the BTS-local bind.
109
110
Attributes:
111
 * 0x01 GSM 08.58 Channel Number (same as BIND)
112
 * 0xf8 unknown, maybe something like local RTP instance number, fixed length two bytes.
113
 * 0xf3 local RTP port number, fixed length 2 bytes
114
 * 0xf5 local IP address, fixed length 4 bytes
115
 * 0xfc unknown, fixed length 1 byte, content 0x7f
116
117
===== 0x73 CONNECT =====
118
119
This command (BSC->BTS) instructs the BTS to connect a given GSM channel (timeslot) to the remote end
120
121
Attributes:
122
 * 0x01 GSM 08.58 Channel Number (on-air timeslot)
123
 * 0xf8 unknown, maybe something like local RTP instance number, fixed length two bytes.
124
 * 0xf0 remote IP address, fixed length 4 bytes
125
 * 0xf1 remote RTP port number, fixed length 2 bytes
126
 * 0xf4 unknown, fixed length 1 byte, content 0x01
127
 * 0xfc unknown, fixed length 1 byte, content 0x7f
128
129
===== 0x74 CONNECT ACK =====
130
131
This message (BTS->BCS) confirms the successful CONNECT operation
132
133
Attributes:
134
 * 0x01 GSM 08.58 Channel Number (on-air timeslot)
135
 * 0xf8 unknown, maybe something like local RTP instance number, fixed length two bytes.
136
137
===== 0x76 DISCONNECT INDICATION =====
138
139
This message (BTS->BSC) indicates a terminated RTP connection
140
141
Attributes:
142
 * 0x01 GSM 08.58 Channel Number (on-air timeslot)
143
 * 0xf8 unknown, maybe something like local RTP instance number, fixed length two bytes.
144
 * 0xf6 unknown, TLV with one byte length, content zero
145
 * 0x1a GSM 08.58 Cause
146
147
148 1 laforge
=== TRAU link ===
149
150
Not yet reverse engineered.
151 4 laforge
152 5 laforge
There are streams of RTP-in-UDP packets to the ''remote IP'' and ''remote port'' that were indicated by the ''CONNECT'' message in RSL.
153
154
There are also regular RTCP packets on the port number plus 1.
155
156
==== RTP ====
157
158
The packets are according to RFC1889 (RTP Version 2), the payload type is set to 127, which is a dynamically allocated payload type.
159
160
They have sequence number and timestamp as well as 31 bytes of payload.  It seems the payload first 4 bits are always 0xC, reducing
161 8 laforge
the actual payload to 30.5 bytes.
162 5 laforge
163 8 laforge
As it seems, the FR and EFR RTP payload format follows the specification in section 4.5.8 and 4.5.9 of RFC3551 (
164
see http://www.ietf.org/rfc/rfc3551.txt)
165 5 laforge
==== RTCP ====
166
167
It seems that about every 3 seconds there is a RTCP packet, containing a source description and sender report.
168
169 4 laforge
== Wireshark dissector ==
170
171 10 laforge
We have developed a dissector for the popular wireshark network protocol analyzer.   The dissector has been merged into
172
the current wireshak development versions.  For older versions, the patch can be found in our git tree or at this location: http://bs11-abis.gnumonks.org/trac/browser/wireshark/abisip.patch
173 5 laforge
174 1 laforge
Furthermore, there is a patch for adding the ip.access specific RSL extensions to the packet-rsl.c dissector at http://bs11-abis.gnumonks.org/trac/browser/wireshark/rsl-ipaccess.patch
175 10 laforge
176
There's also a A-bis OML dissector plugin available from http://bs11-abis.gnumonks.org/trac/browser/wireshark/abis_oml.patch
177 4 laforge
178
Once the code has stabilized more, we plan to submit this for inclusion into wireshark mainline.
Add picture from clipboard (Maximum size: 48.8 MB)