[nat] Add the notion of a "local" connection.

A local connection is only between the MUX and the real BSC. We will
not forward anything to the MSC. This will be needed for the IMSI
filtering as sending a CREF is not liked by every BSC...
This commit is contained in:
Holger Hans Peter Freyther 2010-05-16 16:36:36 +08:00
parent 605f62a16a
commit c58da4b374
2 changed files with 8 additions and 0 deletions

View File

@ -126,6 +126,7 @@ struct sccp_connections {
/* status */
int con_type;
int con_local;
/* GSM audio handling. That is 32 * multiplex + ts */
int crcx;

View File

@ -609,6 +609,7 @@ static void ipaccess_auth_bsc(struct tlv_parsed *tvp, struct bsc_connection *bsc
static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
{
int con_found = 0;
int con_filter = 0;
struct bsc_connection *con_bsc = NULL;
int con_type;
struct bsc_nat_parsed *parsed;
@ -659,6 +660,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
if (con) {
con_found = 1;
con_bsc = con->bsc;
con_filter = con->con_local;
}
break;
case SCCP_MSG_TYPE_RLC:
@ -666,6 +668,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
if (con) {
con_found = 1;
con_bsc = con->bsc;
con_filter = con->con_local;
}
remove_sccp_src_ref(bsc, msg, parsed);
break;
@ -693,6 +696,10 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
goto exit2;
}
/* do not forward messages to the MSC */
if (con_filter)
goto exit2;
/* send the non-filtered but maybe modified msg */
queue_for_msc(nat->msc_con, msg);
talloc_free(parsed);