From 407851b865f49ddb0ea37a1d8a26a979f08e50d8 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 19 Jun 2015 10:59:58 +0200 Subject: [PATCH] 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 --- src/bts.cpp | 11 +++++++++++ src/bts.h | 1 + src/gprs_ms_storage.cpp | 17 +++++++++++++---- src/gprs_ms_storage.h | 1 + src/tbf.cpp | 14 ++++---------- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/bts.cpp b/src/bts.cpp index 0ff0ffac..bc5ac945 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -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 */ diff --git a/src/bts.h b/src/bts.h index f2db318d..7e34db5f 100644 --- a/src/bts.h +++ b/src/bts.h @@ -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 diff --git a/src/gprs_ms_storage.cpp b/src/gprs_ms_storage.cpp index 1f124a5d..515ed753 100644 --- a/src/gprs_ms_storage.cpp +++ b/src/gprs_ms_storage.cpp @@ -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; } diff --git a/src/gprs_ms_storage.h b/src/gprs_ms_storage.h index ad1e6560..df788bf7 100644 --- a/src/gprs_ms_storage.h +++ b/src/gprs_ms_storage.h @@ -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& ms_list() const {return m_list;} private: diff --git a/src/tbf.cpp b/src/tbf.cpp index faddb79b..9bdc1f78 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -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 */