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


Change subject: gsm_objclass2obj(): Change signature so we can obtain a nack 
cause in case of error
......................................................................

gsm_objclass2obj(): Change signature so we can obtain a nack cause in case of 
error

Related: OS#5961
Related: OS#5967
Change-Id: If734ea2c8cae4c1f99b02520dffa4e3862a67745
---
M include/osmo-bts/oml.h
M src/common/oml.c
M src/osmo-bts-trx/trx_provision_fsm.c
3 files changed, 35 insertions(+), 22 deletions(-)



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

diff --git a/include/osmo-bts/oml.h b/include/osmo-bts/oml.h
index 9c01010..2e7b949 100644
--- a/include/osmo-bts/oml.h
+++ b/include/osmo-bts/oml.h
@@ -83,7 +83,7 @@

 struct gsm_nm_state *gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t 
obj_class,
                                          const struct abis_om_obj_inst 
*obj_inst);
-void *gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
+void *gsm_objclass2obj(enum abis_nm_nack_cause *c, struct gsm_bts *bts, 
uint8_t obj_class,
                       const struct abis_om_obj_inst *obj_inst);

 #endif // _OML_H */
diff --git a/src/common/oml.c b/src/common/oml.c
index af6b19d..09ed6ea 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -1103,7 +1103,7 @@

        /* Step 1: Resolve MO by obj_class/obj_inst */
        mo = gsm_objclass2mo(&c, bts, foh->obj_class, &foh->obj_inst);
-       obj = gsm_objclass2obj(bts, foh->obj_class, &foh->obj_inst);
+       obj = gsm_objclass2obj(&c, bts, foh->obj_class, &foh->obj_inst);
        if (!mo || !obj)
                return oml_fom_ack_nack(msg, c);

@@ -1149,7 +1149,7 @@

        /* Step 1: Resolve MO by obj_class/obj_inst */
        mo = gsm_objclass2mo(&c, bts, foh->obj_class, &foh->obj_inst);
-       obj = gsm_objclass2obj(bts, foh->obj_class, &foh->obj_inst);
+       obj = gsm_objclass2obj(&c, bts, foh->obj_class, &foh->obj_inst);
        if (!mo || !obj)
                return oml_fom_ack_nack(msg, c);

@@ -1492,7 +1492,7 @@

        /* Resolve MO by obj_class/obj_inst */
        mo = gsm_objclass2mo(&c, bts, foh->obj_class, &foh->obj_inst);
-       obj = gsm_objclass2obj(bts, foh->obj_class, &foh->obj_inst);
+       obj = gsm_objclass2obj(&c, bts, foh->obj_class, &foh->obj_inst);
        if (!mo || !obj)
                return oml_fom_ack_nack(msg, c);

@@ -1796,37 +1796,34 @@

 /* obtain the in-memory data structure of a given object instance */
 void *
-gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
+gsm_objclass2obj(enum abis_nm_nack_cause *c, struct gsm_bts *bts, uint8_t 
obj_class,
             const struct abis_om_obj_inst *obj_inst)
 {
        struct gsm_bts_trx *trx;
        void *obj = NULL;
+       /* Handle finding TRX number first */
+       switch (obj_class) {
+       case NM_OC_RADIO_CARRIER:
+       case NM_OC_BASEB_TRANSC:
+       case NM_OC_CHANNEL:
+               if (!(trx = gsm_bts_trx_num(bts, obj_inst->trx_nr)))
+                       goto nm_nack_objinst_unkn;
+               break;
+       }

        switch (obj_class) {
        case NM_OC_BTS:
                obj = bts;
                break;
        case NM_OC_RADIO_CARRIER:
-               if (obj_inst->trx_nr >= bts->num_trx) {
-                       return NULL;
-               }
-               trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
                obj = trx;
                break;
        case NM_OC_BASEB_TRANSC:
-               if (obj_inst->trx_nr >= bts->num_trx) {
-                       return NULL;
-               }
-               trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
                obj = &trx->bb_transc;
                break;
        case NM_OC_CHANNEL:
-               if (obj_inst->trx_nr >= bts->num_trx) {
-                       return NULL;
-               }
-               trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
                if (obj_inst->ts_nr >= TRX_NR_TS)
-                       return NULL;
+                       goto nm_nack_objinst_unkn;
                obj = &trx->ts[obj_inst->ts_nr];
                break;
        case NM_OC_SITE_MANAGER:
@@ -1834,7 +1831,7 @@
                break;
        case NM_OC_GPRS_NSE:
                if (obj_inst->bts_nr > 0)
-                       return NULL;
+                       goto nm_nack_objinst_unkn;
                obj = &g_bts_sm->gprs.nse;
                break;
        case NM_OC_GPRS_CELL:
@@ -1842,11 +1839,15 @@
                break;
        case NM_OC_GPRS_NSVC:
                if (obj_inst->bts_nr > 0)
-                       return NULL;
+                       goto nm_nack_objinst_unkn;
                if (obj_inst->trx_nr >= ARRAY_SIZE(g_bts_sm->gprs.nse.nsvc))
-                       return NULL;
+                       goto nm_nack_objinst_unkn;
                obj = &g_bts_sm->gprs.nse.nsvc[obj_inst->trx_nr];
                break;
        }
        return obj;
+
+nm_nack_objinst_unkn:
+       *c = NM_NACK_OBJINST_UNKN;
+       return NULL;
 }
diff --git a/src/osmo-bts-trx/trx_provision_fsm.c 
b/src/osmo-bts-trx/trx_provision_fsm.c
index 8b20b10..38ca18f 100644
--- a/src/osmo-bts-trx/trx_provision_fsm.c
+++ b/src/osmo-bts-trx/trx_provision_fsm.c
@@ -327,6 +327,7 @@
 {
        struct nm_statechg_signal_data *nsd;
        struct gsm_bts_trx *trx;
+       enum abis_nm_nack_cause c;

        if (subsys != SS_GLOBAL)
                return -EINVAL;
@@ -340,7 +341,7 @@
                return 0;

        if (nsd->old_state != NM_OPSTATE_ENABLED && nsd->new_state == 
NM_OPSTATE_ENABLED) {
-               trx = gsm_objclass2obj(nsd->mo->bts, nsd->mo->obj_class, 
&nsd->mo->obj_inst);
+               trx = gsm_objclass2obj(&c, nsd->mo->bts, nsd->mo->obj_class, 
&nsd->mo->obj_inst);
                l1if_trx_start_power_ramp(trx, NULL);
        }
        return 0;

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

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: If734ea2c8cae4c1f99b02520dffa4e3862a67745
Gerrit-Change-Number: 32354
Gerrit-PatchSet: 1
Gerrit-Owner: arehbein <[email protected]>
Gerrit-MessageType: newchange

Reply via email to