mgcp: make sure all endpoints are closed on startup
If the MSC is crashing and restarting, it may leave some endpoints open. The endpoints can not be re-used until they are deleted (DLCX). This patch sends a DLCX to all possible endpoints (usually this is in a countable range) in order to clear possible open endpoints from a previous run Change-Id: I9de2f67ffe08b2d76574ef4470c7a9767ca74702
This commit is contained in:
parent
95e1a3b53c
commit
2a6629b27e
|
@ -56,3 +56,4 @@ int msc_tx_common_id(struct gsm_subscriber_connection *conn);
|
|||
int msc_call_assignment(struct gsm_trans *trans);
|
||||
int msc_call_bridge(struct gsm_trans *trans1, struct gsm_trans *trans2);
|
||||
void msc_call_release(struct gsm_trans *trans);
|
||||
void msc_call_release_all(struct mgcpgw_client *mgcp);
|
||||
|
|
|
@ -402,7 +402,8 @@ int mgcpgw_client_connect(struct mgcpgw_client *mgcp)
|
|||
|
||||
mgcp->remote_addr = htonl(addr.sin_addr.s_addr);
|
||||
|
||||
osmo_wqueue_init(wq, 10);
|
||||
osmo_wqueue_init(wq, (mgcp->actual.last_endpoint - mgcp->actual.first_endpoint) + 10);
|
||||
|
||||
wq->bfd.when = BSC_FD_READ;
|
||||
wq->bfd.data = mgcp;
|
||||
wq->read_cb = mgcp_do_read;
|
||||
|
|
|
@ -344,3 +344,21 @@ void msc_call_release(struct gsm_trans *trans)
|
|||
/* Release endpoint id */
|
||||
mgcpgw_client_release_endpoint(conn->iu.mgcp_rtp_endpoint, mgcp);
|
||||
}
|
||||
|
||||
void msc_call_release_all(struct mgcpgw_client *mgcp)
|
||||
{
|
||||
struct msgb *msg;
|
||||
unsigned int i;
|
||||
|
||||
uint16_t first_endpoint = mgcp->actual.first_endpoint;
|
||||
uint16_t last_endpoint = mgcp->actual.last_endpoint;
|
||||
|
||||
for (i = first_endpoint; i < last_endpoint; i++) {
|
||||
msg = mgcp_msg_dlcx(mgcp, i);
|
||||
if (mgcpgw_client_tx(mgcp, msg, NULL, NULL))
|
||||
LOGP(DMGCP, LOGL_ERROR,
|
||||
"Failed to send DLCX message for endpoint %u\n", i);
|
||||
|
||||
mgcpgw_client_release_endpoint(i, mgcp);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -495,6 +495,10 @@ TODO: we probably want some of the _net_ ctrl commands from bsc_base_ctrl_cmds_i
|
|||
return 7;
|
||||
}
|
||||
|
||||
/* Make sure all mgcp endpoints are cleared */
|
||||
msc_call_release_all(msc_network->mgcpgw.client);
|
||||
|
||||
|
||||
/* Set up A-Interface */
|
||||
/* TODO: implement A-Interface and remove above legacy stuff. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue