tbf: Add BTS::ms_alloc method

Currently the code that creates the MS objects with tbf.cpp is
duplicated.

This commit moves the corresponding code into a new method. Since
there is no TLLI available there, the GprsMsStorage::create_ms method
has been refactored into two variants, one with TLLI/direction and
one without.

Sponsored-by: On-Waves ehf
This commit is contained in:
Jacob Erlbeck 2015-06-19 10:59:58 +02:00
parent 196ddc58a4
commit 407851b865
5 changed files with 30 additions and 14 deletions

View File

@ -522,6 +522,17 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi)
}
GprsMs *BTS::ms_alloc(uint8_t ms_class)
{
GprsMs *ms;
ms = ms_store().create_ms();
ms->set_timeout(m_bts.ms_idle_sec);
ms->set_ms_class(ms_class);
return ms;
}
/*
* PDCH code below. TODO: move to a separate file
*/

View File

@ -229,6 +229,7 @@ public:
GprsMsStorage &ms_store();
GprsMs *ms_by_tlli(uint32_t tlli, uint32_t old_tlli = 0);
GprsMs *ms_alloc(uint8_t ms_class);
/*
* Statistics

View File

@ -80,6 +80,18 @@ GprsMs *GprsMsStorage::get_ms(uint32_t tlli, uint32_t old_tlli, const char *imsi
return NULL;
}
GprsMs *GprsMsStorage::create_ms()
{
GprsMs *ms;
ms = new GprsMs(m_bts, 0);
ms->set_callback(this);
llist_add(&ms->list(), &m_list);
return ms;
}
GprsMs *GprsMsStorage::create_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir)
{
GprsMs *ms = get_ms(tlli);
@ -87,15 +99,12 @@ GprsMs *GprsMsStorage::create_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction d
if (ms)
return ms;
ms = new GprsMs(m_bts, 0);
ms = create_ms();
if (dir == GPRS_RLCMAC_UL_TBF)
ms->set_tlli(tlli);
else
ms->confirm_tlli(tlli);
ms->set_callback(this);
llist_add(&ms->list(), &m_list);
return ms;
}

View File

@ -38,6 +38,7 @@ public:
GprsMs *get_ms(uint32_t tlli, uint32_t old_tlli = 0, const char *imsi = 0) const;
GprsMs *create_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir);
GprsMs *create_ms();
const LListHead<GprsMs>& ms_list() const {return m_list;}
private:

View File

@ -499,11 +499,8 @@ struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts,
tbf->direction = GPRS_RLCMAC_UL_TBF;
if (!ms) {
ms = bts->bts->ms_store().create_ms(0, tbf->direction);
ms->set_timeout(bts->ms_idle_sec);
ms->set_ms_class(ms_class);
}
if (!ms)
ms = bts->bts->ms_alloc(ms_class);
rc = setup_tbf(tbf, bts, ms, tfi, trx, ms_class, single_slot);
/* if no resource */
@ -539,11 +536,8 @@ struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts,
tbf->direction = GPRS_RLCMAC_DL_TBF;
if (!ms) {
ms = bts->bts->ms_store().create_ms(0, tbf->direction);
ms->set_timeout(bts->ms_idle_sec);
ms->set_ms_class(ms_class);
}
if (!ms)
ms = bts->bts->ms_alloc(ms_class);
rc = setup_tbf(tbf, bts, ms, tfi, trx, ms_class, single_slot);
/* if no resource */