<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11532">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: document handover<br><br>Add chapter "Handover", explaining:<br>- intra- and<br>- inter-BSC handover,<br>- HO algorithm 1 and<br>- algorithm 2<br>- new neighbor configuration<br><br>Adjust copyright, add revision and add me as author.<br><br>Change-Id: I7afb3f66c98abda07fc8acc76e00c46091fe55e2<br>---<br>M OsmoBSC/Makefile<br>A OsmoBSC/chapters/handover.adoc<br>A OsmoBSC/chapters/handover_inter_bsc.dot<br>A OsmoBSC/chapters/handover_intra_bsc.dot<br>M OsmoBSC/osmobsc-usermanual-docinfo.xml<br>M OsmoBSC/osmobsc-usermanual.adoc<br>6 files changed, 642 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-manuals refs/changes/32/11532/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/OsmoBSC/Makefile b/OsmoBSC/Makefile</span><br><span>index 1533482..b9f50d0 100644</span><br><span>--- a/OsmoBSC/Makefile</span><br><span>+++ b/OsmoBSC/Makefile</span><br><span>@@ -2,7 +2,7 @@</span><br><span> </span><br><span> ASCIIDOC = osmobsc-usermanual.adoc osmux-reference.adoc aoip-mgw-options.adoc</span><br><span> include $(TOPDIR)/build/Makefile.asciidoc.inc</span><br><span style="color: hsl(0, 100%, 40%);">-osmobsc-usermanual.pdf: chapters/*.adoc</span><br><span style="color: hsl(120, 100%, 40%);">+osmobsc-usermanual.pdf: chapters/*.adoc chapters/*.dot</span><br><span> aoip-mgw-options.pdf: aoip-mgw-options.adoc mgw/*.msc</span><br><span> </span><br><span> VTY_REFERENCE = osmobsc-vty-reference.xml</span><br><span>diff --git a/OsmoBSC/chapters/handover.adoc b/OsmoBSC/chapters/handover.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..3c9204e</span><br><span>--- /dev/null</span><br><span>+++ b/OsmoBSC/chapters/handover.adoc</span><br><span>@@ -0,0 +1,552 @@</span><br><span style="color: hsl(120, 100%, 40%);">+== Handover</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Handover is the process of moving a continuously used channel (lchan) from one</span><br><span style="color: hsl(120, 100%, 40%);">+cell to another. Usually, that is an ongoing call, so that phones are able to</span><br><span style="color: hsl(120, 100%, 40%);">+move across cell coverage areas without interrupting the voice transmission.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+A handover can</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- stay within one given cell (intra-cell, i.e. simply a new RR Assignment Command);</span><br><span style="color: hsl(120, 100%, 40%);">+- occur between two cells that belong to the same BSS (intra-BSC, via RR Handover Command);</span><br><span style="color: hsl(120, 100%, 40%);">+- cross BSS boundaries (inter-BSC, via BSSMAP handover procedures);</span><br><span style="color: hsl(120, 100%, 40%);">+- move to another MSC (inter-MSC);</span><br><span style="color: hsl(120, 100%, 40%);">+- move to another RAN type, e.g. from 2G to 3G (inter-RAT, inter-Radio-Access-Technology).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The physical distance is by definition always very near, but handover</span><br><span style="color: hsl(120, 100%, 40%);">+negotiation may range from being invisible to the MSC all the way to</span><br><span style="color: hsl(120, 100%, 40%);">+orchestrating completely separate RAN stacks.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC currently supports handover within one BSS and between separate BSS.</span><br><span style="color: hsl(120, 100%, 40%);">+Whether inter-MSC is supported depends on the MSC implementation (to the BSC,</span><br><span style="color: hsl(120, 100%, 40%);">+inter-MSC handover looks identical to inter-BSC handover). Inter-RAT handover</span><br><span style="color: hsl(120, 100%, 40%);">+is currently not implemented.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+At the time of writing, OsmoMSC's inter-BSC handover support is not complete</span><br><span style="color: hsl(120, 100%, 40%);">+yet, so OsmoBSC can perform handover between separate BSS only in conjunction</span><br><span style="color: hsl(120, 100%, 40%);">+with a 3rd party MSC implementation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Handover support in Osmocom at the time of writing</span><br><span style="color: hsl(120, 100%, 40%);">+[cols="^,^,^,^,^"]</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+|  | intra-BSC HO (local BSS) | inter-BSC HO (remote BSS) | inter-MSC HO | inter-RAT HO</span><br><span style="color: hsl(120, 100%, 40%);">+| OsmoBSC | rxlev, load-based | rxlev | (planned) | -</span><br><span style="color: hsl(120, 100%, 40%);">+| OsmoMSC | (not involved, except for codec changes) | (planned)  | (planned)  | -</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== How Handover Works</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This chapter generally explains handover operations between 2G cells.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Internal / Intra-BSC Handover</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The BSS is configured to know which cell is physically adjacent to which other</span><br><span style="color: hsl(120, 100%, 40%);">+cells, its "neighbors". On the MS/BTS/BSS level, individual cells are</span><br><span style="color: hsl(120, 100%, 40%);">+identified by ARFCN+BSIC (frequency + 6-bit identification code).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Each BTS is told by the BSC which cells identified by ARFCN+BSIC are its</span><br><span style="color: hsl(120, 100%, 40%);">+adjacent cells. Via System Information, each MS receives a list of these</span><br><span style="color: hsl(120, 100%, 40%);">+ARFCN+BSIC, and the MS then return measurements of reception levels.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The BSC is the point of decision whether to do handover or not. This can be a</span><br><span style="color: hsl(120, 100%, 40%);">+hugely complex combination of heuristics, knowledge of cell load and codec</span><br><span style="color: hsl(120, 100%, 40%);">+capabilites. The most important indicator for handover though is: does an MS</span><br><span style="color: hsl(120, 100%, 40%);">+report a neighbor with a better signal than the current cell? See</span><br><span style="color: hsl(120, 100%, 40%);">+<<intra_bsc_ho_dot>>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[[intra_bsc_ho_dot]]</span><br><span style="color: hsl(120, 100%, 40%);">+.Intra-BSC Handover stays within the BSS (shows steps only up to activation of the new lchan -- this would be followed by an RR Handover Command, RACH causing Handover Detection, Handover Complete, ...)</span><br><span style="color: hsl(120, 100%, 40%);">+[graphviz]</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+include::handover_intra_bsc.dot[]</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If the BSC sees the need for handover, it will:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- activate a new lchan (with a handover reference ID),</span><br><span style="color: hsl(120, 100%, 40%);">+- send an RR Handover Command to the current lchan, and</span><br><span style="color: hsl(120, 100%, 40%);">+- wait for the MS to send a Handover RACH to the new lchan ("Handover Detect").</span><br><span style="color: hsl(120, 100%, 40%);">+- The RTP stream then is switched over to the new lchan,</span><br><span style="color: hsl(120, 100%, 40%);">+- an RSL Establish Indication is expected on the new lchan,</span><br><span style="color: hsl(120, 100%, 40%);">+- and the old lchan is released.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Should handover fail at any point, e.g. the new lchan never receives a RACH, or</span><br><span style="color: hsl(120, 100%, 40%);">+the MS reports a Handover Failure, then the new lchan is simply released again,</span><br><span style="color: hsl(120, 100%, 40%);">+and the old lchan remains in use. If the RTP stream has already been switched</span><br><span style="color: hsl(120, 100%, 40%);">+over to the new lchan, it may actually be switched back to the old lchan.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This is simple enough if the new cell is managed by the same BSC: the OsmoMGW</span><br><span style="color: hsl(120, 100%, 40%);">+is simply instructed to relay the BTS-side of the RTP stream to another IP</span><br><span style="color: hsl(120, 100%, 40%);">+address and port, and the BSC continues to forward DTAP to the MSC</span><br><span style="color: hsl(120, 100%, 40%);">+transparently. The operation happens completely within the BSS. If the voice</span><br><span style="color: hsl(120, 100%, 40%);">+codec has remained unchanged, the MSC/MNCC may not even be notified that</span><br><span style="color: hsl(120, 100%, 40%);">+anything has happened at all.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== External / Inter-BSC Handover</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If the adjacent target cell belongs to a different BSS, the RR procedure for</span><br><span style="color: hsl(120, 100%, 40%);">+handover remains the same, but we need to tell the _remote_ BSC to allocate the</span><br><span style="color: hsl(120, 100%, 40%);">+new lchan.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The only way to reach the remote BSC is via the MSC, so the MSC must be able</span><br><span style="color: hsl(120, 100%, 40%);">+to:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- identify which other BSC we want to talk to,</span><br><span style="color: hsl(120, 100%, 40%);">+- forward various BSSMAP Handover messages between old and new BSC,</span><br><span style="color: hsl(120, 100%, 40%);">+- redirect the core-side RTP stream to the new BSS at the appropriate time,</span><br><span style="color: hsl(120, 100%, 40%);">+- and must finally BSSMAP Clear the connection to the old BSS to conclude the</span><br><span style="color: hsl(120, 100%, 40%);">+  inter-BSC handover.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[[inter_bsc_ho_dot]]</span><br><span style="color: hsl(120, 100%, 40%);">+.Inter-BSC Handover requires the MSC to relay between two BSCs (shows steps only up to the BSSMAP Handover Command -- this would be followed by an RR Handover Command, RACH causing Handover Detection, Handover Complete, ...)</span><br><span style="color: hsl(120, 100%, 40%);">+[graphviz]</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+include::handover_inter_bsc.dot[]</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The first part, identifying the remote BSC, is not as trivial as it sounds: as</span><br><span style="color: hsl(120, 100%, 40%);">+mentioned above, on the level of cell information seen by BTS and MS, the</span><br><span style="color: hsl(120, 100%, 40%);">+neighbor cells are identified by ARFCN+BSIC. However, on the A-interface and in</span><br><span style="color: hsl(120, 100%, 40%);">+the MSC, there is no knowledge of ARFCN+BSIC configurations, and instead each</span><br><span style="color: hsl(120, 100%, 40%);">+cell is identified by a LAC and CI (Location Area Code and Cell Identifier).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: There are several different cell identification types on the A-interface:</span><br><span style="color: hsl(120, 100%, 40%);">+from Cell Global Identifier (MCC+MNC+LAC+CI) down to only LAC. OsmoBSC supports</span><br><span style="color: hsl(120, 100%, 40%);">+most of these (see <<neighbor_conf_list>>). For simplicity, this description</span><br><span style="color: hsl(120, 100%, 40%);">+focuses on LAC+CI identification.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The most obvious reason for using LAC+CI is that identical ARFCN+BSIC are</span><br><span style="color: hsl(120, 100%, 40%);">+typically re-used across many cells of the same network operator: an operator</span><br><span style="color: hsl(120, 100%, 40%);">+will have only very few ARFCNs available, and the 6bit BSIC opens only a very</span><br><span style="color: hsl(120, 100%, 40%);">+limited range of distinction between cells. As long as each cell has no more</span><br><span style="color: hsl(120, 100%, 40%);">+than one neighbor per given ARFCN+BSIC, these values can be re-used any number</span><br><span style="color: hsl(120, 100%, 40%);">+of times across a network, and even between cells managed by one and the same</span><br><span style="color: hsl(120, 100%, 40%);">+BSC.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The consequence of this is that</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- the BSC needs to know which remote-BSS cells' ARFCN+BSIC correspond to</span><br><span style="color: hsl(120, 100%, 40%);">+  exactly which global LAC+CI, and</span><br><span style="color: hsl(120, 100%, 40%);">+- the MSC needs to know which LAC+CI are managed by which BSC.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In other words, each BSC requires prior knowledge about the cell configuration</span><br><span style="color: hsl(120, 100%, 40%);">+of its remote-BSS neighbor cells, and the MSC requires prior knowledge about</span><br><span style="color: hsl(120, 100%, 40%);">+each BSC's cell identifiers; i.e. these config items are spread reduntantly.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== Configuring Neighbors</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The most important step to enable handover in OsmoBSC is to configure each cell</span><br><span style="color: hsl(120, 100%, 40%);">+with the ARFCN+BSIC identities of its adjacent neighbors -- both local-BSS and</span><br><span style="color: hsl(120, 100%, 40%);">+remote-BSS.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For a long time, OsmoBSC has offered configuration to manually enter the</span><br><span style="color: hsl(120, 100%, 40%);">+ARFCN+BSIC sent out as neighbors on various System Information messages (all</span><br><span style="color: hsl(120, 100%, 40%);">+`neighbor-list` related commands). This is still possible, however,</span><br><span style="color: hsl(120, 100%, 40%);">+particularly for re-using ARFCN+BSIC within one BSS, this method will not work</span><br><span style="color: hsl(120, 100%, 40%);">+well.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+With the addition of inter-BSC handover support, the new `neighbor` config item</span><br><span style="color: hsl(120, 100%, 40%);">+has been added to the `bts` config, to maintain explicit cell-to-cell neighbor</span><br><span style="color: hsl(120, 100%, 40%);">+relations, with the possibility to re-use ARFCN+BSIC in each cell.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+It is recommended to completely replace `neighbor-list` configurations with the</span><br><span style="color: hsl(120, 100%, 40%);">+new `neighbor` configuration described below.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[[neighbor_conf_list]]</span><br><span style="color: hsl(120, 100%, 40%);">+.Overview of neighbor configuration on the `bts` config node</span><br><span style="color: hsl(120, 100%, 40%);">+[frame="none",grid="none",cols="^10%,^10%,80%"]</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+| Local | Remote BSS |</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ |   | neighbor bts 5</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ |   | neighbor lac 200</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ |   | neighbor lac-ci 200 3</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ |   | neighbor cgi 001 01 200 3</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓ | neighbor lac 200 arfcn 123 bsic 1</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓ | neighbor lac-ci 200 3 arfcn 123 bsic 1</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓ | neighbor cgi 001 01 200 3 arfcn 123 bsic 1</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Local-BSS Neighbors</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Local neighbors can be configured by just the local BTS number, or by LAC+CI,</span><br><span style="color: hsl(120, 100%, 40%);">+or any other supported A-interface type cell identification; also including the</span><br><span style="color: hsl(120, 100%, 40%);">+ARFCN+BSIC is optional, it will be derived from the local configuration if</span><br><span style="color: hsl(120, 100%, 40%);">+omitted.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC will log errors in case the configuration includes ambiguous ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+relations (when one given cell has more than one neighbor for any one</span><br><span style="color: hsl(120, 100%, 40%);">+ARFCN+BSIC).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Neighbor relations must be configured explicitly in both directions, i.e. each</span><br><span style="color: hsl(120, 100%, 40%);">+cell has to name all of its neighbors, even if the other cell already has an</span><br><span style="color: hsl(120, 100%, 40%);">+identical neighbor relation in the reverse direction.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: configuring neighbors within the local BSS in osmo-bsc.cfg, identified by local BTS number</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: configuring neighbors within the local BSS in osmo-bsc.cfg, identified by LAC+CI</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's LAC=23 CI=5</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 23</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 5</span><br><span style="color: hsl(120, 100%, 40%);">+  # reference bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 23 6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's LAC=23 CI=6</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 23</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 6</span><br><span style="color: hsl(120, 100%, 40%);">+  # reference bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 23 5</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+It is allowed to include the ARFCN and BSIC of local neighbor cells, even</span><br><span style="color: hsl(120, 100%, 40%);">+though that is redundant with the already known local configuration of the</span><br><span style="color: hsl(120, 100%, 40%);">+other cell. The idea is to ease generating the neighbor configuration</span><br><span style="color: hsl(120, 100%, 40%);">+automatically, since local-BSS and remote-BSS neighbors then share identical</span><br><span style="color: hsl(120, 100%, 40%);">+configuration formatting. For human readability and maintainability, it may</span><br><span style="color: hsl(120, 100%, 40%);">+instead be desirable to use the `neighbor bts <0-255>` format.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: configuring neighbors within the local BSS in osmo-bsc.cfg, redundantly identified by LAC+CI as well as ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's LAC=23 CI=5</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 23</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 5</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's ARFCN=1 BSIC=1</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn 1</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code 1</span><br><span style="color: hsl(120, 100%, 40%);">+  # reference bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 23 6 arfcn 2 bsic 2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  # LAC=23 CI=6</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 23</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 6</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's ARFCN=2 BSIC=2</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn 2</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code 2</span><br><span style="color: hsl(120, 100%, 40%);">+  # reference bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 23 5 arfcn 1 bsic 1</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If the cell identification matches a local cell, OsmoBSC will report errors if</span><br><span style="color: hsl(120, 100%, 40%);">+the provided ARFCN+BSIC do not match.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Remote-BSS Neighbors</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Remote-BSS neighbors _always_ need to be configured with full A-interface</span><br><span style="color: hsl(120, 100%, 40%);">+identification _and_ ARFCN+BSIC, to allow mapping a cell's neighbor ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+to a _BSSMAP Cell Identifier_ (see 3GPP TS 48.008 3.1.5.1 Handover Required</span><br><span style="color: hsl(120, 100%, 40%);">+Indication and 3.2.1.9 HANDOVER REQUIRED).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: configuring remote-BSS neighbors in osmo-bsc.cfg, identified by LAC+CI (showing both BSCs' configurations)</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+# BSC Alpha's osmo-bsc.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's LAC=23 CI=6</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 23</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 6</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's ARFCN=2 BSIC=2</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn 2</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code 2</span><br><span style="color: hsl(120, 100%, 40%);">+  # fully describe the remote cell by LAC+CI and ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 42 3 arfcn 1 bsic 3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# BSC Beta's osmo-bsc.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's LAC=42 CI=3</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code 42</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity 3</span><br><span style="color: hsl(120, 100%, 40%);">+  # this cell's ARFCN=1 BSIC=3</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn 1</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code 3</span><br><span style="color: hsl(120, 100%, 40%);">+  # fully describe the remote cell by LAC+CI and ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor lac-ci 23 6 arfcn 2 bsic 2</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: It is strongly recommended to stick to a single format for remote-BSS</span><br><span style="color: hsl(120, 100%, 40%);">+neighbors' cell identifiers all across an OsmoBSC configuration; i.e. decide</span><br><span style="color: hsl(120, 100%, 40%);">+once to use `lac`, `lac-ci` or `cgi` and then stick to that within a given</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-bsc.cfg. The reason is that the _Cell Identifier List_ sent in the _BSSMAP</span><br><span style="color: hsl(120, 100%, 40%);">+Handover Required_ message must have one single cell identifier type for all</span><br><span style="color: hsl(120, 100%, 40%);">+list items. Hence, to be able to send several alternative remote neighbors to</span><br><span style="color: hsl(120, 100%, 40%);">+the MSC, the configured cell identifiers must be of the same type. If in doubt,</span><br><span style="color: hsl(120, 100%, 40%);">+use the full CGI identifier everywhere.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+=== Configuring Handover Decisions</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For a long time, OsmoBSC has supported handover based on reception level</span><br><span style="color: hsl(120, 100%, 40%);">+hysteresis (RXLEV) and distance (TA, Timing Advance), known has `algorithm 1`.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Since 2018, OsmoBSC also supports a load-based handover decision algorithm,</span><br><span style="color: hsl(120, 100%, 40%);">+known as `algorithm 2`, which also takes cell load, available codecs and</span><br><span style="color: hsl(120, 100%, 40%);">+oscillation into consideration. Algorithm 2 had actually been implemented for</span><br><span style="color: hsl(120, 100%, 40%);">+the legacy OsmoNITB program many years before the OsmoMSC split, but remained</span><br><span style="color: hsl(120, 100%, 40%);">+on a branch, until it was forward-ported to OsmoBSC in 2018.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.What handover decision algorithms take into account</span><br><span style="color: hsl(120, 100%, 40%);">+[frame="none",grid="none",cols="^10%,^10%,80%"]</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+| algorithm 1 | algorithm 2 |</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓| RXLEV</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓| RXQUAL</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓| TA (distance)</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ | ✓| interference (good RXLEV, bad RXQUAL)</span><br><span style="color: hsl(120, 100%, 40%);">+|   | ✓| load (nr of free lchans, minimum RXLEV and RXQUAL)</span><br><span style="color: hsl(120, 100%, 40%);">+|   | ✓| penalty time to avoid oscillation</span><br><span style="color: hsl(120, 100%, 40%);">+|   | ✓| voice rate / codec bias</span><br><span style="color: hsl(120, 100%, 40%);">+| ✓ |  | inter-BSC: RXLEV hysteresis</span><br><span style="color: hsl(120, 100%, 40%);">+|   | ✓| inter-BSC: only below minimum RXLEV, RXQUAL</span><br><span style="color: hsl(120, 100%, 40%);">+|====</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Common Configuration</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Handover is disabled by default; to disable/enable handover, use `handover</span><br><span style="color: hsl(120, 100%, 40%);">+(0|1)`.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Once enabled, algorithm 1 is used by default; choose a handover algorithm with</span><br><span style="color: hsl(120, 100%, 40%);">+`handover algorithm (1|2)`:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ # Enable handover</span><br><span style="color: hsl(120, 100%, 40%);">+ handover 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ # Choose algorithm</span><br><span style="color: hsl(120, 100%, 40%);">+ handover algorithm 2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ # Tweak parameters for algorithm 2 (optional)</span><br><span style="color: hsl(120, 100%, 40%);">+ handover2 min-free-slots tch/f 4</span><br><span style="color: hsl(120, 100%, 40%);">+ handover2 penalty-time failed-ho 30</span><br><span style="color: hsl(120, 100%, 40%);">+ handover2 retries 1</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+All handover algorithms share a common configuration scheme, with an overlay of</span><br><span style="color: hsl(120, 100%, 40%);">+three levels:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* immutable compile-time default values,</span><br><span style="color: hsl(120, 100%, 40%);">+* configuration on the `network` level for all cells,</span><br><span style="color: hsl(120, 100%, 40%);">+* individual cells' configuration on each `bts` node.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Configuration settings relevant for algorithm 1 start with `handover1`, for</span><br><span style="color: hsl(120, 100%, 40%);">+algorithm 2 with `handover2`.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The following example overrides the compile-time default for all cells, and</span><br><span style="color: hsl(120, 100%, 40%);">+furthermore sets one particular cell on its own individual setting, for the</span><br><span style="color: hsl(120, 100%, 40%);">+`min-free-slots tch/f` value:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ handover2 min-free-slots tch/f 4</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 23</span><br><span style="color: hsl(120, 100%, 40%);">+  handover2 min-free-slots tch/f 2</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The order in which these settings are issued makes no difference for the</span><br><span style="color: hsl(120, 100%, 40%);">+overlay; i.e., this configuration is perfectly identical to the above, and the</span><br><span style="color: hsl(120, 100%, 40%);">+individual cell's value remains in force:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 23</span><br><span style="color: hsl(120, 100%, 40%);">+  handover2 min-free-slots tch/f 2</span><br><span style="color: hsl(120, 100%, 40%);">+ handover2 min-free-slots tch/f 4</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Each setting can be reset to a default value with the `default` keyword. When</span><br><span style="color: hsl(120, 100%, 40%);">+resetting an individual cell's value, the globally configured value is used.</span><br><span style="color: hsl(120, 100%, 40%);">+When resetting the global value, the compile-time default is used (unless</span><br><span style="color: hsl(120, 100%, 40%);">+individual cells still have explicit values configured). For example, this</span><br><span style="color: hsl(120, 100%, 40%);">+telnet VTY session removes above configuration first from the cell, then from</span><br><span style="color: hsl(120, 100%, 40%);">+the global level:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config)# network</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-net)# bts 23</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-net-bts)# handover2 min-free-slots tch/f default</span><br><span style="color: hsl(120, 100%, 40%);">+% 'handover2 min-free-slots tch/f' setting removed, now is 4</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-net-bts)# exit</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-net)# handover2 min-free-slots tch/f default</span><br><span style="color: hsl(120, 100%, 40%);">+% 'handover2 min-free-slots tch/f' setting removed, now is 0</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Handover Algorithm 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Algorithm 1 takes action only when RR Measurement Reports are received from a</span><br><span style="color: hsl(120, 100%, 40%);">+BTS. As soon as a neighbor's average RXLEV is higher than the current cell's</span><br><span style="color: hsl(120, 100%, 40%);">+average RXLEV plus a hysteresis distance, handover is triggered.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If a handover fails, algorithm 1 will again attempt handover to the same cell</span><br><span style="color: hsl(120, 100%, 40%);">+with the next Measurement Report received.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Configuration settings relevant for algorithm 1 start with `handover1`. For</span><br><span style="color: hsl(120, 100%, 40%);">+further details, please refer to the OsmoBSC VTY Reference</span><br><span style="color: hsl(120, 100%, 40%);">+(<<vty-ref-osmobsc>>) or the telnet VTY online documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== Handover Algorithm 2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Algorithm 2 is specifically designed to distribute load across cells. A</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber will not necessarily remain attached to the cell that has the best</span><br><span style="color: hsl(120, 100%, 40%);">+RXLEV average, if that cell is heavily loaded and a less loaded neighbor is</span><br><span style="color: hsl(120, 100%, 40%);">+above the minimum allowed RXLEV.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Algorithm 2 also features penalty timers to avoid oscillation: for each</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber, if handover to a specific neighbor failed (for a configurable</span><br><span style="color: hsl(120, 100%, 40%);">+number of retries), a holdoff timer prevents repeated attempts to handover to</span><br><span style="color: hsl(120, 100%, 40%);">+that same neighbor. Several hold-off timeouts following specific situations are</span><br><span style="color: hsl(120, 100%, 40%);">+configurable (see `handover2 penalty-time` configuration items).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Configuration settings relevant for algorithm 2 start with `handover2`. For</span><br><span style="color: hsl(120, 100%, 40%);">+further details, please refer to the OsmoBSC VTY Reference</span><br><span style="color: hsl(120, 100%, 40%);">+<<vty-ref-osmobsc>> or the telnet VTY online documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+===== Load Distribution</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Load distribution is only supported by algorithm 2.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Load distribution occurs:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- explicitly: every N seconds, OsmoBSC considers all local cells and actively</span><br><span style="color: hsl(120, 100%, 40%);">+  triggers handover operations to reduce congestion, if any. See</span><br><span style="color: hsl(120, 100%, 40%);">+  `min-free-slots` below, and the `congestion-check` setting.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- implicitly: when choosing the best neighbor candidate for a handover</span><br><span style="color: hsl(120, 100%, 40%);">+  triggered otherwise, a congested cell (in terms of `min-free-slots`) is only</span><br><span style="color: hsl(120, 100%, 40%);">+  used as handover target if there is no alternative that causes less cell</span><br><span style="color: hsl(120, 100%, 40%);">+  load.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In either case, load distribution will only occur towards neighbor cells that</span><br><span style="color: hsl(120, 100%, 40%);">+adhere to minimum reception levels and distance, see `min rxlev` and `max</span><br><span style="color: hsl(120, 100%, 40%);">+distance`.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Load distribution will take effect only for already established voice channels.</span><br><span style="color: hsl(120, 100%, 40%);">+An MS will always first establish a voice call with its current cell choice; in</span><br><span style="color: hsl(120, 100%, 40%);">+load situations, it might be moved to another cell shortly after that.</span><br><span style="color: hsl(120, 100%, 40%);">+Considering the best neighbor _before_ starting a new voice call might be</span><br><span style="color: hsl(120, 100%, 40%);">+desirable, but is currently not implemented. Consider that RXLEV/RXQUAL ratings</span><br><span style="color: hsl(120, 100%, 40%);">+are averaged over a given number of measurement reports, so that the neighbor</span><br><span style="color: hsl(120, 100%, 40%);">+ratings may not be valid/reliable yet during early call establishment. In</span><br><span style="color: hsl(120, 100%, 40%);">+consequence, it is recommended to ensure a sufficient number of unused logical</span><br><span style="color: hsl(120, 100%, 40%);">+channels at all times, though there is no single correct configuration for all</span><br><span style="color: hsl(120, 100%, 40%);">+situations.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Most important for load distribution are the `min-free-slots tch/f` and</span><br><span style="color: hsl(120, 100%, 40%);">+`min-free-slots tch/h` settings. The default is zero, meaning _no_ load</span><br><span style="color: hsl(120, 100%, 40%);">+distribution. To enable, set `min-free-slots` >= 1 for `tch/f` and/or `tch/h`</span><br><span style="color: hsl(120, 100%, 40%);">+as appropriate. This setting refers to the minimum number of voice channels</span><br><span style="color: hsl(120, 100%, 40%);">+that should ideally remain unused in each individual BTS at all times.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: it is not harmful to configure `min-free-slots` for a TCH kind that is</span><br><span style="color: hsl(120, 100%, 40%);">+not actually present. Such settings will simply be ignored.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: the number of TCH/F timeslots corresponds 1:1 to the number indicated by</span><br><span style="color: hsl(120, 100%, 40%);">+`min-free-slots tch/f`, because each TCH/F physical channel has exactly one</span><br><span style="color: hsl(120, 100%, 40%);">+logical channel. In contrast, for each TCH/H timeslot, there are two logical</span><br><span style="color: hsl(120, 100%, 40%);">+channels, hence `min-free-slots tch/h` corresponds to twice the number of TCH/H</span><br><span style="color: hsl(120, 100%, 40%);">+timeslots configured per cell. In fact, a more accurate naming would have been</span><br><span style="color: hsl(120, 100%, 40%);">+"min-free-lchans".</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Think of the `min-free-slots` setting as the threshold at which load</span><br><span style="color: hsl(120, 100%, 40%);">+distribution is considered. If as many logical channels as required by this</span><br><span style="color: hsl(120, 100%, 40%);">+setting are available in a given cell, only changes in RXLEV/RXQUAL/TA trigger</span><br><span style="color: hsl(120, 100%, 40%);">+handover away from that cell. As soon as less logical channels remain free, the</span><br><span style="color: hsl(120, 100%, 40%);">+periodical congestion check attempts to distribute MS to less loaded neighbor</span><br><span style="color: hsl(120, 100%, 40%);">+cells. Every time, the one MS that will suffer the least RXLEV loss while still</span><br><span style="color: hsl(120, 100%, 40%);">+reducing congestion will be instructed to move first.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If a cell and its neighbors are all loaded past their `min-free-slots`</span><br><span style="color: hsl(120, 100%, 40%);">+settings, the algorithmic aim is equal load: a load-based handover will never</span><br><span style="color: hsl(120, 100%, 40%);">+cause the target cell to be more congested than the source cell.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The min-free-slots setting is a tradeoff between immediate voice service</span><br><span style="color: hsl(120, 100%, 40%);">+availability and optimal reception levels. A sane choice could be:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Start off with `min-free-slots` set to half the available logical channels.</span><br><span style="color: hsl(120, 100%, 40%);">+- Increase `min-free-slots` if you see MS being rejected too often even though</span><br><span style="color: hsl(120, 100%, 40%);">+  close neighbors had unused logical channels.</span><br><span style="color: hsl(120, 100%, 40%);">+- Decrease `min-free-slots` if you see too many handovers happening for no</span><br><span style="color: hsl(120, 100%, 40%);">+  apparent reason.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Choosing the optimal setting is not trivial, consider these examples:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Configure `min-free-slots` = 1: load distribution to other cells will occur</span><br><span style="color: hsl(120, 100%, 40%);">+  exactly when the last available logical channel has become occupied. The next</span><br><span style="color: hsl(120, 100%, 40%);">+  time the congestion check runs, at most one handover will occur, so that one</span><br><span style="color: hsl(120, 100%, 40%);">+  channel is available again. In the intermediate time, all channels will be</span><br><span style="color: hsl(120, 100%, 40%);">+  occupied, and some MS might be denied immediate voice service because of</span><br><span style="color: hsl(120, 100%, 40%);">+  that, even though, possibly, other neighbor cells would have provided</span><br><span style="color: hsl(120, 100%, 40%);">+  excellent reception levels and were completely unloaded. For those MS that</span><br><span style="color: hsl(120, 100%, 40%);">+  are already in an ongoing voice call and are not physically moving, though,</span><br><span style="color: hsl(120, 100%, 40%);">+  this almost guarantees service by the closest/best cell.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Set `min-free-slots` = 2: up to two MS can successfully request voice service</span><br><span style="color: hsl(120, 100%, 40%);">+  simultaneously (e.g. one MS is establishing a new voice call while another MS</span><br><span style="color: hsl(120, 100%, 40%);">+  is travelling into this cell). Ideally, two slots have been kept open and are</span><br><span style="color: hsl(120, 100%, 40%);">+  immediately available. But if a third MS is also traveling into this cell at</span><br><span style="color: hsl(120, 100%, 40%);">+  the same time, it will not be able to handover into this cell until load</span><br><span style="color: hsl(120, 100%, 40%);">+  distribution has again taken action to make logical channels available. The</span><br><span style="color: hsl(120, 100%, 40%);">+  same scenario applies to any arbitrary number of MS asking for voice channels</span><br><span style="color: hsl(120, 100%, 40%);">+  simultaneously. The operator needs to choose where to draw the line.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Set `min-free-slots` >= the number of available channels: as soon as any</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor is less loaded than a given cell, handover will be attempted. But</span><br><span style="color: hsl(120, 100%, 40%);">+  imagine there are only two active voice calls on this cell with plenty of</span><br><span style="color: hsl(120, 100%, 40%);">+  logical channels still unused, and the closest neighbor rates only just above</span><br><span style="color: hsl(120, 100%, 40%);">+  `min rxlev`; then moving one of the MS _for no good reason_ causes all of:</span><br><span style="color: hsl(120, 100%, 40%);">+  increased power consumption, reduced reception stability and channel</span><br><span style="color: hsl(120, 100%, 40%);">+  management overhead.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: In the presence of dynamic timeslots to provide GPRS service, the number</span><br><span style="color: hsl(120, 100%, 40%);">+of voice timeslots left unused also determines the amount of bandwidth</span><br><span style="color: hsl(120, 100%, 40%);">+available for GPRS.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+==== External / Inter-BSC Handover Considerations</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+There currently is a profound difference for inter-BSC handover between</span><br><span style="color: hsl(120, 100%, 40%);">+algorithm 1 and 2:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For algorithm 1, inter-BSC handover is triggered as soon as the Measurement</span><br><span style="color: hsl(120, 100%, 40%);">+Reports and hysteresis indicate a better neighbor than the current cell,</span><br><span style="color: hsl(120, 100%, 40%);">+period.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For algorithm 2, a subscriber is "sticky" to the current BSS, and inter-BSC</span><br><span style="color: hsl(120, 100%, 40%);">+handover is only even considered when RXLEV/TA drop below minimum requirements.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- If your network topology is such that each OsmoBSC instance manages a single</span><br><span style="color: hsl(120, 100%, 40%);">+  BTS, and you would like to encourage handover between these, choose handover</span><br><span style="color: hsl(120, 100%, 40%);">+  algorithm 1. Load balancing will not be available, but RXLEV hysteresis will.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- If your network topology has many cells per BSS, and/or if your BSS</span><br><span style="color: hsl(120, 100%, 40%);">+  boundaries in tendency correspond to physical/semantic boundaries that favor</span><br><span style="color: hsl(120, 100%, 40%);">+  handover to remain within a BSS, then choose handover algorithm 2.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The reason for the difference between algorithm 1 and 2 for remote-BSS</span><br><span style="color: hsl(120, 100%, 40%);">+handovers is, in summary, the young age of the inter-BSC handover feature in</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- So far the mechanisms to communicate cell load to remote-BSS available in the</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSMAP Handover messages are not implemented, so, a handover due to cell load</span><br><span style="color: hsl(120, 100%, 40%);">+  across BSS boundaries would be likely to cause handover oscillation between</span><br><span style="color: hsl(120, 100%, 40%);">+  the two BSS (continuous handover of the same MS back and forth between the</span><br><span style="color: hsl(120, 100%, 40%);">+  same two cells).</span><br><span style="color: hsl(120, 100%, 40%);">+- Algorithm 1 has no `min rxlev` setting.</span><br><span style="color: hsl(120, 100%, 40%);">+- Algorithm 1 does not actually use any information besides the Measurement</span><br><span style="color: hsl(120, 100%, 40%);">+  Reports, and hence can trivially treat all neighbor cells identically.</span><br><span>diff --git a/OsmoBSC/chapters/handover_inter_bsc.dot b/OsmoBSC/chapters/handover_inter_bsc.dot</span><br><span>new file mode 100644</span><br><span>index 0000000..0cc6554</span><br><span>--- /dev/null</span><br><span>+++ b/OsmoBSC/chapters/handover_inter_bsc.dot</span><br><span>@@ -0,0 +1,35 @@</span><br><span style="color: hsl(120, 100%, 40%);">+digraph G {</span><br><span style="color: hsl(120, 100%, 40%);">+rankdir=LR</span><br><span style="color: hsl(120, 100%, 40%);">+     </span><br><span style="color: hsl(120, 100%, 40%);">+subgraph cluster_bss_a {</span><br><span style="color: hsl(120, 100%, 40%);">+    label="BSS Alpha"</span><br><span style="color: hsl(120, 100%, 40%);">+   BTS_a0 [rank=min,label="bts 0\nARFCN=1 BSIC=1\nLAC=23 CI=5"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_a1 [rank=min,label="bts 1\nARFCN=2 BSIC=2\nLAC=23 CI=6"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_a [label="BSC Alpha"];</span><br><span style="color: hsl(120, 100%, 40%);">+  {BTS_a0,BTS_a1} -> BSC_a [arrowhead=none,label=Abis]</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+subgraph cluster_bss_b {</span><br><span style="color: hsl(120, 100%, 40%);">+        label="BSS Beta"</span><br><span style="color: hsl(120, 100%, 40%);">+    BTS_b0 [rank=min,label="bts 0\nARFCN=1 BSIC=3\nLAC=42 CI=3"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_b1 [rank=min,label="bts 1\nARFCN=2 BSIC=4\nLAC=42 CI=1"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_b [label="BSC Beta"]</span><br><span style="color: hsl(120, 100%, 40%);">+    {BTS_b0,BTS_b1} -> BSC_b [arrowhead=none,label=Abis]</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=3 RXLEV"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_b0 -> MS [label="(2) good RXLEV",style=dotted]</span><br><span style="color: hsl(120, 100%, 40%);">+MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> BTS_b0 [label="(5) BSC decides to do\ninter-BSC Handover",style=dashed,constraint=false]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+{BSC_a,BSC_b} -> MSC [arrowhead=none,label=A]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BSC_a -> MSC [label="(6) --> Handover Required\nto LAC=42 CI=6\n(10) <-- Handover Command",style=dashed,constraint=false,arrowhead=none]</span><br><span style="color: hsl(120, 100%, 40%);">+MSC -> BSC_b [label="(7) <-- Handover Request\n(9) --> Handover Request ACK",style=dashed,constraint=false,arrowhead=none]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BSC_b -> BTS_b0 [label="(8) activate new lchan",style=dashed,constraint=false]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/OsmoBSC/chapters/handover_intra_bsc.dot b/OsmoBSC/chapters/handover_intra_bsc.dot</span><br><span>new file mode 100644</span><br><span>index 0000000..2a4f6cf</span><br><span>--- /dev/null</span><br><span>+++ b/OsmoBSC/chapters/handover_intra_bsc.dot</span><br><span>@@ -0,0 +1,31 @@</span><br><span style="color: hsl(120, 100%, 40%);">+digraph G {</span><br><span style="color: hsl(120, 100%, 40%);">+rankdir=LR</span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+subgraph cluster_bss_a {</span><br><span style="color: hsl(120, 100%, 40%);">+    label="BSS Alpha"</span><br><span style="color: hsl(120, 100%, 40%);">+   BTS_a0 [rank=min,label="bts 0\nARFCN=1 BSIC=1\nLAC=23 CI=5"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_a1 [rank=min,label="bts 1\nARFCN=2 BSIC=2\nLAC=23 CI=6"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_a [label="BSC Alpha"];</span><br><span style="color: hsl(120, 100%, 40%);">+  {BTS_a0,BTS_a1} -> BSC_a [arrowhead=none,label=Abis]</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+subgraph cluster_bss_b {</span><br><span style="color: hsl(120, 100%, 40%);">+        label="BSS Beta"</span><br><span style="color: hsl(120, 100%, 40%);">+    BTS_b0 [rank=min,label="bts 0\nARFCN=1 BSIC=3\nLAC=42 CI=3"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_b1 [rank=min,label="bts 1\nARFCN=2 BSIC=4\nLAC=42 CI=1"]</span><br><span style="color: hsl(120, 100%, 40%);">+        BSC_b [label="BSC Beta"]</span><br><span style="color: hsl(120, 100%, 40%);">+    {BTS_b0,BTS_b1} -> BSC_b [arrowhead=none,label=Abis]</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=1 RXLEV"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a0 -> MS [label="(2) good RXLEV",style=dotted]</span><br><span style="color: hsl(120, 100%, 40%);">+MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> BTS_a0 [label="(5) BSC decides to do\nintra-BSC Handover",style=dashed,constraint=false]</span><br><span style="color: hsl(120, 100%, 40%);">+BSC_a -> BTS_a0 [label="(6) activate new lchan",style=dashed,constraint=false]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+{BSC_a,BSC_b} -> MSC [arrowhead=none,label=A]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/OsmoBSC/osmobsc-usermanual-docinfo.xml b/OsmoBSC/osmobsc-usermanual-docinfo.xml</span><br><span>index 5ac3742..6de53b2 100644</span><br><span>--- a/OsmoBSC/osmobsc-usermanual-docinfo.xml</span><br><span>+++ b/OsmoBSC/osmobsc-usermanual-docinfo.xml</span><br><span>@@ -7,6 +7,15 @@</span><br><span>       Initial OsmoBSC manual, recycling OsmoNITB sections</span><br><span>     </revremark></span><br><span>   </revision></span><br><span style="color: hsl(120, 100%, 40%);">+  <revision></span><br><span style="color: hsl(120, 100%, 40%);">+    <revnumber>2</revnumber></span><br><span style="color: hsl(120, 100%, 40%);">+    <date>October 2018</date></span><br><span style="color: hsl(120, 100%, 40%);">+    <authorinitials>NH</authorinitials></span><br><span style="color: hsl(120, 100%, 40%);">+    <revremark></span><br><span style="color: hsl(120, 100%, 40%);">+      Add Handover chapter: document new neighbor configuration, HO algorithm 2</span><br><span style="color: hsl(120, 100%, 40%);">+      and inter-BSC handover.</span><br><span style="color: hsl(120, 100%, 40%);">+    </revremark></span><br><span style="color: hsl(120, 100%, 40%);">+  </revision></span><br><span> </revhistory></span><br><span> </span><br><span> <authorgroup></span><br><span>@@ -32,10 +41,21 @@</span><br><span>       <jobtitle>Managing Director</jobtitle></span><br><span>     </affiliation></span><br><span>   </author></span><br><span style="color: hsl(120, 100%, 40%);">+  <author></span><br><span style="color: hsl(120, 100%, 40%);">+    <firstname>Neels</firstname></span><br><span style="color: hsl(120, 100%, 40%);">+    <surname>Hofmeyr</surname></span><br><span style="color: hsl(120, 100%, 40%);">+    <email>nhofmeyr@sysmocom.de</email></span><br><span style="color: hsl(120, 100%, 40%);">+    <authorinitials>NH</authorinitials></span><br><span style="color: hsl(120, 100%, 40%);">+    <affiliation></span><br><span style="color: hsl(120, 100%, 40%);">+      <shortaffil>sysmocom</shortaffil></span><br><span style="color: hsl(120, 100%, 40%);">+      <orgname>sysmocom - s.f.m.c. GmbH</orgname></span><br><span style="color: hsl(120, 100%, 40%);">+      <jobtitle>Developer</jobtitle></span><br><span style="color: hsl(120, 100%, 40%);">+    </affiliation></span><br><span style="color: hsl(120, 100%, 40%);">+  </author></span><br><span> </authorgroup></span><br><span> </span><br><span> <copyright></span><br><span style="color: hsl(0, 100%, 40%);">-  <year>2012-2016</year></span><br><span style="color: hsl(120, 100%, 40%);">+  <year>2012-2018</year></span><br><span>   <holder>sysmocom - s.f.m.c. GmbH</holder></span><br><span> </copyright></span><br><span> </span><br><span>diff --git a/OsmoBSC/osmobsc-usermanual.adoc b/OsmoBSC/osmobsc-usermanual.adoc</span><br><span>index e3eadaf..0ec15e5 100644</span><br><span>--- a/OsmoBSC/osmobsc-usermanual.adoc</span><br><span>+++ b/OsmoBSC/osmobsc-usermanual.adoc</span><br><span>@@ -15,6 +15,8 @@</span><br><span> </span><br><span> include::chapters/counters.adoc[]</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+include::chapters/handover.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> include::../common/chapters/vty.adoc[]</span><br><span> </span><br><span> include::../common/chapters/logging.adoc[]</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11532">change 11532</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11532"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-manuals </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I7afb3f66c98abda07fc8acc76e00c46091fe55e2 </div>
<div style="display:none"> Gerrit-Change-Number: 11532 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>