nat: Only send DLCX when we have send a CRCX to the BSC on this endpoint
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index 6ef1f59..4d90ed7 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -112,6 +112,7 @@
 	struct sccp_source_reference remote_ref;
 
 	/* GSM audio handling. That is 32 * multiplex + ts */
+	int crcx;
 	int msc_timeslot;
 	int bsc_timeslot;
 };
diff --git a/openbsc/src/nat/bsc_mgcp_utils.c b/openbsc/src/nat/bsc_mgcp_utils.c
index 79bd2a5..6cb6264 100644
--- a/openbsc/src/nat/bsc_mgcp_utils.c
+++ b/openbsc/src/nat/bsc_mgcp_utils.c
@@ -147,12 +147,13 @@
 {
 	con->msc_timeslot = -1;
 	con->bsc_timeslot = -1;
+	con->crcx = 0;
 }
 
 void bsc_mgcp_dlcx(struct sccp_connections *con)
 {
 	/* send a DLCX down the stream */
-	if (con->bsc_timeslot != -1) {
+	if (con->bsc_timeslot != -1 && con->crcx) {
 		int endp = mgcp_timeslot_to_endpoint(0, con->msc_timeslot);
 		bsc_mgcp_send_dlcx(con->bsc, endp);
 		bsc_mgcp_free_endpoint(con->bsc->nat, endp);
@@ -247,6 +248,7 @@
 		}
 
 		/* send the message and a fake MDCX for force sending of a dummy packet */
+		sccp->crcx = 1;
 		bsc_write(sccp->bsc, bsc_msg, NAT_IPAC_PROTO_MGCP);
 		bsc_mgcp_send_mdcx(sccp->bsc, mgcp_endp);
 		return MGCP_POLICY_DEFER;