diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-16 16:36:36 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-16 20:45:15 +0800 |
commit | 677f0e7f9069c0df77c4772f1bf4fc9f713313b7 (patch) | |
tree | 750f61c652e2d2c4fc0a5587e68de440771c60c6 /openbsc | |
parent | ddbb5a4e1ea2199f633e93df758639d61ec1028c (diff) |
[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...
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 1 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 99a3aa6b7..80d69d196 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -126,6 +126,7 @@ struct sccp_connections { /* status */ int con_type; + int con_local; /* GSM audio handling. That is 32 * multiplex + ts */ int crcx; diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index 615654c4d..e743bfaad 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -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); |