aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/rlc.cpp24
-rw-r--r--src/rlc.h2
-rw-r--r--src/tbf.h2
-rw-r--r--src/tbf_dl.cpp76
-rw-r--r--tests/tbf/TbfTest.cpp44
-rw-r--r--tests/tbf/TbfTest.err212
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.