Vadim Yanitskiy has uploaded this change for review. ( 
https://gerrit.osmocom.org/13701


Change subject: common/oml.c: use proper OML object for Get Attribute Response
......................................................................

common/oml.c: use proper OML object for Get Attribute Response

Change-Id: Icb1ee75d4bf680deb6365288d8c2053816a12217
---
M src/common/oml.c
1 file changed, 25 insertions(+), 11 deletions(-)



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

diff --git a/src/common/oml.c b/src/common/oml.c
index f5e50c0..cb1766b 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -252,26 +252,31 @@
 }

 /* send 3GPP TS 52.021 §8.11.2 Get Attribute Response */
-static int oml_tx_attr_resp(struct gsm_bts *bts, const struct abis_om_fom_hdr 
*foh, const uint8_t *attr,
-                           uint16_t attr_len)
+static int oml_tx_attr_resp(const struct gsm_abis_mo *mo,
+                           const uint8_t *attr, uint16_t attr_len)
 {
        struct msgb *nmsg;
        uint8_t resp[MAX_VERSION_LENGTH * attr_len * 2]; /* heuristic for 
Attribute Response Info space requirements */
+       void *obj;
        int len;

        LOGP(DOML, LOGL_INFO, "%s Tx Get Attribute Response\n",
-            get_value_string(abis_nm_obj_class_names, foh->obj_class));
+            get_value_string(abis_nm_obj_class_names, mo->obj_class));

-       switch (foh->obj_class) {
+       OSMO_ASSERT(mo->bts != NULL);
+       obj = gsm_objclass2obj(mo->bts, mo->obj_class, &mo->obj_inst);
+       OSMO_ASSERT(obj != NULL);
+
+       switch (mo->obj_class) {
        case NM_OC_BTS:
-               len = handle_attrs_bts(resp, bts, attr, attr_len);
+               len = handle_attrs_bts(resp, (const struct gsm_bts *) obj, 
attr, attr_len);
                break;
        case NM_OC_BASEB_TRANSC:
-               len = handle_attrs_trx(resp, gsm_bts_trx_num(bts, 
foh->obj_inst.trx_nr), attr, attr_len);
+               len = handle_attrs_trx(resp, (const struct gsm_bts_trx *) obj, 
attr, attr_len);
                break;
        default:
                LOGP(DOML, LOGL_ERROR, "Unsupported MO class %s in Get 
Attribute Response\n",
-                    get_value_string(abis_nm_obj_class_names, foh->obj_class));
+                    get_value_string(abis_nm_obj_class_names, mo->obj_class));
                len = -NM_NACK_OBJCLASS_NOTSUPP;
        }

@@ -287,7 +292,7 @@
        /* §9.4.64 Get Attribute Response Info */
        msgb_tl16v_put(nmsg, NM_ATT_GET_ARI, len, resp);

-       len = oml_mo_send_msg(&bts->mo, nmsg, NM_MT_GET_ATTR_RESP);
+       len = oml_mo_send_msg(mo, nmsg, NM_MT_GET_ATTR_RESP);
        return (len < 0) ? -NM_NACK_CANT_PERFORM : len;
 }

@@ -527,6 +532,7 @@
 static int oml_rx_get_attr(struct gsm_bts *bts, struct msgb *msg)
 {
        struct abis_om_fom_hdr *foh = msgb_l3(msg);
+       const struct gsm_abis_mo *mo;
        struct tlv_parsed tp;
        int rc;

@@ -536,18 +542,26 @@
        abis_nm_debugp_foh(DOML, foh);
        DEBUGPC(DOML, "Rx GET ATTR\n");

+       /* Determine which OML object is addressed */
+       mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst);
+       if (!mo) {
+               LOGP(DOML, LOGL_ERROR, "%s Get Attributes for unknown Object 
Instance\n",
+                    abis_nm_dump_foh(foh));
+               return oml_fom_ack_nack(msg, NM_NACK_OBJINST_UNKN);
+       }
+
        rc = oml_tlv_parse(&tp, foh->data, msgb_l3len(msg) - sizeof(*foh));
        if (rc < 0) {
-               oml_tx_failure_event_rep(&bts->mo, OSMO_EVT_MAJ_UNSUP_ATTR, 
"Get Attribute parsing failure");
+               oml_tx_failure_event_rep(mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get 
Attribute parsing failure");
                return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT);
        }

        if (!TLVP_PRES_LEN(&tp, NM_ATT_LIST_REQ_ATTR, 1)) {
-               oml_tx_failure_event_rep(&bts->mo, OSMO_EVT_MAJ_UNSUP_ATTR, 
"Get Attribute without Attribute List");
+               oml_tx_failure_event_rep(mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get 
Attribute without Attribute List");
                return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT);
        }

-       rc = oml_tx_attr_resp(bts, foh, TLVP_VAL(&tp, NM_ATT_LIST_REQ_ATTR), 
TLVP_LEN(&tp, NM_ATT_LIST_REQ_ATTR));
+       rc = oml_tx_attr_resp(mo, TLVP_VAL(&tp, NM_ATT_LIST_REQ_ATTR), 
TLVP_LEN(&tp, NM_ATT_LIST_REQ_ATTR));
        if (rc < 0) {
                LOGP(DOML, LOGL_ERROR, "responding to O&M Get Attributes 
message with NACK 0%x\n", -rc);
                return oml_fom_ack_nack(msg, -rc);

--
To view, visit https://gerrit.osmocom.org/13701
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb1ee75d4bf680deb6365288d8c2053816a12217
Gerrit-Change-Number: 13701
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <[email protected]>

Reply via email to