From 9200ce60196a289968144582f1acfac25e17eed5 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 22 May 2015 17:48:04 +0200 Subject: tbf: Store the timing advance (TA) value in the GprsMs object The TA value rather relates to an MS and not to a single TBF. So all TBFs share the same TA value. Currently the TA value is stored per TBF and eventually copied from an old TBF to a new one. It is in general only passed with an RACH request when the TLLI and thus the MS is not yet known. This commit adds a TA member to the GprsMs class and uses that one when the TBF is associated to an MS object. Since the TBF is not always associated with an MS object (after RACH or when it has been replaced by another TBF), the TA value is still stored in each TBF and that value is used as long as no MS object is being associated. Sponsored-by: On-Waves ehf --- src/bts.cpp | 20 ++++++-------------- src/encoding.cpp | 4 ++-- src/gprs_ms.cpp | 13 +++++++++++++ src/gprs_ms.h | 9 +++++++++ src/tbf.cpp | 32 ++++++++++++++++++++++++++------ src/tbf.h | 6 +++++- src/tbf_dl.cpp | 25 ++++++------------------- tests/tbf/TbfTest.cpp | 29 ++++++++++++++++++++--------- tests/tbf/TbfTest.err | 41 ++++++----------------------------------- 9 files changed, 93 insertions(+), 86 deletions(-) diff --git a/src/bts.cpp b/src/bts.cpp index 6bcfea0d..010b8e88 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -438,7 +438,7 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) /* FIXME: send reject */ return -EBUSY; } - tbf->ta = qta >> 2; + tbf->set_ta(qta >> 2); tbf->set_state(GPRS_RLCMAC_FLOW); tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH); tbf_timer_start(tbf, 3169, m_bts.t3169, 0); @@ -461,7 +461,7 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) m_bts.alpha, m_bts.gamma, -1); else plen = Encoding::write_immediate_assignment(&m_bts, immediate_assignment, 0, ra, - Fn, tbf->ta, tbf->trx->arfcn, tbf->first_ts, tbf->tsc(), + Fn, tbf->ta(), tbf->trx->arfcn, tbf->first_ts, tbf->tsc(), tbf->tfi(), tbf->m_usf[tbf->first_ts], 0, 0, 0, 0, m_bts.alpha, m_bts.gamma, -1); pcu_l1if_tx_agch(immediate_assignment, plen); @@ -486,8 +486,6 @@ void BTS::trigger_dl_ass( old_tbf->was_releasing = old_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE); - /* use TA from old TBF */ - dl_tbf->ta = old_tbf->ta; /* change state */ dl_tbf->set_state(GPRS_RLCMAC_ASSIGN); dl_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH); @@ -515,7 +513,7 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi) /* use request reference that has maximum distance to current time, * so the assignment will not conflict with possible RACH requests. */ plen = Encoding::write_immediate_assignment(&m_bts, immediate_assignment, 1, 125, - (tbf->pdch[tbf->first_ts]->last_rts_fn + 21216) % 2715648, tbf->ta, + (tbf->pdch[tbf->first_ts]->last_rts_fn + 21216) % 2715648, tbf->ta(), tbf->trx->arfcn, tbf->first_ts, tbf->tsc(), tbf->tfi(), 0, tbf->tlli(), poll, tbf->poll_fn, 0, m_bts.alpha, m_bts.gamma, -1); pcu_l1if_tx_pch(immediate_assignment, plen, imsi); @@ -836,7 +834,7 @@ void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_n /* This call will register the new TBF with the MS on success */ tbf_alloc_ul(bts_data(), tbf->trx->trx_no, tbf->ms_class, - tbf->tlli(), tbf->ta, tbf); + tbf->tlli(), tbf->ta(), tbf); /* schedule uplink assignment */ tbf->ul_ass_state = GPRS_RLCMAC_UL_ASS_SEND_ASS; @@ -846,14 +844,13 @@ void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_n void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, uint32_t fn) { struct gprs_rlcmac_sba *sba; - int rc; if (request->ID.UnionType) { struct gprs_rlcmac_ul_tbf *ul_tbf = NULL; struct gprs_rlcmac_dl_tbf *dl_tbf = NULL; uint32_t tlli = request->ID.u.TLLI; uint8_t ms_class = 0; - uint8_t ta; + uint8_t ta = 0; GprsMs *ms = bts()->ms_by_tlli(tlli); /* Keep the ms, even if it gets idle temporarily */ @@ -862,6 +859,7 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, if (ms) { ul_tbf = ms->ul_tbf(); dl_tbf = ms->dl_tbf(); + ta = ms->ta(); } if (ul_tbf) { @@ -890,14 +888,8 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request, "in packet resource request of single " "block, but there is no resource request " "scheduled!\n"); - rc = bts()->timing_advance()->recall(tlli); - if (rc >= 0) - ta = rc; - else - ta = 0; } else { ta = sba->ta; - bts()->timing_advance()->remember(tlli, ta); bts()->sba()->free_sba(sba); } if (request->Exist_MS_Radio_Access_capability) diff --git a/src/encoding.cpp b/src/encoding.cpp index ffd61080..167bfd4c 100644 --- a/src/encoding.cpp +++ b/src/encoding.cpp @@ -195,7 +195,7 @@ void Encoding::write_packet_uplink_assignment( bitvec_write_field(dest, wp,bts->initial_cs_ul-1, 2); // CHANNEL_CODING_COMMAND bitvec_write_field(dest, wp,0x1,1); // TLLI_BLOCK_CHANNEL_CODING bitvec_write_field(dest, wp,0x1,1); // switch TIMING_ADVANCE_VALUE = on - bitvec_write_field(dest, wp,tbf->ta,6); // TIMING_ADVANCE_VALUE + bitvec_write_field(dest, wp,tbf->ta(),6); // TIMING_ADVANCE_VALUE if (ta_idx < 0) { bitvec_write_field(dest, wp,0x0,1); // switch TIMING_ADVANCE_INDEX = off } else { @@ -275,7 +275,7 @@ void Encoding::write_packet_downlink_assignment(RlcMacDownlink_t * block, uint8_ } block->u.Packet_Downlink_Assignment.Packet_Timing_Advance.Exist_TIMING_ADVANCE_VALUE = 0x1; // TIMING_ADVANCE_VALUE = on - block->u.Packet_Downlink_Assignment.Packet_Timing_Advance.TIMING_ADVANCE_VALUE = tbf->ta; // TIMING_ADVANCE_VALUE + block->u.Packet_Downlink_Assignment.Packet_Timing_Advance.TIMING_ADVANCE_VALUE = tbf->ta(); // TIMING_ADVANCE_VALUE if (ta_idx < 0) { block->u.Packet_Downlink_Assignment.Packet_Timing_Advance.Exist_IndexAndtimeSlot = 0x0; // TIMING_ADVANCE_INDEX = off } else { diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index c2320a29..d6520c31 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -60,6 +60,7 @@ GprsMs::GprsMs(uint32_t tlli) : m_tlli(tlli), m_new_ul_tlli(0), m_new_dl_tlli(0), + m_ta(0), m_is_idle(true), m_ref(0), m_list(this) @@ -263,3 +264,15 @@ void GprsMs::set_imsi(const char *imsi) m_imsi[sizeof(m_imsi) - 1] = '\0'; } +void GprsMs::set_ta(uint8_t ta_) +{ + if (ta_ == m_ta) + return; + + LOGP(DRLCMAC, LOGL_INFO, + "Modifying MS object, TLLI = 0x%08x, TA %d -> %d\n", + tlli(), m_ta, ta_); + + m_ta = ta_; +} + diff --git a/src/gprs_ms.h b/src/gprs_ms.h index 7f8af414..9c3acb4f 100644 --- a/src/gprs_ms.h +++ b/src/gprs_ms.h @@ -59,6 +59,9 @@ public: const char *imsi() const; void set_imsi(const char *imsi); + uint8_t ta() const; + void set_ta(uint8_t ta); + void attach_tbf(gprs_rlcmac_tbf *tbf); void attach_ul_tbf(gprs_rlcmac_ul_tbf *tbf); void attach_dl_tbf(gprs_rlcmac_dl_tbf *tbf); @@ -88,6 +91,7 @@ private: /* store IMSI for look-up and PCH retransmission */ char m_imsi[16]; + uint8_t m_ta; bool m_is_idle; int m_ref; @@ -111,3 +115,8 @@ inline const char *GprsMs::imsi() const { return m_imsi; } + +inline uint8_t GprsMs::ta() const +{ + return m_ta; +} diff --git a/src/tbf.cpp b/src/tbf.cpp index ac0cdf3f..53f1ae13 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -89,13 +89,32 @@ void gprs_rlcmac_tbf::assign_imsi(const char *imsi_) m_ms->set_imsi(imsi_); } +uint8_t gprs_rlcmac_tbf::ta() const +{ + return m_ms ? m_ms->ta() : m_ta; +} + +void gprs_rlcmac_tbf::set_ta(uint8_t ta) +{ + if (ms()) + ms()->set_ta(ta); + + m_ta = ta; +} + void gprs_rlcmac_tbf::set_ms(GprsMs *ms) { if (m_ms == ms) return; - if (m_ms) + if (m_ms) { + /* Save the TA locally. This will also be called, if the MS + * object detaches itself from the TBF, for instance if + * attach_tbf() is called */ + m_ta = m_ms->ta(); + m_ms->detach_tbf(this); + } m_ms = ms; @@ -110,6 +129,9 @@ void gprs_rlcmac_tbf::update_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction di if (!new_ms) new_ms = bts->ms_store().create_ms(tlli, dir); + if (dir == GPRS_RLCMAC_UL_TBF) + new_ms->set_ta(m_ta); + set_ms(new_ms); return; } @@ -144,11 +166,13 @@ gprs_rlcmac_ul_tbf *tbf_alloc_ul(struct gprs_rlcmac_bts *bts, return NULL; } tbf->m_contention_resolution_done = 1; - tbf->ta = ta; /* use current TA */ 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, GPRS_RLCMAC_UL_TBF); + OSMO_ASSERT(tbf->ms()); + + tbf->ms()->set_ta(ta); return tbf; } @@ -786,8 +810,6 @@ void gprs_rlcmac_tbf::free_all(struct gprs_rlcmac_pdch *pdch) void gprs_rlcmac_tbf::update_tlli(uint32_t tlli) { - /* update the timing advance for the new tlli */ - bts->timing_advance()->update(0, tlli, ta); } int gprs_rlcmac_tbf::extract_tlli(const uint8_t *data, const size_t len) @@ -843,8 +865,6 @@ int gprs_rlcmac_tbf::extract_tlli(const uint8_t *data, const size_t len) tbf_free(ul_tbf); ul_tbf = NULL; } - /* store current timing advance */ - bts->timing_advance()->remember(tlli(), ta); return 1; } diff --git a/src/tbf.h b/src/tbf.h index 5ea6d4ef..d288669d 100644 --- a/src/tbf.h +++ b/src/tbf.h @@ -149,6 +149,8 @@ struct gprs_rlcmac_tbf { const char *imsi() const; void assign_imsi(const char *imsi); + uint8_t ta() const; + void set_ta(uint8_t); time_t created_ts() const; @@ -165,7 +167,6 @@ struct gprs_rlcmac_tbf { uint8_t control_ts; /* timeslot control messages and polling */ uint8_t ms_class; struct gprs_rlcmac_pdch *pdch[8]; /* list of PDCHs allocated to TBF */ - uint16_t ta; gprs_llc m_llc; @@ -225,6 +226,9 @@ protected: static const char *tbf_state_name[6]; class GprsMs *m_ms; + + /* Field to take the TA value if no MS is associated */ + uint8_t m_ta; private: mutable char m_name_buf[60]; }; diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index edaf2987..2289e3f0 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -151,42 +151,30 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts, const uint8_t ms_class, const uint8_t *data, const uint16_t len) { - uint8_t trx, ta, ss; + uint8_t trx, ss; int8_t use_trx; + uint16_t ta = 0; struct gprs_rlcmac_ul_tbf *ul_tbf = NULL, *old_ul_tbf; struct gprs_rlcmac_dl_tbf *dl_tbf = NULL; int8_t tfi; /* must be signed */ - int rc; GprsMs *ms; /* 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" ms = bts->bts->ms_store().get_ms(tlli, tlli_old, imsi); - if (ms) + if (ms) { ul_tbf = ms->ul_tbf(); + ta = ms->ta(); + } if (ul_tbf && ul_tbf->m_contention_resolution_done && !ul_tbf->m_final_ack_sent) { use_trx = ul_tbf->trx->trx_no; - ta = ul_tbf->ta; ss = 0; old_ul_tbf = ul_tbf; } else { use_trx = -1; - /* we already have an uplink TBF, so we use that TA */ - if (ul_tbf) - ta = ul_tbf->ta; - else { - /* recall TA */ - rc = bts->bts->timing_advance()->recall(tlli); - if (rc < 0) { - LOGP(DRLCMAC, LOGL_NOTICE, "TA unknown" - ", assuming 0\n"); - ta = 0; - } else - ta = rc; - } ss = 1; /* PCH assignment only allows one timeslot */ old_ul_tbf = NULL; } @@ -205,8 +193,8 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts, bts->bts->llc_dropped_frame(); return -EBUSY; } - dl_tbf->ta = ta; dl_tbf->update_ms(tlli, GPRS_RLCMAC_DL_TBF); + dl_tbf->ms()->set_ta(ta); LOGP(DRLCMAC, LOGL_DEBUG, "%s [DOWNLINK] START\n", tbf_name(dl_tbf)); @@ -801,7 +789,6 @@ void gprs_rlcmac_dl_tbf::reuse_tbf(const uint8_t *data, const uint16_t len) } new_tbf->set_ms(ms()); - new_tbf->ta = ta; /* Copy over all data to the new TBF */ new_tbf->m_llc.put_frame(data, len); diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index e25f3447..2184b324 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -78,8 +78,7 @@ static void test_tbf_tlli_update() 0, 0, 0); dl_tbf->update_tlli(0x2342); dl_tbf->update_ms(0x2342, GPRS_RLCMAC_DL_TBF); - dl_tbf->ta = 4; - the_bts.timing_advance()->remember(0x2342, dl_tbf->ta); + dl_tbf->set_ta(4); gprs_rlcmac_tbf *ul_tbf = tbf_alloc_ul_tbf(the_bts.bts_data(), dl_tbf, 0, @@ -114,7 +113,17 @@ static void test_tbf_tlli_update() ms_new = the_bts.ms_by_tlli(0x2342); OSMO_ASSERT(ms_new == NULL); - OSMO_ASSERT(the_bts.timing_advance()->recall(0x4232) == 4); + ms_new = the_bts.ms_by_tlli(0x4232); + OSMO_ASSERT(ms_new != NULL); + OSMO_ASSERT(ms_new->ta() == 4); + + OSMO_ASSERT(ul_tbf->ta() == 4); + OSMO_ASSERT(dl_tbf->ta() == 4); + + ul_tbf->set_ta(6); + + OSMO_ASSERT(ul_tbf->ta() == 6); + OSMO_ASSERT(dl_tbf->ta() == 6); } static uint8_t llc_data[200]; @@ -439,9 +448,9 @@ static void test_tbf_single_phase() OSMO_ASSERT(ul_tbf != NULL); fprintf(stderr, "Got '%s', TA=%d\n", - ul_tbf->name(), ul_tbf->ta); + ul_tbf->name(), ul_tbf->ta()); - OSMO_ASSERT(ul_tbf->ta == qta / 4); + OSMO_ASSERT(ul_tbf->ta() == qta / 4); uint8_t data_msg[23] = { 0x00, /* GPRS_RLCMAC_DATA_BLOCK << 6 */ @@ -455,7 +464,8 @@ static void test_tbf_single_phase() ms = the_bts.ms_by_tlli(0xf1223344); OSMO_ASSERT(ms != NULL); - fprintf(stderr, "Got MS: TLLI = 0x%08x\n", ms->tlli()); + fprintf(stderr, "Got MS: TLLI = 0x%08x, TA = %d\n", ms->tlli(), ms->ta()); + OSMO_ASSERT(ms->ta() == qta/4); printf("=== end %s ===\n", __func__); } @@ -515,9 +525,9 @@ static void test_tbf_two_phase() OSMO_ASSERT(ul_tbf != NULL); fprintf(stderr, "Got '%s', TA=%d\n", - ul_tbf->name(), ul_tbf->ta); + ul_tbf->name(), ul_tbf->ta()); - OSMO_ASSERT(ul_tbf->ta == qta / 4); + OSMO_ASSERT(ul_tbf->ta() == qta / 4); /* send packet uplink assignment */ rts_fn += 52; @@ -535,7 +545,8 @@ static void test_tbf_two_phase() ms = the_bts.ms_by_tlli(0xf1223344); OSMO_ASSERT(ms != NULL); - fprintf(stderr, "Got MS: TLLI = 0x%08x\n", ms->tlli()); + fprintf(stderr, "Got MS: TLLI = 0x%08x, TA = %d\n", ms->tlli(), ms->ta()); + OSMO_ASSERT(ms->ta() == qta/4); printf("=== end %s ===\n", __func__); } diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err index 20b1a724..d919b89a 100644 --- a/tests/tbf/TbfTest.err +++ b/tests/tbf/TbfTest.err @@ -8,6 +8,7 @@ Slot Allocation (Algorithm A) for class 0 Creating MS object, TLLI = 0x00000000 The MS object cannot fully confirm an unexpected TLLI: 0x00002342, partly confirmed Attaching TBF to MS object, TLLI = 0x00002342, TBF = TBF(TFI=0 TLLI=0x00002342 DIR=DL STATE=NULL) +Modifying MS object, TLLI = 0x00002342, TA 0 -> 4 ********** TBF starts here ********** Allocating UL TBF: TFI=0 TRX=0 MS_CLASS=0 Slot Allocation (Algorithm A) for class 0 @@ -19,6 +20,7 @@ Attaching TBF to MS object, TLLI = 0x00002342, TBF = TBF(TFI=0 TLLI=0x00002342 D Modifying MS object, TLLI: 0x00000000 -> 0x00002342, already confirmed partly The MS object cannot fully confirm an unexpected TLLI: 0x00004232, partly confirmed Modifying MS object, TLLI: 0x00002342 -> 0x00004232, already confirmed partly +Modifying MS object, TLLI = 0x00004232, TA 4 -> 6 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=0. ********** TBF starts here ********** @@ -425,7 +427,6 @@ TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW) Software error: Pending downlink as Detaching TBF from MS object, TLLI = 0xf1000001, TBF = TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW) Destroying MS object, TLLI = 0xf1000001 ********** TBF ends here ********** -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=0. ********** TBF starts here ********** @@ -446,7 +447,6 @@ Send dowlink assignment for TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) on PCH, TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 30 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 08 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=1. ********** TBF starts here ********** @@ -467,7 +467,6 @@ Send dowlink assignment for TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) on PCH, TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 31 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 18 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=2. ********** TBF starts here ********** @@ -488,7 +487,6 @@ Send dowlink assignment for TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) on PCH, TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 32 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 28 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=3. ********** TBF starts here ********** @@ -509,7 +507,6 @@ Send dowlink assignment for TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) on PCH, TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 33 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 38 c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=4. ********** TBF starts here ********** @@ -530,7 +527,6 @@ Send dowlink assignment for TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) on PCH, TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 34 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 49 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=5. ********** TBF starts here ********** @@ -551,7 +547,6 @@ Send dowlink assignment for TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) on PCH, TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 35 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 59 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=6. ********** TBF starts here ********** @@ -572,7 +567,6 @@ Send dowlink assignment for TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) on PCH, TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 36 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 69 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=7. ********** TBF starts here ********** @@ -593,7 +587,6 @@ Send dowlink assignment for TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) on PCH, TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 37 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 79 c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=8. ********** TBF starts here ********** @@ -614,7 +607,6 @@ Send dowlink assignment for TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) on PCH, TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 38 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 8a 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=9. ********** TBF starts here ********** @@ -635,7 +627,6 @@ Send dowlink assignment for TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) on PCH, TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 30 39 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 9a 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=10. ********** TBF starts here ********** @@ -656,7 +647,6 @@ Send dowlink assignment for TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) on PCH TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 30 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 aa 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=11. ********** TBF starts here ********** @@ -677,7 +667,6 @@ Send dowlink assignment for TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) on PCH TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 31 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 ba c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=12. ********** TBF starts here ********** @@ -698,7 +687,6 @@ Send dowlink assignment for TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) on PCH TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 32 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 cb 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=13. ********** TBF starts here ********** @@ -719,7 +707,6 @@ Send dowlink assignment for TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) on PCH TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 33 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 db 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=14. ********** TBF starts here ********** @@ -740,7 +727,6 @@ Send dowlink assignment for TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) on PCH TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 34 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 eb 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=15. ********** TBF starts here ********** @@ -761,7 +747,6 @@ Send dowlink assignment for TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) on PCH TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 35 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 00 fb c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=16. ********** TBF starts here ********** @@ -782,7 +767,6 @@ Send dowlink assignment for TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) on PCH TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 36 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 0c 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=17. ********** TBF starts here ********** @@ -803,7 +787,6 @@ Send dowlink assignment for TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) on PCH TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 37 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 1c 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=18. ********** TBF starts here ********** @@ -824,7 +807,6 @@ Send dowlink assignment for TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) on PCH TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 38 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 2c 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=19. ********** TBF starts here ********** @@ -845,7 +827,6 @@ Send dowlink assignment for TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) on PCH TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 31 39 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 3c c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=20. ********** TBF starts here ********** @@ -866,7 +847,6 @@ Send dowlink assignment for TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) on PCH TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 30 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 4d 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=21. ********** TBF starts here ********** @@ -887,7 +867,6 @@ Send dowlink assignment for TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) on PCH TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 31 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 5d 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=22. ********** TBF starts here ********** @@ -908,7 +887,6 @@ Send dowlink assignment for TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) on PCH TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 32 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 6d 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=23. ********** TBF starts here ********** @@ -929,7 +907,6 @@ Send dowlink assignment for TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) on PCH TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 33 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 7d c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=24. ********** TBF starts here ********** @@ -950,7 +927,6 @@ Send dowlink assignment for TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) on PCH TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 34 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 8e 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=25. ********** TBF starts here ********** @@ -971,7 +947,6 @@ Send dowlink assignment for TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) on PCH TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 35 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 9e 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=26. ********** TBF starts here ********** @@ -992,7 +967,6 @@ Send dowlink assignment for TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) on PCH TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 36 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 ae 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=27. ********** TBF starts here ********** @@ -1013,7 +987,6 @@ Send dowlink assignment for TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) on PCH TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 37 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 be c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=28. ********** TBF starts here ********** @@ -1034,7 +1007,6 @@ Send dowlink assignment for TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) on PCH TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 38 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 cf 00 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=29. ********** TBF starts here ********** @@ -1055,7 +1027,6 @@ Send dowlink assignment for TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) on PCH TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 32 39 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 df 40 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=30. ********** TBF starts here ********** @@ -1076,7 +1047,6 @@ Send dowlink assignment for TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) on PCH TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 33 30 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 ef 80 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 Found TFI=31. ********** TBF starts here ********** @@ -1097,7 +1067,6 @@ Send dowlink assignment for TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) on PCH TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) changes state from NULL to ASSIGN TX: START TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH) Sending data request: trx=0 ts=0 sapi=3 arfcn=0 fn=0 block=0 data=30 33 31 2d 06 3f 30 0c 00 00 7d 80 00 00 00 dc 00 00 01 ff c0 23 2b 2b 2b 2b -TA unknown, assuming 0 Searching for first unallocated TFI: TRX=0 first TS=4 No TFI available. No PDCH resource @@ -1129,6 +1098,7 @@ Got 'TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=FLOW)', TA=7 UL DATA TFI=0 received (V(Q)=0 .. V(R)=0) Creating MS object, TLLI = 0x00000000 Modifying MS object, UL TLLI: 0x00000000 -> 0xf1223344, not yet confirmed +Modifying MS object, TLLI = 0xf1223344, TA 0 -> 7 Attaching TBF to MS object, TLLI = 0xf1223344, TBF = TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW) Decoded premier TLLI=0xf1223344 of UL DATA TFI=0. TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW) restarting timer 3169 while old timer 3169 pending @@ -1147,7 +1117,7 @@ No bctx TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW) changes state from FLOW to FINISHED - Scheduling Ack/Nack, because TLLI is included. - Scheduling Ack/Nack, because last block has CV==0. -Got MS: TLLI = 0xf1223344 +Got MS: TLLI = 0xf1223344, TA = 7 Sending data request: trx=0 ts=7 sapi=5 arfcn=0 fn=2654218 block=8 data=47 94 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b MS requests UL TBF on RACH, so we provide one: MS requests single block allocation @@ -1179,6 +1149,7 @@ TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=ASSIGN) starting timer 3169. Creating MS object, TLLI = 0x00000000 Modifying MS object, UL TLLI: 0x00000000 -> 0xf1223344, not yet confirmed Attaching TBF to MS object, TLLI = 0xf1223344, TBF = TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) +Modifying MS object, TLLI = 0xf1223344, TA 0 -> 7 Change control TS to 7 until assinment is complete. Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN)', TA=7 TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN)s start Packet Uplink Assignment (PACCH) @@ -1197,4 +1168,4 @@ TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) restarting timer 3169 while old t TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) complete UL frame that fits precisely in last block: len=20 LLC [PCU -> SGSN] TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=ASSIGN) len=20 No bctx -Got MS: TLLI = 0xf1223344 +Got MS: TLLI = 0xf1223344, TA = 7 -- cgit v1.2.3