diff --git a/src/bts.cpp b/src/bts.cpp index 3dd57057..51be2d92 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -216,6 +216,18 @@ int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv) 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 @@ int BTS::rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn) 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 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet, 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 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet, 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 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, 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 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, 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 aa68ed7a..c83bb18d 100644 --- a/src/bts.h +++ b/src/bts.h @@ -192,7 +192,8 @@ public: /** 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 @@ private: 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 5943674e..f913f970 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -82,7 +82,7 @@ static struct gprs_rlcmac_tbf *tbf_lookup_dl(BTS *bts, 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 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts, /* 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 @@ int gprs_rlcmac_tbf::update() 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 @@ struct msgb *gprs_rlcmac_tbf::create_dl_ass(uint32_t fn) 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 @@ struct msgb *gprs_rlcmac_tbf::create_ul_ass(uint32_t fn) /* 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 @@ void gprs_rlcmac_tbf::update_tlli(uint32_t tlli) */ 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 @@ int gprs_rlcmac_tbf::extract_tlli(const uint8_t *data, const size_t len) 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 @@ int gprs_rlcmac_tbf::extract_tlli(const uint8_t *data, const size_t len) 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(), diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index 86c5bbde..38975f9b 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -59,8 +59,8 @@ static void test_tbf_tlli_update() ul_tbf->tlli_mark_valid(); - OSMO_ASSERT(the_bts.tbf_by_tlli(0x2342, GPRS_RLCMAC_DL_TBF) == dl_tbf); - OSMO_ASSERT(the_bts.tbf_by_tlli(0x2342, GPRS_RLCMAC_UL_TBF) == ul_tbf); + OSMO_ASSERT(the_bts.dl_tbf_by_tlli(0x2342) == dl_tbf); + OSMO_ASSERT(the_bts.ul_tbf_by_tlli(0x2342) == ul_tbf); /* @@ -68,12 +68,12 @@ static void test_tbf_tlli_update() * has changed. */ dl_tbf->update_tlli(0x4232); - OSMO_ASSERT(!the_bts.tbf_by_tlli(0x2342, GPRS_RLCMAC_DL_TBF)); - OSMO_ASSERT(!the_bts.tbf_by_tlli(0x2342, GPRS_RLCMAC_UL_TBF)); + OSMO_ASSERT(!the_bts.dl_tbf_by_tlli(0x2342)); + OSMO_ASSERT(!the_bts.ul_tbf_by_tlli(0x2342)); - OSMO_ASSERT(the_bts.tbf_by_tlli(0x4232, GPRS_RLCMAC_DL_TBF) == dl_tbf); - OSMO_ASSERT(the_bts.tbf_by_tlli(0x4232, GPRS_RLCMAC_UL_TBF) == ul_tbf); + OSMO_ASSERT(the_bts.dl_tbf_by_tlli(0x4232) == dl_tbf); + OSMO_ASSERT(the_bts.ul_tbf_by_tlli(0x4232) == ul_tbf); OSMO_ASSERT(the_bts.timing_advance()->recall(0x4232) == 4); }