diff options
author | Pau Espin Pedrol <pespin@espeweb.net> | 2021-02-01 14:52:48 +0100 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2021-02-03 08:34:04 +0000 |
commit | 952cb3d5d7e07c3e22aac080a3d3ddc7925093c3 (patch) | |
tree | e241a4ac3ad54109f8881350fe093217182ed4bb /src/pdch.cpp | |
parent | a58ec615147e34a3860bdf92e067943499d21300 (diff) |
nacc: Implement Pkt Cell Change Continue retransmission
Use the fact that the MS must answer the RRBP of the Pkt Cell Change
Continue with a CTRL ACK to find out whether the message was received
successfuly or a retransmission is potentially required.
3GPP TS 44.060:
"""
When the mobile station receives the PACKET CELL CHANGE ORDER or
the PACKET CELL CHANGE CONTINUE message the mobile station shall
transmit a PACKET CONTROL ACKNOWLEDGMENT message in the specified
uplink radio block if a valid RRBP field is received as part of the
message; the mobile station may then switch to a new cell.
"""
Related: SYS#4909
Change-Id: I7cc28922e71699598da0ef6eb90136a47d3c002f
Diffstat (limited to 'src/pdch.cpp')
-rw-r--r-- | src/pdch.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/pdch.cpp b/src/pdch.cpp index 2028ba20..787208c2 100644 --- a/src/pdch.cpp +++ b/src/pdch.cpp @@ -47,6 +47,7 @@ extern "C" { #include "coding_scheme.h" #include "gsm_rlcmac.h" +#include "nacc_fsm.h" } #include <errno.h> @@ -394,6 +395,19 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet, return; } + if (ms->nacc && ms->nacc->fi->state == NACC_ST_WAIT_CELL_CHG_CONTINUE_ACK && + ms->nacc->continue_poll_fn == fn && ms->nacc->continue_poll_ts == ts_no) { + osmo_fsm_inst_dispatch(ms->nacc->fi, NACC_EV_RX_CELL_CHG_CONTINUE_ACK, NULL); + /* Don't assume MS is no longer reachable (hence don't free) after this: TS 44.060 + * "When the mobile station receives the PACKET CELL CHANGE ORDER + * or the PACKET CELL CHANGE CONTINUE message the mobile station + * shall transmit a PACKET CONTROL ACKNOWLEDGMENT message in the + * specified uplink radio block if a valid RRBP field is + * received as part of the message; the mobile station _MAY_ then + * switch to a new cell." + */ + return; + } LOGP(DRLCMAC, LOGL_ERROR, "Error: received PACET CONTROL ACK " "at no request\n"); } |