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
This commit is contained in:
parent
e8915b9d9d
commit
b59d61b4b4
24
src/bts.cpp
24
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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
18
src/tbf.cpp
18
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(),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue