aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-03-18 22:20:34 +0100
committerHarald Welte <laforge@gnumonks.org>2018-03-18 21:47:15 +0000
commit4de011561ff9cb97a4abc9990173c6af21f0a958 (patch)
tree2676837b947d9d52481e80a899ce1aaa78ad9e8c
parent5060f563c6ea185842771ae311b0800d657fa14a (diff)
a_iface_bssap: Treat inbound RESET as implicit RESET ACK
If both sides are sending RESET at the same time, they are not aware of each other. This leads to synchronization problems in wich the remote side is transmitting e.g. a COMPL L3 INFO after receiving a RESET ACK, but before even receiving or processing the RESET in the inverse direction. So let's treat receiving a RESET as an implicit RESET ACK to any RESET we may have sent. Change-Id: I0ae34fbb3735592bb7cffa5aaf421b14a8acc90e
-rw-r--r--src/libmsc/a_iface_bssap.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c
index f131eca74..2be9afa92 100644
--- a/src/libmsc/a_iface_bssap.c
+++ b/src/libmsc/a_iface_bssap.c
@@ -121,6 +121,10 @@ static void bssmap_rx_reset(struct osmo_sccp_user *scu, const struct a_conn_info
if (!a_conn_info->bsc->reset)
a_start_reset(a_conn_info->bsc, true);
+
+ /* Treat an incoming RESET like an ACK to any RESET request we may have just sent.
+ * After all, what we wanted is the A interface to be reset, which we now know has happened. */
+ a_reset_ack_confirm(a_conn_info->bsc->reset);
}
/* Endpoint to handle BSSMAP reset acknowlegement */