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.orgHello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/7574 to look at the new patch set (#2). 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. Keep the semantics of the 'oml-connection-status' control interface command intact, i.e. report OML status "degraded" if the OML link is UP but RSL link status is not "connected". There are TTCN3 tests which depend on this behaviour. 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, 48 insertions(+), 6 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/74/7574/2 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..d79ba14 100644 --- a/src/libbsc/bts_ipaccess_nanobts.c +++ b/src/libbsc/bts_ipaccess_nanobts.c @@ -47,12 +47,33 @@ 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_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"; +} + 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"; + /* Control interface users expect to see "degraded" if OML is UP but RSL is (partly) down. */ + return get_rsl_status(bts); } struct gsm_bts_model bts_model_nanobts = { @@ -61,6 +82,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 +356,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: newpatchset Gerrit-Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb Gerrit-PatchSet: 2 Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de> Gerrit-Reviewer: Jenkins Builder