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/.
Stefan Sperling gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/7574 separate reporting of RSL link status and OML link status There is currently no way to observe OML and RSL link status of a BTS in isolation via VTY or control interface. We will need this distinction in order to write a test for issue OS#2719. Provide separate indication of OML and RSL link status in VTY and control interfaces. Also, take the OML_UP/RSL_UP flags into consideration when reporting link status. Previously, these flags were only used to avoid sending more than one S_L_INP_TEI_UP signal. Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb Related: OS#2719 --- M include/osmocom/bsc/gsm_data.h M src/libbsc/abis_nm.c M src/libbsc/bsc_ctrl_commands.c M src/libbsc/bsc_vty.c M src/libbsc/bts_ipaccess_nanobts.c 5 files changed, 47 insertions(+), 6 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/74/7574/1 diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h index 8caedff..a11ca64 100644 --- a/include/osmocom/bsc/gsm_data.h +++ b/include/osmocom/bsc/gsm_data.h @@ -612,6 +612,7 @@ int (*start)(struct gsm_network *net); int (*oml_rcvmsg)(struct msgb *msg); char * (*oml_status)(const struct gsm_bts *bts); + char * (*rsl_status)(const struct gsm_bts *bts); void (*e1line_bind_ops)(struct e1inp_line *line); @@ -1377,6 +1378,7 @@ extern const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1]; char *get_model_oml_status(const struct gsm_bts *bts); +char *get_model_rsl_status(const struct gsm_bts *bts); unsigned long long bts_uptime(const struct gsm_bts *bts); diff --git a/src/libbsc/abis_nm.c b/src/libbsc/abis_nm.c index 2ee2e24..a4e8300 100644 --- a/src/libbsc/abis_nm.c +++ b/src/libbsc/abis_nm.c @@ -719,6 +719,14 @@ return "unknown"; } +char *get_model_rsl_status(const struct gsm_bts *bts) +{ + if (bts->model->rsl_status) + return bts->model->rsl_status(bts); + + return "unknown"; +} + void abis_nm_queue_send_next(struct gsm_bts *bts) { int wait = 0; diff --git a/src/libbsc/bsc_ctrl_commands.c b/src/libbsc/bsc_ctrl_commands.c index 64f4589..1c1e285 100644 --- a/src/libbsc/bsc_ctrl_commands.c +++ b/src/libbsc/bsc_ctrl_commands.c @@ -264,6 +264,17 @@ CTRL_CMD_DEFINE_RO(bts_oml_conn, "oml-connection-state"); +static int get_bts_rsl_conn(struct ctrl_cmd *cmd, void *data) +{ + const struct gsm_bts *bts = cmd->node; + + cmd->reply = get_model_rsl_status(bts); + + return CTRL_CMD_REPLY; +} + +CTRL_CMD_DEFINE_RO(bts_rsl_conn, "rsl-connection-state"); + static int get_bts_oml_up(struct ctrl_cmd *cmd, void *data) { const struct gsm_bts *bts = cmd->node; @@ -487,6 +498,7 @@ rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_si); rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_chan_load); rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_oml_conn); + rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rsl_conn); rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_oml_up); rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_gprs_mode); rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rf_state); diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c index 6daeb98..e66a126 100644 --- a/src/libbsc/bsc_vty.c +++ b/src/libbsc/bsc_vty.c @@ -441,6 +441,7 @@ vty_out(vty, " %llu days %llu hours %llu min. %llu sec.", OSMO_SEC2DAY(sec), OSMO_SEC2HRS(sec), OSMO_SEC2MIN(sec), sec % 60); vty_out(vty, "%s", VTY_NEWLINE); + vty_out(vty, " RSL Link state: %s%s", get_model_rsl_status(bts), VTY_NEWLINE); } else { vty_out(vty, " E1 Signalling Link:%s", VTY_NEWLINE); e1isl_dump_vty(vty, bts->oml_link); diff --git a/src/libbsc/bts_ipaccess_nanobts.c b/src/libbsc/bts_ipaccess_nanobts.c index a3f7919..1a4dfa0 100644 --- a/src/libbsc/bts_ipaccess_nanobts.c +++ b/src/libbsc/bts_ipaccess_nanobts.c @@ -47,12 +47,32 @@ static int bts_model_nanobts_start(struct gsm_network *net); static void bts_model_nanobts_e1line_bind_ops(struct e1inp_line *line); +#define OML_UP 0x0001 +#define RSL_UP 0x0002 + static char *get_oml_status(const struct gsm_bts *bts) { - if (bts->oml_link) - return all_trx_rsl_connected_unlocked(bts) ? "connected" : "degraded"; + if (bts->oml_link == NULL || (bts->ip_access.flags & OML_UP) == 0) + return "disconnected"; - return "disconnected"; + return "connected"; +} + +static char *get_rsl_status(const struct gsm_bts *bts) +{ + struct gsm_bts_trx *trx; + int ntrx_up = 0; + + llist_for_each_entry(trx, &bts->trx_list, list) { + if (bts->ip_access.flags & (RSL_UP << trx->nr)) + ntrx_up++; + } + if (ntrx_up == 0) + return "disconnected"; + else if (ntrx_up < bts->num_trx) + return "degraded"; + + return all_trx_rsl_connected_unlocked(bts) ? "connected" : "degraded"; } struct gsm_bts_model bts_model_nanobts = { @@ -61,6 +81,7 @@ .start = bts_model_nanobts_start, .oml_rcvmsg = &abis_nm_rcvmsg, .oml_status = &get_oml_status, + .rsl_status = &get_rsl_status, .e1line_bind_ops = bts_model_nanobts_e1line_bind_ops, .nm_att_tlvdef = { .def = { @@ -334,9 +355,6 @@ return gsm_bts_model_register(&bts_model_nanobts); } - -#define OML_UP 0x0001 -#define RSL_UP 0x0002 static struct gsm_bts * find_bts_by_unitid(struct gsm_network *net, uint16_t site_id, uint16_t bts_id) -- To view, visit https://gerrit.osmocom.org/7574 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb Gerrit-PatchSet: 1 Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>