diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2013-09-11 10:46:57 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-09-11 20:39:20 +0200 |
commit | 90b996315e7ffc1f11876bf9d4857b6806e9b71a (patch) | |
tree | cb49588692983065462155c99deb70c56bf85718 /openbsc/src | |
parent | 8e5a66cb28149447a2b9668efcc4156c53d6d614 (diff) |
ctrl: Remember last 'rf_locked' control command
This stores the last SET rf_locked control command along with a
timestamp. The 'show network' vty command is extended to show
this information.
Ticket: OW#659
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/libbsc/bsc_vty.c | 4 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc/osmo_bsc_ctrl.c | 18 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc/osmo_bsc_rf.c | 1 |
3 files changed, 20 insertions, 3 deletions
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index 19fe6b3be..0f069ac88 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -212,6 +212,10 @@ static void net_dump_vty(struct vty *vty, struct gsm_network *net) vty_out(vty, " Last RF Command: %s%s", net->bsc_data->rf_ctrl->last_state_command, VTY_NEWLINE); + if (net->bsc_data && net->bsc_data->rf_ctrl) + vty_out(vty, " Last RF Lock Command: %s%s", + net->bsc_data->rf_ctrl->last_rf_lock_ctrl_command, + VTY_NEWLINE); } DEFUN(show_net, show_net_cmd, "show network", diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c index 13ddbeec4..23e5d3e36 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c @@ -35,6 +35,8 @@ #include <time.h> #include <unistd.h> +#define TIME_FORMAT_RFC2822 "%a, %d %b %Y %T %z" + void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct bsc_msc_connection *msc_con) { struct ctrl_cmd *trap; @@ -419,18 +421,28 @@ static int set_net_rf_lock(struct ctrl_cmd *cmd, void *data) { int locked = atoi(cmd->value); struct gsm_network *net = cmd->node; + time_t now = time(NULL); + char now_buf[64]; + struct osmo_bsc_rf *rf; + if (!net) { cmd->reply = "net not found."; return CTRL_CMD_ERROR; } - if (!net->bsc_data->rf_ctrl) { + rf = net->bsc_data->rf_ctrl; + + if (!rf) { cmd->reply = "RF Ctrl is not enabled in the BSC Configuration"; return CTRL_CMD_ERROR; } - osmo_bsc_rf_schedule_lock(net->bsc_data->rf_ctrl, - locked == 1 ? '0' : '1'); + talloc_free(rf->last_rf_lock_ctrl_command); + strftime(now_buf, sizeof(now_buf), TIME_FORMAT_RFC2822, gmtime(&now)); + rf->last_rf_lock_ctrl_command = + talloc_asprintf(rf, "rf_locked %u (%s)", locked, now_buf); + + osmo_bsc_rf_schedule_lock(rf, locked == 1 ? '0' : '1'); cmd->reply = talloc_asprintf(cmd, "%u", locked); if (!cmd->reply) { diff --git a/openbsc/src/osmo-bsc/osmo_bsc_rf.c b/openbsc/src/osmo-bsc/osmo_bsc_rf.c index 7840f7616..a200bf349 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_rf.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_rf.c @@ -503,6 +503,7 @@ struct osmo_bsc_rf *osmo_bsc_rf_create(const char *path, struct gsm_network *net rf->gsm_network = net; rf->policy = S_RF_ON; rf->last_state_command = ""; + rf->last_rf_lock_ctrl_command = talloc_strdup(rf, ""); /* check the rf state */ rf->rf_check.data = rf; |