Both the osmo-nitb and osmo-bsc programs implement hand-over between cells in the same BSC (intra-BSC).
We implement the algorithms recommended in the book Performance Enhancements in a Frequency Hopping GSM Network
(by Thomas Toftegaard Nielsen and Jeroen Wigard).
The actual implementation is in http://cgit.osmocom.org/cgit/openbsc/tree/openbsc/src/libbsc/handover_decision.c
There are some tunable parameters but in the end it's not all that
complicated. The BSC tells the phone the list of neighbor BTS ARFCN,
the phone reports in every SACCH uplink frame the Rx Level measurements
of those neighbors.
There are a number of different reasons:
1. interference HO, if the Rx level > -85dBm but the RxQual is bad over more then 3 out of 4 measurements
1. bad quality HO, if the RxQual is bad in 3 out of 4 measurements
1. low level HO, if the Rx level is < - 110dBm
1. distance HO, if the TA is above a threshold
1. power budget HO, i.e. if we have better cells
the decision is based on an average RxLev over a sliding window of
measurements, taking into account a configurable hysteresis level.
We have tested it in a couple of field tests (HAR2009, 27C3 and so on),
but none of our big real-world deployments is currently using hand-over,
as they typically have small single-BTS sites that have no neighboring
A proposal for the handover improvement is published here.