This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/21905 )
Change subject: power_control: add VTY introspection commands for MS/BS params
......................................................................
power_control: add VTY introspection commands for MS/BS params
Change-Id: I34095673bf49deb390d5e8383c4ee05a6915b82f
Related: SYS#4918
---
M src/common/vty.c
1 file changed, 103 insertions(+), 16 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/05/21905/1
diff --git a/src/common/vty.c b/src/common/vty.c
index 7284bfa..a116d7f 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -1118,6 +1118,66 @@
return CMD_SUCCESS;
}
+/* TODO: generalize and move indention handling to libosmocore */
+#define cfg_out(vty, fmt, args...) \
+ vty_out(vty, "%*s" fmt, indent, "", ##args);
+
+static void dump_dpc_meas_params(struct vty *vty, const unsigned int indent,
+ const struct gsm_power_ctrl_meas_params *mp,
+ const unsigned int pn)
+{
+ cfg_out(vty, "Lower threshold (L_RXLEV_XX_P): %u%s",
+ mp->lower_thresh, VTY_NEWLINE);
+ cfg_out(vty, "Upper threshold (U_RXLEV_XX_P): %u%s",
+ mp->upper_thresh, VTY_NEWLINE);
+
+ cfg_out(vty, "Lower threshold comparators: P%u=%02u / N%u=%02u%s",
+ pn, mp->lower_cmp_p, pn, mp->lower_cmp_n, VTY_NEWLINE);
+ cfg_out(vty, "Upper threshold comparators: P%u=%02u / N%u=%02u%s",
+ pn + 1, mp->upper_cmp_p, pn + 1, mp->upper_cmp_n, VTY_NEWLINE);
+
+ cfg_out(vty, "Averaging algorithm: ");
+ switch (mp->algo) {
+ case GSM_PWR_CTRL_MEAS_AVG_ALGO_UNWEIGHTED:
+ vty_out(vty, "unweighted%s", VTY_NEWLINE);
+ break;
+ case GSM_PWR_CTRL_MEAS_AVG_ALGO_WEIGHTED:
+ vty_out(vty, "weighted%s", VTY_NEWLINE);
+ break;
+ case GSM_PWR_CTRL_MEAS_AVG_ALGO_MOD_MEDIAN:
+ vty_out(vty, "modified median%s", VTY_NEWLINE);
+ break;
+ case GSM_PWR_CTRL_MEAS_AVG_ALGO_OSMO_EWMA:
+ vty_out(vty, "EWMA (alpha=%u)%s",
+ mp->ewma.alpha, VTY_NEWLINE);
+ break;
+ case GSM_PWR_CTRL_MEAS_AVG_ALGO_NONE:
+ vty_out(vty, "disabled (pass-through)%s", VTY_NEWLINE);
+ return;
+ default:
+ vty_out(vty, "unknown%s", VTY_NEWLINE);
+ return;
+ }
+
+ cfg_out(vty, "Averaging parameters: Hreqave=%u / Hreqt=%u%s",
+ mp->h_reqave, mp->h_reqt, VTY_NEWLINE);
+}
+
+static void dump_dpc_params(struct vty *vty, const unsigned int indent,
+ const struct gsm_power_ctrl_params *cp)
+{
+ cfg_out(vty, "Power increase step size: %u%s",
+ cp->inc_step_size_db, VTY_NEWLINE);
+ cfg_out(vty, "Power reduce step size: %u%s",
+ cp->red_step_size_db, VTY_NEWLINE);
+
+ cfg_out(vty, "RxLev measurement processing:%s", VTY_NEWLINE);
+ dump_dpc_meas_params(vty, indent + 2, &cp->rxlev_meas, 1);
+
+ cfg_out(vty, "RxQual measurement processing:%s", VTY_NEWLINE);
+ dump_dpc_meas_params(vty, indent + 2, &cp->rxqual_meas, 3);
+}
+
static void trx_dump_vty(struct vty *vty, const struct gsm_bts_trx *trx)
{
vty_out(vty, "TRX %u of BTS %u is on ARFCN %u%s",
@@ -1128,6 +1188,19 @@
"resulting BS power: %d dBm%s",
trx->nominal_power, trx->max_power_red,
trx->nominal_power - trx->max_power_red, VTY_NEWLINE);
+
+ vty_out(vty, " BS Power control parameters (%s):%s",
+ trx->bs_dpc_params == &trx->bts->bs_dpc_params ?
+ "fall-back" : "from BSC",
+ VTY_NEWLINE);
+ dump_dpc_params(vty, 4, trx->bs_dpc_params);
+
+ vty_out(vty, " MS Power control parameters (%s):%s",
+ trx->ms_dpc_params == &trx->bts->ms_dpc_params ?
+ "fall-back" : "from BSC",
+ VTY_NEWLINE);
+ dump_dpc_params(vty, 4, trx->ms_dpc_params);
+
vty_out(vty, " NM State: ");
net_dump_nmstate(vty, &trx->mo.nm_state);
vty_out(vty, " RSL State: %s%s", trx->rsl_link? "connected" : "disconnected", VTY_NEWLINE);
@@ -1307,47 +1380,61 @@
}
}
-static void lchan_bs_power_ctrl_state_dump(struct vty *vty, const char *prefix,
+static void lchan_bs_power_ctrl_state_dump(struct vty *vty, unsigned int indent,
const struct gsm_lchan *lchan)
{
const struct lchan_power_ctrl_state *st = &lchan->bs_power_ctrl;
const struct gsm_bts_trx *trx = lchan->ts->trx;
- vty_out(vty, "%sBS (Downlink) Power Control (%s):%s",
- prefix, st->fixed ? "fixed" : "autonomous",
+ cfg_out(vty, "BS (Downlink) Power Control (%s):%s",
+ st->fixed ? "fixed" : "autonomous",
VTY_NEWLINE);
+ indent += 2;
- vty_out(vty, "%s Channel reduction: %u dB", prefix, st->current);
+ cfg_out(vty, "Channel reduction: %u dB", st->current);
if (!st->fixed)
vty_out(vty, " (max %u dB)", st->max);
vty_out(vty, "%s", VTY_NEWLINE);
- vty_out(vty, "%s TRX reduction: %u dB%s",
- prefix, trx->max_power_red, VTY_NEWLINE);
+ cfg_out(vty, "TRX reduction: %u dB%s",
+ trx->max_power_red, VTY_NEWLINE);
int actual = trx->nominal_power - (trx->max_power_red + st->current);
- vty_out(vty, "%s Actual / Nominal power: %d dBm / %d dBm%s",
- prefix, actual, trx->nominal_power, VTY_NEWLINE);
+ cfg_out(vty, "Actual / Nominal power: %d dBm / %d dBm%s",
+ actual, trx->nominal_power, VTY_NEWLINE);
+
+ if (st->dpc_params == NULL)
+ return;
+
+ cfg_out(vty, "Power Control parameters:%s", VTY_NEWLINE);
+ dump_dpc_params(vty, indent + 2, st->dpc_params);
}
-static void lchan_ms_power_ctrl_state_dump(struct vty *vty, const char *prefix,
+static void lchan_ms_power_ctrl_state_dump(struct vty *vty, unsigned int indent,
const struct gsm_lchan *lchan)
{
const struct lchan_power_ctrl_state *st = &lchan->ms_power_ctrl;
const struct gsm_bts_trx *trx = lchan->ts->trx;
- vty_out(vty, "%sMS (Uplink) Power Control (%s):%s",
- prefix, st->fixed ? "fixed" : "autonomous",
+ cfg_out(vty, "MS (Uplink) Power Control (%s):%s",
+ st->fixed ? "fixed" : "autonomous",
VTY_NEWLINE);
+ indent += 2;
int current_dbm = ms_pwr_dbm(trx->bts->band, st->current);
int max_dbm = ms_pwr_dbm(trx->bts->band, st->max);
- vty_out(vty, "%s Current power level: %u, -%d dBm",
- prefix, st->current, current_dbm);
+ cfg_out(vty, "Current power level: %u, -%d dBm",
+ st->current, current_dbm);
if (!st->fixed)
vty_out(vty, " (max %u, -%d dBm)", st->max, max_dbm);
vty_out(vty, "%s", VTY_NEWLINE);
+
+ if (st->dpc_params == NULL)
+ return;
+
+ cfg_out(vty, "Power Control parameters:%s", VTY_NEWLINE);
+ dump_dpc_params(vty, indent + 2, st->dpc_params);
}
static void lchan_dump_full_vty(struct vty *vty, const struct gsm_lchan *lchan)
@@ -1420,9 +1507,9 @@
vty_out(vty, " RTP/PDCH Loopback Enabled%s", VTY_NEWLINE);
vty_out(vty, " Radio Link Failure Counter 'S': %d%s", lchan->s, VTY_NEWLINE);
- /* BS/MS Power Control state */
- lchan_bs_power_ctrl_state_dump(vty, " ", lchan);
- lchan_ms_power_ctrl_state_dump(vty, " ", lchan);
+ /* BS/MS Power Control state and parameters */
+ lchan_bs_power_ctrl_state_dump(vty, 2, lchan);
+ lchan_ms_power_ctrl_state_dump(vty, 2, lchan);
}
static void lchan_dump_short_vty(struct vty *vty, const struct gsm_lchan *lchan)
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/21905
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I34095673bf49deb390d5e8383c4ee05a6915b82f
Gerrit-Change-Number: 21905
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201230/affc0d0f/attachment.htm>