aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bts.cpp24
-rw-r--r--src/bts.h2
2 files changed, 14 insertions, 12 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 05966d0..cbd3a1c 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -303,7 +303,6 @@ int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv)
uint8_t l, trx, ts, any_tbf = 0;
struct gprs_rlcmac_tbf *tbf;
LListHead<gprs_rlcmac_tbf> *pos;
- struct gprs_rlcmac_paging *pag;
uint8_t slot_mask[8];
int8_t first_ts; /* must be signed */
@@ -359,16 +358,10 @@ 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 */
- pag = talloc_zero(tall_pcu_ctx,
- struct gprs_rlcmac_paging);
- if (!pag)
+ if (!m_bts.trx[trx].pdch[ts].add_paging(chan_needed, identity_lv))
return -ENOMEM;
- pag->chan_needed = chan_needed;
- memcpy(pag->identity_lv, identity_lv,
- identity_lv[0] + 1);
- m_bts.trx[trx].pdch[ts].add_paging(pag);
- LOGP(DRLCMAC, LOGL_INFO, "Paging on PACCH of "
- "TRX=%d TS=%d\n", trx, ts);
+
+ LOGP(DRLCMAC, LOGL_INFO, "Paging on PACCH of TRX=%d TS=%d\n", trx, ts);
any_tbf = 1;
}
}
@@ -955,9 +948,18 @@ continue_next:
return msg;
}
-void gprs_rlcmac_pdch::add_paging(struct gprs_rlcmac_paging *pag)
+bool gprs_rlcmac_pdch::add_paging(uint8_t chan_needed, uint8_t *identity_lv)
{
+ 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);
+
llist_add(&pag->list, &paging_list);
+
+ return true;
}
void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet, uint32_t fn)
diff --git a/src/bts.h b/src/bts.h
index f9f385b..25f8ccd 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -73,7 +73,7 @@ struct gprs_rlcmac_pdch {
struct gprs_rlcmac_paging *dequeue_paging();
struct msgb *packet_paging_request();
- void add_paging(struct gprs_rlcmac_paging *pag);
+ bool add_paging(uint8_t chan_needed, uint8_t *identity_lv);
void free_resources();