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.
This commit is contained in:
Holger Hans Peter Freyther 2013-09-03 14:35:33 +02:00
parent ff98b3cffa
commit 1b9902c128
3 changed files with 7 additions and 1 deletions

View File

@ -41,6 +41,9 @@ struct bsc_nat_parsed {
/* 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;

View File

@ -120,6 +120,8 @@ struct bsc_nat_parsed *bsc_nat_parse(struct msgb *msg)
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;

View File

@ -706,7 +706,8 @@ static int forward_sccp_to_bts(struct bsc_msc_connection *msc_con, struct msgb *
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);
}