aboutsummaryrefslogtreecommitdiffstats
path: root/src/pdch.cpp
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@espeweb.net>2021-02-01 14:52:48 +0100
committerlaforge <laforge@osmocom.org>2021-02-03 08:34:04 +0000
commit952cb3d5d7e07c3e22aac080a3d3ddc7925093c3 (patch)
treee241a4ac3ad54109f8881350fe093217182ed4bb /src/pdch.cpp
parenta58ec615147e34a3860bdf92e067943499d21300 (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.cpp14
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");
}