mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-11-03 05:23:43 +00:00
Compare commits
6 Commits
osmith/fix
...
neels/virt
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3abced8d64 | ||
|
|
a48ff4a738 | ||
|
|
6c92f9d83e | ||
|
|
9852e22101 | ||
|
|
b141cccbfb | ||
|
|
ec45068972 |
@@ -39,9 +39,10 @@ AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
|
|||||||
AC_SUBST(LIBRARY_DL)
|
AC_SUBST(LIBRARY_DL)
|
||||||
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.0.0)
|
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.1.0)
|
||||||
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.0.0)
|
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.1.0)
|
||||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.0.0)
|
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.1.0)
|
||||||
|
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.1.0)
|
||||||
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.6.0)
|
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.6.0)
|
||||||
|
|
||||||
AC_ARG_ENABLE(sanitize,
|
AC_ARG_ENABLE(sanitize,
|
||||||
|
|||||||
42
debian/changelog
vendored
42
debian/changelog
vendored
@@ -1,3 +1,45 @@
|
|||||||
|
osmo-mgw (1.7.0) unstable; urgency=medium
|
||||||
|
|
||||||
|
[ Neels Hofmeyr ]
|
||||||
|
* rename codecs_cmp() to codecs_same()
|
||||||
|
* mgcp_codec: constify 'param' arg
|
||||||
|
* fix crashes: don't assert on incoming RTP packet size
|
||||||
|
* mgcp_send(): stop looping on conversion error
|
||||||
|
* mgcp_codec: split codec_free() off of codec_init()
|
||||||
|
* fix memleak: actually free strings in mgcp_codec_reset_all()
|
||||||
|
* mgcp_test: extend / rewrite test_mgcp_codec_pt_translate()
|
||||||
|
* test_mgcp_codec_pt_translate(): more tests
|
||||||
|
* differentiate AMR octet-aligned=0 vs =1
|
||||||
|
* ptmap: implicitly match '/8000' and '/8000/1'
|
||||||
|
* mgcp_codec: codec_set(): log about all possible errors
|
||||||
|
* mgcp_codec_add: fix audio_name size check
|
||||||
|
* explicitly free codecs in mgcp_rtp_conn_cleanup()
|
||||||
|
* tweak mgcp_parse_audio_ptime_rtpmap()
|
||||||
|
* SDP: store all ptmap entries
|
||||||
|
* mgcp_client_fsm cleanup: Do not assert on DLCX failure
|
||||||
|
* clear pending requests on MGCP failure
|
||||||
|
* client: endp fsm: add notify struct, prep for cancel-notify
|
||||||
|
* client: endp fsm: clear ci[] before dispatching DLCX success
|
||||||
|
* client: endp fsm: allow cancelling a notify event
|
||||||
|
* client: endp fsm: add osmo_mgcpc_ep_ci_ep()
|
||||||
|
* accept MGCP without SDP
|
||||||
|
* fix use-after-free: require new fsm deferred dealloc, check for term
|
||||||
|
|
||||||
|
[ Pau Espin Pedrol ]
|
||||||
|
* mgcp_test: Correctly release all endpoints allocated
|
||||||
|
* mgw: Allocate mgcp_conn instance under tcfg->endpoints
|
||||||
|
|
||||||
|
[ Harald Welte ]
|
||||||
|
* manual: Fix copy+paste error
|
||||||
|
* mgcp_client: Check for osmo_fsm_register() error return value
|
||||||
|
* Move fsm_mgcp_client regstration to __attribute__((contructor))
|
||||||
|
* exit(2) on unsupported positional arguments on command line
|
||||||
|
|
||||||
|
[ Oliver Smith ]
|
||||||
|
* osmoappdesc.py: switch to python 3
|
||||||
|
|
||||||
|
-- Pau Espin Pedrol <pespin@sysmocom.de> Fri, 03 Jan 2020 13:35:09 +0100
|
||||||
|
|
||||||
osmo-mgw (1.6.0) unstable; urgency=medium
|
osmo-mgw (1.6.0) unstable; urgency=medium
|
||||||
|
|
||||||
[ Oliver Smith ]
|
[ Oliver Smith ]
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ noinst_HEADERS = \
|
|||||||
mgcp_endp.h \
|
mgcp_endp.h \
|
||||||
mgcp_sdp.h \
|
mgcp_sdp.h \
|
||||||
mgcp_codec.h \
|
mgcp_codec.h \
|
||||||
|
mgcp_ctrl.h \
|
||||||
debug.h \
|
debug.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|||||||
@@ -279,6 +279,9 @@ struct mgcp_config {
|
|||||||
|
|
||||||
/* time after which inactive connections (CIs) get closed */
|
/* time after which inactive connections (CIs) get closed */
|
||||||
int conn_timeout;
|
int conn_timeout;
|
||||||
|
|
||||||
|
/* osmocom CTRL interface */
|
||||||
|
struct ctrl_handle *ctrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* config management */
|
/* config management */
|
||||||
|
|||||||
24
include/osmocom/mgcp/mgcp_ctrl.h
Normal file
24
include/osmocom/mgcp/mgcp_ctrl.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* (C) 2020 by Harald Welte <laforge@gnumonks.org>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct ctrl_handle *mgw_ctrl_interface_setup(struct mgcp_config *cfg,
|
||||||
|
const char *bind_addr, uint16_t port);
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ AM_LDFLAGS = \
|
|||||||
|
|
||||||
# This is not at all related to the release version, but a range of supported
|
# This is not at all related to the release version, but a range of supported
|
||||||
# API versions. Read TODO_RELEASE in the source tree's root!
|
# API versions. Read TODO_RELEASE in the source tree's root!
|
||||||
MGCP_CLIENT_LIBVERSION=6:0:0
|
MGCP_CLIENT_LIBVERSION=7:0:1
|
||||||
|
|
||||||
lib_LTLIBRARIES = \
|
lib_LTLIBRARIES = \
|
||||||
libosmo-mgcp-client.la \
|
libosmo-mgcp-client.la \
|
||||||
|
|||||||
@@ -828,7 +828,7 @@ int mgcp_client_connect(struct mgcp_client *mgcp)
|
|||||||
inet_aton(mgcp->actual.remote_addr, &addr.sin_addr);
|
inet_aton(mgcp->actual.remote_addr, &addr.sin_addr);
|
||||||
mgcp->remote_addr = htonl(addr.sin_addr.s_addr);
|
mgcp->remote_addr = htonl(addr.sin_addr.s_addr);
|
||||||
|
|
||||||
osmo_wqueue_init(wq, 10);
|
osmo_wqueue_init(wq, 1024);
|
||||||
wq->bfd.when = BSC_FD_READ;
|
wq->bfd.when = BSC_FD_READ;
|
||||||
wq->bfd.data = mgcp;
|
wq->bfd.data = mgcp;
|
||||||
wq->read_cb = mgcp_do_read;
|
wq->read_cb = mgcp_do_read;
|
||||||
|
|||||||
@@ -40,4 +40,5 @@ libosmo_mgcp_a_SOURCES = \
|
|||||||
mgcp_conn.c \
|
mgcp_conn.c \
|
||||||
mgcp_stat.c \
|
mgcp_stat.c \
|
||||||
mgcp_endp.c \
|
mgcp_endp.c \
|
||||||
|
mgcp_ctrl.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|||||||
@@ -259,7 +259,6 @@ aggregate_rtp_conn_stats(struct mgcp_trunk_config *trunk, struct mgcp_conn_rtp *
|
|||||||
{
|
{
|
||||||
struct rate_ctr_group *all_stats = trunk->all_rtp_conn_stats;
|
struct rate_ctr_group *all_stats = trunk->all_rtp_conn_stats;
|
||||||
struct rate_ctr_group *conn_stats = conn_rtp->rate_ctr_group;
|
struct rate_ctr_group *conn_stats = conn_rtp->rate_ctr_group;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (all_stats == NULL || conn_stats == NULL)
|
if (all_stats == NULL || conn_stats == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -269,8 +268,11 @@ aggregate_rtp_conn_stats(struct mgcp_trunk_config *trunk, struct mgcp_conn_rtp *
|
|||||||
* All other counters in both counter groups correspond to each other. */
|
* All other counters in both counter groups correspond to each other. */
|
||||||
OSMO_ASSERT(conn_stats->desc->num_ctr + 1 == all_stats->desc->num_ctr);
|
OSMO_ASSERT(conn_stats->desc->num_ctr + 1 == all_stats->desc->num_ctr);
|
||||||
|
|
||||||
for (i = 0; i < conn_stats->desc->num_ctr; i++)
|
/* all other counters are [now] updated in real-time */
|
||||||
rate_ctr_add(&all_stats->ctr[i], conn_stats->ctr[i].current);
|
rate_ctr_add(&all_stats->ctr[IN_STREAM_ERR_TSTMP_CTR],
|
||||||
|
conn_stats->ctr[IN_STREAM_ERR_TSTMP_CTR].current);
|
||||||
|
rate_ctr_add(&all_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR],
|
||||||
|
conn_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR].current);
|
||||||
|
|
||||||
rate_ctr_inc(&all_stats->ctr[RTP_NUM_CONNECTIONS]);
|
rate_ctr_inc(&all_stats->ctr[RTP_NUM_CONNECTIONS]);
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/libosmo-mgcp/mgcp_ctrl.c
Normal file
36
src/libosmo-mgcp/mgcp_ctrl.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* (C) 2020 by Harald Welte <laforge@gnumonks.org>
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <osmocom/ctrl/control_if.h>
|
||||||
|
#include <osmocom/mgcp/mgcp.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int mgw_ctrl_node_lookup(void *data, vector vline, int *node_type,
|
||||||
|
void **node_data, int *i)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct ctrl_handle *mgw_ctrl_interface_setup(struct mgcp_config *cfg,
|
||||||
|
const char *bind_addr, uint16_t port)
|
||||||
|
{
|
||||||
|
return ctrl_interface_setup_dynip2(cfg, bind_addr, port, mgw_ctrl_node_lookup,
|
||||||
|
_LAST_CTRL_NODE);
|
||||||
|
}
|
||||||
@@ -57,6 +57,22 @@ enum {
|
|||||||
MGCP_PROTO_RTCP,
|
MGCP_PROTO_RTCP,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void rtpconn_rate_ctr_add(struct mgcp_conn_rtp *conn_rtp, struct mgcp_endpoint *endp,
|
||||||
|
int id, int inc)
|
||||||
|
{
|
||||||
|
struct rate_ctr_group *conn_stats = conn_rtp->rate_ctr_group;
|
||||||
|
struct rate_ctr_group *trunk_stats = endp->tcfg->all_rtp_conn_stats;
|
||||||
|
|
||||||
|
/* add to both the per-connection and the per-trunk global stats */
|
||||||
|
rate_ctr_add(&conn_stats->ctr[id], inc);
|
||||||
|
rate_ctr_add(&trunk_stats->ctr[id], inc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rtpconn_rate_ctr_inc(struct mgcp_conn_rtp *conn_rtp, struct mgcp_endpoint *endp, int id)
|
||||||
|
{
|
||||||
|
rtpconn_rate_ctr_add(conn_rtp, endp, id, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/*! Determine the local rtp bind IP-address.
|
/*! Determine the local rtp bind IP-address.
|
||||||
* \param[out] addr caller provided memory to store the resulting IP-Address
|
* \param[out] addr caller provided memory to store the resulting IP-Address
|
||||||
* \param[in] endp mgcp endpoint, that holds a copy of the VTY parameters
|
* \param[in] endp mgcp endpoint, that holds a copy of the VTY parameters
|
||||||
@@ -845,7 +861,7 @@ int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,
|
|||||||
dest_name = conn_dst->conn->name;
|
dest_name = conn_dst->conn->name;
|
||||||
|
|
||||||
if (!rtp_end->output_enabled) {
|
if (!rtp_end->output_enabled) {
|
||||||
rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_DROPPED_PACKETS_CTR]);
|
rtpconn_rate_ctr_inc(conn_dst, endp, RTP_DROPPED_PACKETS_CTR);
|
||||||
LOGPENDP(endp, DRTP, LOGL_DEBUG,
|
LOGPENDP(endp, DRTP, LOGL_DEBUG,
|
||||||
"output disabled, drop to %s %s "
|
"output disabled, drop to %s %s "
|
||||||
"rtp_port:%u rtcp_port:%u\n",
|
"rtp_port:%u rtcp_port:%u\n",
|
||||||
@@ -924,8 +940,8 @@ int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,
|
|||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
|
rtpconn_rate_ctr_inc(conn_dst, endp, RTP_PACKETS_TX_CTR);
|
||||||
rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);
|
rtpconn_rate_ctr_add(conn_dst, endp, RTP_OCTETS_TX_CTR, len);
|
||||||
|
|
||||||
nbytes += len;
|
nbytes += len;
|
||||||
buflen = cont;
|
buflen = cont;
|
||||||
@@ -942,8 +958,8 @@ int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,
|
|||||||
&rtp_end->addr,
|
&rtp_end->addr,
|
||||||
rtp_end->rtcp_port, buf, len);
|
rtp_end->rtcp_port, buf, len);
|
||||||
|
|
||||||
rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
|
rtpconn_rate_ctr_inc(conn_dst, endp, RTP_PACKETS_TX_CTR);
|
||||||
rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);
|
rtpconn_rate_ctr_add(conn_dst, endp, RTP_OCTETS_TX_CTR, len);
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
@@ -1189,8 +1205,8 @@ static int mgcp_recv(int *proto, struct sockaddr_in *addr, char *buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Increment RX statistics */
|
/* Increment RX statistics */
|
||||||
rate_ctr_inc(&conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR]);
|
rtpconn_rate_ctr_inc(conn, endp, RTP_PACKETS_RX_CTR);
|
||||||
rate_ctr_add(&conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR], rc);
|
rtpconn_rate_ctr_add(conn, endp, RTP_OCTETS_RX_CTR, rc);
|
||||||
|
|
||||||
/* Forward a copy of the RTP data to a debug ip/port */
|
/* Forward a copy of the RTP data to a debug ip/port */
|
||||||
forward_data(fd->fd, &conn->tap_in, buf, rc);
|
forward_data(fd->fd, &conn->tap_in, buf, rc);
|
||||||
|
|||||||
@@ -1620,7 +1620,7 @@ struct mgcp_config *mgcp_config_alloc(void)
|
|||||||
|
|
||||||
cfg->get_net_downlink_format_cb = &mgcp_get_net_downlink_format_default;
|
cfg->get_net_downlink_format_cb = &mgcp_get_net_downlink_format_default;
|
||||||
|
|
||||||
/* default trunk handling */
|
/* default trunk handling; TODO: avoid duplication with mgcp_trunk_alloc() below */
|
||||||
cfg->trunk.cfg = cfg;
|
cfg->trunk.cfg = cfg;
|
||||||
cfg->trunk.trunk_nr = 0;
|
cfg->trunk.trunk_nr = 0;
|
||||||
cfg->trunk.trunk_type = MGCP_TRUNK_VIRTUAL;
|
cfg->trunk.trunk_type = MGCP_TRUNK_VIRTUAL;
|
||||||
@@ -1628,6 +1628,7 @@ struct mgcp_config *mgcp_config_alloc(void)
|
|||||||
cfg->trunk.audio_payload = 126;
|
cfg->trunk.audio_payload = 126;
|
||||||
cfg->trunk.audio_send_ptime = 1;
|
cfg->trunk.audio_send_ptime = 1;
|
||||||
cfg->trunk.audio_send_name = 1;
|
cfg->trunk.audio_send_name = 1;
|
||||||
|
cfg->trunk.vty_number_endpoints = 33;
|
||||||
cfg->trunk.omit_rtcp = 0;
|
cfg->trunk.omit_rtcp = 0;
|
||||||
mgcp_trunk_set_keepalive(&cfg->trunk, MGCP_KEEPALIVE_ONCE);
|
mgcp_trunk_set_keepalive(&cfg->trunk, MGCP_KEEPALIVE_ONCE);
|
||||||
if (alloc_mgcp_rate_counters(&cfg->trunk, cfg) < 0) {
|
if (alloc_mgcp_rate_counters(&cfg->trunk, cfg) < 0) {
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ static void dump_trunk(struct vty *vty, struct mgcp_trunk_config *cfg, int show_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 1; i < cfg->number_endpoints; ++i) {
|
for (i = 0; i < cfg->number_endpoints; ++i) {
|
||||||
struct mgcp_endpoint *endp = &cfg->endpoints[i];
|
struct mgcp_endpoint *endp = &cfg->endpoints[i];
|
||||||
dump_endpoint(vty, endp, i, cfg->trunk_nr, cfg->trunk_type, show_stats);
|
dump_endpoint(vty, endp, i, cfg->trunk_nr, cfg->trunk_type, show_stats);
|
||||||
if (i < cfg->number_endpoints - 1)
|
if (i < cfg->number_endpoints - 1)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ AM_CFLAGS = \
|
|||||||
$(LIBOSMOCORE_CFLAGS) \
|
$(LIBOSMOCORE_CFLAGS) \
|
||||||
$(LIBOSMOVTY_CFLAGS) \
|
$(LIBOSMOVTY_CFLAGS) \
|
||||||
$(LIBOSMOGSM_CFLAGS) \
|
$(LIBOSMOGSM_CFLAGS) \
|
||||||
|
$(LIBOSMOCTRL_CFLAGS) \
|
||||||
$(LIBOSMONETIF_CFLAGS) \
|
$(LIBOSMONETIF_CFLAGS) \
|
||||||
$(COVERAGE_CFLAGS) \
|
$(COVERAGE_CFLAGS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
@@ -26,5 +27,6 @@ osmo_mgw_LDADD = \
|
|||||||
$(LIBOSMOCORE_LIBS) \
|
$(LIBOSMOCORE_LIBS) \
|
||||||
$(LIBOSMOVTY_LIBS) \
|
$(LIBOSMOVTY_LIBS) \
|
||||||
$(LIBOSMOGSM_LIBS) \
|
$(LIBOSMOGSM_LIBS) \
|
||||||
|
$(LIBOSMOCTRL_LIBS) \
|
||||||
$(LIBOSMONETIF_LIBS) \
|
$(LIBOSMONETIF_LIBS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <osmocom/mgcp/vty.h>
|
#include <osmocom/mgcp/vty.h>
|
||||||
#include <osmocom/mgcp/debug.h>
|
#include <osmocom/mgcp/debug.h>
|
||||||
#include <osmocom/mgcp/mgcp_endp.h>
|
#include <osmocom/mgcp/mgcp_endp.h>
|
||||||
|
#include <osmocom/mgcp/mgcp_ctrl.h>
|
||||||
|
|
||||||
#include <osmocom/core/application.h>
|
#include <osmocom/core/application.h>
|
||||||
#include <osmocom/core/msgb.h>
|
#include <osmocom/core/msgb.h>
|
||||||
@@ -48,6 +49,8 @@
|
|||||||
#include <osmocom/core/logging.h>
|
#include <osmocom/core/logging.h>
|
||||||
#include <osmocom/core/socket.h>
|
#include <osmocom/core/socket.h>
|
||||||
|
|
||||||
|
#include <osmocom/ctrl/control_vty.h>
|
||||||
|
|
||||||
#include <osmocom/vty/telnet_interface.h>
|
#include <osmocom/vty/telnet_interface.h>
|
||||||
#include <osmocom/vty/logging.h>
|
#include <osmocom/vty/logging.h>
|
||||||
#include <osmocom/vty/ports.h>
|
#include <osmocom/vty/ports.h>
|
||||||
@@ -60,6 +63,11 @@
|
|||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
|
||||||
|
/* can be changed once libosmocore 1.4.0 is released */
|
||||||
|
#ifndef OSMO_CTRL_PORT_MGW
|
||||||
|
#define OSMO_CTRL_PORT_MGW 4267
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FIXME: Make use of the rtp proxy code */
|
/* FIXME: Make use of the rtp proxy code */
|
||||||
|
|
||||||
static struct mgcp_config *cfg;
|
static struct mgcp_config *cfg;
|
||||||
@@ -278,6 +286,7 @@ int main(int argc, char **argv)
|
|||||||
osmo_talloc_vty_add_cmds();
|
osmo_talloc_vty_add_cmds();
|
||||||
osmo_stats_vty_add_cmds();
|
osmo_stats_vty_add_cmds();
|
||||||
mgcp_vty_init();
|
mgcp_vty_init();
|
||||||
|
ctrl_vty_init(cfg);
|
||||||
|
|
||||||
handle_options(argc, argv);
|
handle_options(argc, argv);
|
||||||
|
|
||||||
@@ -294,6 +303,12 @@ int main(int argc, char **argv)
|
|||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
cfg->ctrl = mgw_ctrl_interface_setup(cfg, ctrl_vty_get_bind_addr(), OSMO_CTRL_PORT_MGW);
|
||||||
|
if (!cfg->ctrl) {
|
||||||
|
fprintf(stderr, "Failed to init the control interface on %s:%u. Exiting\n",
|
||||||
|
ctrl_vty_get_bind_addr(), OSMO_CTRL_PORT_MGW);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the reset callback function. This functions is called when the
|
/* Set the reset callback function. This functions is called when the
|
||||||
* mgcp-command "RSIP" (Reset in Progress) is received */
|
* mgcp-command "RSIP" (Reset in Progress) is received */
|
||||||
cfg->reset_cb = mgcp_rsip_cb;
|
cfg->reset_cb = mgcp_rsip_cb;
|
||||||
|
|||||||
Reference in New Issue
Block a user