slides

Copyright (c) 2018 by Neels Hofmeyr <neels@hofmeyr.de>

License: CC-BY-SA

handover, simplified

ho101_1.svg

handover, simplified

ho101_2.svg

handover, simplified

ho101_3.svg

handover, simplified

ho101_4.svg

handover, simplified

ho101_5.svg

handover, simplified

ho101_6.svg

handover, simplified

handover decision algorithm

handover_decision_2.c

handover config

OsmoBSC(config-net)# list
...
  handover (0|1|default)
  handover algorithm (1|2|default)

handover config

OsmoBSC(config-net)# list
...
  handover (0|1|default)
  handover algorithm (1|2|default)

Each item can be set globally and per-BTS

OsmoBSC(config-net)# bts 0
OsmoBSC(config-net-bts)# list
...
  handover (0|1|default)
  handover algorithm (1|2|default)

handover1 config

OsmoBSC(config-net)# list
...
  handover1 window rxlev averaging (<1-10>|default)
  handover1 window rxqual averaging (<1-10>|default)
  handover1 window rxlev neighbor averaging (<1-10>|default)
  handover1 power budget interval (<1-99>|default)
  handover1 power budget hysteresis (<0-999>|default)
  handover1 maximum distance (<0-9999>|default)

handover2 config

s/handover1/handover2/ plus

handover2 assignment (0|1|default)
handover2 tdma-measurement (full|subset|default)
handover2 min rxlev (<-110--50>|default)
handover2 min rxqual (<0-7>|default)
handover2 afs-bias rxlev (<0-20>|default)
handover2 afs-bias rxqual (<0-7>|default)
handover2 min-free-slots tch/f (<0-9999>|default)
handover2 min-free-slots tch/h (<0-9999>|default)
handover2 max-handovers (<1-9999>|default)
handover2 penalty-time max-distance (<0-99999>|default)
handover2 penalty-time failed-ho (<0-99999>|default)
handover2 penalty-time failed-assignment (<0-99999>|default)
handover2 retries (<0-9>|default)
handover2 congestion-check (disabled|<1-999>|now)

handover2 config

(in case of questions I can’t answer, a listing of the online docs…)

OsmoBSC(config-net)# handover algorithm ?
  1        Algorithm 1: trigger handover based on comparing current cell and neighbor RxLev and RxQual, only.
  2        Algorithm 2: trigger handover on RxLev/RxQual, and also to balance the load across several cells. Consider available codecs. Prevent repeated handover by penalty timers.
  default  Use default (1), remove explicit setting on this node
OsmoBSC(config-net)# handover1 window ?
  rxlev   Received-Level averaging
  rxqual  Received-Quality averaging
OsmoBSC(config-net)# handover1 window rxlev ?
  averaging  How many RxLev measurements are used for averaging
  neighbor   How many Neighbor RxLev measurements are used for averaging
OsmoBSC(config-net)# handover1 window rxlev averaging ?
  <1-10>   RxLev averaging: Number of values to average over
  default  Use default (10), remove explicit setting on this node
OsmoBSC(config-net)# handover1 window rxlev neighbor ?
  averaging  How many Neighbor RxLev measurements are used for averaging
OsmoBSC(config-net)# handover1 window rxlev neighbor averaging ?
  <1-10>   Neighbor RxLev averaging: Number of values to average over
  default  Use default (10), remove explicit setting on this node
OsmoBSC(config-net)# handover1 window rxqual ?
  averaging  How many RxQual measurements are used for averaging
OsmoBSC(config-net)# handover1 window rxqual averaging ?
  <1-10>   RxQual averaging: Number of values to average over
  default  Use default (1), remove explicit setting on this node
OsmoBSC(config-net)# handover1 power ?
  budget  Neighbor cell power triggering
OsmoBSC(config-net)# handover1 power budget ?
  interval    How often to check for a better cell (SACCH frames)
  hysteresis  How many dBm stronger must a neighbor be to become a HO candidate
