aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-01-20 21:35:48 +0100
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-01-20 23:54:54 +0100
commitdc61d6032b034fd4fedc7d724bcc7ee179b89093 (patch)
tree30da1245ecaf457b0303995fb0a41c2d8460c565
parentf416e5a01c790e3305b88952f47f298b80abdbdf (diff)
vty: add expert commands for MS/BS power control
These new commands are useful for debugging MS/BS power control loops, e.g. one can change power control mode, overwrite the current BS power reduction or MS power level at run-time. Change-Id: I1ebb033b02c2bc3b1fa7de874e0035a07297f266 Related: SYS#4918
-rw-r--r--src/common/vty.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/common/vty.c b/src/common/vty.c
index 07244e72..9dd0c1af 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -2026,6 +2026,80 @@ DEFUN_ATTR(no_bts_t_t_l_loopback,
return CMD_SUCCESS;
}
+#define LCHAN_PWR_CTRL_CMD \
+ BTS_T_T_L_CMD " (bs-power-ctrl|ms-power-ctrl)"
+#define LCHAN_PWR_CTRL_STR \
+ BTS_T_T_L_STR "BS power control\n" "MS power control\n"
+
+DEFUN_ATTR(bts_t_t_l_power_ctrl_mode,
+ bts_t_t_l_power_ctrl_mode_cmd,
+ LCHAN_PWR_CTRL_CMD " mode (static|dynamic)",
+ LCHAN_PWR_CTRL_STR "Change power control mode\n"
+ "Disable the power control loop\n"
+ "Enable the power control loop\n",
+ CMD_ATTR_HIDDEN)
+{
+ struct gsm_network *net = gsmnet_from_vty(vty);
+ const struct gsm_power_ctrl_params *params;
+ struct lchan_power_ctrl_state *state;
+ const char **args = argv + 4;
+ struct gsm_lchan *lchan;
+
+ lchan = resolve_lchan(net, argv, 0);
+ if (!lchan) {
+ vty_out(vty, "%% Could not resolve logical channel%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (strcmp(args[0], "bs-power-ctrl") == 0) {
+ params = &lchan->bs_dpc_params;
+ state = &lchan->bs_power_ctrl;
+ } else { /* ms-power-ctrl */
+ params = &lchan->ms_dpc_params;
+ state = &lchan->ms_power_ctrl;
+ }
+
+ if (strcmp(args[1], "dynamic") == 0)
+ state->dpc_params = params;
+ else
+ state->dpc_params = NULL;
+
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(bts_t_t_l_power_ctrl_current_max,
+ bts_t_t_l_power_ctrl_current_max_cmd,
+ LCHAN_PWR_CTRL_CMD " value (current|max) <0-255>",
+ LCHAN_PWR_CTRL_STR "Change current power value\n"
+ "Current value (for both dynamic and static modes)\n"
+ "Maximum value (for dynamic mode only)\n"
+ "BS power reduction (in dB) or MS power level\n",
+ CMD_ATTR_HIDDEN)
+{
+ struct gsm_network *net = gsmnet_from_vty(vty);
+ struct lchan_power_ctrl_state *state;
+ const char **args = argv + 4;
+ struct gsm_lchan *lchan;
+
+ lchan = resolve_lchan(net, argv, 0);
+ if (!lchan) {
+ vty_out(vty, "%% Could not resolve logical channel%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (strcmp(args[0], "bs-power-ctrl") == 0)
+ state = &lchan->bs_power_ctrl;
+ else /* ms-power-ctrl */
+ state = &lchan->ms_power_ctrl;
+
+ if (strcmp(args[1], "current") == 0)
+ state->current = atoi(args[2]);
+ else
+ state->max = atoi(args[2]);
+
+ return CMD_SUCCESS;
+}
+
DEFUN(logging_fltr_l1_sapi, logging_fltr_l1_sapi_cmd, "HIDDEN", "HIDDEN")
{
int sapi = get_string_value(l1sap_common_sapi_names, argv[0]);
@@ -2155,6 +2229,8 @@ int bts_vty_init(void *ctx)
install_element(ENABLE_NODE, &bts_t_t_l_jitter_buf_cmd);
install_element(ENABLE_NODE, &bts_t_t_l_loopback_cmd);
install_element(ENABLE_NODE, &no_bts_t_t_l_loopback_cmd);
+ install_element(ENABLE_NODE, &bts_t_t_l_power_ctrl_mode_cmd);
+ install_element(ENABLE_NODE, &bts_t_t_l_power_ctrl_current_max_cmd);
install_element(ENABLE_NODE, &test_send_failure_event_report_cmd);
install_element(ENABLE_NODE, &radio_link_timeout_cmd);