diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bts.cpp | 11 | ||||
-rw-r--r-- | src/bts.h | 1 | ||||
-rw-r--r-- | src/gprs_ms_storage.cpp | 17 | ||||
-rw-r--r-- | src/gprs_ms_storage.h | 1 | ||||
-rw-r--r-- | 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 */ @@ -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<GprsMs>& 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 */ |