[gprs] NS: Start ALIVE Procedure after receiving RESET_ACK
diff --git a/openbsc/src/gprs_ns.c b/openbsc/src/gprs_ns.c
index 39ca810..72558ca 100644
--- a/openbsc/src/gprs_ns.c
+++ b/openbsc/src/gprs_ns.c
@@ -183,11 +183,10 @@
return gprs_ns_tx(nsvc, msg);
}
-static int gprs_ns_tx_reset(struct gprs_nsvc *nsvc)
+static int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause)
{
struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS");
struct gprs_ns_hdr *nsh;
- uint8_t cause = NS_CAUSE_OM_INTERVENTION;
uint16_t nsvci = htons(nsvc->nsvci);
uint16_t nsei = htons(nsvc->nsei);
@@ -251,7 +250,7 @@
break;
case NSVC_TIMER_TNS_RESET:
/* Chapter 7.3: Re-send the RESET */
- gprs_ns_tx_reset(nsvc);
+ gprs_ns_tx_reset(nsvc, NS_CAUSE_OM_INTERVENTION);
nsvc_start_timer(nsvc, NSVC_TIMER_TNS_RESET);
break;
}
@@ -413,6 +412,7 @@
LOGP(DGPRS, LOGL_INFO, "Ignoring NS PDU type 0x%0x "
"from %s for non-existing NS-VC\n",
nsh->pdu_type, inet_ntoa(saddr->sin_addr));
+ //gprs_ns_tx_reset(nsvc, NS_CAUSE_NSVC_UNKNOWN);
return -EIO;
}
LOGP(DGPRS, LOGL_INFO, "Creating NS-VC for BSS at %s:%u\n",
@@ -451,6 +451,9 @@
if (nsvc->remote_end_is_sgsn) {
/* stop RESET timer */
bsc_del_timer(&nsvc->timer);
+ /* send ALIVE PDU */
+ rc = gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE);
+ nsvc_start_timer(nsvc, NSVC_TIMER_TNS_ALIVE);
}
break;
case NS_PDUT_UNBLOCK:
@@ -621,7 +624,7 @@
nsvc->remote_end_is_sgsn = 1;
/* Initiate a RESET procedure */
- if (gprs_ns_tx_reset(nsvc) < 0) {
+ if (gprs_ns_tx_reset(nsvc, NS_CAUSE_OM_INTERVENTION) < 0) {
LOGP(DGPRS, LOGL_ERROR, "NSEI=%u, error resetting NS-VC\n",
nsei);
}