nat: Remember the original dest local reference in the parsed struct

In case of the RLSD coming from the MSC we are patching the address
in-situ but for local calls set con = NULL. We then answered the RLSD
with the wrong reference and the MSC kept on trying.
diff --git a/openbsc/include/openbsc/bsc_nat_sccp.h b/openbsc/include/openbsc/bsc_nat_sccp.h
index 34aa632..0561df1 100644
--- a/openbsc/include/openbsc/bsc_nat_sccp.h
+++ b/openbsc/include/openbsc/bsc_nat_sccp.h
@@ -41,6 +41,9 @@
 	/* destination local reference */
 	struct sccp_source_reference *dest_local_ref;
 
+	/* original value */
+	struct sccp_source_reference original_dest_ref;
+
 	/* called ssn number */
 	int called_ssn;
 
diff --git a/openbsc/src/osmo-bsc_nat/bsc_filter.c b/openbsc/src/osmo-bsc_nat/bsc_filter.c
index bbbba69..6a9e99f 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_filter.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_filter.c
@@ -120,6 +120,8 @@
 		parsed->sccp_type = sccp_determine_msg_type(msg);
 		parsed->src_local_ref = result.source_local_reference;
 		parsed->dest_local_ref = result.destination_local_reference;
+		if (parsed->dest_local_ref)
+			parsed->original_dest_ref = *parsed->dest_local_ref;
 		parsed->called_ssn = result.called.ssn;
 		parsed->calling_ssn = result.calling.ssn;
 
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c
index a1fc035..d9fc0ca 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c
@@ -706,7 +706,8 @@
 		if (!con && parsed->sccp_type == SCCP_MSG_TYPE_RLSD) {
 			LOGP(DNAT, LOGL_NOTICE, "Sending fake RLC on RLSD message to network.\n");
 			/* Exchange src/dest for the reply */
-			nat_send_rlc(msc_con, parsed->dest_local_ref, parsed->src_local_ref);
+			nat_send_rlc(msc_con, &parsed->original_dest_ref,
+					parsed->src_local_ref);
 		} else if (!con)
 			LOGP(DNAT, LOGL_ERROR, "Unknown connection for msg type: 0x%x from the MSC.\n", parsed->sccp_type);
 	}