pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/16537 )
Change subject: Support Gb PAGING-CS ...................................................................... Support Gb PAGING-CS The paging is sent over PACCH towards MS with an active TBF. Related: OS#2406 Change-Id: I9501e02e1d7f6944497e724dbccb9a19c3f5221f --- M src/gprs_bssgp_pcu.cpp 1 file changed, 30 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/37/16537/1 diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp index 67c8653..983c22c 100644 --- a/src/gprs_bssgp_pcu.cpp +++ b/src/gprs_bssgp_pcu.cpp @@ -173,6 +173,33 @@ ms_class, egprs_ms_class, delay_csec, data, len); } +static int gprs_bssgp_pcu_rx_paging_cs(struct msgb *msg, struct tlv_parsed *tp) +{ + uint8_t identity_lv[9]; + uint8_t *chan_needed = (uint8_t *)TLVP_VAL(tp, BSSGP_IE_CHAN_NEEDED); + + if (TLVP_PRESENT(tp, BSSGP_IE_TMSI)) { + identity_lv[0] = TLVP_LEN(tp, BSSGP_IE_TMSI); + if (identity_lv[0] >= sizeof(identity_lv)) { + LOGP(DBSSGP, LOGL_NOTICE, "TMSI IE too big (%" PRIu8 ")\n", identity_lv[0]); + return bssgp_tx_status(BSSGP_CAUSE_COND_IE_ERR, NULL, msg); + } + memcpy(&identity_lv[1], TLVP_VAL(tp, BSSGP_IE_TMSI), identity_lv[0]); + } else if (TLVP_PRESENT(tp, BSSGP_IE_IMSI)) { /* Use IMSI if TMSI not available: */ + identity_lv[0] = TLVP_LEN(tp, BSSGP_IE_IMSI); + if (identity_lv[0] >= sizeof(identity_lv)) { + LOGP(DBSSGP, LOGL_NOTICE, "IMSI IE too big (%" PRIu8 ")\n", identity_lv[0]); + return bssgp_tx_status(BSSGP_CAUSE_COND_IE_ERR, NULL, msg); + } + memcpy(&identity_lv[1], TLVP_VAL(tp, BSSGP_IE_IMSI), identity_lv[0]); + } else { + LOGP(DBSSGP, LOGL_ERROR, "No IMSI\n"); + return bssgp_tx_status(BSSGP_CAUSE_COND_IE_ERR, NULL, msg); + } + + return BTS::main_bts()->add_paging(chan_needed ? *chan_needed : 0, identity_lv); +} + static int gprs_bssgp_pcu_rx_paging_ps(struct msgb *msg, struct tlv_parsed *tp) { uint8_t identity_lv[9]; @@ -311,6 +338,9 @@ the_pcu.bvc_reset = 1; bvc_timeout(NULL); break; + case BSSGP_PDUT_PAGING_CS: + gprs_bssgp_pcu_rx_paging_cs(msg, tp); + break; case BSSGP_PDUT_PAGING_PS: gprs_bssgp_pcu_rx_paging_ps(msg, tp); break; @@ -323,7 +353,6 @@ break; case BSSGP_PDUT_SUSPEND_NACK: case BSSGP_PDUT_RESUME_NACK: - case BSSGP_PDUT_PAGING_CS: case BSSGP_PDUT_FLUSH_LL: case BSSGP_PDUT_SGSN_INVOKE_TRACE: LOGP(DBSSGP, LOGL_INFO, "Rx BSSGP BVCI=%d (SIGN) PDU type %s not implemented\n", -- To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/16537 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Change-Id: I9501e02e1d7f6944497e724dbccb9a19c3f5221f Gerrit-Change-Number: 16537 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de> Gerrit-MessageType: newchange