diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-09-16 17:27:00 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-09-20 12:22:53 +0200 |
commit | 43a4a1d5e76c93cf771d75de573b8de6f3c5c43b (patch) | |
tree | c523bdcf2ee23789dac37b2ac2d3ff8c011ed289 | |
parent | ea53ad454e91a4ea41671788d12e2f94eeb00ffc (diff) |
nm_*_fsm: Set adminsitrative state 'shutting down' when shutdown procedure starts
Change-Id: I0d14840a55642812b865687a6cb208e7ffd22829
-rw-r--r-- | include/osmo-bts/nm_common_fsm.h | 1 | ||||
-rw-r--r-- | src/common/bts_shutdown_fsm.c | 4 | ||||
-rw-r--r-- | src/common/nm_bb_transc_fsm.c | 24 | ||||
-rw-r--r-- | src/common/nm_bts_fsm.c | 23 | ||||
-rw-r--r-- | src/common/nm_bts_sm_fsm.c | 20 | ||||
-rw-r--r-- | src/common/nm_channel_fsm.c | 16 | ||||
-rw-r--r-- | src/common/nm_common_fsm.c | 1 | ||||
-rw-r--r-- | src/common/nm_radio_carrier_fsm.c | 16 |
8 files changed, 105 insertions, 0 deletions
diff --git a/include/osmo-bts/nm_common_fsm.h b/include/osmo-bts/nm_common_fsm.h index 4679b235..4dab0ea5 100644 --- a/include/osmo-bts/nm_common_fsm.h +++ b/include/osmo-bts/nm_common_fsm.h @@ -31,6 +31,7 @@ enum nm_fsm_events { NM_EV_SW_ACT, NM_EV_OPSTART_ACK, NM_EV_OPSTART_NACK, + NM_EV_SHUTDOWN_START, NM_EV_RSL_UP, /* RadioCarrier and BaseBand Transceiver only */ NM_EV_RSL_DOWN, /* RadioCarrier and BaseBand Transceiver only */ NM_EV_PHYLINK_UP, /* RadioCarrier and BaseBand Transceiver only */ diff --git a/src/common/bts_shutdown_fsm.c b/src/common/bts_shutdown_fsm.c index 0ac30789..cffe7cd0 100644 --- a/src/common/bts_shutdown_fsm.c +++ b/src/common/bts_shutdown_fsm.c @@ -29,6 +29,7 @@ #include <osmo-bts/gsm_data.h> #include <osmo-bts/bts_model.h> #include <osmo-bts/bts.h> +#include <osmo-bts/nm_common_fsm.h> #define X(s) (1 << (s)) @@ -58,6 +59,9 @@ static void st_none(struct osmo_fsm_inst *fi, uint32_t event, void *data) unsigned int count; switch(event) { case BTS_SHUTDOWN_EV_START: + /* Firt announce to NM objects that we are starting a shutdown procedure: */ + osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_SHUTDOWN_START, NULL); + count = count_trx_operational(bts); if (count) { bts_shutdown_fsm_state_chg(fi, BTS_SHUTDOWN_ST_WAIT_RAMP_DOWN_COMPL); diff --git a/src/common/nm_bb_transc_fsm.c b/src/common/nm_bb_transc_fsm.c index 75ff1aae..a909c8bd 100644 --- a/src/common/nm_bb_transc_fsm.c +++ b/src/common/nm_bb_transc_fsm.c @@ -181,6 +181,28 @@ static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) nm_bb_transc_fsm_state_chg(fi, NM_BBTRANSC_ST_OP_DISABLED_OFFLINE); } +static void nm_bb_transc_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts_bb_trx *bb_transc = (struct gsm_bts_bb_trx *)fi->priv; + struct gsm_bts_trx *trx = gsm_bts_bb_trx_get_trx(bb_transc); + uint8_t tn; + + switch (event) { + case NM_EV_SHUTDOWN_START: + /* Announce we start shutting down */ + oml_mo_state_chg(&bb_transc->mo, -1, -1, NM_STATE_SHUTDOWN); + + /* Propagate event to children: */ + for (tn = 0; tn < TRX_NR_TS; tn++) { + struct gsm_bts_trx_ts *ts = &trx->ts[tn]; + osmo_fsm_inst_dispatch(ts->mo.fi, NM_EV_SHUTDOWN_START, NULL); + } + break; + default: + OSMO_ASSERT(false); + } +} + static struct osmo_fsm_state nm_bb_transc_fsm_states[] = { [NM_BBTRANSC_ST_OP_DISABLED_NOTINSTALLED] = { .in_event_mask = @@ -229,6 +251,8 @@ struct osmo_fsm nm_bb_transc_fsm = { .states = nm_bb_transc_fsm_states, .num_states = ARRAY_SIZE(nm_bb_transc_fsm_states), .event_names = nm_fsm_event_names, + .allstate_action = nm_bb_transc_allstate, + .allstate_event_mask = X(NM_EV_SHUTDOWN_START), .log_subsys = DOML, }; diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c index 6575b542..93e5740b 100644 --- a/src/common/nm_bts_fsm.c +++ b/src/common/nm_bts_fsm.c @@ -102,6 +102,27 @@ static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) { } +static void nm_bts_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + struct gsm_bts_trx *trx; + + switch (event) { + case NM_EV_SHUTDOWN_START: + /* Announce we start shutting down */ + oml_mo_state_chg(&bts->mo, -1, -1, NM_STATE_SHUTDOWN); + + /* Propagate event to children: */ + llist_for_each_entry(trx, &bts->trx_list, list) { + osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_SHUTDOWN_START, NULL); + osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_SHUTDOWN_START, NULL); + } + break; + default: + OSMO_ASSERT(false); + } +} + static struct osmo_fsm_state nm_bts_fsm_states[] = { [NM_BTS_ST_OP_DISABLED_NOTINSTALLED] = { .in_event_mask = @@ -136,6 +157,8 @@ struct osmo_fsm nm_bts_fsm = { .states = nm_bts_fsm_states, .num_states = ARRAY_SIZE(nm_bts_fsm_states), .event_names = nm_fsm_event_names, + .allstate_action = nm_bts_allstate, + .allstate_event_mask = X(NM_EV_SHUTDOWN_START), .log_subsys = DOML, }; diff --git a/src/common/nm_bts_sm_fsm.c b/src/common/nm_bts_sm_fsm.c index 864aeab6..e9589178 100644 --- a/src/common/nm_bts_sm_fsm.c +++ b/src/common/nm_bts_sm_fsm.c @@ -102,6 +102,24 @@ static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) { } +static void nm_bts_sm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts_sm *site_mgr = (struct gsm_bts_sm *)fi->priv; + struct gsm_bts *bts = gsm_bts_sm_get_bts(site_mgr); + + switch (event) { + case NM_EV_SHUTDOWN_START: + /* Announce we start shutting down */ + oml_mo_state_chg(&site_mgr->mo, -1, -1, NM_STATE_SHUTDOWN); + + /* Propagate event to children: */ + osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_SHUTDOWN_START, NULL); + break; + default: + OSMO_ASSERT(false); + } +} + static struct osmo_fsm_state nm_bts_sm_fsm_states[] = { [NM_BTS_SM_ST_OP_DISABLED_NOTINSTALLED] = { .in_event_mask = @@ -136,6 +154,8 @@ struct osmo_fsm nm_bts_sm_fsm = { .states = nm_bts_sm_fsm_states, .num_states = ARRAY_SIZE(nm_bts_sm_fsm_states), .event_names = nm_fsm_event_names, + .allstate_action = nm_bts_sm_allstate, + .allstate_event_mask = X(NM_EV_SHUTDOWN_START), .log_subsys = DOML, }; diff --git a/src/common/nm_channel_fsm.c b/src/common/nm_channel_fsm.c index 4983c27e..fc3c8a93 100644 --- a/src/common/nm_channel_fsm.c +++ b/src/common/nm_channel_fsm.c @@ -168,6 +168,20 @@ static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) } } +static void nm_chan_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts_trx_ts *ts = (struct gsm_bts_trx_ts *)fi->priv; + + switch (event) { + case NM_EV_SHUTDOWN_START: + /* Announce we start shutting down */ + oml_mo_state_chg(&ts->mo, -1, -1, NM_STATE_SHUTDOWN); + break; + default: + OSMO_ASSERT(false); + } +} + static struct osmo_fsm_state nm_chan_fsm_states[] = { [NM_CHAN_ST_OP_DISABLED_NOTINSTALLED] = { .in_event_mask = @@ -226,6 +240,8 @@ struct osmo_fsm nm_chan_fsm = { .states = nm_chan_fsm_states, .num_states = ARRAY_SIZE(nm_chan_fsm_states), .event_names = nm_fsm_event_names, + .allstate_action = nm_chan_allstate, + .allstate_event_mask = X(NM_EV_SHUTDOWN_START), .log_subsys = DOML, }; diff --git a/src/common/nm_common_fsm.c b/src/common/nm_common_fsm.c index 7273e22f..3b736054 100644 --- a/src/common/nm_common_fsm.c +++ b/src/common/nm_common_fsm.c @@ -27,6 +27,7 @@ const struct value_string nm_fsm_event_names[] = { { NM_EV_SW_ACT, "SW_ACT" }, { NM_EV_OPSTART_ACK, "OPSTART_ACK" }, { NM_EV_OPSTART_NACK, "OPSTART_NACK" }, + { NM_EV_SHUTDOWN_START, "SHUTDOWN_START" }, { NM_EV_RSL_UP, "RSL_UP" }, { NM_EV_RSL_DOWN, "RSL_DOWN" }, { NM_EV_PHYLINK_UP, "PHYLINK_UP" }, diff --git a/src/common/nm_radio_carrier_fsm.c b/src/common/nm_radio_carrier_fsm.c index 2bae273d..40b93e3c 100644 --- a/src/common/nm_radio_carrier_fsm.c +++ b/src/common/nm_radio_carrier_fsm.c @@ -171,6 +171,20 @@ static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data) nm_rcarrier_fsm_state_chg(fi, NM_RCARRIER_ST_OP_DISABLED_OFFLINE); } +static void nm_rcarrier_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gsm_bts_trx *trx = (struct gsm_bts_trx *)fi->priv; + + switch (event) { + case NM_EV_SHUTDOWN_START: + /* Announce we start shutting down */ + oml_mo_state_chg(&trx->mo, -1, -1, NM_STATE_SHUTDOWN); + break; + default: + OSMO_ASSERT(false); + } +} + static struct osmo_fsm_state nm_rcarrier_fsm_states[] = { [NM_RCARRIER_ST_OP_DISABLED_NOTINSTALLED] = { .in_event_mask = @@ -219,6 +233,8 @@ struct osmo_fsm nm_rcarrier_fsm = { .states = nm_rcarrier_fsm_states, .num_states = ARRAY_SIZE(nm_rcarrier_fsm_states), .event_names = nm_fsm_event_names, + .allstate_action = nm_rcarrier_allstate, + .allstate_event_mask = X(NM_EV_SHUTDOWN_START), .log_subsys = DOML, }; |