osmux: move osmux socket initialization out of osmux_enable_endpoint()
In the bsc-nat side, the osmux socket initialization can be done from the vty. This ensure that the osmux socket is available by the time the bsc-nt receives the dummy load that confirms that the osmux flow has been set up. This change is required by the follow up patch. This change ensures that the Osmux socket in the bsc-nat is already in place by the time this receives the dummy load.
This commit is contained in:
parent
fd1d961af5
commit
8be171e88f
|
@ -879,6 +879,24 @@ uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp,
|
|||
return rtp->rate * f * rtp->frame_duration_num / rtp->frame_duration_den;
|
||||
}
|
||||
|
||||
static int mgcp_osmux_setup(struct mgcp_endpoint *endp)
|
||||
{
|
||||
if (!endp->cfg->osmux_init) {
|
||||
if (osmux_init(OSMUX_ROLE_BSC, endp->cfg) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR, "Cannot init OSMUX\n");
|
||||
return -1;
|
||||
}
|
||||
LOGP(DMGCP, LOGL_NOTICE, "OSMUX socket has been set up\n");
|
||||
}
|
||||
|
||||
if (osmux_enable_endpoint(endp, OSMUX_ROLE_BSC) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR,
|
||||
"Could not activate Osmux in endpoint %d\n",
|
||||
ENDPOINT_NUMBER(endp));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct msgb *handle_create_con(struct mgcp_parse_data *p)
|
||||
{
|
||||
struct mgcp_trunk_config *tcfg;
|
||||
|
@ -910,12 +928,8 @@ static struct msgb *handle_create_con(struct mgcp_parse_data *p)
|
|||
mode = (const char *) line + 3;
|
||||
break;
|
||||
case 'X':
|
||||
if (strcmp("Osmux: on", line + 2) == 0 &&
|
||||
osmux_enable_endpoint(endp, OSMUX_ROLE_BSC) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR,
|
||||
"Could not activate osmux in endpoint %d\n",
|
||||
ENDPOINT_NUMBER(endp));
|
||||
}
|
||||
if (strcmp("Osmux: on", line + 2) == 0)
|
||||
mgcp_osmux_setup(endp);
|
||||
break;
|
||||
case '\0':
|
||||
have_sdp = 1;
|
||||
|
|
|
@ -439,14 +439,6 @@ int osmux_enable_endpoint(struct mgcp_endpoint *endp, int role)
|
|||
*/
|
||||
static const uint32_t rtp_ssrc_winlen = UINT32_MAX / 256;
|
||||
|
||||
if (!endp->cfg->osmux_init) {
|
||||
if (osmux_init(role, endp->cfg) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR, "Cannot init OSMUX\n");
|
||||
return -1;
|
||||
}
|
||||
LOGP(DMGCP, LOGL_NOTICE, "OSMUX requested, ENABLING.\n");
|
||||
}
|
||||
|
||||
osmux_xfrm_output_init(&endp->osmux.out,
|
||||
(endp->ci * rtp_ssrc_winlen) +
|
||||
(random() % rtp_ssrc_winlen));
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <osmocom/core/utils.h>
|
||||
#include <osmocom/vty/logging.h>
|
||||
#include <osmocom/vty/misc.h>
|
||||
#include <openbsc/osmux.h>
|
||||
|
||||
#include <osmocom/sccp/sccp.h>
|
||||
|
||||
|
@ -1184,12 +1185,27 @@ DEFUN(cfg_bsc_osmux,
|
|||
OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n")
|
||||
{
|
||||
struct bsc_config *conf = vty->index;
|
||||
int old = conf->osmux;
|
||||
|
||||
if (strcmp(argv[0], "on") == 0)
|
||||
conf->osmux = 1;
|
||||
else if (strcmp(argv[0], "off") == 0)
|
||||
conf->osmux = 0;
|
||||
|
||||
if (old == 0 && conf->osmux == 1) {
|
||||
if (osmux_init(OSMUX_ROLE_BSC_NAT, conf->nat->mgcp_cfg) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR, "Cannot init OSMUX\n");
|
||||
return -1;
|
||||
}
|
||||
LOGP(DMGCP, LOGL_NOTICE, "Setting up OSMUX socket\n");
|
||||
} else if (old == 1 && conf->osmux == 0) {
|
||||
LOGP(DMGCP, LOGL_NOTICE, "Disabling OSMUX socket\n");
|
||||
/* Don't stop the socket, we may already have ongoing voice
|
||||
* flows already using Osmux. This just switch indicates that
|
||||
* new upcoming flows should use RTP.
|
||||
*/
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue