pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bts/+/32196 )
Change subject: nm: Drop NM_EV_SETATTR_{ACK/NACK} ......................................................................
nm: Drop NM_EV_SETATTR_{ACK/NACK}
Simply return error codes from lower layer implementations, and do the OML handling in the common NM TS 12.21 FSMs.
As a result, we simplify the logic in the lower layers.
Change-Id: I281c07bb5ad88ee03542f092141cebe036d10aee --- M include/osmo-bts/bts_model.h M include/osmo-bts/nm_common_fsm.h 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 M src/osmo-bts-lc15/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 M tests/stubs.c 16 files changed, 69 insertions(+), 138 deletions(-)
Approvals: laforge: Looks good to me, but someone else must approve fixeria: Looks good to me, approved Jenkins Builder: Verified
diff --git a/include/osmo-bts/bts_model.h b/include/osmo-bts/bts_model.h index ef93fda..23a36ad 100644 --- a/include/osmo-bts/bts_model.h +++ b/include/osmo-bts/bts_model.h @@ -20,7 +20,7 @@ struct tlv_parsed *old_attr, struct tlv_parsed *new_attr, void *obj);
-int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int obj_kind, void *obj);
int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo, diff --git a/include/osmo-bts/nm_common_fsm.h b/include/osmo-bts/nm_common_fsm.h index 2363779..fddc76e 100644 --- a/include/osmo-bts/nm_common_fsm.h +++ b/include/osmo-bts/nm_common_fsm.h @@ -31,8 +31,6 @@ enum nm_fsm_events { NM_EV_SW_ACT, NM_EV_RX_SETATTR, /* data: struct nm_fsm_ev_setattr_data */ - NM_EV_SETATTR_ACK, /* data: struct nm_fsm_ev_setattr_data */ - NM_EV_SETATTR_NACK, /* data: struct nm_fsm_ev_setattr_data */ NM_EV_OPSTART_ACK, NM_EV_OPSTART_NACK, NM_EV_SHUTDOWN_START, @@ -51,9 +49,8 @@ extern const struct value_string nm_fsm_event_names[];
struct nm_fsm_ev_setattr_data { - struct msgb *msg; + const struct msgb *msg; struct tlv_parsed *tp; - int cause; /* set in NM_EV_SETATTR_(N)ACK */ };
diff --git a/src/common/nm_bb_transc_fsm.c b/src/common/nm_bb_transc_fsm.c index 82ef89d..32cbaea 100644 --- a/src/common/nm_bb_transc_fsm.c +++ b/src/common/nm_bb_transc_fsm.c @@ -122,13 +122,15 @@ struct nm_fsm_ev_setattr_data *setattr_data; bool phy_state_connected; bool rsl_link_connected; + int rc;
switch (event) { - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: + case NM_EV_RX_SETATTR: setattr_data = (struct nm_fsm_ev_setattr_data *)data; - bb_transc->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + rc = bts_model_apply_oml(trx->bts, setattr_data->msg, setattr_data->tp, + NM_OC_BASEB_TRANSC, bb_transc); + bb_transc->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: bb_transc->mo.opstart_success = true; @@ -245,8 +247,7 @@ }, [NM_BBTRANSC_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | + X(NM_EV_RX_SETATTR) | X(NM_EV_OPSTART_ACK) | X(NM_EV_OPSTART_NACK) | X(NM_EV_RSL_UP) | diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c index 8ff57fe..4fabbcd 100644 --- a/src/common/nm_bts_fsm.c +++ b/src/common/nm_bts_fsm.c @@ -118,13 +118,8 @@ setattr_data = (struct nm_fsm_ev_setattr_data *)data; rc = bts_model_apply_oml(bts, setattr_data->msg, setattr_data->tp, NM_OC_BTS, bts); - (void)rc; - break; - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: - setattr_data = (struct nm_fsm_ev_setattr_data *)data; - bts->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + bts->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: bts->mo.opstart_success = true; @@ -186,8 +181,6 @@ [NM_BTS_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = X(NM_EV_RX_SETATTR) | - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | X(NM_EV_OPSTART_ACK) | X(NM_EV_OPSTART_NACK), .out_state_mask = diff --git a/src/common/nm_bts_sm_fsm.c b/src/common/nm_bts_sm_fsm.c index 66c4077..708656f 100644 --- a/src/common/nm_bts_sm_fsm.c +++ b/src/common/nm_bts_sm_fsm.c @@ -86,13 +86,15 @@ { struct gsm_bts_sm *site_mgr = (struct gsm_bts_sm *)fi->priv; struct nm_fsm_ev_setattr_data *setattr_data; + int rc;
switch (event) { - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: + case NM_EV_RX_SETATTR: setattr_data = (struct nm_fsm_ev_setattr_data *)data; - site_mgr->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + /* No bts_model_apply_oml() needed yet for site_mgr obj yet: */ + rc = 0; + site_mgr->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: site_mgr->mo.opstart_success = true; @@ -153,8 +155,7 @@ }, [NM_BTS_SM_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | + X(NM_EV_RX_SETATTR) | X(NM_EV_OPSTART_ACK) | X(NM_EV_OPSTART_NACK), .out_state_mask = diff --git a/src/common/nm_channel_fsm.c b/src/common/nm_channel_fsm.c index 557d5b9..a2cf807 100644 --- a/src/common/nm_channel_fsm.c +++ b/src/common/nm_channel_fsm.c @@ -101,13 +101,8 @@ setattr_data = (struct nm_fsm_ev_setattr_data *)data; rc = bts_model_apply_oml(ts->trx->bts, setattr_data->msg, setattr_data->tp, NM_OC_CHANNEL, ts); - (void)rc; - break; - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: - setattr_data = (struct nm_fsm_ev_setattr_data *)data; - ts->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + ts->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: LOGPFSML(fi, LOGL_NOTICE, "BSC trying to activate TS while still in avail=dependency. " @@ -152,13 +147,8 @@ setattr_data = (struct nm_fsm_ev_setattr_data *)data; rc = bts_model_apply_oml(ts->trx->bts, setattr_data->msg, setattr_data->tp, NM_OC_CHANNEL, ts); - (void)rc; - break; - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: - setattr_data = (struct nm_fsm_ev_setattr_data *)data; - ts->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + ts->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: ts->mo.opstart_success = true; @@ -235,8 +225,6 @@ [NM_CHAN_ST_OP_DISABLED_DEPENDENCY] = { .in_event_mask = X(NM_EV_RX_SETATTR) | - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | X(NM_EV_OPSTART_ACK) | /* backward compatibility, buggy BSC */ X(NM_EV_OPSTART_NACK) | X(NM_EV_BBTRANSC_ENABLED) | @@ -254,8 +242,6 @@ [NM_CHAN_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = X(NM_EV_RX_SETATTR) | - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | X(NM_EV_OPSTART_ACK) | X(NM_EV_OPSTART_NACK) | X(NM_EV_BBTRANSC_DISABLED) | diff --git a/src/common/nm_common_fsm.c b/src/common/nm_common_fsm.c index 6a8d3d1..5298e4d 100644 --- a/src/common/nm_common_fsm.c +++ b/src/common/nm_common_fsm.c @@ -25,9 +25,7 @@
const struct value_string nm_fsm_event_names[] = { { NM_EV_SW_ACT, "SW_ACT" }, - { NM_EV_SETATTR_ACK, "RX_SETATTR" }, - { NM_EV_SETATTR_ACK, "SETATTR_ACK" }, - { NM_EV_SETATTR_NACK, "SETATTR_NACK" }, + { NM_EV_RX_SETATTR, "RX_SETATTR" }, { NM_EV_OPSTART_ACK, "OPSTART_ACK" }, { NM_EV_OPSTART_NACK, "OPSTART_NACK" }, { NM_EV_SHUTDOWN_START, "SHUTDOWN_START" }, diff --git a/src/common/nm_radio_carrier_fsm.c b/src/common/nm_radio_carrier_fsm.c index 587847f..40bccb5 100644 --- a/src/common/nm_radio_carrier_fsm.c +++ b/src/common/nm_radio_carrier_fsm.c @@ -110,13 +110,8 @@ setattr_data = (struct nm_fsm_ev_setattr_data *)data; rc = bts_model_apply_oml(trx->bts, setattr_data->msg, setattr_data->tp, NM_OC_RADIO_CARRIER, trx); - (void)rc; - break; - case NM_EV_SETATTR_ACK: - case NM_EV_SETATTR_NACK: - setattr_data = (struct nm_fsm_ev_setattr_data *)data; - trx->mo.setattr_success = setattr_data->cause == 0; - oml_fom_ack_nack_copy_msg(setattr_data->msg, setattr_data->cause); + trx->mo.setattr_success = rc == 0; + oml_fom_ack_nack_copy_msg(setattr_data->msg, rc); break; case NM_EV_OPSTART_ACK: trx->mo.opstart_success = true; @@ -227,8 +222,6 @@ [NM_RCARRIER_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = X(NM_EV_RX_SETATTR) | - X(NM_EV_SETATTR_ACK) | - X(NM_EV_SETATTR_NACK) | X(NM_EV_OPSTART_ACK) | X(NM_EV_OPSTART_NACK) | X(NM_EV_RSL_UP) | diff --git a/src/osmo-bts-lc15/oml.c b/src/osmo-bts-lc15/oml.c index 9502765..ad2653b 100644 --- a/src/osmo-bts-lc15/oml.c +++ b/src/osmo-bts-lc15/oml.c @@ -1801,16 +1801,10 @@ }
/* callback from OML */ -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; - int rc; struct gsm_bts_trx *trx; struct lc15l1_hdl *fl1h;
@@ -1856,10 +1850,7 @@ break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); - return rc; + return 0; }
/* callback from OML */ diff --git a/src/osmo-bts-oc2g/oml.c b/src/osmo-bts-oc2g/oml.c index 40c1c85..6e42154 100644 --- a/src/osmo-bts-oc2g/oml.c +++ b/src/osmo-bts-oc2g/oml.c @@ -1810,16 +1810,10 @@ }
/* callback from OML */ -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; - int rc; struct gsm_bts_trx *trx; struct oc2gl1_hdl *fl1h; uint8_t cell_size; @@ -1861,10 +1855,7 @@ break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); - return rc; + return 0; }
/* callback from OML */ diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c index 8ffd1ac..6b3148c 100644 --- a/src/osmo-bts-octphy/l1_oml.c +++ b/src/osmo-bts-octphy/l1_oml.c @@ -1742,30 +1742,20 @@ }
/* callback from OML */ -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; - int rc; struct gsm_bts_trx *trx;
switch (foh->msg_type) { case NM_MT_SET_RADIO_ATTR: trx = obj; - /*struct octphy_hdl *fl1h = trx_octphy_hdl(trx); */ power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0, NULL); break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); - return rc; + return 0; }
diff --git a/src/osmo-bts-omldummy/bts_model.c b/src/osmo-bts-omldummy/bts_model.c index af358b6..18f1b2c 100644 --- a/src/osmo-bts-omldummy/bts_model.c +++ b/src/osmo-bts-omldummy/bts_model.c @@ -93,32 +93,27 @@ return 0; }
-int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; int rc;
switch (foh->msg_type) { case NM_MT_SET_BTS_ATTR: - ev_data.cause = vbts_set_bts(obj); + rc = vbts_set_bts(obj); break; case NM_MT_SET_RADIO_ATTR: - ev_data.cause = vbts_set_trx(obj); + rc = vbts_set_trx(obj); break; case NM_MT_SET_CHAN_ATTR: - ev_data.cause = vbts_set_ts(obj); + rc = vbts_set_ts(obj); + break; + default: + rc = 0; break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); return rc; }
diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c index 12b50bf..89f990c 100644 --- a/src/osmo-bts-sysmo/oml.c +++ b/src/osmo-bts-sysmo/oml.c @@ -1714,16 +1714,10 @@ }
/* callback from OML */ -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; - int rc; struct gsm_bts_trx *trx; struct femtol1_hdl *fl1h;
@@ -1738,10 +1732,7 @@ break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); - return rc; + return 0; }
/* callback from OML */ diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c index 1834cf5..bf8c75e 100644 --- a/src/osmo-bts-trx/l1_if.c +++ b/src/osmo-bts-trx/l1_if.c @@ -548,32 +548,27 @@ }
/* callback from OML */ -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; int rc;
switch (foh->msg_type) { case NM_MT_SET_BTS_ATTR: - ev_data.cause = trx_set_bts(obj); + rc = trx_set_bts(obj); break; case NM_MT_SET_RADIO_ATTR: - ev_data.cause = trx_set_trx(obj); + rc = trx_set_trx(obj); break; case NM_MT_SET_CHAN_ATTR: - ev_data.cause = trx_set_ts(obj); + rc = trx_set_ts(obj); + break; + default: + rc = 0; break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); return rc; }
diff --git a/src/osmo-bts-virtual/bts_model.c b/src/osmo-bts-virtual/bts_model.c index 477ffb3..7461ce6 100644 --- a/src/osmo-bts-virtual/bts_model.c +++ b/src/osmo-bts-virtual/bts_model.c @@ -128,32 +128,27 @@ return 0; }
-int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { struct abis_om_fom_hdr *foh = msgb_l3(msg); - struct gsm_abis_mo *mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst); - struct nm_fsm_ev_setattr_data ev_data = { - .msg = msg, - .cause = 0, - }; int rc;
switch (foh->msg_type) { case NM_MT_SET_BTS_ATTR: - ev_data.cause = vbts_set_bts(obj); + rc = vbts_set_bts(obj); break; case NM_MT_SET_RADIO_ATTR: - ev_data.cause = vbts_set_trx(obj); + rc = vbts_set_trx(obj); break; case NM_MT_SET_CHAN_ATTR: - ev_data.cause = vbts_set_ts(obj); + rc = vbts_set_ts(obj); + break; + default: + rc = 0; break; }
- rc = osmo_fsm_inst_dispatch(mo->fi, - ev_data.cause == 0 ? NM_EV_SETATTR_ACK : NM_EV_SETATTR_NACK, - &ev_data); return rc; }
diff --git a/tests/stubs.c b/tests/stubs.c index b24dfc9..d05703c 100644 --- a/tests/stubs.c +++ b/tests/stubs.c @@ -18,7 +18,7 @@ { return 0; } int bts_model_trx_init(struct gsm_bts_trx *trx) { return 0; } -int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg, +int bts_model_apply_oml(struct gsm_bts *bts, const struct msgb *msg, struct tlv_parsed *new_attr, int kind, void *obj) { return 0; }