Change in osmo-bts[master]: nm_*_fsm: Move to state Disabled NotInstalled Locked when shtudown pr...

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.org
Thu Sep 16 16:51:34 UTC 2021


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/25491 )


Change subject: nm_*_fsm: Move to state Disabled NotInstalled Locked when shtudown proc ends
......................................................................

nm_*_fsm: Move to state Disabled NotInstalled Locked when shtudown proc ends

Change-Id: I5c070adbba6b4abb19467a02d6449a443657ae2b
---
M include/osmo-bts/nm_common_fsm.h
M src/common/bts_shutdown_fsm.c
M src/common/nm_bb_transc_fsm.c
M src/common/nm_bts_fsm.c
M src/common/nm_bts_sm_fsm.c
M src/common/nm_channel_fsm.c
M src/common/nm_common_fsm.c
M src/common/nm_radio_carrier_fsm.c
8 files changed, 85 insertions(+), 20 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/91/25491/1

diff --git a/include/osmo-bts/nm_common_fsm.h b/include/osmo-bts/nm_common_fsm.h
index 4dab0ea..13d7e0c 100644
--- a/include/osmo-bts/nm_common_fsm.h
+++ b/include/osmo-bts/nm_common_fsm.h
@@ -32,6 +32,7 @@
 	NM_EV_OPSTART_ACK,
 	NM_EV_OPSTART_NACK,
 	NM_EV_SHUTDOWN_START,
+	NM_EV_SHUTDOWN_FINISH,
 	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 cffe7cd..a9db76f 100644
--- a/src/common/bts_shutdown_fsm.c
+++ b/src/common/bts_shutdown_fsm.c
@@ -152,6 +152,10 @@
 
 static void st_exit_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
 {
+	struct gsm_bts *bts = (struct gsm_bts *)fi->priv;
+
+	osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_SHUTDOWN_FINISH, NULL);
+
 	LOGPFSML(fi, LOGL_NOTICE, "Shutdown process completed successfuly, exiting process\n");
 	exit(0);
 }
diff --git a/src/common/nm_bb_transc_fsm.c b/src/common/nm_bb_transc_fsm.c
index 342699c..c270f7d 100644
--- a/src/common/nm_bb_transc_fsm.c
+++ b/src/common/nm_bb_transc_fsm.c
@@ -41,6 +41,17 @@
 #define nm_bb_transc_fsm_state_chg(fi, NEXT_STATE) \
 	osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 0)
 
+static void ev_dispatch_children(struct gsm_bts_bb_trx *bb_transc, uint32_t event)
+{
+	struct gsm_bts_trx *trx = gsm_bts_bb_trx_get_trx(bb_transc);
+	uint8_t tn;
+
+	for (tn = 0; tn < TRX_NR_TS; tn++) {
+		struct gsm_bts_trx_ts *ts = &trx->ts[tn];
+		osmo_fsm_inst_dispatch(ts->mo.fi, event, NULL);
+	}
+}
+
 //////////////////////////
 // FSM STATE ACTIONS
 //////////////////////////
@@ -184,8 +195,6 @@
 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:
@@ -193,10 +202,12 @@
 		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);
-		}
+		ev_dispatch_children(bb_transc, event);
+		break;
+	case NM_EV_SHUTDOWN_FINISH:
+		/* Propagate event to children: */
+		ev_dispatch_children(bb_transc, event);
+		nm_bb_transc_fsm_state_chg(fi, NM_BBTRANSC_ST_OP_DISABLED_NOTINSTALLED);
 		break;
 	default:
 		OSMO_ASSERT(false);
@@ -213,6 +224,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_BBTRANSC_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BBTRANSC_ST_OP_DISABLED_OFFLINE),
 		.name = "DISABLED_NOTINSTALLED",
 		.onenter = st_op_disabled_notinstalled_on_enter,
@@ -228,6 +240,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_BBTRANSC_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BBTRANSC_ST_OP_ENABLED),
 		.name = "DISABLED_OFFLINE",
 		.onenter = st_op_disabled_offline_on_enter,
@@ -239,6 +252,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_BBTRANSC_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BBTRANSC_ST_OP_DISABLED_OFFLINE),
 		.name = "ENABLED",
 		.onenter = st_op_enabled_on_enter,
@@ -252,7 +266,8 @@
 	.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),
+	.allstate_event_mask = X(NM_EV_SHUTDOWN_START) |
+			       X(NM_EV_SHUTDOWN_FINISH),
 	.log_subsys = DOML,
 };
 
diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c
index 93e5740..9210e7a 100644
--- a/src/common/nm_bts_fsm.c
+++ b/src/common/nm_bts_fsm.c
@@ -41,6 +41,15 @@
 #define nm_bts_fsm_state_chg(fi, NEXT_STATE) \
 	osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 0)
 
