bts, tbf: Separate functions for dl/ul tbf_by_tlli lookup
In the future we want to separate ul and dl tbf into different
classes that inherit from a common base.
Ticket: SYS#389
Sponsored-by: On-Waves ehf
diff --git a/src/bts.cpp b/src/bts.cpp
index 3dd5705..51be2d9 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -216,6 +216,18 @@
return 0;
}
+/* search for active downlink tbf */
+gprs_rlcmac_tbf *BTS::dl_tbf_by_tlli(uint32_t tlli)
+{
+ return tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF);
+}
+
+/* search for active uplink tbf */
+gprs_rlcmac_tbf *BTS::ul_tbf_by_tlli(uint32_t tlli)
+{
+ return tbf_by_tlli(tlli, GPRS_RLCMAC_UL_TBF);
+}
+
/* search for active downlink or uplink tbf */
gprs_rlcmac_tbf *BTS::tbf_by_tlli(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir)
{
@@ -360,7 +372,7 @@
tlli |= (*data++) << 4;
tlli |= (*data++) >> 4;
- tbf = tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF);
+ tbf = dl_tbf_by_tlli(tlli);
if (!tbf) {
LOGP(DRLCMAC, LOGL_ERROR, "Got IMM.ASS confirm, but TLLI=%08x "
"does not exit\n", tlli);
@@ -725,8 +737,7 @@
tbf->n3105 = 0;
tbf->dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE;
if (tbf->direction == GPRS_RLCMAC_UL_TBF)
- tbf = bts()->tbf_by_tlli(tbf->tlli(),
- GPRS_RLCMAC_DL_TBF);
+ tbf = bts()->dl_tbf_by_tlli(tbf->tlli());
#warning "TBF is changing on the way... *sigh*"
if (!tbf) {
LOGP(DRLCMAC, LOGL_ERROR, "Got ACK, but DL "
@@ -753,8 +764,7 @@
tbf->ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;
#warning "TBF is changing on the way... *sigh*"
if (tbf->direction == GPRS_RLCMAC_DL_TBF)
- tbf = bts()->tbf_by_tlli(tbf->tlli(),
- GPRS_RLCMAC_UL_TBF);
+ tbf = bts()->ul_tbf_by_tlli(tbf->tlli());
if (!tbf) {
LOGP(DRLCMAC, LOGL_ERROR, "Got ACK, but UL "
"TBF is gone TLLI=0x%08x\n", tlli);
@@ -836,7 +846,7 @@
struct gprs_rlcmac_tbf *dl_tbf;
uint8_t ta;
- tbf = bts()->tbf_by_tlli(tlli, GPRS_RLCMAC_UL_TBF);
+ tbf = bts()->ul_tbf_by_tlli(tlli);
if (tbf) {
LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
"TLLI=0x%08x while %s still "
@@ -846,7 +856,7 @@
tbf = NULL;
}
- if ((dl_tbf = bts()->tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF))) {
+ if ((dl_tbf = bts()->dl_tbf_by_tlli(tlli))) {
LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
"TLLI=0x%08x while %s still exists. "
"Killing pending DL TBF\n", tlli,
diff --git a/src/bts.h b/src/bts.h
index aa68ed7..c83bb18 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -192,7 +192,8 @@
/** add paging to paging queue(s) */
int add_paging(uint8_t chan_needed, uint8_t *identity_lv);
- gprs_rlcmac_tbf *tbf_by_tlli(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir);
+ gprs_rlcmac_tbf *dl_tbf_by_tlli(uint32_t tlli);
+ gprs_rlcmac_tbf *ul_tbf_by_tlli(uint32_t tlli);
gprs_rlcmac_tbf *tbf_by_poll_fn(uint32_t fn, uint8_t trx, uint8_t ts);
gprs_rlcmac_tbf *tbf_by_tfi(uint8_t tfi, uint8_t trx, enum gprs_rlcmac_tbf_direction dir);
@@ -238,6 +239,7 @@
SBAController m_sba;
TimingAdvance m_ta;
struct rate_ctr_group *m_ratectrs;
+ gprs_rlcmac_tbf *tbf_by_tlli(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir);
private:
/* disable copying to avoid slicing */
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 5943674..f913f97 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -82,7 +82,7 @@
const uint32_t tlli, const char *imsi)
{
/* TODO: look up by IMSI first, then tlli, then old_tlli */
- return bts->tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF);
+ return bts->dl_tbf_by_tlli(tlli);
}
int gprs_rlcmac_tbf::append_data(const uint8_t ms_class,
@@ -130,7 +130,7 @@
/* check for uplink data, so we copy our informations */
#warning "Do the same look up for IMSI, TLLI and OLD_TLLI"
#warning "Refactor the below lines... into a new method"
- tbf = bts->bts->tbf_by_tlli(tlli, GPRS_RLCMAC_UL_TBF);
+ tbf = bts->bts->ul_tbf_by_tlli(tlli);
if (tbf && tbf->dir.ul.contention_resolution_done
&& !tbf->dir.ul.final_ack_sent) {
use_trx = tbf->trx->trx_no;
@@ -308,7 +308,7 @@
if (direction != GPRS_RLCMAC_DL_TBF)
return -EINVAL;
- ul_tbf = bts->tbf_by_tlli(m_tlli, GPRS_RLCMAC_UL_TBF);
+ ul_tbf = bts->ul_tbf_by_tlli(m_tlli);
tbf_unlink_pdch(this);
rc = bts_data->alloc_algorithm(bts_data, ul_tbf, this, bts_data->alloc_algorithm_curst, 0);
@@ -1182,7 +1182,7 @@
return NULL;
}
#warning "THIS should probably go over the IMSI too"
- new_tbf = bts->tbf_by_tlli(m_tlli, GPRS_RLCMAC_DL_TBF);
+ new_tbf = bts->dl_tbf_by_tlli(m_tlli);
} else
new_tbf = this;
if (!new_tbf) {
@@ -1252,7 +1252,7 @@
/* on down TBF we get the uplink TBF to be assigned. */
#warning "Probably want to find by IMSI too"
if (direction == GPRS_RLCMAC_DL_TBF)
- new_tbf = bts->tbf_by_tlli(m_tlli, GPRS_RLCMAC_UL_TBF);
+ new_tbf = bts->ul_tbf_by_tlli(m_tlli);
else
new_tbf = this;
@@ -1497,7 +1497,7 @@
*/
if (m_tlli_valid && direction == GPRS_RLCMAC_DL_TBF) {
gprs_rlcmac_tbf *ul_tbf;
- ul_tbf = bts->tbf_by_tlli(m_tlli, GPRS_RLCMAC_UL_TBF);
+ ul_tbf = bts->ul_tbf_by_tlli(m_tlli);
if (ul_tbf) {
ul_tbf->m_tlli = tlli;
@@ -1537,7 +1537,7 @@
update_tlli(new_tlli);
LOGP(DRLCMACUL, LOGL_INFO, "Decoded premier TLLI=0x%08x of "
"UL DATA TFI=%d.\n", tlli(), rh->tfi);
- if ((dl_tbf = bts->tbf_by_tlli(tlli(), GPRS_RLCMAC_DL_TBF))) {
+ if ((dl_tbf = bts->dl_tbf_by_tlli(tlli()))) {
LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
"TLLI=0x%08x while %s still exists. "
"Killing pending DL TBF\n", tlli(),
@@ -1545,9 +1545,9 @@
tbf_free(dl_tbf);
dl_tbf = NULL;
}
- /* tbf_by_tlli will not find your TLLI, because it is not
+ /* ul_tbf_by_tlli will not find your TLLI, because it is not
* yet marked valid */
- if ((ul_tbf = bts->tbf_by_tlli(tlli(), GPRS_RLCMAC_UL_TBF))) {
+ if ((ul_tbf = bts->ul_tbf_by_tlli(tlli()))) {
LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
"TLLI=0x%08x while %s still exists. "
"Killing pending UL TBF\n", tlli(),