<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25611">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">MS Power Control Loop: Allow Turn off/on C/I independent from value setting<br><br>Improve the current VTY support to allow enabling/disabling C/I logic<br>independent from value setting. This way C/I support can be quickly<br>disabled & enabled.<br><br>Reminder: changing power parameters still require VTY Command "bts NR<br>resend-power-control-defaults" to be excuted prior to new parameters<br>being applied on the BTS.<br><br>Related: SYS#4917<br>Change-Id: Id1224c2d9a52db2ed805c49e048d3086ed0167f5<br>---<br>M doc/manuals/chapters/power_control.adoc<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bts_osmobts.c<br>M src/osmo-bsc/bts_vty.c<br>M src/osmo-bsc/gsm_data.c<br>M tests/power_ctrl.vty<br>6 files changed, 126 insertions(+), 65 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/11/25611/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/chapters/power_control.adoc b/doc/manuals/chapters/power_control.adoc</span><br><span>index bc112aa..51a38cb 100644</span><br><span>--- a/doc/manuals/chapters/power_control.adoc</span><br><span>+++ b/doc/manuals/chapters/power_control.adoc</span><br><span>@@ -33,6 +33,7 @@</span><br><span> other hand, OsmoBTS may support some extra parameters coming in Osmocom specific</span><br><span> IEs not supported by nanoBTS, such as those configuring C/I measurement thresholds.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+[[apply_pwr_ctrl]]</span><br><span> ==== When the parameters come into effect?</span><br><span> </span><br><span> It depends on how the power control parameters are signaled to the BTS. If a given</span><br><span>@@ -337,21 +338,24 @@</span><br><span> bts 0</span><br><span> ms-power-control</span><br><span> mode dyn-bts <1></span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh amr-fr lower 7 upper 11 <2></span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp amr-fr lower 2 10 <3> upper 3 4 <4></span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr enable <2></span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr lower 7 upper 11 <3></span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp amr-fr lower 2 10 <4> upper 3 4 <5></span><br><span> ----</span><br><span> <1> MS power control is to be performed by the BTS autonomously.</span><br><span style="color: hsl(0, 100%, 40%);">-<2> L_CI_AMR_FR_XX_P=7, U_CI_AMR_FR_XX_P=11.</span><br><span style="color: hsl(0, 100%, 40%);">-<3> P0=2 out of N1=10 averages < L_CI_AMR_FR_XX_P => increase power.</span><br><span style="color: hsl(0, 100%, 40%);">-<4> P1=3 out of N2=4 averages > U_CI_AMR_FR_XX_P => decrease power.</span><br><span style="color: hsl(120, 100%, 40%);">+<2> MS power control loop should take C/I into account.</span><br><span style="color: hsl(120, 100%, 40%);">+<3> L_CI_AMR_FR_XX_P=7, U_CI_AMR_FR_XX_P=11.</span><br><span style="color: hsl(120, 100%, 40%);">+<4> P0=2 out of N1=10 averages < L_CI_AMR_FR_XX_P => increase power.</span><br><span style="color: hsl(120, 100%, 40%);">+<5> P1=3 out of N2=4 averages > U_CI_AMR_FR_XX_P => decrease power.</span><br><span> </span><br><span> NOTE: The BSC can instruct a BTS to disable C/I related logic in its</span><br><span> autonomous MS Power Control Loop for a given channel type (hence not taking C/I</span><br><span> measurements into account) by means of setting both related LOWER_CMP_N and</span><br><span> UPPER_CMP_N parameters to zero (see _ci-thresh-comp_ VTY command). For the sake</span><br><span> of easing configuration, a placeholder VTY command to disable C/I for all</span><br><span style="color: hsl(0, 100%, 40%);">-channel types is available under VTY node _ms-power-control_ as *_ci-thresh-comp</span><br><span style="color: hsl(0, 100%, 40%);">-disable all_*.</span><br><span style="color: hsl(120, 100%, 40%);">+channel types is available under VTY node _ms-power-control_ as *_ci-thresh</span><br><span style="color: hsl(120, 100%, 40%);">+all disable_*. Afterwards, the new configuration must be deployed to the target</span><br><span style="color: hsl(120, 100%, 40%);">+BTS (see <<apply_pwr_ctrl>>).</span><br><span> </span><br><span> ==== Measurement averaging process</span><br><span> </span><br><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index b166146..1fd7015 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -1289,6 +1289,9 @@</span><br><span> </span><br><span> /* MS/BS Power related measurement parameters */</span><br><span> struct gsm_power_ctrl_meas_params {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Are this measurement paremeters to be taken into account by loop? */</span><br><span style="color: hsl(120, 100%, 40%);">+ bool enabled;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Thresholds (see 3GPP TS 45.008, section A.3.2.1) */</span><br><span> uint8_t lower_thresh; /* lower (decreasing) direction */</span><br><span> uint8_t upper_thresh; /* upper (increasing) direction */</span><br><span>diff --git a/src/osmo-bsc/bts_osmobts.c b/src/osmo-bsc/bts_osmobts.c</span><br><span>index 5007d2b..5c535be 100644</span><br><span>--- a/src/osmo-bsc/bts_osmobts.c</span><br><span>+++ b/src/osmo-bsc/bts_osmobts.c</span><br><span>@@ -112,8 +112,15 @@</span><br><span> ie_len = msgb_tl_put(msg, RSL_IPAC_EIE_OSMO_MS_PWR_CTL);</span><br><span> osmo_thresh = (struct osmo_preproc_pc_thresh *) msgb_put(msg, sizeof(*osmo_thresh));</span><br><span> #define ENC_THRESH_CI(TYPE) \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh->l_##TYPE = cp->TYPE##_meas.lower_thresh; \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh->u_##TYPE = cp->TYPE##_meas.upper_thresh</span><br><span style="color: hsl(120, 100%, 40%);">+ do { \</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cp->TYPE##_meas.enabled) { \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh->l_##TYPE = cp->TYPE##_meas.lower_thresh; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh->u_##TYPE = cp->TYPE##_meas.upper_thresh; \</span><br><span style="color: hsl(120, 100%, 40%);">+ } else { \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh->l_##TYPE = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh->u_##TYPE = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ } \</span><br><span style="color: hsl(120, 100%, 40%);">+ } while (0)</span><br><span> ENC_THRESH_CI(ci_fr);</span><br><span> ENC_THRESH_CI(ci_hr);</span><br><span> ENC_THRESH_CI(ci_amr_fr);</span><br><span>@@ -128,10 +135,19 @@</span><br><span> ie_len = msgb_tl_put(msg, RSL_IPAC_EIE_OSMO_PC_THRESH_COMP);</span><br><span> osmo_thresh_comp = (struct osmo_preproc_pc_comp *) msgb_put(msg, sizeof(*osmo_thresh_comp));</span><br><span> #define ENC_THRESH_CI(TYPE) \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh_comp->TYPE.lower_p = cp->TYPE##_meas.lower_cmp_p & 0x1f; \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh_comp->TYPE.lower_n = cp->TYPE##_meas.lower_cmp_n & 0x1f; \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh_comp->TYPE.upper_p = cp->TYPE##_meas.upper_cmp_p & 0x1f; \</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_thresh_comp->TYPE.upper_n = cp->TYPE##_meas.upper_cmp_n & 0x1f</span><br><span style="color: hsl(120, 100%, 40%);">+ do { \</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cp->TYPE##_meas.enabled) { \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.lower_p = cp->TYPE##_meas.lower_cmp_p & 0x1f; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.lower_n = cp->TYPE##_meas.lower_cmp_n & 0x1f; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.upper_p = cp->TYPE##_meas.upper_cmp_p & 0x1f; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.upper_n = cp->TYPE##_meas.upper_cmp_n & 0x1f; \</span><br><span style="color: hsl(120, 100%, 40%);">+ } else { \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.lower_p = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.lower_n = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.upper_p = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_thresh_comp->TYPE.upper_n = 0; \</span><br><span style="color: hsl(120, 100%, 40%);">+ } \</span><br><span style="color: hsl(120, 100%, 40%);">+ } while (0)</span><br><span> ENC_THRESH_CI(ci_fr);</span><br><span> ENC_THRESH_CI(ci_hr);</span><br><span> ENC_THRESH_CI(ci_amr_fr);</span><br><span>diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c</span><br><span>index 7a502d7..fb11520 100644</span><br><span>--- a/src/osmo-bsc/bts_vty.c</span><br><span>+++ b/src/osmo-bsc/bts_vty.c</span><br><span>@@ -3093,6 +3093,7 @@</span><br><span> }</span><br><span> </span><br><span> #define VTY_CMD_CI_TYPE "(fr-efr|hr|amr-fr|amr-hr|sdcch|gprs)"</span><br><span style="color: hsl(120, 100%, 40%);">+#define VTY_CMD_CI_OR_ALL_TYPE "(fr-efr|hr|amr-fr|amr-hr|sdcch|gprs|all)"</span><br><span> #define VTY_DESC_CI_TYPE \</span><br><span> "Channel Type FR/EFR\n" \</span><br><span> "Channel Type HR\n" \</span><br><span>@@ -3100,6 +3101,8 @@</span><br><span> "Channel Type AMR HR\n" \</span><br><span> "Channel Type SDCCH\n" \</span><br><span> "Channel Type (E)GPRS\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define VTY_DESC_CI_OR_ALL_TYPE VTY_DESC_CI_TYPE "All Channel Types\n"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct gsm_power_ctrl_meas_params *ci_thresh_by_conn_type(struct gsm_power_ctrl_params *params, const char *type)</span><br><span> {</span><br><span> if (!strcmp(type, "fr-efr"))</span><br><span>@@ -3155,6 +3158,35 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_power_ctrl_ci_thresh_disable,</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg_power_ctrl_ci_thresh_disable_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ X(BSC_VTY_ATTR_VENDOR_SPECIFIC) |</span><br><span style="color: hsl(120, 100%, 40%);">+ X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(120, 100%, 40%);">+ "ci-thresh " VTY_CMD_CI_OR_ALL_TYPE " (enable|disable)",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Set target C/I thresholds (for dynamic mode), only available in ms-power-control\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ VTY_DESC_CI_OR_ALL_TYPE</span><br><span style="color: hsl(120, 100%, 40%);">+ "Enable C/I comparison in control loop\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Disable C/I comparison in control loop\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_power_ctrl_params *params = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bool enable = strcmp(argv[1], "enable") == 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strcmp(argv[0], "all") == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_fr_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_hr_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_amr_fr_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_amr_hr_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_sdcch_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ params->ci_gprs_meas.enabled = enable;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_power_ctrl_meas_params *meas_params = ci_thresh_by_conn_type(params, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_params->enabled = enable;</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%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define POWER_CONTROL_MEAS_THRESH_COMP_CMD(meas) \</span><br><span> meas " lower <0-31> <0-31> upper <0-31> <0-31>"</span><br><span> #define POWER_CONTROL_MEAS_THRESH_COMP_DESC(meas, opt_param, lp, ln, up, un) \</span><br><span>@@ -3272,35 +3304,6 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN_USRATTR(cfg_power_ctrl_ci_thresh_comp_disable,</span><br><span style="color: hsl(0, 100%, 40%);">- cfg_power_ctrl_ci_thresh_comp_disable_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- X(BSC_VTY_ATTR_VENDOR_SPECIFIC) |</span><br><span style="color: hsl(0, 100%, 40%);">- X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span style="color: hsl(0, 100%, 40%);">- "ci-thresh-comp disable all",</span><br><span style="color: hsl(0, 100%, 40%);">- "Set Carrier-to_interference (C/I) threshold comparators (for dynamic mode)\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Disable C/I comparison in control loop (sets LOWER_CMP_N and UPPER_CMP_N to zero)\n"</span><br><span style="color: hsl(0, 100%, 40%);">- "Disable C/I comparison for all channel types\n")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_power_ctrl_params *params = vty->index;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DISABLE_MEAS_PC(PARAMS, TYPE) \</span><br><span style="color: hsl(0, 100%, 40%);">- (PARAMS)->TYPE##_meas.lower_cmp_p = 0; \</span><br><span style="color: hsl(0, 100%, 40%);">- (PARAMS)->TYPE##_meas.lower_cmp_n = 0; \</span><br><span style="color: hsl(0, 100%, 40%);">- (PARAMS)->TYPE##_meas.upper_cmp_p = 0; \</span><br><span style="color: hsl(0, 100%, 40%);">- (PARAMS)->TYPE##_meas.upper_cmp_n = 0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_fr);</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_hr);</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_amr_fr);</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_amr_hr);</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_sdcch);</span><br><span style="color: hsl(0, 100%, 40%);">- DISABLE_MEAS_PC(params, ci_gprs);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#undef DISABLE_MEAS_PC</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define POWER_CONTROL_MEAS_AVG_CMD \</span><br><span> "(rxlev-avg|rxqual-avg)"</span><br><span> #define POWER_CONTROL_MEAS_AVG_DESC \</span><br><span>@@ -3898,6 +3901,12 @@</span><br><span> const struct gsm_power_ctrl_meas_params *mp,</span><br><span> const char *param, const char *param2)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strcmp(param, "ci") == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg_out("%s-thresh%s %s%s",</span><br><span style="color: hsl(120, 100%, 40%);">+ param, param2, mp->enabled ? "enable" : "disable",</span><br><span style="color: hsl(120, 100%, 40%);">+ VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> cfg_out("%s-thresh%s lower %u upper %u%s",</span><br><span> param, param2, mp->lower_thresh, mp->upper_thresh,</span><br><span> VTY_NEWLINE);</span><br><span>@@ -3932,6 +3941,7 @@</span><br><span> }</span><br><span> </span><br><span> static void config_write_power_ctrl(struct vty *vty, unsigned int indent,</span><br><span style="color: hsl(120, 100%, 40%);">+ const struct gsm_bts *bts,</span><br><span> const struct gsm_power_ctrl_params *cp)</span><br><span> {</span><br><span> const char *node_name;</span><br><span>@@ -3965,7 +3975,7 @@</span><br><span> /* Measurement processing / averaging parameters */</span><br><span> config_write_power_ctrl_meas(vty, indent + 1, &cp->rxlev_meas, "rxlev", "");</span><br><span> config_write_power_ctrl_meas(vty, indent + 1, &cp->rxqual_meas, "rxqual", "");</span><br><span style="color: hsl(0, 100%, 40%);">- if (cp->dir == GSM_PWR_CTRL_DIR_UL) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cp->dir == GSM_PWR_CTRL_DIR_UL && is_osmobts(bts)) {</span><br><span> config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_fr_meas, "ci", " fr-efr");</span><br><span> config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_hr_meas, "ci", " hr");</span><br><span> config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_amr_fr_meas, "ci", " amr-fr");</span><br><span>@@ -4285,8 +4295,8 @@</span><br><span> }</span><br><span> </span><br><span> /* BS/MS Power Control parameters */</span><br><span style="color: hsl(0, 100%, 40%);">- config_write_power_ctrl(vty, 2, &bts->bs_power_ctrl);</span><br><span style="color: hsl(0, 100%, 40%);">- config_write_power_ctrl(vty, 2, &bts->ms_power_ctrl);</span><br><span style="color: hsl(120, 100%, 40%);">+ config_write_power_ctrl(vty, 2, bts, &bts->bs_power_ctrl);</span><br><span style="color: hsl(120, 100%, 40%);">+ config_write_power_ctrl(vty, 2, bts, &bts->ms_power_ctrl);</span><br><span> </span><br><span> config_write_bts_model(vty, bts);</span><br><span> }</span><br><span>@@ -4470,11 +4480,11 @@</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_step_size_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_rxlev_thresh_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_rxqual_thresh_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(POWER_CTRL_NODE, &cfg_power_ctrl_ci_thresh_disable_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_ci_thresh_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_rxlev_thresh_comp_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_rxqual_thresh_comp_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_ci_thresh_comp_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- install_element(POWER_CTRL_NODE, &cfg_power_ctrl_ci_thresh_comp_disable_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_no_avg_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_avg_params_cmd);</span><br><span> install_element(POWER_CTRL_NODE, &cfg_power_ctrl_avg_algo_cmd);</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index a6c54d8..c8108e8 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -1146,6 +1146,7 @@</span><br><span> </span><br><span> /* RxLev measurement parameters */</span><br><span> .rxlev_meas = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> /* Thresholds for RxLev (see 3GPP TS 45.008, A.3.2.1) */</span><br><span> .lower_thresh = 32, /* L_RXLEV_XX_P (-78 dBm) */</span><br><span> .upper_thresh = 38, /* U_RXLEV_XX_P (-72 dBm) */</span><br><span>@@ -1170,6 +1171,7 @@</span><br><span> </span><br><span> /* RxQual measurement parameters */</span><br><span> .rxqual_meas = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> /* Thresholds for RxQual (see 3GPP TS 45.008, A.3.2.1) */</span><br><span> .lower_thresh = 3, /* L_RXQUAL_XX_P (0.8% <= BER < 1.6%) */</span><br><span> .upper_thresh = 0, /* U_RXQUAL_XX_P (BER < 0.2%) */</span><br><span>@@ -1198,6 +1200,7 @@</span><br><span> * above the target.</span><br><span> */</span><br><span> .ci_fr_meas = { /* FR: Target C/I = 15 dB, Soft blocking threshold = 10 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 13,</span><br><span> .upper_thresh = 17,</span><br><span> </span><br><span>@@ -1219,6 +1222,7 @@</span><br><span> .h_reqt = 6, /* TODO: investigate a reasonable default value */</span><br><span> },</span><br><span> .ci_hr_meas = { /* HR: Target C/I = 18 dB, Soft blocking threshold = 13 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 16,</span><br><span> .upper_thresh = 21,</span><br><span> </span><br><span>@@ -1240,6 +1244,7 @@</span><br><span> .h_reqt = 6, /* TODO: investigate a reasonable default value */</span><br><span> },</span><br><span> .ci_amr_fr_meas = { /* AMR-FR: Target C/I = 9 dB, Soft blocking threshold = 4 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 7,</span><br><span> .upper_thresh = 11,</span><br><span> </span><br><span>@@ -1261,6 +1266,7 @@</span><br><span> .h_reqt = 6, /* TODO: investigate a reasonable default value */</span><br><span> },</span><br><span> .ci_amr_hr_meas = { /* AMR-HR: Target C/I = 15 dB, Soft blocking threshold = 10 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 13,</span><br><span> .upper_thresh = 17,</span><br><span> </span><br><span>@@ -1282,6 +1288,7 @@</span><br><span> .h_reqt = 6, /* TODO: investigate a reasonable default value */</span><br><span> },</span><br><span> .ci_sdcch_meas = { /* SDCCH: Target C/I = 14 dB, Soft blocking threshold = 9 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 12,</span><br><span> .upper_thresh = 16,</span><br><span> </span><br><span>@@ -1303,6 +1310,7 @@</span><br><span> .h_reqt = 6, /* TODO: investigate a reasonable default value */</span><br><span> },</span><br><span> .ci_gprs_meas = { /* GPRS: Target C/I = 20 dB, Soft blocking threshold = 15 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ .enabled = true,</span><br><span> .lower_thresh = 18,</span><br><span> .upper_thresh = 24,</span><br><span> </span><br><span>diff --git a/tests/power_ctrl.vty b/tests/power_ctrl.vty</span><br><span>index b14a905..491adca 100644</span><br><span>--- a/tests/power_ctrl.vty</span><br><span>+++ b/tests/power_ctrl.vty</span><br><span>@@ -34,11 +34,11 @@</span><br><span> . lv step-size inc <2-6> red <2-4></span><br><span> . lv rxlev-thresh lower <0-63> upper <0-63></span><br><span> . lv rxqual-thresh lower <0-7> upper <0-7></span><br><span style="color: hsl(120, 100%, 40%);">+ . lv ci-thresh (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs|all) (enable|disable)</span><br><span> . lv ci-thresh (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs) lower <0-30> upper <0-30></span><br><span> . lv rxlev-thresh-comp lower <0-31> <0-31> upper <0-31> <0-31></span><br><span> . lv rxqual-thresh-comp lower <0-31> <0-31> upper <0-31> <0-31></span><br><span> . lv ci-thresh-comp (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs) lower <0-31> <0-31> upper <0-31> <0-31></span><br><span style="color: hsl(0, 100%, 40%);">- . lv ci-thresh-comp disable all</span><br><span> . lv no (rxlev-avg|rxqual-avg)</span><br><span> . lv (rxlev-avg|rxqual-avg) params hreqave <1-31> hreqt <1-31></span><br><span> . lv (rxlev-avg|rxqual-avg) algo (unweighted|weighted|mod-median)</span><br><span>@@ -115,11 +115,11 @@</span><br><span> . lv step-size inc <2-6> red <2-4></span><br><span> . lv rxlev-thresh lower <0-63> upper <0-63></span><br><span> . lv rxqual-thresh lower <0-7> upper <0-7></span><br><span style="color: hsl(120, 100%, 40%);">+ . lv ci-thresh (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs|all) (enable|disable)</span><br><span> . lv ci-thresh (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs) lower <0-30> upper <0-30></span><br><span> . lv rxlev-thresh-comp lower <0-31> <0-31> upper <0-31> <0-31></span><br><span> . lv rxqual-thresh-comp lower <0-31> <0-31> upper <0-31> <0-31></span><br><span> . lv ci-thresh-comp (fr-efr|hr|amr-fr|amr-hr|sdcch|gprs) lower <0-31> <0-31> upper <0-31> <0-31></span><br><span style="color: hsl(0, 100%, 40%);">- . lv ci-thresh-comp disable all</span><br><span> . lv no (rxlev-avg|rxqual-avg)</span><br><span> . lv (rxlev-avg|rxqual-avg) params hreqave <1-31> hreqt <1-31></span><br><span> . lv (rxlev-avg|rxqual-avg) algo (unweighted|weighted|mod-median)</span><br><span>@@ -143,16 +143,22 @@</span><br><span> rxlev-thresh-comp lower 10 12 upper 19 20</span><br><span> rxqual-thresh lower 3 upper 0</span><br><span> rxqual-thresh-comp lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh fr-efr enable</span><br><span> ci-thresh fr-efr lower 13 upper 17</span><br><span> ci-thresh-comp fr-efr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh hr enable</span><br><span> ci-thresh hr lower 16 upper 21</span><br><span> ci-thresh-comp hr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr enable</span><br><span> ci-thresh amr-fr lower 7 upper 11</span><br><span> ci-thresh-comp amr-fr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-hr enable</span><br><span> ci-thresh amr-hr lower 13 upper 17</span><br><span> ci-thresh-comp amr-hr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh sdcch enable</span><br><span> ci-thresh sdcch lower 12 upper 16</span><br><span> ci-thresh-comp sdcch lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh gprs enable</span><br><span> ci-thresh gprs lower 18 upper 24</span><br><span> ci-thresh-comp gprs lower 5 7 upper 15 18</span><br><span> ...</span><br><span>@@ -304,33 +310,47 @@</span><br><span> ...</span><br><span> ms-power-control</span><br><span> ...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh fr-efr enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh fr-efr lower 13 upper 17</span><br><span> ci-thresh-comp fr-efr lower 5 7 upper 15 18</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh hr enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh hr lower 16 upper 21</span><br><span> ci-thresh-comp hr lower 5 7 upper 15 18</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr lower 7 upper 11</span><br><span> ci-thresh-comp amr-fr lower 5 7 upper 15 18</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-hr enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-hr lower 13 upper 17</span><br><span> ci-thresh-comp amr-hr lower 5 7 upper 15 18</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh sdcch enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh sdcch lower 12 upper 16</span><br><span> ci-thresh-comp sdcch lower 5 7 upper 15 18</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh gprs enable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh gprs lower 18 upper 24</span><br><span> ci-thresh-comp gprs lower 5 7 upper 15 18</span><br><span> ...</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-OsmoBSC(config-ms-power-ctrl)# ci-thresh-comp disable all</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoBSC(config-ms-power-ctrl)# ci-thresh all disable</span><br><span> OsmoBSC(config-ms-power-ctrl)# show running-config</span><br><span> ...</span><br><span> ms-power-control</span><br><span> ...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp fr-efr lower 0 0 upper 0 0</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp hr lower 0 0 upper 0 0</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp amr-fr lower 0 0 upper 0 0</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp amr-hr lower 0 0 upper 0 0</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp sdcch lower 0 0 upper 0 0</span><br><span style="color: hsl(0, 100%, 40%);">-...</span><br><span style="color: hsl(0, 100%, 40%);">- ci-thresh-comp gprs lower 0 0 upper 0 0</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh fr-efr disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh fr-efr lower 13 upper 17</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp fr-efr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh hr disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh hr lower 16 upper 21</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp hr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-fr lower 7 upper 11</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp amr-fr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-hr disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh amr-hr lower 13 upper 17</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp amr-hr lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh sdcch disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh sdcch lower 12 upper 16</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp sdcch lower 5 7 upper 15 18</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh gprs disable</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh gprs lower 18 upper 24</span><br><span style="color: hsl(120, 100%, 40%);">+ ci-thresh-comp gprs lower 5 7 upper 15 18</span><br><span> ...</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25611">change 25611</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/+/25611"/><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: Id1224c2d9a52db2ed805c49e048d3086ed0167f5 </div>
<div style="display:none"> Gerrit-Change-Number: 25611 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>