+static void ev_dispatch_children(struct gsm_bts *bts, uint32_t event)
+{
+	struct gsm_bts_trx *trx;
+	llist_for_each_entry(trx, &bts->trx_list, list) {
+		osmo_fsm_inst_dispatch(trx->mo.fi, event, NULL);
+		osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, event, NULL);
+	}
+}
+
 //////////////////////////
 // FSM STATE ACTIONS
 //////////////////////////
@@ -105,7 +114,6 @@
 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:
@@ -113,10 +121,12 @@
 		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);
-		}
+		ev_dispatch_children(bts, event);
+		break;
+	case NM_EV_SHUTDOWN_FINISH:
+		/* Propagate event to children: */
+		ev_dispatch_children(bts, event);
+		nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_DISABLED_NOTINSTALLED);
 		break;
 	default:
 		OSMO_ASSERT(false);
@@ -128,6 +138,7 @@
 		.in_event_mask =
 			X(NM_EV_SW_ACT),
 		.out_state_mask =
+			X(NM_BTS_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BTS_ST_OP_DISABLED_OFFLINE),
 		.name = "DISABLED_NOTINSTALLED",
 		.onenter = st_op_disabled_notinstalled_on_enter,
@@ -138,6 +149,7 @@
 			X(NM_EV_OPSTART_ACK) |
 			X(NM_EV_OPSTART_NACK),
 		.out_state_mask =
+			X(NM_BTS_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BTS_ST_OP_ENABLED),
 		.name = "DISABLED_OFFLINE",
 		.onenter = st_op_disabled_offline_on_enter,
@@ -145,7 +157,8 @@
 	},
 	[NM_BTS_ST_OP_ENABLED] = {
 		.in_event_mask = 0,
-		.out_state_mask = 0,
+		.out_state_mask =
+			X(NM_BTS_ST_OP_DISABLED_NOTINSTALLED),
 		.name = "ENABLED",
 		.onenter = st_op_enabled_on_enter,
 		.action = st_op_enabled,
@@ -158,7 +171,8 @@
 	.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),
+	.allstate_event_mask = X(NM_EV_SHUTDOWN_START) |
+			       X(NM_EV_SHUTDOWN_FINISH),
 	.log_subsys = DOML,
 };
 
diff --git a/src/common/nm_bts_sm_fsm.c b/src/common/nm_bts_sm_fsm.c
index e958917..267341e 100644
--- a/src/common/nm_bts_sm_fsm.c
+++ b/src/common/nm_bts_sm_fsm.c
@@ -41,6 +41,13 @@
 #define nm_bts_sm_fsm_state_chg(fi, NEXT_STATE) \
 	osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 0)
 
+
+static void ev_dispatch_children(struct gsm_bts_sm *site_mgr, uint32_t event)
+{
+	struct gsm_bts *bts = gsm_bts_sm_get_bts(site_mgr);
+	osmo_fsm_inst_dispatch(bts->mo.fi, event, NULL);
+}
+
 //////////////////////////
 // FSM STATE ACTIONS
 //////////////////////////
@@ -105,7 +112,6 @@
 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:
@@ -113,7 +119,12 @@
 		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);
+		ev_dispatch_children(site_mgr, event);
+		break;
+	case NM_EV_SHUTDOWN_FINISH:
+		/* Propagate event to children: */
+		ev_dispatch_children(site_mgr, event);
+		nm_bts_sm_fsm_state_chg(fi, NM_BTS_SM_ST_OP_DISABLED_NOTINSTALLED);
 		break;
 	default:
 		OSMO_ASSERT(false);
@@ -125,6 +136,7 @@
 		.in_event_mask =
 			X(NM_EV_SW_ACT),
 		.out_state_mask =
+			X(NM_BTS_SM_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BTS_SM_ST_OP_DISABLED_OFFLINE),
 		.name = "DISABLED_NOTINSTALLED",
 		.onenter = st_op_disabled_notinstalled_on_enter,
@@ -135,6 +147,7 @@
 			X(NM_EV_OPSTART_ACK) |
 			X(NM_EV_OPSTART_NACK),
 		.out_state_mask =
+			X(NM_BTS_SM_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_BTS_SM_ST_OP_ENABLED),
 		.name = "DISABLED_OFFLINE",
 		.onenter = st_op_disabled_offline_on_enter,
@@ -142,7 +155,8 @@
 	},
 	[NM_BTS_SM_ST_OP_ENABLED] = {
 		.in_event_mask = 0,
-		.out_state_mask = 0,
+		.out_state_mask =
+			X(NM_BTS_SM_ST_OP_DISABLED_NOTINSTALLED),
 		.name = "ENABLED",
 		.onenter = st_op_enabled_on_enter,
 		.action = st_op_enabled,
@@ -155,7 +169,8 @@
 	.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),
+	.allstate_event_mask = X(NM_EV_SHUTDOWN_START) |
+			       X(NM_EV_SHUTDOWN_FINISH),
 	.log_subsys = DOML,
 };
 
