<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13701">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">common/oml.c: use proper OML object for Get Attribute Response<br><br>Change-Id: Icb1ee75d4bf680deb6365288d8c2053816a12217<br>---<br>M src/common/oml.c<br>1 file changed, 25 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/01/13701/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/oml.c b/src/common/oml.c</span><br><span>index f5e50c0..cb1766b 100644</span><br><span>--- a/src/common/oml.c</span><br><span>+++ b/src/common/oml.c</span><br><span>@@ -252,26 +252,31 @@</span><br><span> }</span><br><span> </span><br><span> /* send 3GPP TS 52.021 §8.11.2 Get Attribute Response */</span><br><span style="color: hsl(0, 100%, 40%);">-static int oml_tx_attr_resp(struct gsm_bts *bts, const struct abis_om_fom_hdr *foh, const uint8_t *attr,</span><br><span style="color: hsl(0, 100%, 40%);">-                         uint16_t attr_len)</span><br><span style="color: hsl(120, 100%, 40%);">+static int oml_tx_attr_resp(const struct gsm_abis_mo *mo,</span><br><span style="color: hsl(120, 100%, 40%);">+                         const uint8_t *attr, uint16_t attr_len)</span><br><span> {</span><br><span>     struct msgb *nmsg;</span><br><span>   uint8_t resp[MAX_VERSION_LENGTH * attr_len * 2]; /* heuristic for Attribute Response Info space requirements */</span><br><span style="color: hsl(120, 100%, 40%);">+       void *obj;</span><br><span>   int len;</span><br><span> </span><br><span>         LOGP(DOML, LOGL_INFO, "%s Tx Get Attribute Response\n",</span><br><span style="color: hsl(0, 100%, 40%);">-            get_value_string(abis_nm_obj_class_names, foh->obj_class));</span><br><span style="color: hsl(120, 100%, 40%);">+        get_value_string(abis_nm_obj_class_names, mo->obj_class));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  switch (foh->obj_class) {</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(mo->bts != NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+      obj = gsm_objclass2obj(mo->bts, mo->obj_class, &mo->obj_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(obj != NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (mo->obj_class) {</span><br><span>  case NM_OC_BTS:</span><br><span style="color: hsl(0, 100%, 40%);">-         len = handle_attrs_bts(resp, bts, attr, attr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+            len = handle_attrs_bts(resp, (const struct gsm_bts *) obj, attr, attr_len);</span><br><span>          break;</span><br><span>       case NM_OC_BASEB_TRANSC:</span><br><span style="color: hsl(0, 100%, 40%);">-                len = handle_attrs_trx(resp, gsm_bts_trx_num(bts, foh->obj_inst.trx_nr), attr, attr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+          len = handle_attrs_trx(resp, (const struct gsm_bts_trx *) obj, attr, attr_len);</span><br><span>              break;</span><br><span>       default:</span><br><span>             LOGP(DOML, LOGL_ERROR, "Unsupported MO class %s in Get Attribute Response\n",</span><br><span style="color: hsl(0, 100%, 40%);">-              get_value_string(abis_nm_obj_class_names, foh->obj_class));</span><br><span style="color: hsl(120, 100%, 40%);">+                get_value_string(abis_nm_obj_class_names, mo->obj_class));</span><br><span>           len = -NM_NACK_OBJCLASS_NOTSUPP;</span><br><span>     }</span><br><span> </span><br><span>@@ -287,7 +292,7 @@</span><br><span>  /* §9.4.64 Get Attribute Response Info */</span><br><span>   msgb_tl16v_put(nmsg, NM_ATT_GET_ARI, len, resp);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    len = oml_mo_send_msg(&bts->mo, nmsg, NM_MT_GET_ATTR_RESP);</span><br><span style="color: hsl(120, 100%, 40%);">+    len = oml_mo_send_msg(mo, nmsg, NM_MT_GET_ATTR_RESP);</span><br><span>        return (len < 0) ? -NM_NACK_CANT_PERFORM : len;</span><br><span> }</span><br><span> </span><br><span>@@ -527,6 +532,7 @@</span><br><span> static int oml_rx_get_attr(struct gsm_bts *bts, struct msgb *msg)</span><br><span> {</span><br><span>  struct abis_om_fom_hdr *foh = msgb_l3(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   const struct gsm_abis_mo *mo;</span><br><span>        struct tlv_parsed tp;</span><br><span>        int rc;</span><br><span> </span><br><span>@@ -536,18 +542,26 @@</span><br><span>  abis_nm_debugp_foh(DOML, foh);</span><br><span>       DEBUGPC(DOML, "Rx GET ATTR\n");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Determine which OML object is addressed */</span><br><span style="color: hsl(120, 100%, 40%);">+ mo = gsm_objclass2mo(bts, foh->obj_class, &foh->obj_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!mo) {</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGP(DOML, LOGL_ERROR, "%s Get Attributes for unknown Object Instance\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                abis_nm_dump_foh(foh));</span><br><span style="color: hsl(120, 100%, 40%);">+          return oml_fom_ack_nack(msg, NM_NACK_OBJINST_UNKN);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  rc = oml_tlv_parse(&tp, foh->data, msgb_l3len(msg) - sizeof(*foh));</span><br><span>   if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                oml_tx_failure_event_rep(&bts->mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get Attribute parsing failure");</span><br><span style="color: hsl(120, 100%, 40%);">+                oml_tx_failure_event_rep(mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get Attribute parsing failure");</span><br><span>            return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT);</span><br><span>         }</span><br><span> </span><br><span>        if (!TLVP_PRES_LEN(&tp, NM_ATT_LIST_REQ_ATTR, 1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         oml_tx_failure_event_rep(&bts->mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get Attribute without Attribute List");</span><br><span style="color: hsl(120, 100%, 40%);">+         oml_tx_failure_event_rep(mo, OSMO_EVT_MAJ_UNSUP_ATTR, "Get Attribute without Attribute List");</span><br><span>             return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT);</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = oml_tx_attr_resp(bts, foh, TLVP_VAL(&tp, NM_ATT_LIST_REQ_ATTR), TLVP_LEN(&tp, NM_ATT_LIST_REQ_ATTR));</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = oml_tx_attr_resp(mo, TLVP_VAL(&tp, NM_ATT_LIST_REQ_ATTR), TLVP_LEN(&tp, NM_ATT_LIST_REQ_ATTR));</span><br><span>         if (rc < 0) {</span><br><span>             LOGP(DOML, LOGL_ERROR, "responding to O&M Get Attributes message with NACK 0%x\n", -rc);</span><br><span>               return oml_fom_ack_nack(msg, -rc);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13701">change 13701</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13701"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Icb1ee75d4bf680deb6365288d8c2053816a12217 </div>
<div style="display:none"> Gerrit-Change-Number: 13701 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>