diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-12-17 13:22:36 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2015-12-17 14:22:04 +0100 |
commit | fe2aa68db819d73aec1e98eaa6054d01efb22bd1 (patch) | |
tree | ac4350ef305d3a5c280de6cc96b2a6512d4c0c0f /src/gb/gprs_ns.c | |
parent | 52354dd78567e898d5dd114380a17990ce1608f8 (diff) |
ns: Force a defined state when sending NS RESETzecke/release/0.7-dev
Currently the state is assumed to remain the same while the reset
procedure is active. While this works correctly in general, a single
unexpected BLOCK_ACK or UNBLOCK_ACK can change the state but will not
stop the reset procedure. The leads to repeated RESET messages, where
the corresponding RESET_ACK is ignored. This is a stable state which
can only be left by manual intervention or by reception of a RESET
message from the peer.
This commit changes the RESET timeout handler to set the state to
BLOCKED/RESET when sending the new NS RESET message.
Note that this should ensure a clean restart even if the state has been
screwed up. It does not fix the handling of BLOCK_ACK or UNBLOCK_ACK
in abnormal cases.
Addresses:
gprs_ns.c:349 NSEI=8895 Tx NS RESET (NSVCI=8895, cause=O&M intervention)
gprs_ns.c:878 NSVCI=8895 Rx NS RESET ACK (NSEI=8895, NSVCI=8895)
gprs_ns.c:887 NS RESET ACK Discarding unexpected message for NS-VCI 8895 from SGSN NSEI=8895
Ticket: OW#1551
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/gb/gprs_ns.c')
-rw-r--r-- | src/gb/gprs_ns.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c index 65d04947..d24e8d30 100644 --- a/src/gb/gprs_ns.c +++ b/src/gb/gprs_ns.c @@ -559,6 +559,12 @@ static void gprs_ns_timer_cb(void *data) nsvc_start_timer(nsvc, NSVC_TIMER_TNS_ALIVE); break; case NSVC_TIMER_TNS_RESET: + if (!(nsvc->state & NSE_S_RESET)) + LOGP(DNS, LOGL_NOTICE, + "NSEI=%u Reset timed out but RESET flag is not set\n", + nsvc->nsei); + /* Mark NS-VC locally as blocked and dead */ + nsvc->state = NSE_S_BLOCKED | NSE_S_RESET; /* Chapter 7.3: Re-send the RESET */ gprs_ns_tx_reset(nsvc, NS_CAUSE_OM_INTERVENTION); /* Re-start Tns-reset timer */ |