OsmoBSC(config-net)# handover1 power budget interval ?
  <1-99>   Check for stronger neighbor every N number of SACCH frames
  default  Use default (6), remove explicit setting on this node
OsmoBSC(config-net)# handover1 power budget hysteresis ?
  <0-999>  Neighbor's strength difference in dBm
  default  Use default (3), remove explicit setting on this node
OsmoBSC(config-net)# handover1 maximum ?
  distance  Maximum Timing-Advance value (i.e. MS distance) before triggering HO
OsmoBSC(config-net)# handover1 maximum distance ?
  <0-9999>  Maximum Timing-Advance value (i.e. MS distance) before triggering HO
  default   Use default (9999), remove explicit setting on this node

same again for handover2, plus:

OsmoBSC(config-net)# handover2 assignment ?
  0        Disable in-call assignment
  1        Enable in-call assignment
  default  Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 tdma-measurement ?
  full     Full set of 102/104 TDMA frames
  subset   Sub set of 4 TDMA frames (SACCH)
  default  Use default (subset), remove explicit setting on this node
OsmoBSC(config-net)# handover2 min ?
  rxlev   How weak may RxLev of an MS become before triggering HO
  rxqual  How bad may RxQual of an MS become before triggering HO
OsmoBSC(config-net)# handover2 min rxlev ?
  <-110--50>  minimum RxLev (dBm)
  default     Use default (-100), remove explicit setting on this node
OsmoBSC(config-net)# handover2 min rxqual ?
  <0-7>    minimum RxQual (dBm)
  default  Use default (5), remove explicit setting on this node
OsmoBSC(config-net)# handover2 afs-bias ?
  rxlev   RxLev improvement bias for AFS over other codecs
  rxqual  RxQual improvement bias for AFS over other codecs
OsmoBSC(config-net)# handover2 afs-bias rxlev ?
  <0-20>   Virtual RxLev improvement (dBm)
  default  Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 afs-bias rxqual ?
  <0-7>    Virtual RxQual improvement (dBm)
  default  Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 min-free-slots ?
  tch/f  Minimum free TCH/F timeslots before cell is considered congested
  tch/h  Minimum free TCH/H timeslots before cell is considered congested
OsmoBSC(config-net)# handover2 min-free-slots tch/f ?
  <0-9999>  Number of TCH/F slots
  default   Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 min-free-slots TCH/F ?
% There is no matched command.
OsmoBSC(config-net)# handover2 min-free-slots tch/h ?
  <0-9999>  Number of TCH/H slots
  default   Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 max-handovers ?
  <1-9999>  Number
  default   Use default (9999), remove explicit setting on this node
OsmoBSC(config-net)# handover2 penalty-time ?
  max-distance       Time to suspend handovers after leaving this cell due to exceeding max distance
  failed-ho          Time to suspend handovers after handover failure to this cell
  failed-assignment  Time to suspend handovers after assignment failure in this cell
OsmoBSC(config-net)# handover2 penalty-time max-distance ?
  <0-99999>  Seconds
  default    Use default (300), remove explicit setting on this node
OsmoBSC(config-net)# handover2 penalty-time failed-ho ?
  <0-99999>  Seconds
  default    Use default (60), remove explicit setting on this node
OsmoBSC(config-net)# handover2 penalty-time failed-assignment ?
  <0-99999>  Seconds
  default    Use default (60), remove explicit setting on this node
OsmoBSC(config-net)# handover2 retries ?
  <0-9>    Number of retries
  default  Use default (0), remove explicit setting on this node
OsmoBSC(config-net)# handover2 congestion-check ?
  disabled  Disable congestion checking, do not handover based on cell overload
  <1-999>   Congestion check interval in seconds (default 10)
  now       Manually trigger a congestion check to run right now

handover_decision_2.c narrative

handover_test.c test_case_23:

