<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/24776">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo-bts-trx: implement BCCH carrier power reduction mode<br><br>The BCCH carrier (sometimes called C0) of a BTS shall maintain<br>discontinuous Downlink transmission at full power in order to<br>stay 'visible' to the mobile stations.  Because of that, early<br>versions of 3GPP TS 45.008 prohibited BS power reduction on C0.<br><br>However, in the recent 3GPP TS 45.008 there is a feature called<br>'BCCH carrier power reduction operation'.  This is a special<br>mode of operation, where the variation of RF level for some<br>timeslots is relaxed for the purpose of energy saving.<br><br>In BCCH carrier power reduction operation, for timeslots on the<br>C0 carrier, except timeslots carrying BCCH/CCCH, the output power<br>may be lower than the output power used for timeslots carrying<br>BCCH/CCCH.  In this case the maximum allowed difference in output<br>power actually transmitted by the BTS is 6 dB.<br><br>The power reduction operation can be controlled by the BSC by<br>sending BS POWER CONTROL on the A-bis/RSL with the Channel Number<br>IE set to 0x80 (RSL_CHAN_BCCH).  This makes osmo-bts reduce the<br>transmission power on inactive timeslots of the BCCH carrier.<br><br>This is a non-standard, Osmocom specific extension, so indicate<br>support of this feature to the BSC in the feature vector.  Also<br>add a VTY command to allow enabling/disabling the power reduction<br>locally.  Add some signalling notes to the A-bis/RSL manual.<br><br>For more details, see 3GPP TS 45.008, section 7.1.<br><br>Change-Id: I3dcee6e910ccc61c5c63c728db9ea04327e2fc98<br>Depends: I69283b3f35988fc7a1a1dcf1a1ad3b67f08ec716<br>Related: SYS#4919<br>---<br>M doc/manuals/abis/rsl.adoc<br>M include/osmo-bts/bts.h<br>M include/osmo-bts/gsm_data.h<br>M src/common/bts.c<br>M src/common/rsl.c<br>M src/common/scheduler.c<br>M src/common/vty.c<br>M src/osmo-bts-trx/main.c<br>M src/osmo-bts-trx/scheduler_trx.c<br>9 files changed, 148 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/abis/rsl.adoc b/doc/manuals/abis/rsl.adoc</span><br><span>index 1205a44..b4c2609 100644</span><br><span>--- a/doc/manuals/abis/rsl.adoc</span><br><span>+++ b/doc/manuals/abis/rsl.adoc</span><br><span>@@ -476,6 +476,26 @@</span><br><span> See <<OSMO_ETWS_CMD>> for the Osmocom implementation.</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+=== BCCH carrier power reduction operation</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+According to 3GPP TS 45.008, section 7.1, the BCCH carrier (sometimes called C0) of</span><br><span style="color: hsl(120, 100%, 40%);">+a BTS shall maintain discontinuous Downlink transmission at full power in order to</span><br><span style="color: hsl(120, 100%, 40%);">+stay "visible" to the mobile stations.  Because of that, early versions of this 3GPP</span><br><span style="color: hsl(120, 100%, 40%);">+document prohibited BS power reduction on C0.  However, a new feature was introduced</span><br><span style="color: hsl(120, 100%, 40%);">+version 13.0.0 (2015-11) - "BCCH carrier power reduction operation".</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This is a special mode of operation, in which the variation of RF power level for</span><br><span style="color: hsl(120, 100%, 40%);">+some timeslots is relaxed for the purpose of energy saving.  In other words, the</span><br><span style="color: hsl(120, 100%, 40%);">+output power on some timeslots, except the timeslot(s) carrying BCCH/CCCH, can be</span><br><span style="color: hsl(120, 100%, 40%);">+lower than the full power.  In this case the maximum allowed difference is 6 dB.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Unfortunately, 3GPP did not specify in which way the BTS is instructed to activate</span><br><span style="color: hsl(120, 100%, 40%);">+and deactivate the BCCH carrier power reduction mode.  Osmocom had to invent their</span><br><span style="color: hsl(120, 100%, 40%);">+own non-standard approach: the BSC needs to send _BS POWER CONTROL_ message with</span><br><span style="color: hsl(120, 100%, 40%);">+the _Channel Number_ IE set to 0x80 (BCCH) and the _Message Discriminator_ set to</span><br><span style="color: hsl(120, 100%, 40%);">+0x06 (Common Channel Management messages).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> === Message Formats and Contents</span><br><span> </span><br><span> [[rsl_crcx_msg]]</span><br><span>diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h</span><br><span>index a891fb7..e116618 100644</span><br><span>--- a/include/osmo-bts/bts.h</span><br><span>+++ b/include/osmo-bts/bts.h</span><br><span>@@ -331,6 +331,9 @@</span><br><span>    struct gsm_power_ctrl_params bs_dpc_params; /* BS Dynamic Power Control */</span><br><span>   struct gsm_power_ctrl_params ms_dpc_params; /* MS Dynamic Power Control */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* Maximum BCCH carrier power reduction */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t c0_power_red_db;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* used by the sysmoBTS to adjust band */</span><br><span>    uint8_t auto_band;</span><br><span> </span><br><span>@@ -410,4 +413,6 @@</span><br><span> /* return the gsm_lchan for the CBCH (if it exists at all) */</span><br><span> struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int bts_set_c0_pwr_red(struct gsm_bts *bts, const uint8_t red);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif /* _BTS_H */</span><br><span>diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h</span><br><span>index 20fe2b2..0ed6361 100644</span><br><span>--- a/include/osmo-bts/gsm_data.h</span><br><span>+++ b/include/osmo-bts/gsm_data.h</span><br><span>@@ -451,6 +451,9 @@</span><br><span>       /* Training Sequence Set (range 0..3) */</span><br><span>     uint8_t tsc_set;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* Actual BCCH carrier power reduction */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t c0_power_red_db;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* Frequency hopping parameters (configured via OML) */</span><br><span>      struct {</span><br><span>             bool enabled;</span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index 7d5732b..09d9b88 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -948,3 +948,58 @@</span><br><span> </span><br><span>        return lchan;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BCCH carrier power reduction (see 3GPP TS 45.008, section 7.1) */</span><br><span style="color: hsl(120, 100%, 40%);">+int bts_set_c0_pwr_red(struct gsm_bts *bts, const uint8_t red)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts_trx *c0 = bts->c0;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int tn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!osmo_bts_has_feature(bts->features, BTS_FEAT_BCCH_POWER_RED)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGPTRX(c0, DRSL, LOGL_ERROR, "BCCH carrier power reduction "</span><br><span style="color: hsl(120, 100%, 40%);">+                       "is not supported by this BTS model\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return -ENOTSUP;</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%);">+   if (red > 6 || red % 2 != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPTRX(c0, DRSL, LOGL_ERROR, "BCCH carrier power reduction "</span><br><span style="color: hsl(120, 100%, 40%);">+                       "value (%u dB) is incorrect or out of range\n", red);</span><br><span style="color: hsl(120, 100%, 40%);">+               return -EINVAL;</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%);">+   LOGPTRX(c0, DRSL, LOGL_NOTICE, "BCCH carrier power reduction: "</span><br><span style="color: hsl(120, 100%, 40%);">+             "%u dB (%s)\n", red, red ? "enabled" : "disabled");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Timeslot 0 is always transmitting BCCH/CCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+     c0->ts[0].c0_power_red_db = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   for (tn = 1; tn < ARRAY_SIZE(c0->ts); tn++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           struct gsm_bts_trx_ts *ts = &c0->ts[tn];</span><br><span style="color: hsl(120, 100%, 40%);">+               struct gsm_bts_trx_ts *prev = ts - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (ts_pchan(ts)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Not allowed on CCCH/BCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+                case GSM_PCHAN_CCCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* Preceeding timeslot shall not exceed 2 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (prev->c0_power_red_db > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                          prev->c0_power_red_db = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* fall-through */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Not recommended on SDCCH/8 */</span><br><span style="color: hsl(120, 100%, 40%);">+              case GSM_PCHAN_SDCCH8_SACCH8C:</span><br><span style="color: hsl(120, 100%, 40%);">+                case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                   ts->c0_power_red_db = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      ts->c0_power_red_db = red;</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Timeslot 7 is always preceding BCCH/CCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (c0->ts[7].c0_power_red_db > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+              c0->ts[7].c0_power_red_db = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->c0_power_red_db = red;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/common/rsl.c b/src/common/rsl.c</span><br><span>index 502e619..5407904 100644</span><br><span>--- a/src/common/rsl.c</span><br><span>+++ b/src/common/rsl.c</span><br><span>@@ -2179,6 +2179,7 @@</span><br><span> {</span><br><span>       struct abis_rsl_dchan_hdr *dch = msgb_l2(msg);</span><br><span>       struct gsm_lchan *lchan = msg->lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_bts_trx *trx = msg->trx;</span><br><span>       const struct tlv_p_entry *ie;</span><br><span>        struct tlv_parsed tp;</span><br><span>        uint8_t old, new;</span><br><span>@@ -2187,22 +2188,34 @@</span><br><span> </span><br><span>      /* 9.3.4 BS Power (M) */</span><br><span>     if (!TLVP_PRES_LEN(&tp, RSL_IE_BS_POWER, 1))</span><br><span style="color: hsl(0, 100%, 40%);">-                return rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR, &dch->chan_nr, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, &dch->chan_nr, NULL, msg);</span><br><span> </span><br><span>         if (*TLVP_VAL(&tp, RSL_IE_BS_POWER) & (1 << 4)) {</span><br><span>              LOGPLCHAN(lchan, DRSL, LOGL_NOTICE, "Fast Power Control is not supported\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         return rsl_tx_error_report(msg->trx, RSL_ERR_SERV_OPT_UNIMPL, &dch->chan_nr, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+            return rsl_tx_error_report(trx, RSL_ERR_SERV_OPT_UNIMPL, &dch->chan_nr, NULL, msg);</span><br><span>   }</span><br><span> </span><br><span>        new = BS_POWER2DB(*TLVP_VAL(&tp, RSL_IE_BS_POWER));</span><br><span>      old = lchan->bs_power_ctrl.current;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    /* Osmocom specific extension for BCCH carrier power reduction */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (dch->chan_nr == RSL_CHAN_BCCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+               int rc = bts_set_c0_pwr_red(trx->bts, new);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        const uint8_t cause = (rc == -ENOTSUP) ?</span><br><span style="color: hsl(120, 100%, 40%);">+                              RSL_ERR_SERV_OPT_UNIMPL : RSL_ERR_IE_CONTENT;</span><br><span style="color: hsl(120, 100%, 40%);">+                 return rsl_tx_error_report(trx, cause, &dch->chan_nr, NULL, msg);</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 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* 9.3.32 (TLV) BS Power Parameters IE (vendor specific) */</span><br><span>  if ((ie = TLVP_GET(&tp, RSL_IE_BS_POWER_PARAM)) != NULL) {</span><br><span>               struct gsm_power_ctrl_params *params = &lchan->bs_dpc_params;</span><br><span> </span><br><span>             /* Parsed parameters will override per-TRX defaults */</span><br><span style="color: hsl(0, 100%, 40%);">-          memcpy(params, msg->trx->bs_dpc_params, sizeof(*params));</span><br><span style="color: hsl(120, 100%, 40%);">+               memcpy(params, trx->bs_dpc_params, sizeof(*params));</span><br><span> </span><br><span>          /* Parsed parameters will override per-TRX defaults */</span><br><span>               if (ie->len && parse_power_ctrl_params(params, ie->val, ie->len) != 0) {</span><br><span>@@ -3555,6 +3568,10 @@</span><br><span>   case RSL_MT_OSMO_ETWS_CMD:</span><br><span>           ret = rsl_rx_osmo_etws_cmd(trx, msg);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Osmocom specific extension for BCCH carrier power reduction */</span><br><span style="color: hsl(120, 100%, 40%);">+     case RSL_MT_BS_POWER_CONTROL:</span><br><span style="color: hsl(120, 100%, 40%);">+         ret = rsl_rx_bs_pwr_ctrl(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span>       default:</span><br><span>             LOGPLCHAN(msg->lchan, DRSL, LOGL_NOTICE, "undefined RSL cchan msg_type 0x%02x\n",</span><br><span>                         cch->c.msg_type);</span><br><span>diff --git a/src/common/scheduler.c b/src/common/scheduler.c</span><br><span>index 11b3f4b..6e1e4fb 100644</span><br><span>--- a/src/common/scheduler.c</span><br><span>+++ b/src/common/scheduler.c</span><br><span>@@ -1318,6 +1318,8 @@</span><br><span>  /* BS Power reduction (in dB) per logical channel */</span><br><span>         if (l1cs->lchan != NULL)</span><br><span>          br->att = l1cs->lchan->bs_power_ctrl.current;</span><br><span style="color: hsl(120, 100%, 40%);">+        else /* Ensure no attenuation in the absence of lchan (e.g. on PDCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+               br->att = 0;</span><br><span> </span><br><span>  /* encrypt */</span><br><span>        if (br->burst_len && l1cs->dl_encr_algo) {</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index 039e929..10e1748 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -1106,6 +1106,10 @@</span><br><span>               vty_out(vty, "  Radio Link Timeout (OVERRIDE): %s%s",</span><br><span>                      stringify_radio_link_timeout(bts->radio_link_timeout.current), VTY_NEWLINE);</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (bts->c0_power_red_db > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_out(vty, "  BCCH carrier power reduction: %u dB%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                     bts->c0_power_red_db, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        llist_for_each_entry(trx, &bts->trx_list, list) {</span><br><span>             const struct phy_instance *pinst = trx_phy_instance(trx);</span><br><span>@@ -1264,6 +1268,39 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(bts_c0_power_red,</span><br><span style="color: hsl(120, 100%, 40%);">+      bts_c0_power_red_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bts <0-255> c0-power-red <0-6>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "BTS Specific Commands\n" BTS_NR_STR</span><br><span style="color: hsl(120, 100%, 40%);">+      "BCCH carrier power reduction operation\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Power reduction value (in dB, even numbers only)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_network *net = gsmnet_from_vty(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+       const int bts_nr = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+     const int red = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_bts *bts;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        bts = gsm_bts_num(net, atoi(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+        if (bts == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+            vty_out(vty, "%% No such BTS (%d)%s", bts_nr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</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%);">+   if (red % 2 != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "%% Incorrect BCCH power reduction value, "</span><br><span style="color: hsl(120, 100%, 40%);">+                    "an even number is expected%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+               return CMD_WARNING;</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%);">+   if (bts_set_c0_pwr_red(bts, red) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "%% BCCH carrier power reduction operation mode "</span><br><span style="color: hsl(120, 100%, 40%);">+                      "is not supported for BTS (%d)%s", bts_nr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+            return CMD_WARNING;</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> /* TODO: generalize and move indention handling to libosmocore */</span><br><span> #define cfg_out(vty, fmt, args...) \</span><br><span>        vty_out(vty, "%*s" fmt, indent, "", ##args)</span><br><span>@@ -2391,6 +2428,7 @@</span><br><span>      install_element(ENABLE_NODE, &bts_t_t_l_power_ctrl_current_max_cmd);</span><br><span>     install_element(ENABLE_NODE, &test_send_failure_event_report_cmd);</span><br><span>       install_element(ENABLE_NODE, &radio_link_timeout_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(ENABLE_NODE, &bts_c0_power_red_cmd);</span><br><span> </span><br><span>         install_element(CONFIG_NODE, &cfg_phy_cmd);</span><br><span>      install_node(&phy_node, config_write_phy);</span><br><span>diff --git a/src/osmo-bts-trx/main.c b/src/osmo-bts-trx/main.c</span><br><span>index 7c2fda8..9720b03 100644</span><br><span>--- a/src/osmo-bts-trx/main.c</span><br><span>+++ b/src/osmo-bts-trx/main.c</span><br><span>@@ -147,6 +147,7 @@</span><br><span>        osmo_bts_set_feature(bts->features, BTS_FEAT_ACCH_REP);</span><br><span>   osmo_bts_set_feature(bts->features, BTS_FEAT_MULTI_TSC);</span><br><span>  osmo_bts_set_feature(bts->features, BTS_FEAT_VAMOS);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_bts_set_feature(bts->features, BTS_FEAT_BCCH_POWER_RED);</span><br><span> </span><br><span>         bts_internal_flag_set(bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index ef50e8d..0a907fb 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -195,9 +195,13 @@</span><br><span>     for (tn = 0; tn < ARRAY_SIZE(trx->ts); tn++) {</span><br><span>                 struct phy_instance *pinst = bts->c0->pinst;</span><br><span>           struct trx_dl_burst_req *br = &pinst->u.osmotrx.br[tn];</span><br><span style="color: hsl(120, 100%, 40%);">+                const struct gsm_bts_trx_ts *ts = &bts->c0->ts[tn];</span><br><span> </span><br><span>            memcpy(br->burst, _sched_dummy_burst, GSM_BURST_LEN);</span><br><span>             br->burst_len = GSM_BURST_LEN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* BCCH carrier power reduction for this timeslot */</span><br><span style="color: hsl(120, 100%, 40%);">+          br->att = ts->c0_power_red_db;</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/24776">change 24776</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-bts/+/24776"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3dcee6e910ccc61c5c63c728db9ea04327e2fc98 </div>
<div style="display:none"> Gerrit-Change-Number: 24776 </div>
<div style="display:none"> Gerrit-PatchSet: 7 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>