diff --git a/openbsc/include/openbsc/mgcp.h b/openbsc/include/openbsc/mgcp.h index aebcda357..b2262bc8d 100644 --- a/openbsc/include/openbsc/mgcp.h +++ b/openbsc/include/openbsc/mgcp.h @@ -220,6 +220,8 @@ struct mgcp_config { /* osmux translator: 0 means disabled, 1 means enabled */ int osmux; + /* addr to bind the server to */ + char *osmux_addr; /* The BSC-NAT may ask for enabling osmux on demand. This tells us if * the osmux socket is already initialized. */ diff --git a/openbsc/src/libmgcp/mgcp_osmux.c b/openbsc/src/libmgcp/mgcp_osmux.c index 2d39b2c5e..be0db9920 100644 --- a/openbsc/src/libmgcp/mgcp_osmux.c +++ b/openbsc/src/libmgcp/mgcp_osmux.c @@ -415,7 +415,7 @@ int osmux_init(int role, struct mgcp_config *cfg) } osmux_fd.data = cfg; - ret = mgcp_create_bind("0.0.0.0", &osmux_fd, cfg->osmux_port); + ret = mgcp_create_bind(cfg->osmux_addr, &osmux_fd, cfg->osmux_port); if (ret < 0) { LOGP(DMGCP, LOGL_ERROR, "cannot bind OSMUX socket\n"); return ret; diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c index 42ce8bb2f..1819ceaf9 100644 --- a/openbsc/src/libmgcp/mgcp_protocol.c +++ b/openbsc/src/libmgcp/mgcp_protocol.c @@ -1193,6 +1193,7 @@ struct mgcp_config *mgcp_config_alloc(void) cfg->source_port = 2427; cfg->source_addr = talloc_strdup(cfg, "0.0.0.0"); + cfg->osmux_addr = talloc_strdup(cfg, "0.0.0.0"); cfg->transcoder_remote_base = 4000; diff --git a/openbsc/src/libmgcp/mgcp_vty.c b/openbsc/src/libmgcp/mgcp_vty.c index c478b0a7f..13f66c500 100644 --- a/openbsc/src/libmgcp/mgcp_vty.c +++ b/openbsc/src/libmgcp/mgcp_vty.c @@ -153,6 +153,8 @@ static int config_write_mgcp(struct vty *vty) break; } if (g_cfg->osmux) { + vty_out(vty, " osmux bind-ip %s%s", + g_cfg->osmux_addr, VTY_NEWLINE); vty_out(vty, " osmux batch-factor %d%s", g_cfg->osmux_batch, VTY_NEWLINE); vty_out(vty, " osmux batch-size %u%s", @@ -1282,6 +1284,15 @@ DEFUN(cfg_mgcp_osmux, return CMD_SUCCESS; } +DEFUN(cfg_mgcp_osmux_ip, + cfg_mgcp_osmux_ip_cmd, + "osmux bind-ip A.B.C.D", + OSMUX_STR IP_STR "IPv4 Address to bind to\n") +{ + bsc_replace_string(g_cfg, &g_cfg->osmux_addr, argv[0]); + return CMD_SUCCESS; +} + DEFUN(cfg_mgcp_osmux_batch_factor, cfg_mgcp_osmux_batch_factor_cmd, "osmux batch-factor <1-8>", @@ -1382,6 +1393,7 @@ int mgcp_vty_init(void) install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_send_name_cmd); install_element(MGCP_NODE, &cfg_mgcp_no_sdp_payload_send_name_cmd); install_element(MGCP_NODE, &cfg_mgcp_osmux_cmd); + install_element(MGCP_NODE, &cfg_mgcp_osmux_ip_cmd); install_element(MGCP_NODE, &cfg_mgcp_osmux_batch_factor_cmd); install_element(MGCP_NODE, &cfg_mgcp_osmux_batch_size_cmd); install_element(MGCP_NODE, &cfg_mgcp_osmux_port_cmd);