<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>