[GPRS] NS: Start TEST procedure, not ALIVE procedure, on RESET/RESET_ACK

According to the spec, after an incoming RESET or RESET_ACK, we shall start the
TEST procedure, not the ALIVE procedure.

Also, when we start the TEST procedure, we have to always send a NS_ALIVE
packet at the same time (we didn't in the case of incoming RESET).

Furthermore, we now only start TIMER_TNS_ALIVE from within the
TIMER_TNS_RESET callback code, where we also make sure that the
alive_retries counter is reset to zero.
This commit is contained in:
Harald Welte 2010-05-28 09:58:27 +02:00
parent 26c325151a
commit c953120326
1 changed files with 3 additions and 2 deletions

View File

@ -610,7 +610,8 @@ static int gprs_ns_rx_reset(struct gprs_nsvc *nsvc, struct msgb *msg)
nsvc->nsvci = ntohs(*nsvci); nsvc->nsvci = ntohs(*nsvci);
/* start the test procedure */ /* start the test procedure */
nsvc_start_timer(nsvc, NSVC_TIMER_TNS_ALIVE); gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE);
nsvc_start_timer(nsvc, NSVC_TIMER_TNS_TEST);
/* inform interested parties about the fact that this NSVC /* inform interested parties about the fact that this NSVC
* has received RESET */ * has received RESET */
@ -762,7 +763,7 @@ int gprs_ns_rcvmsg(struct gprs_ns_inst *nsi, struct msgb *msg,
} }
/* Initiate TEST proc.: Send ALIVE and start timer */ /* Initiate TEST proc.: Send ALIVE and start timer */
rc = gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE); rc = gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE);
nsvc_start_timer(nsvc, NSVC_TIMER_TNS_ALIVE); nsvc_start_timer(nsvc, NSVC_TIMER_TNS_TEST);
break; break;
case NS_PDUT_UNBLOCK: case NS_PDUT_UNBLOCK:
/* Section 7.2: unblocking procedure */ /* Section 7.2: unblocking procedure */