diff --git a/src/bts.cpp b/src/bts.cpp index c8b63750..71a2f06d 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -38,6 +38,7 @@ extern "C" { #include #include #include + #include #include #include #include @@ -354,7 +355,7 @@ void BTS::set_current_block_frame_number(int fn, unsigned max_delay) m_pollController.expireTimedout(fn, max_delay); } -int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv) +int BTS::add_paging(uint8_t chan_needed, const uint8_t *mi, uint8_t mi_len) { uint8_t l, trx, ts, any_tbf = 0; struct gprs_rlcmac_tbf *tbf; @@ -370,7 +371,7 @@ int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv) LOGP(DRLCMAC, LOGL_INFO, "Add RR paging: chan-needed=%d MI=%s\n", - chan_needed, osmo_hexdump(identity_lv + 1, identity_lv[0])); + chan_needed, osmo_mi_name(mi, mi_len)); /* collect slots to page * Mark slots for every TBF, but only mark one of it. @@ -414,7 +415,7 @@ int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv) for (ts = 0; ts < 8; ts++) { if ((slot_mask[trx] & (1 << ts))) { /* schedule */ - if (!m_bts.trx[trx].pdch[ts].add_paging(chan_needed, identity_lv)) + if (!m_bts.trx[trx].pdch[ts].add_paging(chan_needed, mi, mi_len)) return -ENOMEM; LOGP(DRLCMAC, LOGL_INFO, "Paging on PACCH of TRX=%d TS=%d\n", trx, ts); diff --git a/src/bts.h b/src/bts.h index 7ef5a3f5..0eaab854 100644 --- a/src/bts.h +++ b/src/bts.h @@ -290,7 +290,7 @@ public: int current_frame_number() const; /** add paging to paging queue(s) */ - int add_paging(uint8_t chan_needed, uint8_t *identity_lv); + int add_paging(uint8_t chan_needed, const uint8_t *mi, uint8_t mi_len); gprs_rlcmac_dl_tbf *dl_tbf_by_poll_fn(uint32_t fn, uint8_t trx, uint8_t ts); gprs_rlcmac_ul_tbf *ul_tbf_by_poll_fn(uint32_t fn, uint8_t trx, uint8_t ts); diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp index 98e697d8..bac0e56a 100644 --- a/src/pcu_l1_if.cpp +++ b/src/pcu_l1_if.cpp @@ -644,8 +644,8 @@ static int pcu_rx_pag_req(struct gsm_pcu_if_pag_req *pag_req) return -EINVAL; } - return BTS::main_bts()->add_paging(pag_req->chan_needed, - pag_req->identity_lv); + return BTS::main_bts()->add_paging(pag_req->chan_needed, &pag_req->identity_lv[1], + pag_req->identity_lv[0]); } static int pcu_rx_susp_req(struct gsm_pcu_if_susp_req *susp_req) diff --git a/src/pdch.cpp b/src/pdch.cpp index da221f48..e15af2c4 100644 --- a/src/pdch.cpp +++ b/src/pdch.cpp @@ -251,14 +251,15 @@ continue_next: return msg; } -bool gprs_rlcmac_pdch::add_paging(uint8_t chan_needed, uint8_t *identity_lv) +bool gprs_rlcmac_pdch::add_paging(uint8_t chan_needed, const uint8_t *mi, uint8_t mi_len) { struct gprs_rlcmac_paging *pag = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_paging); if (!pag) return false; pag->chan_needed = chan_needed; - memcpy(pag->identity_lv, identity_lv, identity_lv[0] + 1); + pag->identity_lv[0] = mi_len; + memcpy(&pag->identity_lv[1], mi, mi_len); llist_add(&pag->list, &paging_list); diff --git a/src/pdch.h b/src/pdch.h index d55f58e1..821fb901 100644 --- a/src/pdch.h +++ b/src/pdch.h @@ -48,7 +48,7 @@ struct gprs_rlcmac_pdch { struct gprs_rlcmac_paging *dequeue_paging(); struct msgb *packet_paging_request(); - bool add_paging(uint8_t chan_needed, uint8_t *identity_lv); + bool add_paging(uint8_t chan_needed, const uint8_t *mi, uint8_t mi_len); void free_resources();