aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-06-26 14:37:57 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-06-29 14:46:40 +0200
commit11627ffaae4975f03e7290138cd93737b29d6181 (patch)
tree80fdac35cc7445ae6cd05a244ce0072997d437eb
parent747761f924653cb799d04398b229b3d7635f5dfe (diff)
tbf_dl_fsm: Ignore DL_ACKNACK_MISS events in WAIT_{RELEASE,REUSE_TFI} states
If in those states, we already left the FINISHED step which means we already received a FinalACk previously, hence it means we are missing requested retransmissions of the last DL ACK/NACK due to fn-advance (several DL blocks in transit before receiving UL response). Change-Id: Ib0f23a9cc3c614fe428b682e01502930cd2e478f
-rw-r--r--src/tbf_dl_fsm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/tbf_dl_fsm.c b/src/tbf_dl_fsm.c
index 557fb7a3..d604f6f9 100644
--- a/src/tbf_dl_fsm.c
+++ b/src/tbf_dl_fsm.c
@@ -286,6 +286,11 @@ static void st_wait_release(struct osmo_fsm_inst *fi, uint32_t event, void *data
case TBF_EV_FINAL_ACK_RECVD:
/* ignore, duplicate ACK, we already know about since we left ST_FINISHED */
break;
+ case TBF_EV_DL_ACKNACK_MISS:
+ /* ignore, miss for retransmitted ACK, but a previous one was
+ * already ACKED since we left ST_FINISHED. This happens due to
+ * fn-advance scheduling several DL blocks in advance. */
+ break;
default:
OSMO_ASSERT(0);
}
@@ -320,6 +325,11 @@ static void st_wait_reuse_tfi(struct osmo_fsm_inst *fi, uint32_t event, void *da
case TBF_EV_FINAL_ACK_RECVD:
/* ignore, duplicate ACK, we already know about since we left ST_FINISHED */
break;
+ case TBF_EV_DL_ACKNACK_MISS:
+ /* ignore, miss for retransmitted ACK, but a previous one was
+ * already ACKED since we left ST_FINISHED. This happens due to
+ * fn-advance scheduling several DL blocks in advance. */
+ break;
default:
OSMO_ASSERT(0);
}
@@ -450,6 +460,7 @@ static struct osmo_fsm_state tbf_dl_fsm_states[] = {
},
[TBF_ST_WAIT_RELEASE] = {
.in_event_mask =
+ X(TBF_EV_DL_ACKNACK_MISS) |
X(TBF_EV_FINAL_ACK_RECVD) |
X(TBF_EV_MAX_N3105),
.out_state_mask =
@@ -461,6 +472,7 @@ static struct osmo_fsm_state tbf_dl_fsm_states[] = {
},
[TBF_ST_WAIT_REUSE_TFI] = {
.in_event_mask =
+ X(TBF_EV_DL_ACKNACK_MISS) |
X(TBF_EV_FINAL_ACK_RECVD),
.out_state_mask =
X(TBF_ST_RELEASING),