<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16672">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Pass paging group instead of imsi where later is not needed<br><br>Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_bssgp_pcu.cpp<br>M src/gprs_rlcmac.cpp<br>M src/gprs_rlcmac.h<br>M src/pcu_l1_if.cpp<br>M src/pcu_l1_if.h<br>M src/tbf.cpp<br>M src/tbf_dl.cpp<br>9 files changed, 38 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/72/16672/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index c8b6375..f132c8c 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -889,7 +889,7 @@</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, bool poll, const char *imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, bool poll, const char pgroup[PAGING_GROUP_LEN])</span><br><span> {</span><br><span>   int plen;</span><br><span>    unsigned int ts = tbf->first_ts;</span><br><span>@@ -909,7 +909,7 @@</span><br><span>                                                GSM_L1_BURST_TYPE_ACCESS_0);</span><br><span>     if (plen >= 0) {</span><br><span>          immediate_assignment_dl_tbf();</span><br><span style="color: hsl(0, 100%, 40%);">-          pcu_l1if_tx_pch(immediate_assignment, plen, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+            pcu_l1if_tx_pch(immediate_assignment, plen, pgroup);</span><br><span>         }</span><br><span> </span><br><span>        bitvec_free(immediate_assignment);</span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 7ef5a3f..4df0d19 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -306,7 +306,7 @@</span><br><span>            enum ph_burst_type burst_type);</span><br><span>      int rcv_ptcch_rach(uint8_t trx_nr, uint8_t ts_nr, uint32_t fn, int16_t qta);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        void snd_dl_ass(gprs_rlcmac_tbf *tbf, bool poll, const char *imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+   void snd_dl_ass(gprs_rlcmac_tbf *tbf, bool poll, const char pgroup[PAGING_GROUP_LEN]);</span><br><span> </span><br><span>   GprsMsStorage &ms_store();</span><br><span>       GprsMs *ms_by_tlli(uint32_t tlli, uint32_t old_tlli = 0);</span><br><span>diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp</span><br><span>index 8ce1342..de7c1bf 100644</span><br><span>--- a/src/gprs_bssgp_pcu.cpp</span><br><span>+++ b/src/gprs_bssgp_pcu.cpp</span><br><span>@@ -173,7 +173,7 @@</span><br><span> </span><br><span> static int gprs_bssgp_pcu_rx_paging_ps(struct msgb *msg, struct tlv_parsed *tp)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        char imsi[16];</span><br><span style="color: hsl(120, 100%, 40%);">+        char imsi[16], pgroup[PAGING_GROUP_LEN];</span><br><span>     uint8_t *ptmsi = (uint8_t *) TLVP_VAL(tp, BSSGP_IE_TMSI);</span><br><span>    uint16_t ptmsi_len = TLVP_LEN(tp, BSSGP_IE_TMSI);</span><br><span>    int rc;</span><br><span>@@ -197,8 +197,13 @@</span><br><span>               LOGP(DBSSGP, LOGL_NOTICE, "Failed to parse IMSI IE (rc=%d)\n", rc);</span><br><span>                return bssgp_tx_status(BSSGP_CAUSE_COND_IE_ERR, NULL, msg);</span><br><span>  }</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = imsi2paging_group(imsi, pgroup);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DBSSGP, LOGL_NOTICE, "Failed to get IMSI %s paging group\n", imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+            return bssgp_tx_status(BSSGP_CAUSE_COND_IE_ERR, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return gprs_rlcmac_paging_request(ptmsi, ptmsi_len, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+    return gprs_rlcmac_paging_request(ptmsi, ptmsi_len, pgroup);</span><br><span> }</span><br><span> </span><br><span> /* Receive a BSSGP PDU from a BSS on a PTP BVCI */</span><br><span>diff --git a/src/gprs_rlcmac.cpp b/src/gprs_rlcmac.cpp</span><br><span>index e381b11..994a32c 100644</span><br><span>--- a/src/gprs_rlcmac.cpp</span><br><span>+++ b/src/gprs_rlcmac.cpp</span><br><span>@@ -29,13 +29,13 @@</span><br><span> extern void *tall_pcu_ctx;</span><br><span> </span><br><span> int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+                            const char pgroup[PAGING_GROUP_LEN])</span><br><span> {</span><br><span>     LOGP(DRLCMAC, LOGL_NOTICE, "TX: [PCU -> BTS] Paging Request (CCCH)\n");</span><br><span>         bitvec *paging_request = bitvec_alloc(22, tall_pcu_ctx);</span><br><span>     bitvec_unhex(paging_request, DUMMY_VEC);</span><br><span>     int plen = Encoding::write_paging_request(paging_request, ptmsi, ptmsi_len);</span><br><span style="color: hsl(0, 100%, 40%);">-    pcu_l1if_tx_pch(paging_request, plen, (char *)imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+  pcu_l1if_tx_pch(paging_request, plen, pgroup);</span><br><span>       bitvec_free(paging_request);</span><br><span> </span><br><span>     return 0;</span><br><span>diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h</span><br><span>index 5361a1c..5248ef0 100644</span><br><span>--- a/src/gprs_rlcmac.h</span><br><span>+++ b/src/gprs_rlcmac.h</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #ifdef __cplusplus</span><br><span> #include <gsm_rlcmac.h></span><br><span> #include <gsm_timer.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <pcu_l1_if.h></span><br><span> </span><br><span> extern "C" {</span><br><span> #include <osmocom/core/linuxlist.h></span><br><span>@@ -92,8 +93,7 @@</span><br><span> </span><br><span> int gprs_rlcmac_tx_ul_ud(gprs_rlcmac_tbf *tbf);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,</span><br><span style="color: hsl(0, 100%, 40%);">- const char *imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len, const char pgroup[PAGING_GROUP_LEN]);</span><br><span> </span><br><span> struct msgb *gprs_rlcmac_app_info_msg(const struct gsm_pcu_if_app_info_req *req);</span><br><span> </span><br><span>diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp</span><br><span>index 98e697d..2c4fca2 100644</span><br><span>--- a/src/pcu_l1_if.cpp</span><br><span>+++ b/src/pcu_l1_if.cpp</span><br><span>@@ -60,6 +60,17 @@</span><br><span> </span><br><span> extern void *tall_pcu_ctx;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int imsi2paging_group(const char* imsi, char pgroup[PAGING_GROUP_LEN])</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      size_t len = strlen(imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!imsi || len < PAGING_GROUP_LEN)</span><br><span style="color: hsl(120, 100%, 40%);">+               return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    imsi += len - PAGING_GROUP_LEN;</span><br><span style="color: hsl(120, 100%, 40%);">+       memcpy(pgroup, imsi, PAGING_GROUP_LEN);</span><br><span style="color: hsl(120, 100%, 40%);">+       return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * PCU messages</span><br><span>  */</span><br><span>@@ -218,19 +229,13 @@</span><br><span>       pcu_tx_data_req(0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, GSM_MACBLOCK_LEN);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define PAGING_GROUP_LEN 3</span><br><span style="color: hsl(0, 100%, 40%);">-void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+void pcu_l1if_tx_pch(bitvec * block, int plen, const char pgroup[PAGING_GROUP_LEN])</span><br><span> {</span><br><span>       struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       uint8_t data[PAGING_GROUP_LEN + GSM_MACBLOCK_LEN];</span><br><span> </span><br><span>       /* prepend paging group */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!imsi || strlen(imsi) < PAGING_GROUP_LEN)</span><br><span style="color: hsl(0, 100%, 40%);">-                return;</span><br><span style="color: hsl(0, 100%, 40%);">- imsi += strlen(imsi) - PAGING_GROUP_LEN;</span><br><span style="color: hsl(0, 100%, 40%);">-        data[0] = imsi[0];</span><br><span style="color: hsl(0, 100%, 40%);">-      data[1] = imsi[1];</span><br><span style="color: hsl(0, 100%, 40%);">-      data[2] = imsi[2];</span><br><span style="color: hsl(120, 100%, 40%);">+    memcpy(data, pgroup, PAGING_GROUP_LEN);</span><br><span> </span><br><span>  /* block provided by upper layer comes without first byte (plen),</span><br><span>     * prepend it manually:</span><br><span>diff --git a/src/pcu_l1_if.h b/src/pcu_l1_if.h</span><br><span>index a77a6c8..71d39bd 100644</span><br><span>--- a/src/pcu_l1_if.h</span><br><span>+++ b/src/pcu_l1_if.h</span><br><span>@@ -34,6 +34,8 @@</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define PAGING_GROUP_LEN 3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static inline uint8_t qta2ta(int16_t qta)</span><br><span> {</span><br><span>      if (qta < 0)</span><br><span>@@ -152,14 +154,14 @@</span><br><span> };</span><br><span> </span><br><span> #ifdef __cplusplus</span><br><span style="color: hsl(0, 100%, 40%);">-void pcu_l1if_tx_pdtch(msgb *msg, uint8_t trx, uint8_t ts, uint16_t arfcn, </span><br><span style="color: hsl(120, 100%, 40%);">+void pcu_l1if_tx_pdtch(msgb *msg, uint8_t trx, uint8_t ts, uint16_t arfcn,</span><br><span>         uint32_t fn, uint8_t block_nr);</span><br><span> void pcu_l1if_tx_ptcch(uint8_t trx, uint8_t ts, uint16_t arfcn,</span><br><span>                        uint32_t fn, uint8_t block_nr,</span><br><span>                       uint8_t *data, size_t data_len);</span><br><span> void pcu_l1if_tx_agch(bitvec * block, int len);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+void pcu_l1if_tx_pch(bitvec * block, int plen, const char pgroup[PAGING_GROUP_LEN]);</span><br><span> </span><br><span> int pcu_tx_txt_ind(enum gsm_pcu_if_text_type t, const char *fmt, ...);</span><br><span> </span><br><span>@@ -184,7 +186,7 @@</span><br><span> </span><br><span> void pcu_rx_block_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no);</span><br><span> void pcu_rx_ra_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+int imsi2paging_group(const char* imsi, char pgroup[PAGING_GROUP_LEN]);</span><br><span> #ifdef __cplusplus</span><br><span> }</span><br><span> #endif</span><br><span>diff --git a/src/tbf.cpp b/src/tbf.cpp</span><br><span>index 389b186..006b222 100644</span><br><span>--- a/src/tbf.cpp</span><br><span>+++ b/src/tbf.cpp</span><br><span>@@ -803,6 +803,7 @@</span><br><span> </span><br><span> void gprs_rlcmac_tbf::poll_timeout()</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+    char pgroup[PAGING_GROUP_LEN];</span><br><span>       gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(this);</span><br><span> </span><br><span>    LOGPTBF(this, LOGL_NOTICE, "poll timeout for FN=%d, TS=%d (curr FN %d)\n",</span><br><span>@@ -902,7 +903,8 @@</span><br><span>                   LOGPTBF(dl_tbf, LOGL_DEBUG, "Re-send dowlink assignment on PCH (IMSI=%s)\n",</span><br><span>                               imsi());</span><br><span>                     /* send immediate assignment */</span><br><span style="color: hsl(0, 100%, 40%);">-                 dl_tbf->bts->snd_dl_ass(dl_tbf, false, imsi());</span><br><span style="color: hsl(120, 100%, 40%);">+                 imsi2paging_group(imsi(), pgroup);</span><br><span style="color: hsl(120, 100%, 40%);">+                    dl_tbf->bts->snd_dl_ass(dl_tbf, false, pgroup);</span><br><span>                        dl_tbf->m_wait_confirm = 1;</span><br><span>               }</span><br><span>    } else</span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index e3c1ff4..cdf6c0d 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -507,6 +507,7 @@</span><br><span> /* depending on the current TBF, we assign on PACCH or AGCH */</span><br><span> void gprs_rlcmac_dl_tbf::trigger_ass(struct gprs_rlcmac_tbf *old_tbf)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+     char pgroup[PAGING_GROUP_LEN];</span><br><span>       /* stop pending timer */</span><br><span>     stop_timers("assignment (DL-TBF)");</span><br><span> </span><br><span>@@ -530,7 +531,8 @@</span><br><span>              TBF_SET_ASS_ON(this, GPRS_RLCMAC_FLAG_CCCH, false);</span><br><span> </span><br><span>              /* send immediate assignment */</span><br><span style="color: hsl(0, 100%, 40%);">-         bts->snd_dl_ass(this, false, imsi());</span><br><span style="color: hsl(120, 100%, 40%);">+              imsi2paging_group(imsi(), pgroup);</span><br><span style="color: hsl(120, 100%, 40%);">+            bts->snd_dl_ass(this, false, pgroup);</span><br><span>             m_wait_confirm = 1;</span><br><span>  }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16672">change 16672</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/c/osmo-pcu/+/16672"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e </div>
<div style="display:none"> Gerrit-Change-Number: 16672 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>