Step-by-step guide to setup handover


to test handover you need:
-- 2 GPS-clocked umTRX transceivers
-- Gigabit switch
-- a PC with linux, i3 is enough to run 2 OpenBTS instances

Configure a legacy OpenBTS system with a FreeSWITCH

To localize configuration errors, please make OpenBTS run in multi-BTS configuration with FreeSWITCH and get successful calls. Media must go through FreeSWITCH.
FreeSWITCH manuals can be found  at
umTRX specific issues are described  here
Please ensure that:
-- GSM.Neighbors are configured. Do not add extra values: you can get no measurement results from handsets
-- all umTRX cards are flashed with proper MAC addresses, as well as IP
-- configuration parameter GSM.Radio.UHDargs must match your umTRX boards
It is definitely worth spending some time to ensure that both uplink and downlink are balanced. At least do few phone calls and check the quality, moving around.

1. Update FreeSWITCH

Add <param name="rtp-rewrite-timestamps" value="true"/> to internal.xml. This will definitely spoil nothing.
Restart FreeSWITCH.

2. Get and install OpenBTS with handover support

sources can be found at Fairwaves [git].

  • Apply handover.sql script to add fields to OpenBTS.db
  • Create Neighbors.txt file, that contains strings like
    ARFNC ip:port

File can be the same for all OpenBTS instances. Please refer to Neighbors.txt example included.

  • Update GSM.Handover.BTS.NeighborsFilename? variable to point at your file. This file can common for both OpenBTS instances. It seems reasonable to place it to /etc/OpenBTS/
  • Create 2 different folders like openbts-p2.8/apps with symlinks to OpenBTS binaries (transceiver, OpenBTS and OpenBTSCLI). Each folder will keep its own OpenBTS.db configuration file.

It is important, that all ARFCNs mentioned at GSM.Neighbors must be found in Neighbors.txt.

3. Update umTRX power and RX sensitivity

If you are running handover in the lab, you should tune umTRX power.
Set GSM.Handover.BTS.Enable. It triggers handover decision at BTS level. All valid measurements are processed and averaged. Data for taking decision is reflected in syslog with NOTICE log level for RadioResource?.cpp with strings like

openbts: NOTICE 3047828288 RadioResource.cpp:640:BTSDecision: 849IMSI=001010000000002, neighbor, delta=-10dB

where 849 is a serving ARFCN, are ip:port and ARFCN of a preferred neighbour and -10 is the averaged downlink difference between a serving ARFCN and a neighbour.
Type tail -f /var/log/syslog in a dedicated terminal. Make a call and move a handset between transceivers. Update umTRX power with CLI command, to shift a zero level.
If there are errors while decoding bursts, change RX sensitivity.

In the case of deployment, you can use the default values as a first approximation. If your goal is to evaluate handover procedure itself, set GSM.Handover.BTS.Hysteresis between 1..3, decrease Interleave to 1..3 and set Weights around 0.9..0.99.
-- GSM.Handover.BTS.Interleave - an integer value, 1+
-- GSM.Handover.BTS.Weights - a float value, between 0 and 1
-- GSM.Handover.BTS.Hysteresis - integer, 1+ (in dB)