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/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/20409 ) Change subject: Introduce NM BTS FSM ...................................................................... Introduce NM BTS FSM Change-Id: Iae631bcc7acdf955296b124707e42d5e565af186 --- M include/osmo-bts/Makefile.am M include/osmo-bts/bts.h A include/osmo-bts/nm_bts_fsm.h M include/osmo-bts/oml.h M src/common/Makefile.am M src/common/abis.c M src/common/bts.c M src/common/bts_ctrl_commands.c M src/common/main.c A src/common/nm_bts_fsm.c M src/common/oml.c M src/common/rsl.c M src/common/vty.c M src/osmo-bts-litecell15/oml.c M src/osmo-bts-oc2g/oml.c M src/osmo-bts-octphy/l1_oml.c M src/osmo-bts-omldummy/bts_model.c M src/osmo-bts-sysmo/oml.c M src/osmo-bts-trx/l1_if.c M src/osmo-bts-virtual/bts_model.c 20 files changed, 273 insertions(+), 54 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/09/20409/1 diff --git a/include/osmo-bts/Makefile.am b/include/osmo-bts/Makefile.am index c03cf3c..8179f1a 100644 --- a/include/osmo-bts/Makefile.am +++ b/include/osmo-bts/Makefile.am @@ -28,4 +28,5 @@ dtx_dl_amr_fsm.h \ ta_control.h \ nm_bts_sm_fsm.h \ + nm_bts_fsm.h \ $(NULL) diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h index 191feb9..e4f4099 100644 --- a/include/osmo-bts/bts.h +++ b/include/osmo-bts/bts.h @@ -133,7 +133,12 @@ struct timespec oml_conn_established_timestamp; /* Abis network management O&M handle */ - struct gsm_abis_mo mo; + struct { + /* NM BTS FSM */ + struct osmo_fsm_inst *fi; + bool opstart_success; + struct gsm_abis_mo mo; + } nm; /* number of this BTS on given E1 link */ uint8_t bts_nr; diff --git a/include/osmo-bts/nm_bts_fsm.h b/include/osmo-bts/nm_bts_fsm.h new file mode 100644 index 0000000..9ee7427 --- /dev/null +++ b/include/osmo-bts/nm_bts_fsm.h @@ -0,0 +1,40 @@ +/* NM BTS FSM. Following 3GPP TS 12.21 Figure 2/GSM 12.21: + GSM 12.21 Objects' Operational state and availability status behaviour during initialization */ + +/* (C) 2020 by sysmocom - s.m.f.c. GmbH <info at sysmocom.de> + * Author: Pau Espin Pedrol <pespin at sysmocom.de> + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#pragma once + +#include <osmocom/core/fsm.h> + +enum nm_bts_op_fsm_states { + NM_BTS_ST_OP_DISABLED_NOTINSTALLED, + NM_BTS_ST_OP_DISABLED_OFFLINE, + NM_BTS_ST_OP_ENABLED, +}; + +enum nm_bts_op_fsm_events { + NM_BTS_EV_SW_ACT, + NM_BTS_EV_OPSTART_ACK, + NM_BTS_EV_OPSTART_NACK, +}; + +extern struct osmo_fsm nm_bts_fsm; diff --git a/include/osmo-bts/oml.h b/include/osmo-bts/oml.h index 484e210..0689bb0 100644 --- a/include/osmo-bts/oml.h +++ b/include/osmo-bts/oml.h @@ -32,7 +32,7 @@ struct gsm_bts *bts; }; -int oml_init(struct gsm_abis_mo *mo); +int oml_init(void); int down_oml(struct gsm_bts *bts, struct msgb *msg); struct msgb *oml_msgb_alloc(void); diff --git a/src/common/Makefile.am b/src/common/Makefile.am index 6724374..546e02a 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -38,6 +38,7 @@ scheduler_mframe.c \ ta_control.c \ nm_bts_sm_fsm.c \ + nm_bts_fsm.c \ $(NULL) libl1sched_a_SOURCES = scheduler.c diff --git a/src/common/abis.c b/src/common/abis.c index 4c62e8f..5b914c7 100644 --- a/src/common/abis.c +++ b/src/common/abis.c @@ -259,7 +259,7 @@ { g_bts = bts; - oml_init(&bts->mo); + oml_init(); libosmo_abis_init(tall_bts_ctx); osmo_signal_register_handler(SS_L_INPUT, &inp_s_cbfn, bts); diff --git a/src/common/bts.c b/src/common/bts.c index 34a6be2..38ec553 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -53,6 +53,7 @@ #include <osmo-bts/cbch.h> #include <osmo-bts/bts_shutdown_fsm.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #define MIN_QUAL_RACH 50 /* minimum link quality (in centiBels) for Access Bursts */ #define MIN_QUAL_NORM -5 /* minimum link quality (in centiBels) for Normal Bursts */ @@ -226,8 +227,10 @@ gsm_mo_init(&bts->site_mgr.mo, bts, NM_OC_SITE_MANAGER, 0xff, 0xff, 0xff); - gsm_mo_init(&bts->mo, bts, NM_OC_BTS, - bts->nr, 0xff, 0xff); + bts->nm.fi = osmo_fsm_inst_alloc(&nm_bts_fsm, bts, bts, + LOGL_INFO, NULL); + osmo_fsm_inst_update_id_f(bts->nm.fi, "bts%d", bts->nr); + gsm_mo_init(&bts->nm.mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff); for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) { bts->gprs.nsvc[i].bts = bts; @@ -333,9 +336,9 @@ /* Start with the site manager */ oml_mo_state_init(&bts->site_mgr.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED); + oml_mo_state_init(&bts->nm.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED); - /* set BTS to dependency */ - oml_mo_state_init(&bts->mo, -1, NM_AVSTATE_DEPENDENCY); + /* set BTS attr to dependency */ oml_mo_state_init(&bts->gprs.nse.mo, -1, NM_AVSTATE_DEPENDENCY); oml_mo_state_init(&bts->gprs.cell.mo, -1, NM_AVSTATE_DEPENDENCY); oml_mo_state_init(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_DEPENDENCY); @@ -395,9 +398,9 @@ LOGP(DSUM, LOGL_INFO, "Main link established, sending NM Status.\n"); - /* BTS SITE MGR becomes Offline (tx SW ACT Report), BTS is DEPENDENCY */ + /* BTS SITE MGR and BTS become Offline (tx SW ACT Report) */ osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_SW_ACT, NULL); - oml_tx_state_changed(&bts->mo); + osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_SM_EV_SW_ACT, NULL); /* those should all be in DEPENDENCY */ oml_tx_state_changed(&bts->gprs.nse.mo); diff --git a/src/common/bts_ctrl_commands.c b/src/common/bts_ctrl_commands.c index faaba6a..971a587 100644 --- a/src/common/bts_ctrl_commands.c +++ b/src/common/bts_ctrl_commands.c @@ -77,7 +77,7 @@ static int set_oml_alert(struct ctrl_cmd *cmd, void *data) { /* Note: we expect signal dispatch to be synchronous */ - oml_tx_failure_event_rep(&g_bts->mo, NM_SEVER_INDETERMINATE, OSMO_EVT_EXT_ALARM, cmd->value); + oml_tx_failure_event_rep(&g_bts->nm.mo, NM_SEVER_INDETERMINATE, OSMO_EVT_EXT_ALARM, cmd->value); cmd->reply = "OK"; diff --git a/src/common/main.c b/src/common/main.c index dfdc2a7..79ae43d 100644 --- a/src/common/main.c +++ b/src/common/main.c @@ -186,7 +186,7 @@ case SIGINT: case SIGTERM: if (!quit) { - oml_tx_failure_event_rep(&bts->mo, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_CRITICAL, OSMO_EVT_CRIT_PROC_STOP, "BTS: SIGINT received -> shutdown"); bts_shutdown(bts, "SIGINT"); diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c new file mode 100644 index 0000000..1343fb3 --- /dev/null +++ b/src/common/nm_bts_fsm.c @@ -0,0 +1,152 @@ +/* NM BTS FSM */ + +/* (C) 2020 by sysmocom - s.m.f.c. GmbH <info at sysmocom.de> + * Author: Pau Espin Pedrol <pespin at sysmocom.de> + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <errno.h> +#include <unistd.h> +#include <inttypes.h> + +#include <osmocom/core/fsm.h> +#include <osmocom/core/tdef.h> +#include <osmocom/gsm/protocol/gsm_12_21.h> + +#include <osmo-bts/logging.h> +#include <osmo-bts/gsm_data.h> +#include <osmo-bts/bts_model.h> +#include <osmo-bts/bts.h> +#include <osmo-bts/rsl.h> +#include <osmo-bts/nm_bts_fsm.h> +#include <osmo-bts/phy_link.h> + +#define X(s) (1 << (s)) + +#define nm_bts_fsm_state_chg(fi, NEXT_STATE) \ + osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 0) + +////////////////////////// +// FSM STATE ACTIONS +////////////////////////// + +static void st_op_disabled_notinstalled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + bts->nm.opstart_success = false; + oml_mo_state_chg(&bts->nm.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED); +} + +static void st_op_disabled_notinstalled(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + + switch (event) { + case NM_BTS_EV_SW_ACT: + oml_mo_tx_sw_act_rep(&bts->nm.mo); + nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_DISABLED_OFFLINE); + return; + default: + OSMO_ASSERT(0); + } +} + +static void st_op_disabled_offline_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + bts->nm.opstart_success = false; + oml_mo_state_chg(&bts->nm.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); +} + +static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + + switch (event) { + case NM_BTS_EV_OPSTART_ACK: + bts->nm.opstart_success = true; + oml_mo_opstart_ack(&bts->nm.mo); + nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_ENABLED); + break; /* check statechg below */ + case NM_BTS_EV_OPSTART_NACK: + bts->nm.opstart_success = false; + oml_mo_opstart_nack(&bts->nm.mo, (int)(intptr_t)data); + return; + default: + OSMO_ASSERT(0); + } +} + +static void st_op_enabled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + oml_mo_state_chg(&bts->nm.mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK); +} + +static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ +} + +static struct osmo_fsm_state nm_bts_fsm_states[] = { + [NM_BTS_ST_OP_DISABLED_NOTINSTALLED] = { + .in_event_mask = + X(NM_BTS_EV_SW_ACT), + .out_state_mask = + X(NM_BTS_ST_OP_DISABLED_OFFLINE), + .name = "DISABLED_NOTINSTALLED", + .onenter = st_op_disabled_notinstalled_on_enter, + .action = st_op_disabled_notinstalled, + }, + [NM_BTS_ST_OP_DISABLED_OFFLINE] = { + .in_event_mask = + X(NM_BTS_EV_OPSTART_ACK) | + X(NM_BTS_EV_OPSTART_NACK), + .out_state_mask = + X(NM_BTS_ST_OP_ENABLED), + .name = "DISABLED_OFFLINE", + .onenter = st_op_disabled_offline_on_enter, + .action = st_op_disabled_offline, + }, + [NM_BTS_ST_OP_ENABLED] = { + .in_event_mask = 0, + .out_state_mask = 0, + .name = "ENABLED", + .onenter = st_op_enabled_on_enter, + .action = st_op_enabled, + }, +}; + +const struct value_string nm_bts_fsm_event_names[] = { + { NM_BTS_EV_SW_ACT, "SW_ACT" }, + { NM_BTS_EV_OPSTART_ACK, "OPSTART_ACK" }, + { NM_BTS_EV_OPSTART_NACK, "OPSTART_NACK" }, + { 0, NULL } +}; + +struct osmo_fsm nm_bts_fsm = { + .name = "NM_BTS_OP", + .states = nm_bts_fsm_states, + .num_states = ARRAY_SIZE(nm_bts_fsm_states), + .event_names = nm_bts_fsm_event_names, + .log_subsys = DOML, +}; + +static __attribute__((constructor)) void nm_bts_fsm_init(void) +{ + OSMO_ASSERT(osmo_fsm_register(&nm_bts_fsm) == 0); +} diff --git a/src/common/oml.c b/src/common/oml.c index fd4aed8..0dd7ecb 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -544,7 +544,7 @@ rc = oml_tlv_parse(&tp, foh->data, msgb_l3len(msg) - sizeof(*foh)); if (rc < 0) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UNSUP_ATTR, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UNSUP_ATTR, "New value for Attribute not supported"); return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT); } @@ -553,7 +553,7 @@ if (TLVP_PRES_LEN(&tp, NM_ATT_BCCH_ARFCN, 2)) { uint16_t arfcn = ntohs(tlvp_val16_unal(&tp, NM_ATT_BCCH_ARFCN)); if (arfcn >= 1024) { /* 0 .. 1023 (1024 channels total) */ - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_WARN_SW_WARN, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_WARN_SW_WARN, "Given ARFCN %u is not supported", arfcn); LOGPFOH(DOML, LOGL_ERROR, foh, "Given ARFCN %u is not supported.\n", arfcn); @@ -562,26 +562,26 @@ } /* 9.4.52 Starting Time */ if (TLVP_PRESENT(&tp, NM_ATT_START_TIME)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UNSUP_ATTR, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UNSUP_ATTR, "NM_ATT_START_TIME Attribute not " "supported"); return oml_fom_ack_nack(msg, NM_NACK_SPEC_IMPL_NOTSUPP); } /* merge existing BTS attributes with new attributes */ - tp_merged = osmo_tlvp_copy(bts->mo.nm_attr, bts); + tp_merged = osmo_tlvp_copy(bts->nm.mo.nm_attr, bts); osmo_tlvp_merge(tp_merged, &tp); /* Ask BTS driver to validate new merged attributes */ - rc = bts_model_check_oml(bts, foh->msg_type, bts->mo.nm_attr, tp_merged, bts); + rc = bts_model_check_oml(bts, foh->msg_type, bts->nm.mo.nm_attr, tp_merged, bts); if (rc < 0) { talloc_free(tp_merged); return oml_fom_ack_nack(msg, -rc); } /* Success: replace old BTS attributes with new */ - talloc_free(bts->mo.nm_attr); - bts->mo.nm_attr = tp_merged; + talloc_free(bts->nm.mo.nm_attr); + bts->nm.mo.nm_attr = tp_merged; /* ... and actually still parse them */ @@ -776,7 +776,7 @@ arfcn = ntohs(_value); value += 2; if (arfcn >= 1024) { /* 0 .. 1023 (1024 channels total) */ - oml_tx_failure_event_rep(&trx->bts->mo, NM_SEVER_MAJOR, OSMO_EVT_WARN_SW_WARN, + oml_tx_failure_event_rep(&trx->bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_WARN_SW_WARN, "Given ARFCN %u is unsupported", arfcn); LOGPFOH(DOML, LOGL_NOTICE, foh, "Given ARFCN %u is unsupported.\n", arfcn); return oml_fom_ack_nack(msg, NM_NACK_FREQ_NOTAVAIL); @@ -1052,7 +1052,7 @@ static inline bool report_bts_number_incorrect(struct gsm_bts *bts, const struct abis_om_fom_hdr *foh, bool is_formatted) { struct gsm_bts_trx *trx; - const struct gsm_abis_mo *mo = &bts->mo; + const struct gsm_abis_mo *mo = &bts->nm.mo; const char *form = is_formatted ? "Unexpected BTS %d in formatted O&M %s (exp. 0 or 0xFF)" : "Unexpected BTS %d in manufacturer O&M %s (exp. 0 or 0xFF)"; @@ -1076,7 +1076,7 @@ struct abis_om_hdr *oh = msgb_l2(msg); struct abis_om_fom_hdr *foh = msgb_l3(msg); struct gsm_bts_trx *trx; - const struct gsm_abis_mo *mo = &bts->mo; + const struct gsm_abis_mo *mo = &bts->nm.mo; int ret; if (msgb_l2len(msg) < sizeof(*foh)) { @@ -1375,7 +1375,7 @@ static int down_mom(struct gsm_bts *bts, struct msgb *msg) { struct abis_om_hdr *oh = msgb_l2(msg); - const struct gsm_abis_mo *mo = &bts->mo; + const struct gsm_abis_mo *mo = &bts->nm.mo; struct abis_om_fom_hdr *foh; struct gsm_bts_trx *trx; uint8_t idstrlen = oh->data[0]; @@ -1383,13 +1383,13 @@ int ret; if (msgb_l2len(msg) < sizeof(*foh)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Manufacturer O&M message too short\n"); return -EIO; } if (strncmp((char *)&oh->data[1], abis_nm_ipa_magic, idstrlen)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Manufacturer OML message != ipaccess not supported\n"); return -EINVAL; } @@ -1443,7 +1443,7 @@ int ret = 0; if (msgb_l2len(msg) < sizeof(*oh)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "OML message too short\n"); msgb_free(msg); return -EIO; @@ -1452,14 +1452,14 @@ /* We don't implement de-segmentation of segmented OML messages */ if (oh->placement != ABIS_OM_PLACEMENT_ONLY || oh->sequence != 0) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Unsupported segmented O&M message\n"); msgb_free(msg); return -EIO; } if (msgb_l3len(msg) < oh->length) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Short OML message: %u < %u\n", msgb_l3len(msg), oh->length); msgb_free(msg); @@ -1469,7 +1469,7 @@ switch (oh->mdisc) { case ABIS_OM_MDISC_FOM: if (msgb_l2len(msg) < sizeof(*oh)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Formatted O&M message too short\n"); ret = -EIO; break; @@ -1478,7 +1478,7 @@ break; case ABIS_OM_MDISC_MANUF: if (msgb_l2len(msg) < sizeof(*oh)) { - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MAJOR, OSMO_EVT_MAJ_UKWN_MSG, "Manufacturer O&M message too short\n"); ret = -EIO; break; @@ -1486,7 +1486,7 @@ ret = down_mom(bts, msg); break; default: - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MINOR, OSMO_EVT_MAJ_UKWN_MSG, + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MINOR, OSMO_EVT_MAJ_UKWN_MSG, "unknown O&M msg_disc 0x%02x\n", oh->mdisc); ret = -EINVAL; } @@ -1496,7 +1496,7 @@ return ret; } -int oml_init(struct gsm_abis_mo *mo) +int oml_init() { DEBUGP(DOML, "Initializing OML attribute definitions\n"); tlv_def_patch(&abis_nm_att_tlvdef_ipa_local, &abis_nm_att_tlvdef_ipa); @@ -1528,7 +1528,7 @@ switch (obj_class) { case NM_OC_BTS: - mo = &bts->mo; + mo = &bts->nm.mo; break; case NM_OC_RADIO_CARRIER: if (obj_inst->trx_nr >= bts->num_trx) { diff --git a/src/common/rsl.c b/src/common/rsl.c index 919981d..91e9f75 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -485,7 +485,7 @@ if (rc < 0) { /* FIXME: notfiy the BSC on other errors? */ if (rc == -ENOSPC) { - oml_tx_failure_event_rep(&trx->bts->mo, NM_SEVER_WARNING, + oml_tx_failure_event_rep(&trx->bts->nm.mo, NM_SEVER_WARNING, OSMO_EVT_MIN_PAG_TAB_FULL, "BTS paging table is full"); } } diff --git a/src/common/vty.c b/src/common/vty.c index b662320..c390979 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -872,7 +872,7 @@ bts->oml_link ? bts->oml_link->tei : 0x00, VTY_NEWLINE); vty_out(vty, " NM State: "); - net_dump_nmstate(vty, &bts->mo.nm_state); + net_dump_nmstate(vty, &bts->nm.mo.nm_state); vty_out(vty, " Site Mgr NM State: "); net_dump_nmstate(vty, &bts->site_mgr.mo.nm_state); if (strnlen(bts->pcu_version, MAX_VERSION_LENGTH)) @@ -958,7 +958,7 @@ } bts = gsm_bts_num(net, bts_nr); - oml_tx_failure_event_rep(&bts->mo, NM_SEVER_MINOR, OSMO_EVT_WARN_SW_WARN, "test message sent from VTY"); + oml_tx_failure_event_rep(&bts->nm.mo, NM_SEVER_MINOR, OSMO_EVT_WARN_SW_WARN, "test message sent from VTY"); return CMD_SUCCESS; } diff --git a/src/osmo-bts-litecell15/oml.c b/src/osmo-bts-litecell15/oml.c index 366e8da..11182cc 100644 --- a/src/osmo-bts-litecell15/oml.c +++ b/src/osmo-bts-litecell15/oml.c @@ -43,6 +43,7 @@ #include <osmo-bts/handover.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "l1_if.h" #include "lc15bts.h" @@ -1891,13 +1892,15 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + break; case NM_OC_RADIO_CARRIER: rc = trx_init(obj); break; case NM_OC_CHANNEL: rc = ts_opstart(obj); break; - case NM_OC_BTS: case NM_OC_BASEB_TRANSC: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: diff --git a/src/osmo-bts-oc2g/oml.c b/src/osmo-bts-oc2g/oml.c index 798be8f..1ebb8b9 100644 --- a/src/osmo-bts-oc2g/oml.c +++ b/src/osmo-bts-oc2g/oml.c @@ -43,6 +43,7 @@ #include <osmo-bts/handover.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "l1_if.h" #include "oc2gbts.h" @@ -1900,25 +1901,25 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK); + break; case NM_OC_RADIO_CARRIER: rc = trx_init(obj); break; case NM_OC_CHANNEL: rc = ts_opstart(obj); break; - case NM_OC_BTS: case NM_OC_BASEB_TRANSC: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: case NM_OC_GPRS_NSVC: oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, -1); rc = oml_mo_opstart_ack(mo); - if (mo->obj_class == NM_OC_BTS) { - oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK); - } break; default: rc = oml_mo_opstart_nack(mo, NM_NACK_OBJCLASS_NOTSUPP); diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c index 1d34378..8156c49 100644 --- a/src/osmo-bts-octphy/l1_oml.c +++ b/src/osmo-bts-octphy/l1_oml.c @@ -39,6 +39,7 @@ #include <osmo-bts/bts_model.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "l1_if.h" #include "l1_oml.h" @@ -1770,6 +1771,9 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + break; case NM_OC_RADIO_CARRIER: rc = trx_init(obj); break; @@ -1777,7 +1781,6 @@ ts = (struct gsm_bts_trx_ts*) obj; rc = ts_connect_as(ts, ts->pchan, pchan_act_compl_cb, NULL); break; - case NM_OC_BTS: case NM_OC_BASEB_TRANSC: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: diff --git a/src/osmo-bts-omldummy/bts_model.c b/src/osmo-bts-omldummy/bts_model.c index 7ac9391..dee671b 100644 --- a/src/osmo-bts-omldummy/bts_model.c +++ b/src/osmo-bts-omldummy/bts_model.c @@ -35,6 +35,7 @@ #include <osmo-bts/handover.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> /* TODO: check if dummy method is sufficient, else implement */ int bts_model_lchan_deactivate(struct gsm_lchan *lchan) @@ -133,6 +134,9 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + break; case NM_OC_RADIO_CARRIER: trx = (struct gsm_bts_trx*) obj; /* Mark Dependency TS as Offline (ready to be Opstarted) */ @@ -147,7 +151,6 @@ break; case NM_OC_CHANNEL: case NM_OC_BASEB_TRANSC: - case NM_OC_BTS: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: case NM_OC_GPRS_NSVC: diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c index f58a0e6..9bbf02f 100644 --- a/src/osmo-bts-sysmo/oml.c +++ b/src/osmo-bts-sysmo/oml.c @@ -40,6 +40,7 @@ #include <osmo-bts/handover.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "l1_if.h" #include "femtobts.h" @@ -1777,25 +1778,25 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + oml_mo_state_chg(&bts->nm.mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK); + oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK); + break; case NM_OC_RADIO_CARRIER: rc = trx_init(obj); break; case NM_OC_CHANNEL: rc = ts_opstart(obj); break; - case NM_OC_BTS: case NM_OC_BASEB_TRANSC: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: case NM_OC_GPRS_NSVC: oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, -1); rc = oml_mo_opstart_ack(mo); - if (mo->obj_class == NM_OC_BTS) { - oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK); - oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK); - } break; default: rc = oml_mo_opstart_nack(mo, NM_NACK_OBJCLASS_NOTSUPP); diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c index c19a1a6..03835a0 100644 --- a/src/osmo-bts-trx/l1_if.c +++ b/src/osmo-bts-trx/l1_if.c @@ -45,6 +45,7 @@ #include <osmo-bts/scheduler.h> #include <osmo-bts/pcu_if.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "l1_if.h" #include "trx_if.h" @@ -620,12 +621,14 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + break; case NM_OC_RADIO_CARRIER: /* activate transceiver */ rc = trx_init(obj); break; case NM_OC_CHANNEL: - case NM_OC_BTS: case NM_OC_BASEB_TRANSC: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: diff --git a/src/osmo-bts-virtual/bts_model.c b/src/osmo-bts-virtual/bts_model.c index 47f0ba2..66240e2 100644 --- a/src/osmo-bts-virtual/bts_model.c +++ b/src/osmo-bts-virtual/bts_model.c @@ -35,6 +35,7 @@ #include <osmo-bts/handover.h> #include <osmo-bts/l1sap.h> #include <osmo-bts/nm_bts_sm_fsm.h> +#include <osmo-bts/nm_bts_fsm.h> #include "virtual_um.h" @@ -147,6 +148,9 @@ case NM_OC_SITE_MANAGER: rc = osmo_fsm_inst_dispatch(bts->site_mgr.fi, NM_BTS_SM_EV_OPSTART_ACK, NULL); break; + case NM_OC_BTS: + rc = osmo_fsm_inst_dispatch(bts->nm.fi, NM_BTS_EV_OPSTART_ACK, NULL); + break; case NM_OC_RADIO_CARRIER: trx = (struct gsm_bts_trx*) obj; /* Mark Dependency TS as Offline (ready to be Opstarted) */ @@ -161,7 +165,6 @@ break; case NM_OC_CHANNEL: case NM_OC_BASEB_TRANSC: - case NM_OC_BTS: case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: case NM_OC_GPRS_NSVC: -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/20409 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: Iae631bcc7acdf955296b124707e42d5e565af186 Gerrit-Change-Number: 20409 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201002/c791c70e/attachment.htm>