diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-05 23:09:27 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-05 23:09:27 +0200 |
commit | 3ba8963a1d8a55b19d3fd902dd2c20196afdff5a (patch) | |
tree | fbf85081a15baf0abd68583c0187766fe73ae645 /openbsc/src | |
parent | 238d15648142a68b26b57678576b2b047945b011 (diff) |
nat: Close all endpoints used by a BSC when the BSC is gone
Cleanup all endpoints that belonged to a given BSC. This is
one part of the cleanup, the other is to bring down the SCCP
link properly.
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/nat/bsc_mgcp_utils.c | 18 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/openbsc/src/nat/bsc_mgcp_utils.c b/openbsc/src/nat/bsc_mgcp_utils.c index 49c44668e..6fc5eaca2 100644 --- a/openbsc/src/nat/bsc_mgcp_utils.c +++ b/openbsc/src/nat/bsc_mgcp_utils.c @@ -466,3 +466,21 @@ int bsc_mgcp_init(struct bsc_nat *nat) return 0; } + +void bsc_mgcp_clear_endpoints_for(struct bsc_connection *bsc) +{ + int i; + for (i = 1; i < bsc->nat->mgcp_cfg->number_endpoints; ++i) { + struct bsc_endpoint *bsc_endp = &bsc->nat->bsc_endpoints[i]; + + if (bsc_endp->bsc != bsc) + continue; + + bsc_endp->bsc = NULL; + bsc_endp->pending_delete = 0; + if (bsc_endp->transaction_id) + talloc_free(bsc_endp->transaction_id); + bsc_endp->transaction_id = NULL; + mgcp_free_endp(&bsc->nat->mgcp_cfg->endpoints[i]); + } +} diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index fcf732b42..1465be01c 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -354,6 +354,9 @@ static void remove_bsc_connection(struct bsc_connection *connection) sccp_connection_destroy(sccp_patch); } + /* close endpoints allocated by this BSC */ + bsc_mgcp_clear_endpoints_for(connection); + talloc_free(connection); } |