aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-21 01:48:30 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-21 01:48:38 +0700
commita1745e3bdde1c5db0a8650d9cf5003c9c0da057f (patch)
tree163dd14934fb1b6ea27f604c28d1c8b6780b16ed
parentfaf7592bf56231b76e6ad550f477a70aacd54b93 (diff)
abis_nm: handle NM_EV_SW_ACT_REP in ST_OP_DISABLED_{DEPENDENCY,OFFLINE}
3GPP TS 52.021 does not strictly mandate that the SW Activated Report can only be received in state DISABLED/OFFLINE. The only requirement is that the software load procedure (if needed) and activation is to be performed in this state. The successful outcome of software activation procedure is indicated by the BTS using the above-mentioned SW Activated Report message, which may be received in ST_OP_DISABLED_{DEPENDENCY,OFFLINE} too. The MO state changes are triggered by the State Changed Event Report messages, and happen asynchronously with the software activation. This patch fixes the following warnings seen with a nanoBTS: NM_BTS_OP(bts2){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_GPRS_NSE_OP(nse2){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_GPRS_CELL_OP(gprs-cell2){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_GPRS_NSVC_OP(nsvc0){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_GPRS_NSVC_OP(nsvc1){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_BB_TRANSC_OP(bts2-trx0){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts0){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts1){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts2){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts3){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts4){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts5){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts6){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_CHAN_OP(bts2-trx0-ts7){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted NM_RCARRIER_OP(bts2-trx0){DISABLED_OFFLINE}: Event SW_ACT_REP not permitted The following warning is still expected to show up though: NM_BTS_SM_OP(bts_sm){ENABLED}: Event SW_ACT_REP not permitted but is caused by a different problem, which is to be fixed later. Change-Id: I00a423adcde5c34977f4c4dad920874687fa493c
-rw-r--r--src/osmo-bsc/nm_bb_transc_fsm.c8
-rw-r--r--src/osmo-bsc/nm_bts_fsm.c8
-rw-r--r--src/osmo-bsc/nm_bts_sm_fsm.c6
-rw-r--r--src/osmo-bsc/nm_channel_fsm.c8
-rw-r--r--src/osmo-bsc/nm_gprs_cell_fsm.c8
-rw-r--r--src/osmo-bsc/nm_gprs_nse_fsm.c8
-rw-r--r--src/osmo-bsc/nm_gprs_nsvc_fsm.c4
-rw-r--r--src/osmo-bsc/nm_rcarrier_fsm.c8
8 files changed, 58 insertions, 0 deletions
diff --git a/src/osmo-bsc/nm_bb_transc_fsm.c b/src/osmo-bsc/nm_bb_transc_fsm.c
index b68dc6720..ce2f3e951 100644
--- a/src/osmo-bsc/nm_bb_transc_fsm.c
+++ b/src/osmo-bsc/nm_bb_transc_fsm.c
@@ -175,6 +175,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(bb_transc, &bb_transc->mo.nm_state, false);
+ break;
case NM_EV_GET_ATTR_REP:
bb_transc->mo.get_attr_rep_received = true;
bb_transc->mo.get_attr_sent = false;
@@ -234,6 +237,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(bb_transc, &bb_transc->mo.nm_state, true);
+ break;
case NM_EV_GET_ATTR_REP:
bb_transc->mo.get_attr_rep_received = true;
bb_transc->mo.get_attr_sent = false;
@@ -375,6 +381,7 @@ static struct osmo_fsm_state nm_bb_transc_fsm_states[] = {
},
[NM_BB_TRANSC_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_GET_ATTR_REP) |
X(NM_EV_RSL_CONNECT_ACK) |
@@ -390,6 +397,7 @@ static struct osmo_fsm_state nm_bb_transc_fsm_states[] = {
},
[NM_BB_TRANSC_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_GET_ATTR_REP) |
X(NM_EV_RSL_CONNECT_ACK) |
diff --git a/src/osmo-bsc/nm_bts_fsm.c b/src/osmo-bsc/nm_bts_fsm.c
index 544efb413..937b63db1 100644
--- a/src/osmo-bsc/nm_bts_fsm.c
+++ b/src/osmo-bsc/nm_bts_fsm.c
@@ -179,6 +179,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(bts, &bts->mo.nm_state, false);
+ break;
case NM_EV_GET_ATTR_REP:
rx_get_attr_rep(bts, false);
return;
@@ -232,6 +235,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(bts, &bts->mo.nm_state, true);
+ break;
case NM_EV_GET_ATTR_REP:
rx_get_attr_rep(bts, true);
return;
@@ -366,6 +372,7 @@ static struct osmo_fsm_state nm_bts_fsm_states[] = {
},
[NM_BTS_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_GET_ATTR_REP) |
X(NM_EV_SET_ATTR_ACK) |
@@ -380,6 +387,7 @@ static struct osmo_fsm_state nm_bts_fsm_states[] = {
},
[NM_BTS_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_GET_ATTR_REP) |
X(NM_EV_SET_ATTR_ACK) |
diff --git a/src/osmo-bsc/nm_bts_sm_fsm.c b/src/osmo-bsc/nm_bts_sm_fsm.c
index cb67099f2..70b065620 100644
--- a/src/osmo-bsc/nm_bts_sm_fsm.c
+++ b/src/osmo-bsc/nm_bts_sm_fsm.c
@@ -120,6 +120,7 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
case NM_EV_SETUP_RAMP_READY:
break;
case NM_EV_STATE_CHG_REP:
@@ -160,6 +161,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
struct gsm_bts_sm *site_mgr = (struct gsm_bts_sm *)fi->priv;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(site_mgr, &site_mgr->mo.nm_state, true);
+ break;
case NM_EV_STATE_CHG_REP:
nsd = (struct nm_statechg_signal_data *)data;
new_state = &nsd->new_state;
@@ -255,6 +259,7 @@ static struct osmo_fsm_state nm_bts_sm_fsm_states[] = {
},
[NM_BTS_SM_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SETUP_RAMP_READY),
.out_state_mask =
@@ -266,6 +271,7 @@ static struct osmo_fsm_state nm_bts_sm_fsm_states[] = {
},
[NM_BTS_SM_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SETUP_RAMP_READY),
.out_state_mask =
diff --git a/src/osmo-bsc/nm_channel_fsm.c b/src/osmo-bsc/nm_channel_fsm.c
index af201cf71..1309ebd08 100644
--- a/src/osmo-bsc/nm_channel_fsm.c
+++ b/src/osmo-bsc/nm_channel_fsm.c
@@ -136,6 +136,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(ts, &ts->mo.nm_state, false);
+ break;
case NM_EV_SET_ATTR_ACK:
ts->mo.set_attr_ack_received = true;
ts->mo.set_attr_sent = false;
@@ -186,6 +189,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(ts, &ts->mo.nm_state, true);
+ break;
case NM_EV_SET_ATTR_ACK:
ts->mo.set_attr_ack_received = true;
ts->mo.set_attr_sent = false;
@@ -312,6 +318,7 @@ static struct osmo_fsm_state nm_chan_fsm_states[] = {
},
[NM_CHAN_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
@@ -325,6 +332,7 @@ static struct osmo_fsm_state nm_chan_fsm_states[] = {
},
[NM_CHAN_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
diff --git a/src/osmo-bsc/nm_gprs_cell_fsm.c b/src/osmo-bsc/nm_gprs_cell_fsm.c
index 2f139a6ae..40514a81c 100644
--- a/src/osmo-bsc/nm_gprs_cell_fsm.c
+++ b/src/osmo-bsc/nm_gprs_cell_fsm.c
@@ -145,6 +145,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(cell, &cell->mo.nm_state, false);
+ break;
case NM_EV_SET_ATTR_ACK:
cell->mo.set_attr_ack_received = true;
cell->mo.set_attr_sent = false;
@@ -196,6 +199,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(cell, &cell->mo.nm_state, true);
+ break;
case NM_EV_SET_ATTR_ACK:
cell->mo.set_attr_ack_received = true;
cell->mo.set_attr_sent = false;
@@ -325,6 +331,7 @@ static struct osmo_fsm_state nm_gprs_cell_fsm_states[] = {
},
[NM_GPRS_CELL_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
@@ -338,6 +345,7 @@ static struct osmo_fsm_state nm_gprs_cell_fsm_states[] = {
},
[NM_GPRS_CELL_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
diff --git a/src/osmo-bsc/nm_gprs_nse_fsm.c b/src/osmo-bsc/nm_gprs_nse_fsm.c
index 882dbafd7..df4113c98 100644
--- a/src/osmo-bsc/nm_gprs_nse_fsm.c
+++ b/src/osmo-bsc/nm_gprs_nse_fsm.c
@@ -146,6 +146,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(nse, &nse->mo.nm_state, false);
+ break;
case NM_EV_SET_ATTR_ACK:
nse->mo.set_attr_ack_received = true;
nse->mo.set_attr_sent = false;
@@ -197,6 +200,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(nse, &nse->mo.nm_state, true);
+ break;
case NM_EV_SET_ATTR_ACK:
nse->mo.set_attr_ack_received = true;
nse->mo.set_attr_sent = false;
@@ -327,6 +333,7 @@ static struct osmo_fsm_state nm_gprs_nse_fsm_states[] = {
},
[NM_GPRS_NSE_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
@@ -340,6 +347,7 @@ static struct osmo_fsm_state nm_gprs_nse_fsm_states[] = {
},
[NM_GPRS_NSE_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
diff --git a/src/osmo-bsc/nm_gprs_nsvc_fsm.c b/src/osmo-bsc/nm_gprs_nsvc_fsm.c
index d441f58cf..e6e3b3987 100644
--- a/src/osmo-bsc/nm_gprs_nsvc_fsm.c
+++ b/src/osmo-bsc/nm_gprs_nsvc_fsm.c
@@ -176,6 +176,7 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
case NM_EV_FEATURE_NEGOTIATED:
configure_loop(nsvc, &nsvc->mo.nm_state, false);
return;
@@ -229,6 +230,7 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
case NM_EV_FEATURE_NEGOTIATED:
configure_loop(nsvc, &nsvc->mo.nm_state, true);
return;
@@ -355,6 +357,7 @@ static struct osmo_fsm_state nm_gprs_nsvc_fsm_states[] = {
},
[NM_GPRS_NSVC_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_FEATURE_NEGOTIATED) |
X(NM_EV_SET_ATTR_ACK) |
@@ -369,6 +372,7 @@ static struct osmo_fsm_state nm_gprs_nsvc_fsm_states[] = {
},
[NM_GPRS_NSVC_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_FEATURE_NEGOTIATED) |
X(NM_EV_SET_ATTR_ACK) |
diff --git a/src/osmo-bsc/nm_rcarrier_fsm.c b/src/osmo-bsc/nm_rcarrier_fsm.c
index 824b2ed0c..15e7c9f35 100644
--- a/src/osmo-bsc/nm_rcarrier_fsm.c
+++ b/src/osmo-bsc/nm_rcarrier_fsm.c
@@ -151,6 +151,9 @@ static void st_op_disabled_dependency(struct osmo_fsm_inst *fi, uint32_t event,
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(trx, &trx->mo.nm_state, false);
+ break;
case NM_EV_SET_ATTR_ACK:
trx->mo.set_attr_ack_received = true;
trx->mo.set_attr_sent = false;
@@ -201,6 +204,9 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
const struct gsm_nm_state *new_state;
switch (event) {
+ case NM_EV_SW_ACT_REP:
+ configure_loop(trx, &trx->mo.nm_state, true);
+ break;
case NM_EV_SET_ATTR_ACK:
trx->mo.set_attr_ack_received = true;
trx->mo.set_attr_sent = false;
@@ -348,6 +354,7 @@ static struct osmo_fsm_state nm_rcarrier_fsm_states[] = {
},
[NM_RCARRIER_ST_OP_DISABLED_DEPENDENCY] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),
@@ -361,6 +368,7 @@ static struct osmo_fsm_state nm_rcarrier_fsm_states[] = {
},
[NM_RCARRIER_ST_OP_DISABLED_OFFLINE] = {
.in_event_mask =
+ X(NM_EV_SW_ACT_REP) |
X(NM_EV_STATE_CHG_REP) |
X(NM_EV_SET_ATTR_ACK) |
X(NM_EV_SETUP_RAMP_READY),