From fecece0e59ab5ff705887a1247df6e02836d7c66 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 8 May 2015 12:13:08 +0200 Subject: [PATCH] tbf: Add MS object management to TBF code This commit adds MS object creation and cleanup to the TBF related code. MS objects are created when a TBF that has been "anonymous" so far gets associated with a TLLI. When a TBF is replaced by another, the old TBF is detached and the new one is attached to the MS. When all TBFs have been detached, the MS object gets deleted. The TBF related code should not call attach_tbf/detach_tbf directly but use set_ms instead to make sure, that the references are updated properly. GprsMs::detach_tbf also calls set_ms(NULL) on the detached TBF object. The MS object is not really used yet, the focus is still on object creation, TBF association, and cleanup. Ticket: #1674 Sponsored-by: On-Waves ehf --- src/bts.cpp | 6 ++++ src/gprs_ms.cpp | 13 ++++++++ src/tbf.cpp | 51 +++++++++++++++++++++++++++++- src/tbf.h | 13 ++++++++ src/tbf_dl.cpp | 2 ++ tests/tbf/TbfTest.err | 72 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 156 insertions(+), 1 deletion(-) diff --git a/src/bts.cpp b/src/bts.cpp index 9886cf62..d027993a 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -748,6 +748,12 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet, return; } tbf->update_tlli(tlli); + + if (tbf->new_tbf()) + tbf->new_tbf()->update_ms(tlli); + else + tbf->update_ms(tlli); + LOGP(DRLCMAC, LOGL_DEBUG, "RX: [PCU <- BTS] %s Packet Control Ack\n", tbf_name(tbf)); tbf->poll_state = GPRS_RLCMAC_POLL_NONE; diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index db29d206..d9d74f4d 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -67,6 +67,16 @@ GprsMs::GprsMs(uint32_t tlli) : GprsMs::~GprsMs() { LOGP(DRLCMAC, LOGL_INFO, "Destroying MS object, TLLI = 0x%08x\n", tlli()); + + if (m_ul_tbf) { + m_ul_tbf->set_ms(NULL); + m_ul_tbf = NULL; + } + + if (m_dl_tbf) { + m_dl_tbf->set_ms(NULL); + m_dl_tbf = NULL; + } } void* GprsMs::operator new(size_t size) @@ -148,6 +158,9 @@ void GprsMs::detach_tbf(gprs_rlcmac_tbf *tbf) LOGP(DRLCMAC, LOGL_INFO, "Detaching TBF from MS object, TLLI = 0x%08x, TBF = %s\n", tlli(), tbf->name()); + if (tbf->ms() == this) + tbf->set_ms(NULL); + update_status(); } diff --git a/src/tbf.cpp b/src/tbf.cpp index b1377f0e..89072e49 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include extern "C" { @@ -60,16 +61,43 @@ void gprs_rlcmac_tbf::set_new_tbf(gprs_rlcmac_tbf *tbf) tbf_name(this), tbf_name(tbf)); return; } - if (m_new_tbf != this) + if (m_new_tbf != this) { LOGP(DRLCMAC, LOGL_NOTICE, "%s m_new_tbf is already assigned to %s, " "overwriting the old value with %s\n", tbf_name(this), tbf_name(m_new_tbf), tbf_name(tbf)); + } /* Detach from other TBF */ m_new_tbf->m_old_tbf = NULL; } m_new_tbf = tbf; tbf->m_old_tbf = this; + + if (!tbf->ms()) + tbf->set_ms(ms()); +} + +void gprs_rlcmac_tbf::set_ms(GprsMs *ms) +{ + if (m_ms == ms) + return; + + if (m_ms) + m_ms->detach_tbf(this); + + m_ms = ms; + + if (m_ms) + m_ms->attach_tbf(this); +} + +void gprs_rlcmac_tbf::update_ms(uint32_t tlli) +{ + if (!ms()) + /* TODO: access the container instead when that is implemented */ + set_ms(new GprsMs(tlli)); + else + ms()->set_tlli(tlli); } gprs_rlcmac_ul_tbf *tbf_alloc_ul(struct gprs_rlcmac_bts *bts, @@ -102,6 +130,7 @@ gprs_rlcmac_ul_tbf *tbf_alloc_ul(struct gprs_rlcmac_bts *bts, tbf->set_state(GPRS_RLCMAC_ASSIGN); tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH); tbf_timer_start(tbf, 3169, bts->t3169, 0); + tbf->update_ms(tlli); return tbf; } @@ -168,6 +197,8 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf) "tbf->m_old_tbf->m_new_tbf != tbf\n", tbf_name(tbf)); } + + tbf->m_old_tbf = NULL; } if (tbf->m_new_tbf) { @@ -183,8 +214,13 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf) "tbf->m_new_tbf->m_old_tbf != tbf\n", tbf_name(tbf)); } + + tbf->m_new_tbf = NULL; } + if (tbf->ms()) + tbf->set_ms(NULL); + LOGP(DRLCMAC, LOGL_DEBUG, "********** TBF ends here **********\n"); talloc_free(tbf); } @@ -438,6 +474,12 @@ struct gprs_rlcmac_ul_tbf *tbf_alloc_ul_tbf(struct gprs_rlcmac_bts *bts, llist_add(&tbf->list.list, &bts->ul_tbfs); tbf->bts->tbf_ul_created(); + if (old_tbf && old_tbf->ms()) + tbf->set_ms(old_tbf->ms()); + + if (tbf->ms()) + tbf->ms()->attach_ul_tbf(tbf); + return tbf; } @@ -477,6 +519,12 @@ struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts, gettimeofday(&tbf->m_bw.dl_bw_tv, NULL); gettimeofday(&tbf->m_bw.dl_loss_tv, NULL); + if (old_tbf && old_tbf->ms()) + tbf->set_ms(old_tbf->ms()); + + if (tbf->ms()) + tbf->ms()->attach_dl_tbf(tbf); + return tbf; } @@ -811,6 +859,7 @@ int gprs_rlcmac_tbf::extract_tlli(const uint8_t *data, const size_t len) return 0; } update_tlli(new_tlli); + update_ms(new_tlli); LOGP(DRLCMACUL, LOGL_INFO, "Decoded premier TLLI=0x%08x of " "UL DATA TFI=%d.\n", tlli(), rh->tfi); if ((dl_tbf = bts->dl_tbf_by_tlli(tlli()))) { diff --git a/src/tbf.h b/src/tbf.h index bfe2875a..43b0a271 100644 --- a/src/tbf.h +++ b/src/tbf.h @@ -30,6 +30,7 @@ struct bssgp_bvc_ctx; struct rlc_ul_header; struct msgb; +class GprsMs; /* * TBF instance @@ -122,6 +123,9 @@ struct gprs_rlcmac_tbf { struct msgb *create_dl_ass(uint32_t fn); struct msgb *create_ul_ass(uint32_t fn); + GprsMs *ms(); + void set_ms(GprsMs *ms); + uint8_t tsc() const; int rlcmac_diag(); @@ -139,6 +143,9 @@ struct gprs_rlcmac_tbf { bool is_tlli_valid() const; void tlli_mark_valid(); + /** MS updating */ + void update_ms(uint32_t tlli); + uint8_t tfi() const; const char *imsi() const; @@ -229,6 +236,7 @@ protected: static const char *tbf_state_name[6]; + class GprsMs *m_ms; private: mutable char m_name_buf[60]; }; @@ -280,6 +288,11 @@ inline void gprs_rlcmac_tbf::set_state(enum gprs_rlcmac_tbf_state new_state) state = new_state; } +inline GprsMs *gprs_rlcmac_tbf::ms() +{ + return m_ms; +} + inline uint32_t gprs_rlcmac_tbf::tlli() const { return m_tlli; diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 0aa22f90..aec1535f 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -199,6 +199,7 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts, dl_tbf->m_tlli = tlli; dl_tbf->m_tlli_valid = 1; dl_tbf->ta = ta; + dl_tbf->update_ms(tlli); LOGP(DRLCMAC, LOGL_DEBUG, "%s [DOWNLINK] START\n", tbf_name(dl_tbf)); @@ -793,6 +794,7 @@ void gprs_rlcmac_dl_tbf::reuse_tbf(const uint8_t *data, const uint16_t len) new_tbf->m_tlli_valid = m_tlli_valid; new_tbf->ta = ta; new_tbf->assign_imsi(m_imsi); + new_tbf->update_ms(m_tlli); /* Copy over all data to the new TBF */ new_tbf->m_llc.put_frame(data, len); diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err index 1498c1e8..3a58351e 100644 --- a/tests/tbf/TbfTest.err +++ b/tests/tbf/TbfTest.err @@ -61,6 +61,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0x00000000 +Attaching TBF to MS object, TLLI = 0x00000000, TBF = TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=NULL) ********** TBF update ********** Slot Allocation (Algorithm A) for class 45 - Skipping TS 0, because not enabled @@ -78,6 +80,8 @@ TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=WAIT RELEASE) New TBF TBF(TFI=1 TLLI=0x00 ********** TBF ends here ********** TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) free TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) stopping timer 0. +Detaching TBF from MS object, TLLI = 0x00000000, TBF = TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) +Destroying MS object, TLLI = 0x00000000 ********** TBF ends here ********** Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=0. @@ -125,6 +129,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0x00000000 +Attaching TBF to MS object, TLLI = 0x00000000, TBF = TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=NULL) ********** TBF update ********** Slot Allocation (Algorithm A) for class 45 - Skipping TS 0, because not enabled @@ -139,6 +145,8 @@ TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) starting timer 0. TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) free TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) stopping timer 0. TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) Old TBF TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=WAIT RELEASE) still exists, detaching +Detaching TBF from MS object, TLLI = 0x00000000, TBF = TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=ASSIGN) +Destroying MS object, TLLI = 0x00000000 ********** TBF ends here ********** DL packet loss of IMSI= / TLLI=0x00000000: 0% TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=WAIT RELEASE) free @@ -371,6 +379,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000000 +Attaching TBF to MS object, TLLI = 0xc0000000, TBF = TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -388,6 +398,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000001 +Attaching TBF to MS object, TLLI = 0xc0000001, TBF = TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -405,6 +417,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000002 +Attaching TBF to MS object, TLLI = 0xc0000002, TBF = TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -422,6 +436,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000003 +Attaching TBF to MS object, TLLI = 0xc0000003, TBF = TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -439,6 +455,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000004 +Attaching TBF to MS object, TLLI = 0xc0000004, TBF = TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -456,6 +474,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000005 +Attaching TBF to MS object, TLLI = 0xc0000005, TBF = TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -473,6 +493,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000006 +Attaching TBF to MS object, TLLI = 0xc0000006, TBF = TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -490,6 +512,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000007 +Attaching TBF to MS object, TLLI = 0xc0000007, TBF = TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -507,6 +531,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000008 +Attaching TBF to MS object, TLLI = 0xc0000008, TBF = TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -524,6 +550,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000009 +Attaching TBF to MS object, TLLI = 0xc0000009, TBF = TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 ) TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -541,6 +569,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000a +Attaching TBF to MS object, TLLI = 0xc000000a, TBF = TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -558,6 +588,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000b +Attaching TBF to MS object, TLLI = 0xc000000b, TBF = TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -575,6 +607,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000c +Attaching TBF to MS object, TLLI = 0xc000000c, TBF = TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -592,6 +626,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000d +Attaching TBF to MS object, TLLI = 0xc000000d, TBF = TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -609,6 +645,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000e +Attaching TBF to MS object, TLLI = 0xc000000e, TBF = TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -626,6 +664,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000000f +Attaching TBF to MS object, TLLI = 0xc000000f, TBF = TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -643,6 +683,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000010 +Attaching TBF to MS object, TLLI = 0xc0000010, TBF = TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -660,6 +702,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000011 +Attaching TBF to MS object, TLLI = 0xc0000011, TBF = TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -677,6 +721,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000012 +Attaching TBF to MS object, TLLI = 0xc0000012, TBF = TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -694,6 +740,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000013 +Attaching TBF to MS object, TLLI = 0xc0000013, TBF = TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 1) TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -711,6 +759,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000014 +Attaching TBF to MS object, TLLI = 0xc0000014, TBF = TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -728,6 +778,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000015 +Attaching TBF to MS object, TLLI = 0xc0000015, TBF = TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -745,6 +797,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000016 +Attaching TBF to MS object, TLLI = 0xc0000016, TBF = TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -762,6 +816,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000017 +Attaching TBF to MS object, TLLI = 0xc0000017, TBF = TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -779,6 +835,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000018 +Attaching TBF to MS object, TLLI = 0xc0000018, TBF = TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -796,6 +854,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc0000019 +Attaching TBF to MS object, TLLI = 0xc0000019, TBF = TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -813,6 +873,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001a +Attaching TBF to MS object, TLLI = 0xc000001a, TBF = TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -830,6 +892,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001b +Attaching TBF to MS object, TLLI = 0xc000001b, TBF = TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -847,6 +911,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001c +Attaching TBF to MS object, TLLI = 0xc000001c, TBF = TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -864,6 +930,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001d +Attaching TBF to MS object, TLLI = 0xc000001d, TBF = TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 2) TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -881,6 +949,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001e +Attaching TBF to MS object, TLLI = 0xc000001e, TBF = TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 3) TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) changes state from NULL to ASSIGN @@ -898,6 +968,8 @@ Slot Allocation (Algorithm A) for class 45 - Skipping TS 3, because not enabled - Assign downlink TS=4 - Setting Control TS 4 +Creating MS object, TLLI = 0xc000001f +Attaching TBF to MS object, TLLI = 0xc000001f, TBF = TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) [DOWNLINK] START Send dowlink assignment for TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001 3) TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) changes state from NULL to ASSIGN