aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2022-08-03 11:50:58 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2022-08-05 11:32:02 +0200
commitcba82e60e8f7b6c7532f89d77b21ab4b54979169 (patch)
tree2772e42a38bce531ae6cf672195454b82349666c
parentc46cfac49dbc39b8ca23c908319cdc5fa2d45ca4 (diff)
abis_om2000: move switch-case to function
The switch-case in update_op_state() and update_mo_state() can be split off into functions. This makes to code better readable. Change-Id: I41f0d9d0d498f6f698c2c959baac50424f5ac317 Related: OS#5634
-rw-r--r--src/osmo-bsc/abis_om2000.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/src/osmo-bsc/abis_om2000.c b/src/osmo-bsc/abis_om2000.c
index 8780a6d9a..a1a6c2195 100644
--- a/src/osmo-bsc/abis_om2000.c
+++ b/src/osmo-bsc/abis_om2000.c
@@ -960,23 +960,11 @@ static void *mo2obj(struct gsm_bts *bts, struct abis_om2k_mo *mo)
return NULL;
}
-static void update_mo_state(struct gsm_bts *bts, struct abis_om2k_mo *mo, uint8_t mo_state)
+/* Derive an OML Availability state from an OM2000 MO state */
+static enum abis_nm_avail_state abis_nm_av_state_from_om2k_av_state(struct abis_om2k_mo *mo, uint8_t mo_state)
{
- struct gsm_nm_state *nm_state = mo2nm_state(bts, mo);
- struct nm_statechg_signal_data nsd;
bool has_enabled_state;
- if (!nm_state)
- return;
-
- memset(&nsd, 0, sizeof(nsd));
-
- nsd.bts = bts;
- nsd.obj = mo2obj(bts, mo);
- nsd.old_state = *nm_state;
- nsd.new_state = *nm_state;
- nsd.om2k_mo = mo;
-
switch (mo->class) {
case OM2K_MO_CLS_CF:
case OM2K_MO_CLS_TRXC:
@@ -989,21 +977,35 @@ static void update_mo_state(struct gsm_bts *bts, struct abis_om2k_mo *mo, uint8_
switch (mo_state) {
case OM2K_MOSTATE_RESET:
- nsd.new_state.availability = NM_AVSTATE_POWER_OFF;
- break;
+ return NM_AVSTATE_POWER_OFF;
case OM2K_MOSTATE_STARTED:
- nsd.new_state.availability = has_enabled_state ? NM_AVSTATE_OFF_LINE : NM_AVSTATE_OK;
- break;
+ return has_enabled_state ? NM_AVSTATE_OFF_LINE : NM_AVSTATE_OK;
case OM2K_MOSTATE_ENABLED:
- nsd.new_state.availability = NM_AVSTATE_OK;
- break;
+ return NM_AVSTATE_OK;
case OM2K_MOSTATE_DISABLED:
- nsd.new_state.availability = NM_AVSTATE_POWER_OFF;
- break;
+ return NM_AVSTATE_POWER_OFF;
default:
- nsd.new_state.availability = NM_AVSTATE_DEGRADED;
- break;
+ return NM_AVSTATE_DEGRADED;
}
+}
+
+static void update_mo_state(struct gsm_bts *bts, struct abis_om2k_mo *mo, uint8_t mo_state)
+{
+ struct gsm_nm_state *nm_state = mo2nm_state(bts, mo);
+ struct nm_statechg_signal_data nsd;
+
+ if (!nm_state)
+ return;
+
+ memset(&nsd, 0, sizeof(nsd));
+
+ nsd.bts = bts;
+ nsd.obj = mo2obj(bts, mo);
+ nsd.old_state = *nm_state;
+ nsd.new_state = *nm_state;
+ nsd.om2k_mo = mo;
+
+ nsd.new_state.availability = abis_nm_av_state_from_om2k_av_state(mo, mo_state);
/* Update current state before emitting signal: */
nm_state->availability = nsd.new_state.availability;
@@ -1011,6 +1013,19 @@ static void update_mo_state(struct gsm_bts *bts, struct abis_om2k_mo *mo, uint8_
osmo_signal_dispatch(SS_NM, S_NM_STATECHG, &nsd);
}
+/* Derive an OML Operational state from an OM2000 OP state */
+static enum abis_nm_op_state abis_nm_op_state_from_om2k_op_state(uint8_t op_state)
+{
+ switch (op_state) {
+ case 1:
+ return NM_OPSTATE_ENABLED;
+ case 0:
+ return NM_OPSTATE_DISABLED;
+ default:
+ return NM_OPSTATE_NULL;
+ }
+}
+
static void update_op_state(struct gsm_bts *bts, const struct abis_om2k_mo *mo, uint8_t op_state)
{
struct gsm_nm_state *nm_state = mo2nm_state(bts, mo);
@@ -1020,17 +1035,8 @@ static void update_op_state(struct gsm_bts *bts, const struct abis_om2k_mo *mo,
return;
new_state = *nm_state;
- switch (op_state) {
- case 1:
- new_state.operational = NM_OPSTATE_ENABLED;
- break;
- case 0:
- new_state.operational = NM_OPSTATE_DISABLED;
- break;
- default:
- new_state.operational = NM_OPSTATE_NULL;
- break;
- }
+
+ new_state.operational = abis_nm_op_state_from_om2k_op_state(op_state);
nm_state->operational = new_state.operational;
}