<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/14515">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">doc/manuals: review and tweak handover docs<br><br>Change-Id: Ib25cee8fd8c243881b99173a9a3036ad19d0f8af<br>---<br>M doc/manuals/chapters/handover.adoc<br>M doc/manuals/chapters/handover_inter_bsc.dot<br>M doc/manuals/chapters/handover_intra_bsc.dot<br>3 files changed, 62 insertions(+), 53 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/15/14515/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/chapters/handover.adoc b/doc/manuals/chapters/handover.adoc</span><br><span>index c75b03c..2f9d598 100644</span><br><span>--- a/doc/manuals/chapters/handover.adoc</span><br><span>+++ b/doc/manuals/chapters/handover.adoc</span><br><span>@@ -22,9 +22,7 @@</span><br><span> is currently not implemented.  However, you may still advertise 3G and 4G neighbor cells</span><br><span> in order to facilitate cell/RAT re-selection to those neighbors.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-At the time of writing, OsmoMSC's inter-BSC handover support is not complete</span><br><span style="color: hsl(0, 100%, 40%);">-yet, so OsmoBSC can perform handover between separate BSS only in conjunction</span><br><span style="color: hsl(0, 100%, 40%);">-with a 3rd party MSC implementation.</span><br><span style="color: hsl(120, 100%, 40%);">+Since 2019, OsmoMSC fully supports both inter-BSC and inter-MSC handover.</span><br><span> </span><br><span> .Handover support in Osmocom at the time of writing</span><br><span> [cols="^,^,^,^,^"]</span><br><span>@@ -34,6 +32,7 @@</span><br><span> | OsmoMSC | (not involved, except for codec changes) | (planned)  | (planned)  | -</span><br><span> |====</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Most handover related procedures are explained in 3GPP TS 48.008.</span><br><span> </span><br><span> === How Handover Works</span><br><span> </span><br><span>@@ -45,9 +44,20 @@</span><br><span> cells, its "neighbors". On the MS/BTS/BSS level, individual cells are</span><br><span> identified by ARFCN+BSIC (frequency + 6-bit identification code).</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Each BTS is told by the BSC which cells identified by ARFCN+BSIC are its</span><br><span style="color: hsl(0, 100%, 40%);">-adjacent cells. Via System Information, each MS receives a list of these</span><br><span style="color: hsl(0, 100%, 40%);">-ARFCN+BSIC, and the MS then return measurements of reception levels.</span><br><span style="color: hsl(120, 100%, 40%);">+The BSC instructs each BTS with a list of ARFCNs (i.e. GSM frequency bands)</span><br><span style="color: hsl(120, 100%, 40%);">+that qualify as neighbor cells, as part of the System Information Type 2. Each</span><br><span style="color: hsl(120, 100%, 40%);">+MS served by a BTS receives the System Information Type 2 and thus knows which</span><br><span style="color: hsl(120, 100%, 40%);">+ARFCNs to measure for potential handover. Each MS with an active channel then</span><br><span style="color: hsl(120, 100%, 40%);">+returns up to 6 measurements of reception levels (RXLEV) to the BTS, to be</span><br><span style="color: hsl(120, 100%, 40%);">+forwarded to the BSC in RSL Measurement Report messages.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Note that the BTS and MS are told only the ARFCNs, not the BSICs, of neighbor</span><br><span style="color: hsl(120, 100%, 40%);">+cells; the BSICs are however included in the measurements that an MS returns to</span><br><span style="color: hsl(120, 100%, 40%);">+BTS and BSC. Commonly, each ARFCN is owned by one specific operator, so, an MS</span><br><span style="color: hsl(120, 100%, 40%);">+considers all visible cells on a given ARFCN as possible neighbors. However, as</span><br><span style="color: hsl(120, 100%, 40%);">+soon as an MS reports RXLEV of a specific neighbor cell, the BSC needs to know</span><br><span style="color: hsl(120, 100%, 40%);">+which exact cell to possibly handover to, which is why the MS pinpoints the</span><br><span style="color: hsl(120, 100%, 40%);">+specific BSIC that it reported measurements for.</span><br><span> </span><br><span> The BSC is the point of decision whether to do handover or not. This can be a</span><br><span> hugely complex combination of heuristics, knowledge of cell load and codec</span><br><span>@@ -74,18 +84,18 @@</span><br><span> Should handover fail at any point, e.g. the new lchan never receives a RACH, or</span><br><span> the MS reports a Handover Failure, then the new lchan is simply released again,</span><br><span> and the old lchan remains in use. If the RTP stream has already been switched</span><br><span style="color: hsl(0, 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%);">+over to the new lchan, it is switched back to the old lchan.</span><br><span> </span><br><span> This is simple enough if the new cell is managed by the same BSC: the OsmoMGW</span><br><span> is simply instructed to relay the BTS-side of the RTP stream to another IP</span><br><span> address and port, and the BSC continues to forward DTAP to the MSC</span><br><span style="color: hsl(0, 100%, 40%);">-transparently. The operation happens completely within the BSS. If the voice</span><br><span style="color: hsl(0, 100%, 40%);">-codec has remained unchanged, the MSC/MNCC may not even be notified that</span><br><span style="color: hsl(0, 100%, 40%);">-anything has happened at all.</span><br><span style="color: hsl(120, 100%, 40%);">+transparently. The operation happens completely within the BSS, except for the</span><br><span style="color: hsl(120, 100%, 40%);">+BSSMAP Handover Performed message sent to the MSC once the handover is</span><br><span style="color: hsl(120, 100%, 40%);">+completed (see 3GPP TS 48.008).</span><br><span> </span><br><span> ==== External / Inter-BSC Handover</span><br><span> </span><br><span style="color: hsl(0, 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%);">+If the handover target cell belongs to a different BSS, the RR procedure for</span><br><span> handover remains the same, but we need to tell the _remote_ BSC to allocate the</span><br><span> new lchan.</span><br><span> </span><br><span>@@ -108,7 +118,7 @@</span><br><span> The first part, identifying the remote BSC, is not as trivial as it sounds: as</span><br><span> mentioned above, on the level of cell information seen by BTS and MS, the</span><br><span> neighbor cells are identified by ARFCN+BSIC. However, on the A-interface and in</span><br><span style="color: hsl(0, 100%, 40%);">-the MSC, there is no knowledge of ARFCN+BSIC configurations, and instead each</span><br><span style="color: hsl(120, 100%, 40%);">+the MSC, there is no knowledge of ARFCN+BSIC configurations. Instead, each</span><br><span> cell is identified by a LAC and CI (Location Area Code and Cell Identifier).</span><br><span> </span><br><span> NOTE: There are several different cell identification types on the A-interface:</span><br><span>@@ -116,15 +126,7 @@</span><br><span> most of these (see <<neighbor_conf_list>>). For simplicity, this description</span><br><span> focuses on LAC+CI identification.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-The most obvious reason for using LAC+CI is that identical ARFCN+BSIC are</span><br><span style="color: hsl(0, 100%, 40%);">-typically re-used across many cells of the same network operator: an operator</span><br><span style="color: hsl(0, 100%, 40%);">-will have only very few ARFCNs available, and the 6bit BSIC opens only a very</span><br><span style="color: hsl(0, 100%, 40%);">-limited range of distinction between cells. As long as each cell has no more</span><br><span style="color: hsl(0, 100%, 40%);">-than one neighbor per given ARFCN+BSIC, these values can be re-used any number</span><br><span style="color: hsl(0, 100%, 40%);">-of times across a network, and even between cells managed by one and the same</span><br><span style="color: hsl(0, 100%, 40%);">-BSC.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-The consequence of this is that</span><br><span style="color: hsl(120, 100%, 40%);">+Hence:</span><br><span> </span><br><span> - the BSC needs to know which remote-BSS cells' ARFCN+BSIC correspond to</span><br><span>   exactly which global LAC+CI, and</span><br><span>@@ -134,6 +136,14 @@</span><br><span> of its remote-BSS neighbor cells, and the MSC requires prior knowledge about</span><br><span> each BSC's cell identifiers; i.e. these config items are spread reduntantly.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+The most obvious reason for using LAC+CI in BSSMAP is that identical ARFCN+BSIC</span><br><span style="color: hsl(120, 100%, 40%);">+are typically re-used across many cells of the same network operator: an</span><br><span style="color: hsl(120, 100%, 40%);">+operator will have only very few ARFCNs available, and the 6bit BSIC opens only</span><br><span style="color: hsl(120, 100%, 40%);">+a very limited range of distinction between cells. As long as each cell has no</span><br><span style="color: hsl(120, 100%, 40%);">+more than one neighbor per given ARFCN+BSIC, these values can be re-used any</span><br><span style="color: hsl(120, 100%, 40%);">+number of times across a network, and even between cells managed by one and the</span><br><span style="color: hsl(120, 100%, 40%);">+same BSC.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> === Configuring Neighbors</span><br><span> </span><br><span> The most important step to enable handover in OsmoBSC is to configure each cell</span><br><span>@@ -142,12 +152,12 @@</span><br><span> </span><br><span> For a long time, OsmoBSC has offered configuration to manually enter the</span><br><span> ARFCN+BSIC sent out as neighbors on various System Information messages (all</span><br><span style="color: hsl(0, 100%, 40%);">-`neighbor-list` related commands). This is still possible, however,</span><br><span style="color: hsl(120, 100%, 40%);">+`neighbor-list` related commands). This is still possible; however,</span><br><span> particularly for re-using ARFCN+BSIC within one BSS, this method will not work</span><br><span> well.</span><br><span> </span><br><span> With the addition of inter-BSC handover support, the new `neighbor` config item</span><br><span style="color: hsl(0, 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%);">+has been added to the `bts` config node, to maintain explicit cell-to-cell neighbor</span><br><span> relations, with the possibility to re-use ARFCN+BSIC in each cell.</span><br><span> </span><br><span> It is recommended to completely replace `neighbor-list` configurations with the</span><br><span>@@ -157,31 +167,30 @@</span><br><span> .Overview of neighbor configuration on the `bts` config node</span><br><span> [frame="none",grid="none",cols="^10%,^10%,80%"]</span><br><span> |====</span><br><span style="color: hsl(0, 100%, 40%);">-| Local | Remote BSS |</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ |   | neighbor bts 5</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ |   | neighbor lac 200</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ |   | neighbor lac-ci 200 3</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ |   | neighbor cgi 001 01 200 3</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ | ✓ | neighbor lac 200 arfcn 123 bsic 1</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ | ✓ | neighbor lac-ci 200 3 arfcn 123 bsic 1</span><br><span style="color: hsl(0, 100%, 40%);">-| ✓ | ✓ | neighbor cgi 001 01 200 3 arfcn 123 bsic 1</span><br><span style="color: hsl(120, 100%, 40%);">+| Local | Remote BSS | type of `neighbor` config line, by example</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> |====</span><br><span> </span><br><span> ==== Default: All Local Cells are Neighbors</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-For historical reasons, the default behavior of OsmoBSC is to add all local-BSS cells as neighbors. To</span><br><span style="color: hsl(0, 100%, 40%);">-maintain a backwards compatible configuration file format, this is still the case: as soon as no explicit</span><br><span style="color: hsl(120, 100%, 40%);">+For historical reasons, the default behavior of OsmoBSC is to add all local-BSS cells as neighbors for every other cell. To</span><br><span style="color: hsl(120, 100%, 40%);">+maintain a backwards compatible configuration file format, this is still the case: as long as no explicit</span><br><span> neighbor cell is configured with a `neighbor` command (either none was configured, or all configured</span><br><span style="color: hsl(0, 100%, 40%);">-neighbors have been removed again), a cell automatically lists all of the local-BSS cells as neighbors.</span><br><span style="color: hsl(120, 100%, 40%);">+`neighbor` lines have been removed again), a cell automatically lists all of the local-BSS cells as neighbors.</span><br><span> These are implicit mappings in terms of the legacy neighbor configuration scheme, and re-using ARFCN+BSIC</span><br><span> combinations within a BSS will not work well this way.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-As soon as the first explicit neighbor relation is added to a cell, the legacy behavior is switched off,</span><br><span style="color: hsl(120, 100%, 40%);">+As soon as the first explicit `neighbor` relation is added to a cell, the legacy behavior is switched off,</span><br><span> and only explicit neighbors are in effect.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-NOTE: If a cell is required to not have any neighbors, it is recommended to rather switch off handover</span><br><span style="color: hsl(0, 100%, 40%);">-for that cell with `handover 0`. An alternative solution is to set `neighbor-list mode manual` and not</span><br><span style="color: hsl(0, 100%, 40%);">-configure any `neighbor-list` entries.</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: If a cell is required to not have any neighbors, it is recommended to switch off handover</span><br><span style="color: hsl(120, 100%, 40%);">+for that cell with `handover 0`.</span><br><span> </span><br><span> ==== Local-BSS Neighbors</span><br><span> </span><br><span>@@ -228,10 +237,13 @@</span><br><span> </span><br><span> It is allowed to include the ARFCN and BSIC of local neighbor cells, even</span><br><span> though that is redundant with the already known local configuration of the</span><br><span style="color: hsl(0, 100%, 40%);">-other cell. The idea is to ease generating the neighbor configuration</span><br><span style="color: hsl(0, 100%, 40%);">-automatically, since local-BSS and remote-BSS neighbors then share identical</span><br><span style="color: hsl(0, 100%, 40%);">-configuration formatting. For human readability and maintainability, it may</span><br><span style="color: hsl(0, 100%, 40%);">-instead be desirable to use the `neighbor bts <0-255>` format.</span><br><span style="color: hsl(120, 100%, 40%);">+target cell. The idea is to ease generating the neighbor configuration</span><br><span style="color: hsl(120, 100%, 40%);">+automatically, in that local-BSS and remote-BSS neighbors can have identical</span><br><span style="color: hsl(120, 100%, 40%);">+configuration formatting. If the cell identification (LAC+CI) matches a local</span><br><span style="color: hsl(120, 100%, 40%);">+cell but a mismatching ARFCN+BSIC follows on the same config line, OsmoBSC will</span><br><span style="color: hsl(120, 100%, 40%);">+report errors. For human readability and maintainability, it may instead be</span><br><span style="color: hsl(120, 100%, 40%);">+desirable to use the `neighbor bts <0-255>` format, or omit the redundant</span><br><span style="color: hsl(120, 100%, 40%);">+`arfcn` and `bsic`.</span><br><span> </span><br><span> .Example: configuring neighbors within the local BSS in osmo-bsc.cfg, redundantly identified by LAC+CI as well as ARFCN+BSIC</span><br><span> ----</span><br><span>@@ -260,14 +272,11 @@</span><br><span>   neighbor lac-ci 23 5 arfcn 1 bsic 1</span><br><span> ----</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-If the cell identification matches a local cell, OsmoBSC will report errors if</span><br><span style="color: hsl(0, 100%, 40%);">-the provided ARFCN+BSIC do not match.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> ==== Remote-BSS Neighbors</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Remote-BSS neighbors _always_ need to be configured with full A-interface</span><br><span style="color: hsl(120, 100%, 40%);">+Remote-BSS neighbors always need to be configured with full A-interface</span><br><span> identification _and_ ARFCN+BSIC, to allow mapping a cell's neighbor ARFCN+BSIC</span><br><span style="color: hsl(0, 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%);">+to a BSSMAP Cell Identifier (see 3GPP TS 48.008 3.1.5.1 Handover Required</span><br><span> Indication and 3.2.1.9 HANDOVER REQUIRED).</span><br><span> </span><br><span> .Example: configuring remote-BSS neighbors in osmo-bsc.cfg, identified by LAC+CI (showing both BSCs' configurations)</span><br><span>@@ -320,7 +329,7 @@</span><br><span> === Configuring Handover Decisions</span><br><span> </span><br><span> For a long time, OsmoBSC has supported handover based on reception level</span><br><span style="color: hsl(0, 100%, 40%);">-hysteresis (RXLEV) and distance (TA, Timing Advance), known has `algorithm 1`.</span><br><span style="color: hsl(120, 100%, 40%);">+hysteresis (RXLEV) and distance (TA, Timing Advance), known as `algorithm 1`.</span><br><span> </span><br><span> Since 2018, OsmoBSC also supports a load-based handover decision algorithm,</span><br><span> known as `algorithm 2`, which also takes cell load, available codecs and</span><br><span>@@ -387,7 +396,7 @@</span><br><span> ----</span><br><span> </span><br><span> The order in which these settings are issued makes no difference for the</span><br><span style="color: hsl(0, 100%, 40%);">-overlay; i.e., this configuration is perfectly identical to the above, and the</span><br><span style="color: hsl(120, 100%, 40%);">+overlay; i.e., the following configuration is perfectly identical to the above, and the</span><br><span> individual cell's value remains in force:</span><br><span> </span><br><span> ----</span><br><span>diff --git a/doc/manuals/chapters/handover_inter_bsc.dot b/doc/manuals/chapters/handover_inter_bsc.dot</span><br><span>index 0cc6554..42decef 100644</span><br><span>--- a/doc/manuals/chapters/handover_inter_bsc.dot</span><br><span>+++ b/doc/manuals/chapters/handover_inter_bsc.dot</span><br><span>@@ -18,8 +18,8 @@</span><br><span> }</span><br><span> </span><br><span> MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=3 RXLEV"]</span><br><span style="color: hsl(0, 100%, 40%);">-BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]</span><br><span style="color: hsl(0, 100%, 40%);">-BTS_b0 -> MS [label="(2) good RXLEV",style=dotted]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_b0 -> MS [label="(2) good RXLEV\nBSIC=3",style=dotted]</span><br><span> MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]</span><br><span> </span><br><span> BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]</span><br><span>diff --git a/doc/manuals/chapters/handover_intra_bsc.dot b/doc/manuals/chapters/handover_intra_bsc.dot</span><br><span>index 2a4f6cf..75eedec 100644</span><br><span>--- a/doc/manuals/chapters/handover_intra_bsc.dot</span><br><span>+++ b/doc/manuals/chapters/handover_intra_bsc.dot</span><br><span>@@ -18,8 +18,8 @@</span><br><span> }</span><br><span> </span><br><span> MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=1 RXLEV"]</span><br><span style="color: hsl(0, 100%, 40%);">-BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]</span><br><span style="color: hsl(0, 100%, 40%);">-BTS_a0 -> MS [label="(2) good RXLEV",style=dotted]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1"]</span><br><span style="color: hsl(120, 100%, 40%);">+BTS_a0 -> MS [label="(2) good RXLEV\nBSIC=1",style=dotted]</span><br><span> MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]</span><br><span> </span><br><span> BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/14515">change 14515</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/c/osmo-bsc/+/14515"/><meta itemprop="name" content="View Change"/></div></div>

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