diff --git a/src/common/nm_channel_fsm.c b/src/common/nm_channel_fsm.c
index fc3c8a9..e6c296f 100644
--- a/src/common/nm_channel_fsm.c
+++ b/src/common/nm_channel_fsm.c
@@ -177,6 +177,9 @@
 		/* Announce we start shutting down */
 		oml_mo_state_chg(&ts->mo, -1, -1, NM_STATE_SHUTDOWN);
 		break;
+	case NM_EV_SHUTDOWN_FINISH:
+		nm_chan_fsm_state_chg(fi, NM_CHAN_ST_OP_DISABLED_NOTINSTALLED);
+		break;
 	default:
 		OSMO_ASSERT(false);
 	}
@@ -187,6 +190,7 @@
 		.in_event_mask =
 			X(NM_EV_BBTRANSC_INSTALLED),
 		.out_state_mask =
+			X(NM_CHAN_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_CHAN_ST_OP_DISABLED_OFFLINE) |
 			X(NM_CHAN_ST_OP_DISABLED_DEPENDENCY),
 		.name = "DISABLED_NOTINSTALLED",
@@ -202,6 +206,7 @@
 			X(NM_EV_BBTRANSC_DISABLED) |
 			X(NM_EV_RCARRIER_DISABLED),
 		.out_state_mask =
+			X(NM_CHAN_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_CHAN_ST_OP_DISABLED_OFFLINE) |
 			X(NM_CHAN_ST_OP_ENABLED), /* backward compatibility, buggy BSC */
 		.name = "DISABLED_DEPENDENCY",
@@ -215,6 +220,7 @@
 			X(NM_EV_BBTRANSC_DISABLED) |
 			X(NM_EV_RCARRIER_DISABLED),
 		.out_state_mask =
+			X(NM_CHAN_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_CHAN_ST_OP_ENABLED) |
 			X(NM_CHAN_ST_OP_DISABLED_DEPENDENCY),
 		.name = "DISABLED_OFFLINE",
@@ -227,6 +233,7 @@
 			X(NM_EV_RCARRIER_DISABLED) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_CHAN_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_CHAN_ST_OP_DISABLED_OFFLINE) |
 			X(NM_CHAN_ST_OP_DISABLED_DEPENDENCY),
 		.name = "ENABLED",
@@ -241,7 +248,8 @@
 	.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),
+	.allstate_event_mask = X(NM_EV_SHUTDOWN_START) |
+			       X(NM_EV_SHUTDOWN_FINISH),
 	.log_subsys = DOML,
 };
 
diff --git a/src/common/nm_common_fsm.c b/src/common/nm_common_fsm.c
index 3b73605..2182fef 100644
--- a/src/common/nm_common_fsm.c
+++ b/src/common/nm_common_fsm.c
@@ -28,6 +28,7 @@
 	{ NM_EV_OPSTART_ACK, "OPSTART_ACK" },
 	{ NM_EV_OPSTART_NACK, "OPSTART_NACK" },
 	{ NM_EV_SHUTDOWN_START, "SHUTDOWN_START" },
+	{ NM_EV_SHUTDOWN_FINISH, "SHUTDOWN_FINISH" },
 	{ 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 daae6a6..2772f19 100644
--- a/src/common/nm_radio_carrier_fsm.c
+++ b/src/common/nm_radio_carrier_fsm.c
@@ -180,6 +180,9 @@
 		/* Announce we start shutting down */
 		oml_mo_state_chg(&trx->mo, -1, -1, NM_STATE_SHUTDOWN);
 		break;
+	case NM_EV_SHUTDOWN_FINISH:
+		nm_rcarrier_fsm_state_chg(fi, NM_RCARRIER_ST_OP_DISABLED_NOTINSTALLED);
+		break;
 	default:
 		OSMO_ASSERT(false);
 	}
@@ -195,6 +198,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_RCARRIER_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_RCARRIER_ST_OP_DISABLED_OFFLINE),
 		.name = "DISABLED_NOTINSTALLED",
 		.onenter = st_op_disabled_notinstalled_on_enter,
@@ -210,6 +214,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_RCARRIER_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_RCARRIER_ST_OP_ENABLED),
 		.name = "DISABLED_OFFLINE",
 		.onenter = st_op_disabled_offline_on_enter,
@@ -221,6 +226,7 @@
 			X(NM_EV_PHYLINK_DOWN) |
 			X(NM_EV_DISABLE),
 		.out_state_mask =
+			X(NM_RCARRIER_ST_OP_DISABLED_NOTINSTALLED) |
 			X(NM_RCARRIER_ST_OP_DISABLED_OFFLINE),
 		.name = "ENABLED",
 		.onenter = st_op_enabled_on_enter,
@@ -234,7 +240,8 @@
 	.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),
+	.allstate_event_mask = X(NM_EV_SHUTDOWN_START) |
+			       X(NM_EV_SHUTDOWN_FINISH),
 	.log_subsys = DOML,
 };
 

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/25491
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I5c070adbba6b4abb19467a02d6449a443657ae2b
Gerrit-Change-Number: 25491
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/20210916/c1f16c67/attachment.htm>


More information about the gerrit-log mailing list