[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);
 	}