Change in osmo-pcu[master]: Pass paging group instead of imsi where later is not needed

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Mon Dec 23 13:11:08 UTC 2019


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/16672 )


Change subject: Pass paging group instead of imsi where later is not needed
......................................................................

Pass paging group instead of imsi where later is not needed

Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e
---
M src/bts.cpp
M src/bts.h
M src/gprs_bssgp_pcu.cpp
M src/gprs_rlcmac.cpp
M src/gprs_rlcmac.h
M src/pcu_l1_if.cpp
M src/pcu_l1_if.h
M src/tbf.cpp
M src/tbf_dl.cpp
9 files changed, 38 insertions(+), 22 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/72/16672/1

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

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

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e
Gerrit-Change-Number: 16672
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191223/03a5afab/attachment.htm>


More information about the gerrit-log mailing list