diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-23 14:13:27 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-23 14:13:27 +0800 |
commit | e4045679a8bc746c5fb2a85872ca074f02add241 (patch) | |
tree | 953f2f7f1b615aa38447f4327ddfe0ed681cdfdc | |
parent | 52ae9a461b10abeb0e2041dc3fb900465ecb2da3 (diff) |
nat: Only close connections that were fully connected
Remember that we have seen a CC and have a valid destination
local reference now and only send a fake RLC to the MSC when
we had connections in this state.
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 1 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 3 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_sccp.c | 1 |
3 files changed, 4 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 4d90ed744..90c263d24 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -110,6 +110,7 @@ struct sccp_connections { struct sccp_source_reference real_ref; struct sccp_source_reference patched_ref; struct sccp_source_reference remote_ref; + int has_remote_ref; /* 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 d5ed7515b..52844276c 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -444,7 +444,8 @@ static void remove_bsc_connection(struct bsc_connection *connection) if (sccp_patch->bsc != connection) continue; - nat_send_rlsd(sccp_patch); + if (sccp_patch->has_remote_ref) + nat_send_rlsd(sccp_patch); sccp_connection_destroy(sccp_patch); } diff --git a/openbsc/src/nat/bsc_sccp.c b/openbsc/src/nat/bsc_sccp.c index 90c8499bf..ebe108604 100644 --- a/openbsc/src/nat/bsc_sccp.c +++ b/openbsc/src/nat/bsc_sccp.c @@ -141,6 +141,7 @@ int update_sccp_src_ref(struct sccp_connections *sccp, struct bsc_nat_parsed *pa } sccp->remote_ref = *parsed->src_local_ref; + sccp->has_remote_ref = 1; LOGP(DNAT, LOGL_DEBUG, "Updating 0x%x to remote 0x%x on %p\n", sccp_src_ref_to_int(&sccp->patched_ref), sccp_src_ref_to_int(&sccp->remote_ref), sccp->bsc); |