<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/22527">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hodec2: fix intra-cell congestion balancing with source lchan on dyn TS<br><br>Related: SYS#5301<br>Change-Id: I332477cbddf32cf6f057007b45cda8477227f0b1<br>---<br>M src/osmo-bsc/handover_decision_2.c<br>M tests/handover/test_dyn_ts_amr_tch_f_to_h_congestion_assignment_2.ho_vty<br>M tests/handover/test_dyn_ts_amr_tch_h_to_f_congestion_assignment_2.ho_vty<br>3 files changed, 20 insertions(+), 15 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/27/22527/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c</span><br><span>index 0bfae9b..530b42d 100644</span><br><span>--- a/src/osmo-bsc/handover_decision_2.c</span><br><span>+++ b/src/osmo-bsc/handover_decision_2.c</span><br><span>@@ -682,7 +682,11 @@</span><br><span>       current_overbooked = load_above_congestion(c->current.free_tch, c->current.min_free_tch);</span><br><span>      if (requirement & REQUIREMENT_A_TCHF) {</span><br><span>          bool ok;</span><br><span style="color: hsl(0, 100%, 40%);">-                int32_t target_overbooked = load_above_congestion(c->target.free_tchf - 1, c->target.min_free_tchf);</span><br><span style="color: hsl(120, 100%, 40%);">+            int32_t target_overbooked;</span><br><span style="color: hsl(120, 100%, 40%);">+            int target_free_tchf_after_ho = c->target.free_tchf - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (c->current.bts == c->target.bts)</span><br><span style="color: hsl(120, 100%, 40%);">+                    target_free_tchf_after_ho += c->current.lchan_frees_tchf;</span><br><span style="color: hsl(120, 100%, 40%);">+          target_overbooked = load_above_congestion(target_free_tchf_after_ho, c->target.min_free_tchf);</span><br><span>            LOGPHOLCHANTOBTS(c->current.lchan, c->target.bts, LOGL_DEBUG,</span><br><span>                           "current overbooked = %s%%, TCH/F target overbooked after HO = %s%%\n",</span><br><span>                            osmo_int_to_float_str_c(OTC_SELECT, current_overbooked, LOAD_PRECISION - 2),</span><br><span>@@ -718,7 +722,11 @@</span><br><span>         }</span><br><span>    if (requirement & REQUIREMENT_A_TCHH) {</span><br><span>          bool ok;</span><br><span style="color: hsl(0, 100%, 40%);">-                int32_t target_overbooked = load_above_congestion(c->target.free_tchh - 1, c->target.min_free_tchh);</span><br><span style="color: hsl(120, 100%, 40%);">+            int32_t target_overbooked;</span><br><span style="color: hsl(120, 100%, 40%);">+            int target_free_tchh_after_ho = c->target.free_tchh - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (c->current.bts == c->target.bts)</span><br><span style="color: hsl(120, 100%, 40%);">+                    target_free_tchh_after_ho += c->current.lchan_frees_tchh;</span><br><span style="color: hsl(120, 100%, 40%);">+          target_overbooked = load_above_congestion(target_free_tchh_after_ho, c->target.min_free_tchh);</span><br><span>            LOGPHOLCHANTOBTS(c->current.lchan, c->target.bts, LOGL_DEBUG,</span><br><span>                           "current overbooked = %s%%, TCH/H target overbooked after HO = %s%%\n",</span><br><span>                            osmo_int_to_float_str_c(OTC_SELECT, current_overbooked, LOAD_PRECISION - 2),</span><br><span>diff --git a/tests/handover/test_dyn_ts_amr_tch_f_to_h_congestion_assignment_2.ho_vty b/tests/handover/test_dyn_ts_amr_tch_f_to_h_congestion_assignment_2.ho_vty</span><br><span>index 6194596..a798457 100644</span><br><span>--- a/tests/handover/test_dyn_ts_amr_tch_f_to_h_congestion_assignment_2.ho_vty</span><br><span>+++ b/tests/handover/test_dyn_ts_amr_tch_f_to_h_congestion_assignment_2.ho_vty</span><br><span>@@ -14,16 +14,15 @@</span><br><span> # (there must be at least one measurement report on each lchan for congestion check to work)</span><br><span> meas-rep lchan * * * * rxlev 40 rxqual 0 ta 0 neighbors 30</span><br><span> congestion-check</span><br><span style="color: hsl(0, 100%, 40%);">-# FAIL: after the handover from the dyn TS to TCH/H, the dyn TS has freed two TCH/H, while the static TCH/H has reduced</span><br><span style="color: hsl(0, 100%, 40%);">-# the TCH/H count by one. So the resulting free slots are 3 TCH/H, which means no congestion. A handover should occur.</span><br><span style="color: hsl(0, 100%, 40%);">-expect-no-chan</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ho from lchan 0 0 1 0 to lchan 0 0 4 0</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * pdch - - TCH/H- * * *</span><br><span> </span><br><span> # Again with one more TCH/H occupied, there will still be two free TCH/H after HO on the dyn TS</span><br><span> set-ts-use trx 0 0 states * TCH/F - - TCH/H- * * *</span><br><span> meas-rep lchan * * * * rxlev 40 rxqual 0 ta 0 neighbors 30</span><br><span> congestion-check</span><br><span style="color: hsl(0, 100%, 40%);">-# FAIL: resulting free slots are 2 TCH/H, which means no congestion. A handover should occur.</span><br><span style="color: hsl(0, 100%, 40%);">-expect-no-chan</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ho from lchan 0 0 1 0 to lchan 0 0 4 1</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * pdch - - TCH/HH * * *</span><br><span> </span><br><span> # Again, with the target being a dyn TS</span><br><span> create-bts trx-count 1 timeslots c+s4 dyn TCH/F TCH/F dyn PDCH PDCH PDCH</span><br><span>@@ -37,13 +36,12 @@</span><br><span> set-ts-use trx 1 0 states * TCH/F TCH/F - pdch * * *</span><br><span> meas-rep lchan 1 * * * rxlev 40 rxqual 0 ta 0 neighbors 30</span><br><span> congestion-check</span><br><span style="color: hsl(0, 100%, 40%);">-# FAIL: after the handover from the dyn TS to TCH/H, the dyn TS has freed two TCH/H, while the static TCH/H has reduced</span><br><span style="color: hsl(0, 100%, 40%);">-# the TCH/H count by one. So the resulting free slots are 3 TCH/H, which means no congestion. A handover should occur.</span><br><span style="color: hsl(0, 100%, 40%);">-expect-no-chan</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ho from lchan 1 0 1 0 to lchan 1 0 4 0</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * pdch TCH/F - TCH/H- * * *</span><br><span> </span><br><span> # Again with one more TCH/H occupied, there will still be two free TCH/H after HO on the dyn TS</span><br><span> set-ts-use trx 1 0 states * TCH/F TCH/F - TCH/H- * * *</span><br><span> meas-rep lchan 1 * * * rxlev 40 rxqual 0 ta 0 neighbors 30</span><br><span> congestion-check</span><br><span style="color: hsl(0, 100%, 40%);">-# FAIL: resulting free slots are 2 TCH/H, which means no congestion. A handover should occur.</span><br><span style="color: hsl(0, 100%, 40%);">-expect-no-chan</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ho from lchan 1 0 1 0 to lchan 1 0 4 1</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * pdch TCH/F - TCH/HH * * *</span><br><span>diff --git a/tests/handover/test_dyn_ts_amr_tch_h_to_f_congestion_assignment_2.ho_vty b/tests/handover/test_dyn_ts_amr_tch_h_to_f_congestion_assignment_2.ho_vty</span><br><span>index 36a9817..de9595b 100644</span><br><span>--- a/tests/handover/test_dyn_ts_amr_tch_h_to_f_congestion_assignment_2.ho_vty</span><br><span>+++ b/tests/handover/test_dyn_ts_amr_tch_h_to_f_congestion_assignment_2.ho_vty</span><br><span>@@ -21,8 +21,7 @@</span><br><span> set-ts-use trx 0 0 states * TCH/H- - - TCH/F * * *</span><br><span> meas-rep lchan * * * * rxlev 40 rxqual 0 ta 0 neighbors 30</span><br><span> congestion-check</span><br><span style="color: hsl(0, 100%, 40%);">-# FAIL: after the handover from the dyn TS to TCH/F, the dyn TS has freed a TCH/F, while the static TCH/F has reduced</span><br><span style="color: hsl(0, 100%, 40%);">-# the TCH/F count by one. So the resulting free slots are 2 TCH/F, which means no congestion. A handover should occur.</span><br><span style="color: hsl(0, 100%, 40%);">-expect-no-chan</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ho from lchan 0 0 1 0 to lchan 0 0 2 0</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * pdch TCH/F - TCH/F * * *</span><br><span> </span><br><span> # (TCH/H -> TCH/F onto a dyn TS will always make TCH/H congestion worse, so there is no useful test case left here)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/22527">change 22527</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/+/22527"/><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: I332477cbddf32cf6f057007b45cda8477227f0b1 </div>
<div style="display:none"> Gerrit-Change-Number: 22527 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>