From 308c8610540acfeffe7f5dad759cbfe35e65d3c8 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Tue, 9 Feb 2016 22:27:45 +0100 Subject: edge: Remove GPRS RBB based window handling methods These methods have been replaced and are no longer used since the commit "edge: Use bitvec based window methods for EGPRS", with the only exception of TbfTest.cpp. Remove the methods and update TbfTest.cpp by using the bitvec based methods instead. Sponsored-by: On-Waves ehf --- src/rlc.cpp | 24 ------ src/rlc.h | 2 - src/tbf.h | 2 - src/tbf_dl.cpp | 76 ------------------ tests/tbf/TbfTest.cpp | 44 ++++++++--- tests/tbf/TbfTest.err | 212 ++++++++++++++++++++++++++++++++++++++++++++------ 6 files changed, 221 insertions(+), 139 deletions(-) diff --git a/src/rlc.cpp b/src/rlc.cpp index 79d8f48a..acfa7a24 100644 --- a/src/rlc.cpp +++ b/src/rlc.cpp @@ -129,30 +129,6 @@ void gprs_rlc_dl_window::update(BTS *bts, const struct bitvec *rbb, } } -void gprs_rlc_dl_window::update(BTS *bts, char *show_rbb, uint16_t ssn, - uint16_t *lost, uint16_t *received) -{ - /* SSN - 1 is in range V(A)..V(S)-1 */ - for (int bitpos = 0; bitpos < ws(); bitpos++) { - uint16_t bsn = mod_sns(bitnum_to_bsn(bitpos, ssn)); - - if (bsn == mod_sns(v_a() - 1)) - break; - - if (show_rbb[ws() - 1 - bitpos] == 'R') { - LOGP(DRLCMACDL, LOGL_DEBUG, "- got ack for BSN=%d\n", bsn); - if (!m_v_b.is_acked(bsn)) - *received += 1; - m_v_b.mark_acked(bsn); - } else { - LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn); - m_v_b.mark_nacked(bsn); - bts->rlc_nacked(); - *lost += 1; - } - } -} - int gprs_rlc_dl_window::move_window() { int i; diff --git a/src/rlc.h b/src/rlc.h index 54f28dfd..a81742ec 100644 --- a/src/rlc.h +++ b/src/rlc.h @@ -190,8 +190,6 @@ struct gprs_rlc_dl_window: public gprs_rlc_window { /* Methods to manage reception */ int resend_needed(); int mark_for_resend(); - void update(BTS *bts, char *show_rbb, uint16_t ssn, - uint16_t *lost, uint16_t *received); void update(BTS *bts, const struct bitvec *rbb, uint16_t first_bsn, uint16_t *lost, uint16_t *received); diff --git a/src/tbf.h b/src/tbf.h index ad8ad4c2..41a7e20a 100644 --- a/src/tbf.h +++ b/src/tbf.h @@ -360,7 +360,6 @@ struct gprs_rlcmac_dl_tbf : public gprs_rlcmac_tbf { const uint16_t pdu_delay_csec, const uint8_t *data, const uint16_t len); - int rcvd_dl_ack(uint8_t final, uint8_t ssn, uint8_t *rbb); int rcvd_dl_ack(uint8_t final_ack, unsigned first_bsn, struct bitvec *rbb); struct msgb *create_dl_acked_block(uint32_t fn, uint8_t ts); void request_dl_ack(); @@ -412,7 +411,6 @@ protected: int create_new_bsn(const uint32_t fn, GprsCodingScheme cs); struct msgb *create_dl_acked_block(const uint32_t fn, const uint8_t ts, int index, int index2 = -1); - int update_window(const uint8_t ssn, const uint8_t *rbb); int update_window(unsigned first_bsn, const struct bitvec *rbb); int maybe_start_new_window(); bool dl_window_stalled() const; diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 7540d1b3..57346edb 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -898,71 +898,6 @@ int gprs_rlcmac_dl_tbf::update_window(unsigned first_bsn, return 0; } -int gprs_rlcmac_dl_tbf::update_window(const uint8_t ssn, const uint8_t *rbb) -{ - int16_t dist; /* must be signed */ - uint16_t lost = 0, received = 0; - char show_rbb[65]; - char show_v_b[RLC_MAX_SNS + 1]; - int error_rate; - struct ana_result ana_res; - - Decoding::extract_rbb(rbb, show_rbb); - /* show received array in debug (bit 64..1) */ - LOGP(DRLCMACDL, LOGL_DEBUG, "- ack: (BSN=%d)\"%s\"" - "(BSN=%d) R=ACK I=NACK\n", m_window.mod_sns(ssn - 64), - show_rbb, m_window.mod_sns(ssn - 1)); - - /* apply received array to receive state (SSN-64..SSN-1) */ - /* calculate distance of ssn from V(S) */ - dist = m_window.mod_sns(m_window.v_s() - ssn); - /* check if distance is less than distance V(A)..V(S) */ - if (dist >= m_window.distance()) { - /* this might happpen, if the downlink assignment - * was not received by ms and the ack refers - * to previous TBF - * FIXME: we should implement polling for - * control ack!*/ - LOGP(DRLCMACDL, LOGL_NOTICE, "- ack range is out of " - "V(A)..V(S) range %s Free TBF!\n", tbf_name(this)); - return 1; /* indicate to free TBF */ - } - - error_rate = analyse_errors(show_rbb, ssn, &ana_res); - - if (bts_data()->cs_adj_enabled && ms()) - ms()->update_error_rate(this, error_rate); - - m_window.update(bts, show_rbb, ssn, - &lost, &received); - - /* report lost and received packets */ - gprs_rlcmac_received_lost(this, received, lost); - - /* Used to measure the leak rate */ - gprs_bssgp_update_bytes_received(ana_res.received_bytes, - ana_res.received_packets + ana_res.lost_packets); - - /* raise V(A), if possible */ - m_window.raise(m_window.move_window()); - - /* show receive state array in debug (V(A)..V(S)-1) */ - m_window.show_state(show_v_b); - LOGP(DRLCMACDL, LOGL_DEBUG, "- V(B): (V(A)=%d)\"%s\"" - "(V(S)-1=%d) A=Acked N=Nacked U=Unacked " - "X=Resend-Unacked I=Invalid\n", - m_window.v_a(), show_v_b, - m_window.v_s_mod(-1)); - - if (state_is(GPRS_RLCMAC_FINISHED) && m_window.window_empty()) { - LOGP(DRLCMACDL, LOGL_NOTICE, "Received acknowledge of " - "all blocks, but without final ack " - "inidcation (don't worry)\n"); - } - return 0; -} - - int gprs_rlcmac_dl_tbf::maybe_start_new_window() { release(); @@ -1052,17 +987,6 @@ int gprs_rlcmac_dl_tbf::rcvd_dl_ack(uint8_t final_ack, unsigned first_bsn, return rc; } -int gprs_rlcmac_dl_tbf::rcvd_dl_ack(uint8_t final_ack, uint8_t ssn, uint8_t *rbb) -{ - LOGP(DRLCMACDL, LOGL_DEBUG, "%s downlink acknowledge\n", tbf_name(this)); - - if (!final_ack) - return update_window(ssn, rbb); - - LOGP(DRLCMACDL, LOGL_DEBUG, "- Final ACK received.\n"); - return maybe_start_new_window(); -} - bool gprs_rlcmac_dl_tbf::dl_window_stalled() const { return m_window.window_stalled(); diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index e1be8448..84a48fe1 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -241,13 +241,18 @@ static void test_tbf_final_ack(enum test_tbf_final_ack_mode test_mode) GprsMs *ms; uint32_t tlli = 0xffeeddcc; - uint8_t rbb[64/8]; + uint8_t rbb_data[64/8]; + struct bitvec rbb; printf("=== start %s ===\n", __func__); gprs_rlcmac_dl_tbf *dl_tbf; gprs_rlcmac_tbf *new_tbf; + rbb.cur_bit = 0; + rbb.data = rbb_data; + rbb.data_len = sizeof(rbb_data); + setup_bts(&the_bts, ts_no); dl_tbf = create_dl_tbf(&the_bts, ms_class, 0, &trx_no); dl_tbf->update_ms(tlli, GPRS_RLCMAC_DL_TBF); @@ -271,10 +276,11 @@ static void test_tbf_final_ack(enum test_tbf_final_ack_mode test_mode) OSMO_ASSERT(dl_tbf->have_data()); OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FLOW)); - /* Queue a final ACK */ - memset(rbb, 0, sizeof(rbb)); /* Receive a final ACK */ - dl_tbf->rcvd_dl_ack(1, 1, rbb); + memset(rbb.data, 0xff, sizeof(rbb.data_len)); + rbb.cur_bit = dl_tbf->m_window.mod_sns( + dl_tbf->m_window.v_s() - dl_tbf->m_window.v_a()); + dl_tbf->rcvd_dl_ack(1, dl_tbf->m_window.v_a(), &rbb); /* Clean up and ensure tbfs are in the correct state */ OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE)); @@ -313,7 +319,8 @@ static void test_tbf_delayed_release() uint8_t trx_no; uint32_t tlli = 0xffeeddcc; - uint8_t rbb[64/8]; + uint8_t rbb_data[64/8]; + struct bitvec rbb; gprs_rlcmac_dl_tbf *dl_tbf; @@ -346,16 +353,22 @@ static void test_tbf_delayed_release() OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FLOW)); /* ACK all blocks */ - memset(rbb, 0xff, sizeof(rbb)); + memset(rbb_data, 0xff, sizeof(rbb_data)); + rbb.cur_bit = dl_tbf->m_window.mod_sns( + dl_tbf->m_window.v_s() - dl_tbf->m_window.v_a()); + rbb.data = rbb_data; + rbb.data_len = sizeof(rbb_data); /* Receive an ACK */ - dl_tbf->rcvd_dl_ack(0, dl_tbf->m_window.v_s(), rbb); + dl_tbf->rcvd_dl_ack(0, dl_tbf->m_window.v_a(), &rbb); OSMO_ASSERT(dl_tbf->m_window.window_empty()); /* Force sending of a single block containing an LLC dummy command */ request_dl_rlc_block(dl_tbf, &fn); /* Receive an ACK */ - dl_tbf->rcvd_dl_ack(0, dl_tbf->m_window.v_s(), rbb); + rbb.cur_bit = dl_tbf->m_window.mod_sns( + dl_tbf->m_window.v_s() - dl_tbf->m_window.v_a()); + dl_tbf->rcvd_dl_ack(0, dl_tbf->m_window.v_a(), &rbb); OSMO_ASSERT(dl_tbf->m_window.window_empty()); /* Timeout (make sure fn % 52 remains valid) */ @@ -365,7 +378,9 @@ static void test_tbf_delayed_release() OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FINISHED)); /* Receive a final ACK */ - dl_tbf->rcvd_dl_ack(1, dl_tbf->m_window.v_s(), rbb); + rbb.cur_bit = dl_tbf->m_window.mod_sns( + dl_tbf->m_window.v_s() - dl_tbf->m_window.v_a()); + dl_tbf->rcvd_dl_ack(1, dl_tbf->m_window.v_a(), &rbb); /* Clean up and ensure tbfs are in the correct state */ OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE)); @@ -1223,12 +1238,16 @@ static void establish_and_use_egprs_dl_tbf(BTS *the_bts, int mcs) uint32_t tlli = 0xffeeddcc; uint8_t test_data[512]; - uint8_t rbb[64/8]; + uint8_t rbb_data[64/8]; + struct bitvec rbb; gprs_rlcmac_dl_tbf *dl_tbf; printf("Testing MCS-%d\n", mcs); + rbb.data = rbb_data; + rbb.data_len = sizeof(rbb_data); + memset(test_data, 1, sizeof(test_data)); the_bts->bts_data()->initial_mcs_dl = mcs; @@ -1263,7 +1282,10 @@ static void establish_and_use_egprs_dl_tbf(BTS *the_bts, int mcs) OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FLOW)); /* Receive a final ACK */ - dl_tbf->rcvd_dl_ack(1, dl_tbf->m_window.v_s(), rbb); + memset(rbb.data, 0xff, sizeof(rbb.data_len)); + rbb.cur_bit = dl_tbf->m_window.mod_sns( + dl_tbf->m_window.v_s() - dl_tbf->m_window.v_a()); + dl_tbf->rcvd_dl_ack(1, dl_tbf->m_window.v_a(), &rbb); /* Clean up and ensure tbfs are in the correct state */ OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE)); diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err index 77966595..6013462c 100644 --- a/tests/tbf/TbfTest.err +++ b/tests/tbf/TbfTest.err @@ -85,6 +85,11 @@ data block (BSN 1, CS-1): 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 msg block (BSN 1, CS-1): 07 00 03 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=8 block=2 data=07 00 03 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) downlink acknowledge +- ack: (BSN=0)"RR"(BSN=1) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=0:2, lost=0, recv=2, skipped=0, bsn=0, info='RR..............................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- V(B): (V(A)=2)""(V(S)-1=1) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE) starting timer 3193. @@ -170,6 +175,11 @@ data block (BSN 1, CS-1): 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 msg block (BSN 1, CS-1): 07 00 03 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=8 block=2 data=07 00 03 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) downlink acknowledge +- ack: (BSN=0)"RR"(BSN=1) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=0:2, lost=0, recv=2, skipped=0, bsn=0, info='RR..............................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- V(B): (V(A)=2)""(V(S)-1=1) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE) starting timer 3193. @@ -417,29 +427,29 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) msg block (BSN 20, CS-1): 07 00 28 0a 41 c6 c7 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=91 block=9 data=07 00 28 0a 41 c6 c7 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) downlink acknowledge -- ack: (BSN=85)"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"(BSN=20) R=ACK I=NACK -TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=0:21, lost=0, recv=21, skipped=0, bsn=127, info='RRRRRRRRRRRRRRRRRRRRR$..........................................' -- got ack for BSN=20 -- got ack for BSN=19 -- got ack for BSN=18 -- got ack for BSN=17 -- got ack for BSN=16 -- got ack for BSN=15 -- got ack for BSN=14 -- got ack for BSN=13 -- got ack for BSN=12 -- got ack for BSN=11 -- got ack for BSN=10 -- got ack for BSN=9 -- got ack for BSN=8 -- got ack for BSN=7 -- got ack for BSN=6 -- got ack for BSN=5 -- got ack for BSN=4 -- got ack for BSN=3 -- got ack for BSN=2 -- got ack for BSN=1 +- ack: (BSN=0)"RRRRRRRRRRRRRRRRRRRRR"(BSN=20) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=0:21, lost=0, recv=21, skipped=0, bsn=0, info='RRRRRRRRRRRRRRRRRRRRR...........................................' - got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- got ack for BSN=13 +- got ack for BSN=14 +- got ack for BSN=15 +- got ack for BSN=16 +- got ack for BSN=17 +- got ack for BSN=18 +- got ack for BSN=19 +- got ack for BSN=20 - V(B): (V(A)=21)""(V(S)-1=20) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid Scheduling data message at RTS for DL TFI=0 (TRX=0, TS=4) prio=4 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) downlink (V(A)==21 .. V(S)==21) @@ -455,8 +465,8 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) msg block (BSN 21, CS-1): 07 00 2a 4d 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=95 block=10 data=07 00 2a 4d 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) downlink acknowledge -- ack: (BSN=86)"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"(BSN=21) R=ACK I=NACK -TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=21:22, lost=0, recv=1, skipped=0, bsn=20, info='R$..............................................................' +- ack: (BSN=21)"R"(BSN=21) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) DL analysis, range=21:22, lost=0, recv=1, skipped=0, bsn=21, info='R...............................................................' - got ack for BSN=21 - V(B): (V(A)=22)""(V(S)-1=21) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid Scheduling data message at RTS for DL TFI=0 (TRX=0, TS=4) prio=4 @@ -474,6 +484,10 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FINISHED msg block (BSN 22, CS-1): 07 01 2c 4d 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=203 block=11 data=07 01 2c 4d 43 c0 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FINISHED) downlink acknowledge +- ack: (BSN=22)"R"(BSN=22) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FINISHED) DL analysis, range=22:23, lost=0, recv=1, skipped=0, bsn=22, info='R...............................................................' +- got ack for BSN=22 +- V(B): (V(A)=23)""(V(S)-1=22) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FINISHED) changes state from FINISHED to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE) starting timer 3193. @@ -3696,6 +3710,34 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 24, MCS-1): 07 00 06 16 18 3a 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 00 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=108 block=1 data=07 00 06 16 18 3a 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 00 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRRRRRRRRRRRRRRRR"(BSN=24) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:25, lost=0, recv=25, skipped=0, bsn=0, info='RRRRRRRRRRRRRRRRRRRRRRRRR.......................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- got ack for BSN=13 +- got ack for BSN=14 +- got ack for BSN=15 +- got ack for BSN=16 +- got ack for BSN=17 +- got ack for BSN=18 +- got ack for BSN=19 +- got ack for BSN=20 +- got ack for BSN=21 +- got ack for BSN=22 +- got ack for BSN=23 +- got ack for BSN=24 +- V(B): (V(A)=25)""(V(S)-1=24) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -3954,6 +3996,29 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 19, MCS-2): 07 c0 04 12 20 4a 02 02 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 00 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=86 block=8 data=07 c0 04 12 20 4a 02 02 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 00 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRRRRRRRRRRR"(BSN=19) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:20, lost=0, recv=20, skipped=0, bsn=0, info='RRRRRRRRRRRRRRRRRRRR............................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- got ack for BSN=13 +- got ack for BSN=14 +- got ack for BSN=15 +- got ack for BSN=16 +- got ack for BSN=17 +- got ack for BSN=18 +- got ack for BSN=19 +- V(B): (V(A)=20)""(V(S)-1=19) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4175,6 +4240,25 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 15, MCS-3): 07 c0 03 06 04 8a 56 86 80 03 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 00 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=69 block=4 data=07 c0 03 06 04 8a 56 86 80 03 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 00 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRRRRRRR"(BSN=15) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:16, lost=0, recv=16, skipped=0, bsn=0, info='RRRRRRRRRRRRRRRR................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- got ack for BSN=13 +- got ack for BSN=14 +- got ack for BSN=15 +- V(B): (V(A)=16)""(V(S)-1=15) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4363,6 +4447,22 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 12, MCS-4): 07 00 03 00 70 3a 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 00 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=56 block=1 data=07 00 03 00 70 3a 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 86 80 03 56 56 56 56 56 56 56 56 56 56 56 00 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRRRR"(BSN=12) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:13, lost=0, recv=13, skipped=0, bsn=0, info='RRRRRRRRRRRRR...................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- V(B): (V(A)=13)""(V(S)-1=12) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4531,6 +4631,20 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 10, MCS-5): 07 80 02 08 44 57 40 40 40 40 40 40 40 c0 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=47 block=11 data=07 80 02 08 44 57 40 40 40 40 40 40 40 c0 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRR"(BSN=10) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:11, lost=0, recv=11, skipped=0, bsn=0, info='RRRRRRRRRRR.....................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- V(B): (V(A)=11)""(V(S)-1=10) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4682,6 +4796,18 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 8, MCS-6): 07 00 02 80 c0 e3 ca 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=39 block=9 data=07 00 02 80 c0 e3 ca 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRR"(BSN=8) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:9, lost=0, recv=9, skipped=0, bsn=0, info='RRRRRRRRR.......................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- V(B): (V(A)=9)""(V(S)-1=8) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4830,6 +4956,20 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 10, MCS-5): 07 80 02 08 44 57 40 40 40 40 40 40 40 c0 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=30 block=7 data=07 80 02 08 44 57 40 40 40 40 40 40 40 c0 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRR"(BSN=10) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:11, lost=0, recv=11, skipped=0, bsn=0, info='RRRRRRRRRRR.....................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- V(B): (V(A)=11)""(V(S)-1=10) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -4966,6 +5106,18 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 8, MCS-8): 07 00 02 00 60 20 f5 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 0c 01 07 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac 80 d4 13 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 30 04 1c b0 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 02 Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=26 block=6 data=07 00 02 00 60 20 f5 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 0c 01 07 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac 80 d4 13 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 30 04 1c b0 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 b2 02 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRR"(BSN=8) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:9, lost=0, recv=9, skipped=0, bsn=0, info='RRRRRRRRR.......................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- V(B): (V(A)=9)""(V(S)-1=8) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. @@ -5103,6 +5255,18 @@ Polling is already scheduled for TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGP msg block (BSN 8, MCS-6): 07 00 02 80 c0 e3 ca 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a Sending data request: trx=0 ts=4 sapi=5 arfcn=0 fn=26 block=6 data=07 00 02 80 c0 e3 ca 10 70 c0 ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca ca 0a TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRR"(BSN=8) R=ACK I=NACK +TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) DL analysis, range=0:9, lost=0, recv=9, skipped=0, bsn=0, info='RRRRRRRRR.......................................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- V(B): (V(A)=9)""(V(S)-1=8) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW EGPRS) changes state from FLOW to WAIT RELEASE TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=WAIT RELEASE EGPRS) starting timer 3193. -- cgit v1.2.3