pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-pcu/+/33263 )


Change subject: Avoid using N3105 in UL TBFs
......................................................................

Avoid using N3105 in UL TBFs

This counter is only used in DL TBFs as per TS 44.060.
section 13.4 "N3105":
"When the network after sending a RRBP field in the _downlink RLC data block_ 
..."
(DL data blocks are only sent in DL TBFs).

section 8.1.2.1:
"If N3105 = N3105max, the network shall release the downlink TBF internally
and start timer T3195 for that TBF. When T3195 expires, the network may reuse
the TFI"

Change-Id: I4d4f4d4d3e6e0539ea8ec2395bed00d059b84e04
---
M src/pdch.cpp
M src/tbf.cpp
M src/tbf_ul_fsm.c
M tests/tbf/TbfTest.err
4 files changed, 34 insertions(+), 42 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/63/33263/1

diff --git a/src/pdch.cpp b/src/pdch.cpp
index 2cee011..f871d1d 100644
--- a/src/pdch.cpp
+++ b/src/pdch.cpp
@@ -391,8 +391,8 @@
                }
                LOGPTBF(tbf, LOGL_DEBUG, "[DOWNLINK] UPLINK ASSIGNED\n");
                pdch_ulc_release_fn(ulc, fn);
-               /* reset N3105 */
-               tbf->n_reset(N3105);
+               if (tbf_direction(tbf) == GPRS_RLCMAC_DL_TBF)
+                       tbf->n_reset(N3105);
                osmo_fsm_inst_dispatch(tbf->ul_ass_fsm.fi, 
TBF_UL_ASS_EV_RX_ASS_CTRL_ACK, NULL);

                new_tbf = ms_ul_tbf(ms);
@@ -422,8 +422,8 @@
                }
                LOGPTBF(tbf, LOGL_DEBUG, "[UPLINK] DOWNLINK ASSIGNED\n");
                pdch_ulc_release_fn(ulc, fn);
-               /* reset N3105 */
-               tbf->n_reset(N3105);
+               if (tbf_direction(tbf) == GPRS_RLCMAC_DL_TBF)
+                       tbf->n_reset(N3105);
                osmo_fsm_inst_dispatch(tbf->dl_ass_fsm.fi, 
TBF_DL_ASS_EV_RX_ASS_CTRL_ACK, NULL);

                new_tbf = ms_dl_tbf(ms);
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 47256f8..885c602 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -316,6 +316,9 @@
        case N3103:
                OSMO_ASSERT(direction == GPRS_RLCMAC_UL_TBF);
                break;
+       case N3105:
+               OSMO_ASSERT(direction == GPRS_RLCMAC_DL_TBF);
+               break;
        default:
                break;
        }
@@ -342,6 +345,7 @@
                chk = bts->n3103;
                break;
        case N3105:
+               OSMO_ASSERT(direction == GPRS_RLCMAC_DL_TBF);
                chk = bts->n3105;
                break;
        default:
@@ -513,7 +517,7 @@
                }
                bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_TIMEDOUT);
                bts_do_rate_ctr_inc(bts, CTR_PUA_POLL_TIMEDOUT);
-               if (n_inc(N3105)) {
+               if (this->direction == GPRS_RLCMAC_DL_TBF && n_inc(N3105)) {
                        osmo_fsm_inst_dispatch(this->state_fi, 
TBF_EV_MAX_N3105, NULL);
                        bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_FAILED);
                        bts_do_rate_ctr_inc(bts, CTR_PUA_POLL_FAILED);
@@ -532,7 +536,7 @@
                }
                bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_TIMEDOUT);
                bts_do_rate_ctr_inc(bts, CTR_PDA_POLL_TIMEDOUT);
-               if (n_inc(N3105)) {
+               if (this->direction == GPRS_RLCMAC_DL_TBF && n_inc(N3105)) {
                        osmo_fsm_inst_dispatch(this->state_fi, 
TBF_EV_MAX_N3105, NULL);
                        bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_FAILED);
                        bts_do_rate_ctr_inc(bts, CTR_PDA_POLL_FAILED);
diff --git a/src/tbf_ul_fsm.c b/src/tbf_ul_fsm.c
index 13dc9fb..231ccd2 100644
--- a/src/tbf_ul_fsm.c
+++ b/src/tbf_ul_fsm.c
@@ -152,12 +152,6 @@
                }
                tbf_ul_fsm_state_chg(fi, TBF_ST_FLOW);
                break;
-       case TBF_EV_MAX_N3105:
-               /* We are going to release, so abort any Pkt Ul Ass pending to 
be scheduled: */
-               osmo_fsm_inst_dispatch(tbf_ul_ass_fi(ctx->tbf), 
TBF_UL_ASS_EV_ABORT, NULL);
-               ctx->T_release = 3195;
-               tbf_ul_fsm_state_chg(fi, TBF_ST_RELEASING);
-               break;
        default:
                OSMO_ASSERT(0);
        }
@@ -199,10 +193,6 @@
                ctx->T_release = 3169;
                tbf_ul_fsm_state_chg(fi, TBF_ST_RELEASING);
                break;
-       case TBF_EV_MAX_N3105:
-               ctx->T_release = 3195;
-               tbf_ul_fsm_state_chg(fi, TBF_ST_RELEASING);
-               break;
        default:
                OSMO_ASSERT(0);
        }
