<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14084">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">rsl: Include Channel Nr and Link ID in Error reports whenever possible<br><br>While the CHAN_NR and LINK_ID IEs in ERROR REPORRT are optional, we<br>still should include it whenever possible to help error analysis.<br><br>Related: OS#3789<br>Change-Id: I8155e0d37096bd7bf3563e4f7853171ca4b3aa58<br>---<br>M src/common/rsl.c<br>1 file changed, 27 insertions(+), 13 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/84/14084/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/rsl.c b/src/common/rsl.c</span><br><span>index 1be6e52..0fe50e0 100644</span><br><span>--- a/src/common/rsl.c</span><br><span>+++ b/src/common/rsl.c</span><br><span>@@ -291,6 +291,7 @@</span><br><span> /* 8.5.1 BCCH INFOrmation is received */</span><br><span> static int rsl_rx_bcch_info(struct gsm_bts_trx *trx, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       struct abis_rsl_cchan_hdr *cch = msgb_l2(msg);</span><br><span>       struct gsm_bts *bts = trx->bts;</span><br><span>   struct tlv_parsed tp;</span><br><span>        uint8_t rsl_si, count;</span><br><span>@@ -301,16 +302,16 @@</span><br><span> </span><br><span>   /* 9.3.30 System Info Type */</span><br><span>        if (!TLVP_PRESENT(&tp, RSL_IE_SYSINFO_TYPE))</span><br><span style="color: hsl(0, 100%, 40%);">-                return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, &cch->chan_nr, NULL, msg);</span><br><span> </span><br><span>         rsl_si = *TLVP_VAL(&tp, RSL_IE_SYSINFO_TYPE);</span><br><span>    if (OSMO_IN_ARRAY(rsl_si, rsl_sacch_sitypes))</span><br><span style="color: hsl(0, 100%, 40%);">-           return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+         return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, &cch->chan_nr, NULL, msg);</span><br><span> </span><br><span>    osmo_si = osmo_rsl2sitype(rsl_si);</span><br><span>   if (osmo_si == SYSINFO_TYPE_NONE) {</span><br><span>          LOGP(DRSL, LOGL_NOTICE, " Rx RSL SI 0x%02x not supported.\n", rsl_si);</span><br><span style="color: hsl(0, 100%, 40%);">-                return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+         return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, &cch->chan_nr, NULL, msg);</span><br><span>        }</span><br><span>    /* 9.3.39 Full BCCH Information */</span><br><span>   if (TLVP_PRESENT(&tp, RSL_IE_FULL_BCCH_INFO)) {</span><br><span>@@ -341,13 +342,13 @@</span><br><span>                  if (bts->si2q_index > bts->si2q_count) {</span><br><span>                            LOGP(DRSL, LOGL_ERROR, " Rx RSL SI2quater with index %u > count %u\n",</span><br><span>                               bts->si2q_index, bts->si2q_count);</span><br><span style="color: hsl(0, 100%, 40%);">-                           return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                         return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, &cch->chan_nr, NULL, msg);</span><br><span>                        }</span><br><span> </span><br><span>                        if (bts->si2q_index > SI2Q_MAX_NUM || bts->si2q_count > SI2Q_MAX_NUM) {</span><br><span>                          LOGP(DRSL, LOGL_ERROR, " Rx RSL SI2quater with impossible parameters: index %u, count %u"</span><br><span>                               "should be <= %u\n", bts->si2q_index, bts->si2q_count, SI2Q_MAX_NUM);</span><br><span style="color: hsl(0, 100%, 40%);">-                           return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                         return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT, &cch->chan_nr, NULL, msg);</span><br><span>                        }</span><br><span> </span><br><span>                        memset(GSM_BTS_SI2Q(bts, bts->si2q_index), GSM_MACBLOCK_PADDING, sizeof(sysinfo_buf_t));</span><br><span>@@ -447,6 +448,7 @@</span><br><span> /* 8.5.5 PAGING COMMAND */</span><br><span> static int rsl_rx_paging_cmd(struct gsm_bts_trx *trx, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       struct abis_rsl_cchan_hdr *cch = msgb_l2(msg);</span><br><span>       struct tlv_parsed tp;</span><br><span>        struct gsm_bts *bts = trx->bts;</span><br><span>   uint8_t chan_needed = 0, paging_group;</span><br><span>@@ -457,7 +459,7 @@</span><br><span> </span><br><span>     if (!TLVP_PRESENT(&tp, RSL_IE_PAGING_GROUP) ||</span><br><span>       !TLVP_PRESENT(&tp, RSL_IE_MS_IDENTITY))</span><br><span style="color: hsl(0, 100%, 40%);">-         return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, &cch->chan_nr, NULL, msg);</span><br><span> </span><br><span>         paging_group = *TLVP_VAL(&tp, RSL_IE_PAGING_GROUP);</span><br><span>      identity_lv = TLVP_VAL(&tp, RSL_IE_MS_IDENTITY)-1;</span><br><span>@@ -482,6 +484,7 @@</span><br><span> /* 8.5.8 SMS BROADCAST COMMAND */</span><br><span> static int rsl_rx_sms_bcast_cmd(struct gsm_bts_trx *trx, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  struct abis_rsl_cchan_hdr *cch = msgb_l2(msg);</span><br><span>       struct tlv_parsed tp;</span><br><span>        struct rsl_ie_cb_cmd_type *cb_cmd_type;</span><br><span> </span><br><span>@@ -489,7 +492,7 @@</span><br><span> </span><br><span>        if (!TLVP_PRESENT(&tp, RSL_IE_CB_CMD_TYPE) ||</span><br><span>        !TLVP_PRESENT(&tp, RSL_IE_SMSCB_MSG))</span><br><span style="color: hsl(0, 100%, 40%);">-           return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, &cch->chan_nr, NULL, msg);</span><br><span> </span><br><span>         cb_cmd_type = (struct rsl_ie_cb_cmd_type *)</span><br><span>                                  TLVP_VAL(&tp, RSL_IE_CB_CMD_TYPE);</span><br><span>@@ -617,12 +620,13 @@</span><br><span> /* 8.5.6 IMMEDIATE ASSIGN COMMAND is received */</span><br><span> static int rsl_rx_imm_ass(struct gsm_bts_trx *trx, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       struct abis_rsl_cchan_hdr *cch = msgb_l2(msg);</span><br><span>       struct tlv_parsed tp;</span><br><span> </span><br><span>    rsl_tlv_parse(&tp, msgb_l3(msg), msgb_l3len(msg));</span><br><span> </span><br><span>   if (!TLVP_PRESENT(&tp, RSL_IE_FULL_IMM_ASS_INFO))</span><br><span style="color: hsl(0, 100%, 40%);">-           return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              return rsl_tx_error_report(trx, RSL_ERR_MAND_IE_ERROR, &cch->chan_nr, NULL, msg);</span><br><span> </span><br><span>         rate_ctr_inc2(trx->bts->ctrs, BTS_CTR_AGCH_RCVD);</span><br><span> </span><br><span>@@ -2475,6 +2479,8 @@</span><br><span> {</span><br><span>     struct abis_rsl_common_hdr *rh = msgb_l2(msg);</span><br><span>       struct abis_rsl_dchan_hdr *dch;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct abis_rsl_cchan_hdr *cch;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct abis_rsl_rll_hdr *rllh;</span><br><span>       int rc;</span><br><span> </span><br><span>  /* Handle GSM 08.58 7 Error Handling for the given input. This method will</span><br><span>@@ -2483,6 +2489,8 @@</span><br><span> </span><br><span>       /* TS 48.058 Section 7 explains how to do error handling */</span><br><span>  switch (rh->msg_discr & 0xfe) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case ABIS_RSL_MDISC_IPACCESS:</span><br><span style="color: hsl(120, 100%, 40%);">+         /* fall-through */</span><br><span>   case ABIS_RSL_MDISC_DED_CHAN:</span><br><span>                dch = msgb_l2(msg);</span><br><span>          switch (dch->c.msg_type) {</span><br><span>@@ -2495,18 +2503,24 @@</span><br><span>                                                   RSL_ERR_MAND_IE_ERROR, NULL);</span><br><span>                   break;</span><br><span>               default:</span><br><span style="color: hsl(0, 100%, 40%);">-                        rc = rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                        rc = rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR, &dch->chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             NULL, msg);</span><br><span>                         break;</span><br><span>               }</span><br><span>            break;</span><br><span>       case ABIS_RSL_MDISC_RLL:</span><br><span style="color: hsl(0, 100%, 40%);">-                /* fall-through */</span><br><span style="color: hsl(120, 100%, 40%);">+            rllh = msgb_l2(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          /* ERROR REPORT */</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   &rllh->chan_nr, &rllh->link_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case ABIS_RSL_MDISC_COM_CHAN:</span><br><span style="color: hsl(0, 100%, 40%);">-           /* fall-through */</span><br><span style="color: hsl(120, 100%, 40%);">+            cch = msgb_l2(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+           /* ERROR REPORT */</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR, &cch->chan_nr, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span>       case ABIS_RSL_MDISC_TRX:</span><br><span>             /* fall-through */</span><br><span style="color: hsl(0, 100%, 40%);">-      case ABIS_RSL_MDISC_IPACCESS:</span><br><span style="color: hsl(0, 100%, 40%);">-           /* fall-through */</span><br><span>   default:</span><br><span>             /* ERROR REPORT */</span><br><span>           rc = rsl_tx_error_report(msg->trx, RSL_ERR_MAND_IE_ERROR, NULL, NULL, msg);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14084">change 14084</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/14084"/><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: I8155e0d37096bd7bf3563e4f7853171ca4b3aa58 </div>
<div style="display:none"> Gerrit-Change-Number: 14084 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>