aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2018-01-30 12:00:08 +0100
committerHarald Welte <laforge@gnumonks.org>2018-02-19 08:43:33 +0000
commit4382e4e8fe05b59492ab1b38ddb5972831d0b533 (patch)
treefce5a6aa3f0865441315a3cbe033265d5ea5e60a
parent735e435e8ef40dd1a68581858d1bc39bd8898c63 (diff)
Move paging generation into PDCH
Previously paging was prepared inside BTS function and than handed over to PDCH function. Move the actual preparation into PDCH to better decouple PDCH from BTS. Related: OS#1539 Change-Id: I389fb16b6e54040770c21f88edbcb8e045636928
-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 05966d04..cbd3a1c0 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 f9f385b7..25f8ccde 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();