diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-06-26 14:37:57 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-06-29 14:46:40 +0200 |
commit | 11627ffaae4975f03e7290138cd93737b29d6181 (patch) | |
tree | 80fdac35cc7445ae6cd05a244ce0072997d437eb | |
parent | 747761f924653cb799d04398b229b3d7635f5dfe (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.c | 12 |
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), |