/* meas-rep <lchan-nr> <rxlev> <rxqual> <nr-of-neighbors> [<cell-idx> <rxlev> [...]] */
"Story: 'A neighbor is your friend'\n",
"create-bts", "3",
"print",
"Andreas is driving along the coast, on a sunny june afternoon.\n"
"Suddenly he is getting a call from his friend and neighbor Axel.\n"
"\n"
"What happens: Two MS are created, #0 for Axel, #1 for Andreas.",
/* Axel */
"create-ms", "2", "TCH/F", "AMR",
/* andreas */
"create-ms", "0", "TCH/F", "AMR",
"meas-rep", "1", "40","0", "1","0","30",
"expect-no-chan",
"print",
"Axel asks Andreas if he would like to join them for a barbecue.\n"
"Axel's house is right in the neighborhood and the weather is fine.\n"
"Andreas agrees, so he drives to a close store to buy some barbecue\n"
"skewers.\n"
"\n"
"What happens: While driving, a different cell (mounted atop the\n"
"store) becomes better.",
/* drive to bts 1 */
"meas-rep", "1", "20","0", "1","0","35",
"expect-chan", "1", "1",
"ack-chan",
"expect-ho", "0", "1",
"ho-complete",
"print",
"While Andreas is walking into the store, Axel asks, if he could also\n"
"bring some beer. Andreas has problems understanding him: \"I have a\n"
"bad reception here. The cell tower is right atop the store, but poor\n"
"coverage inside. Can you repeat please?\"\n"
"\n"
"What happens: Inside the store the close cell is so bad, that\n"
"handover back to the previous cell is required.",
/* bts 1 becomes bad, so bts 0 helps out */
"meas-rep", "1", "5","0", "1","0","20",
"expect-chan", "0", "1",
"ack-chan",
"expect-ho", "1", "1",
"ho-complete",
"print",
"After Andreas bought skewers and beer, he leaves the store.\n"
"\n"
"What happens: Outside the store the close cell is better again, so\n"
"handover back to the that cell is performed.",
/* bts 1 becomes better again */
"meas-rep", "1", "20","0", "1","0","35",
"expect-chan", "1", "1",
"ack-chan",
"expect-ho", "0", "1",
"ho-complete",
"print",
/* bts 2 becomes better */
"Andreas drives down to the lake where Axel's house is.\n"
"\n"
"What happens: There is a small cell at Axel's house, which becomes\n"
"better, because the current cell has no good comverage at the lake.",
"meas-rep", "1", "14","0", "2","0","2","1","63",
"expect-chan", "2", "2",
"ack-chan",
"expect-ho", "1", "1",
"ho-complete",
"print",
"Andreas wonders why he still has good radio coverage: \"Last time it\n"
"was so bad\". Axel says: \"I installed a pico cell in my house,\n"
"now we can use our mobile phones down here at the lake.\"",

handover_decision_2.c narrative

test_case_5:

"TCH/F keeping with FR codec\n\n"
"The MS is using full rate V1 codec, but the better cell is congested\n"
"at TCH/F slots. As the congestion is removed, the handover takes\n"
"place.\n",
"create-bts", "2",
"set-min-free", "1", "TCH/F", "4",
"create-ms", "0", "TCH/F", "FR",
"meas-rep", "0", "20","0", "1","0","30",
"expect-no-chan",
"set-min-free", "1", "TCH/F", "3",
"meas-rep", "0", "20","0", "1","0","30",
"expect-chan", "1", "1",
"ack-chan",
"expect-ho", "0", "1",
"ho-complete",

handover_decision_2.c narrative

test_case_7:

"TCH/F to TCH/H changing with AMR codec\n\n"
"The MS is using AMR V3 codec, the better cell is congested at TCH/F\n"
"slots. The handover is performed to non-congested TCH/H slots.\n",
"create-bts", "2",
"set-min-free", "1", "TCH/F", "4",
"create-ms", "0", "TCH/F", "AMR",
"meas-rep", "0", "20","0", "1","0","30",
"expect-chan", "1", "5",
"ack-chan",
"expect-ho", "0", "1",
"ho-complete",

todo

Currently also implementing:

Measurement Report?