fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/34359?usp=email )
Change subject: abis_nm: send Get Attributes to Rado Carrier MO(s) ......................................................................
abis_nm: send Get Attributes to Rado Carrier MO(s)
Change-Id: If7b75689c12a253377f2747babd4d7ebd1db5f87 Related: OS#4505 --- M src/osmo-bsc/nm_rcarrier_fsm.c 1 file changed, 40 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/59/34359/1
diff --git a/src/osmo-bsc/nm_rcarrier_fsm.c b/src/osmo-bsc/nm_rcarrier_fsm.c index 824b2ed..71cb47f 100644 --- a/src/osmo-bsc/nm_rcarrier_fsm.c +++ b/src/osmo-bsc/nm_rcarrier_fsm.c @@ -58,6 +58,8 @@ { struct gsm_bts_trx *trx = (struct gsm_bts_trx *)fi->priv;
+ trx->mo.get_attr_sent = false; + trx->mo.get_attr_rep_received = false; trx->mo.set_attr_sent = false; trx->mo.set_attr_ack_received = false; trx->mo.adm_unlock_sent = false; @@ -104,6 +106,22 @@ if (bts_setup_ramp_wait(trx->bts)) return;
+ if (!trx->mo.get_attr_sent && !trx->mo.get_attr_rep_received) { + uint8_t attr_buf[2]; /* enlarge if needed */ + uint8_t *ptr = &attr_buf[0]; + + *(ptr++) = NM_ATT_SW_CONFIG; + if (is_ipa_abisip_bts(trx->bts)) + *(ptr++) = NM_ATT_IPACC_SUPP_FEATURES; + + OSMO_ASSERT((ptr - attr_buf) <= sizeof(attr_buf)); + abis_nm_get_attr(trx->bts, NM_OC_RADIO_CARRIER, 0, trx->nr, 0xff, + &attr_buf[0], (ptr - attr_buf)); + trx->mo.get_attr_sent = true; + } + + /* OS#6172: old osmo-bts versions do NACK Get Attributes for Radio Carrier, + * so we do not check if trx->mo.get_attr_rep_received is set here. */ if (!trx->mo.set_attr_sent && !trx->mo.set_attr_ack_received) { trx->mo.set_attr_sent = true; msgb = nanobts_gen_set_radio_attr(trx->bts, trx); @@ -151,6 +169,11 @@ const struct gsm_nm_state *new_state;
switch (event) { + case NM_EV_GET_ATTR_REP: + trx->mo.get_attr_rep_received = true; + trx->mo.get_attr_sent = false; + configure_loop(trx, &trx->mo.nm_state, false); + return; case NM_EV_SET_ATTR_ACK: trx->mo.set_attr_ack_received = true; trx->mo.set_attr_sent = false; @@ -201,6 +224,11 @@ const struct gsm_nm_state *new_state;
switch (event) { + case NM_EV_GET_ATTR_REP: + trx->mo.get_attr_rep_received = true; + trx->mo.get_attr_sent = false; + configure_loop(trx, &trx->mo.nm_state, true); + return; case NM_EV_SET_ATTR_ACK: trx->mo.set_attr_ack_received = true; trx->mo.set_attr_sent = false; @@ -349,6 +377,7 @@ [NM_RCARRIER_ST_OP_DISABLED_DEPENDENCY] = { .in_event_mask = X(NM_EV_STATE_CHG_REP) | + X(NM_EV_GET_ATTR_REP) | X(NM_EV_SET_ATTR_ACK) | X(NM_EV_SETUP_RAMP_READY), .out_state_mask = @@ -362,6 +391,7 @@ [NM_RCARRIER_ST_OP_DISABLED_OFFLINE] = { .in_event_mask = X(NM_EV_STATE_CHG_REP) | + X(NM_EV_GET_ATTR_REP) | X(NM_EV_SET_ATTR_ACK) | X(NM_EV_SETUP_RAMP_READY), .out_state_mask =