@@ -246,10 +236,6 @@
                ctx->T_release = 3169;
                tbf_ul_fsm_state_chg(fi, TBF_ST_RELEASING);
                break;
-       case TBF_EV_MAX_N3105:
-               ctx->T_release = 3195;
-               tbf_ul_fsm_state_chg(fi, TBF_ST_RELEASING);
-               break;
        default:
                OSMO_ASSERT(0);
        }
@@ -278,11 +264,6 @@
 static void st_releasing(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
        switch (event) {
-       case TBF_EV_MAX_N3105:
-               /* This may be received here if the TBF had several polls
-                * allocated concurrently and several failed each increasing 
N3105
-                * over MAX_N3015. We are already releasing, ignore.*/
-               break;
        default:
                OSMO_ASSERT(0);
        }
@@ -320,8 +301,7 @@
                .in_event_mask =
                        X(TBF_EV_ASSIGN_ADD_CCCH) |
                        X(TBF_EV_ASSIGN_ADD_PACCH) |
-                       X(TBF_EV_ASSIGN_ACK_PACCH) |
-                       X(TBF_EV_MAX_N3105),
+                       X(TBF_EV_ASSIGN_ACK_PACCH),
                .out_state_mask =
                        X(TBF_ST_FLOW) |
                        X(TBF_ST_FINISHED),
@@ -334,8 +314,7 @@
                        X(TBF_EV_FIRST_UL_DATA_RECVD) |
                        X(TBF_EV_CONTENTION_RESOLUTION_MS_SUCCESS) |
                        X(TBF_EV_LAST_UL_DATA_RECVD) |
-                       X(TBF_EV_MAX_N3101) |
-                       X(TBF_EV_MAX_N3105),
+                       X(TBF_EV_MAX_N3101),
                .out_state_mask =
                        X(TBF_ST_ASSIGN) |
                        X(TBF_ST_FINISHED) |
@@ -347,18 +326,15 @@
                .in_event_mask =
                        X(TBF_EV_CONTENTION_RESOLUTION_MS_SUCCESS) |
                        X(TBF_EV_FINAL_UL_ACK_CONFIRMED) |
-                       X(TBF_EV_MAX_N3103) |
-                       X(TBF_EV_MAX_N3105),
+                       X(TBF_EV_MAX_N3103),
                .out_state_mask =
                        X(TBF_ST_RELEASING),
                .name = "FINISHED",
                .action = st_finished,
        },
        [TBF_ST_RELEASING] = {
-               .in_event_mask =
-                       X(TBF_EV_MAX_N3105),
-               .out_state_mask =
-                       0,
+               .in_event_mask = 0,
+               .out_state_mask = 0,
                .name = "RELEASING",
                .action = st_releasing,
                .onenter = st_releasing_on_enter,
diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err
index 36e1c19..7ffebea 100644
--- a/tests/tbf/TbfTest.err
+++ b/tests/tbf/TbfTest.err
@@ -9658,7 +9658,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=56 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN}
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 56)
-TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} N3105 0 => 1 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: state_chg to SEND_ASS
@@ -9715,7 +9714,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=60 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN}
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 60)
-TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} N3105 1 => 2 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: state_chg to SEND_ASS
@@ -9772,7 +9770,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=65 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN}
 TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 65)
-TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} N3105 0 => 1 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){WAIT_ACK}: state_chg to SEND_ASS
@@ -9829,7 +9826,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=69 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN}
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 69)
-TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} N3105 2 => 3 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-0:E:TLLI-0xffeeddcc){WAIT_ACK}: state_chg to SEND_ASS
@@ -9886,7 +9882,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=73 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){ASSIGN}
 TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 73)
-TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){ASSIGN} N3105 0 => 1 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-2:E:TLLI-0xffeeddce){WAIT_ACK}: state_chg to SEND_ASS
@@ -9943,7 +9938,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=78 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN}
 TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 78)
-TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} N3105 1 => 2 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-1:E:TLLI-0xffeeddcd){WAIT_ACK}: state_chg to SEND_ASS
@@ -9997,7 +9991,6 @@
 PDCH(bts=0,trx=0,ts=7) Expiring FN=82 but previous FN=2654231 is still 
reserved!
 PDCH(bts=0,trx=0,ts=7) Timeout for registered POLL (FN=2654231, 
reason=UL_ASS): TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){ASSIGN}
 TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){ASSIGN} poll timeout for FN=2654231, TS=7 
(curr FN 82)
-TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){ASSIGN} N3105 0 => 1 (< MAX 8)
 UL_ASS_TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){WAIT_ACK}: Received Event 
ASS_POLL_TIMEOUT
 TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){ASSIGN} Timeout for polling PACKET CONTROL 
ACK for PACKET UPLINK ASSIGNMENT: |Assignment was on PACCH|No uplink data 
received yet|
 UL_ASS_TBF(UL:TFI-0-0-3:E:TLLI-0xffeeddcf){WAIT_ACK}: state_chg to SEND_ASS

--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/33263
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: I4d4f4d4d3e6e0539ea8ec2395bed00d059b84e04
Gerrit-Change-Number: 33263
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to