Compare commits

..

7 Commits

Author SHA1 Message Date
Oliver Smith
2bdad960ff Bump version: 1.12.0.3-58d5b → 1.12.1
Change-Id: Iefb000582a139ff53c4afbf94e1299e26ceeac44
2023-09-28 15:58:57 +02:00
Pau Espin Pedrol
58d5b97831 mgw: Configure IuUP if codec set during MDCX
The mgcp client may first configure the connection to use RTP-AMR, but
after setting up another call leg may find out that both legs are IuUP
and hence want to forward the IuUP between the 2 connections instead.
In that case, an MDCX with codec VND.3GPP.IUFP would be set.

Until now, osmo-mgw didn't take that scenario into account, and it was
only upgrading the rtp conn to iuup internally during CRCX.
As a result, in the mentioned scenario osmo-mgw would continue to
output RTP instead of IuUP after the MDCX with VND.3GPP.IUFP, which is
wrong.

Related: SYS#6578
Change-Id: Ic94bf90f54d8ba3e65a2cd52734867847f3a60c2
2023-09-27 16:25:58 +02:00
Pau Espin Pedrol
6225b5cecb mgcp-client: Introduce API osmo_mgcpc_ep_local_name()
Change-Id: I18d7bdf650c0ec87ae16ed4944aed9f495400137
2023-09-26 12:44:11 +02:00
Pau Espin Pedrol
c415ed5113 mgcp-client: Fix missing include in mgcp_client_pool.h
struct vty is used as a param but it is never defined.

Change-Id: Ia27bb20a79966cb90e04720462d24a236a168ada
2023-09-22 18:03:02 +02:00
Pau Espin Pedrol
730a1f28d2 Bump version: 1.11.0.51-af67-dirty → 1.12.0
Change-Id: I9b1272cacaeaf1213f9a372eda52aac560cfbde5
2023-09-12 14:48:51 +02:00
Andreas Eversberg
af67178581 ASCI: Support conference briding with 1..n connections
For each RTP packet that is received from a connection, the mode is
checked whether receiving is allowed or not. If not it is discarded.

In case of "confecho" mode, the RTP is also sent by the receiving
connection.

Then a loop is used to send RTP to all sending endpoints except the one
that received the packet.

Because we have a loop that allows to have 1..n connections, we have no
maximum number of allowed connections anymore.

Change-Id: Ic99a55ab5a3a6170e940403fadd52697e99f2f3a
Related: OS#4853
2023-07-10 12:14:05 +02:00
Andreas Eversberg
dc7dfd0bbd ASCI: Add new mode for voice group/broadcast call
The new mode "confecho" is similar to "sendrecv", except that it also
echoes back RTP towards the sender. This is required for voice group or
broadcast calls. Talker and listeners use the same timeslot, so that
audio must be echoed from the talker to the listeners.

It is different from "loopback", because a loopback only echoes back RTP
towards the sender, but does not forward audio through the endpoint to
the other connections. Also it does not forward RTP from senders of
other connections.

The current implementation of MGW does not support transcoding and
mixing. This means that a sending connection must not send RTP that has
been received by multiple receiving connections. The application that
uses the MGW has to set the connection modes, so that only one
connection receives RTP in case of a conference.

Change-Id: I0639c663e119d85bef1010c7aa45e2f133a9daf0
Related: OS#4853
2023-07-10 11:54:16 +02:00
13 changed files with 159 additions and 41 deletions

View File

@@ -24,5 +24,3 @@
# If any interfaces have been removed or changed since the last public release, a=0.
#
#library what description / commit summary line
libosmo-mgcp-client NEW API mgcp_client_conf_alloc()
libosmo-mgcp-client DEPRECATED mgcp_client_conf_init()

View File

@@ -44,13 +44,13 @@ AC_SEARCH_LIBS([dlsym], [dl dld], [LIBRARY_DLSYM="$LIBS";LIBS=""])
AC_SUBST(LIBRARY_DLSYM)
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.3.0)
PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 1.4.0)
PKG_CHECK_MODULES(LIBOSMOTRAU, libosmotrau >= 1.4.0)
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.9.0)
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.9.0)
PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.9.0)
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.9.0)
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.4.0)
PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 1.5.0)
PKG_CHECK_MODULES(LIBOSMOTRAU, libosmotrau >= 1.5.0)
CFLAGS="$CFLAGS -DBUILDING_LIBOSMOMGCPCLIENT -pthread"
CPPFLAGS="$CPPFLAGS -DBUILDING_LIBOSMOMGCPCLIENT -pthread"

View File

@@ -29,30 +29,30 @@ BuildRequires: pkgconfig >= 0.20
%if 0%{?suse_version}
BuildRequires: systemd-rpm-macros
%endif
BuildRequires: pkgconfig(libosmo-netif) >= 1.3.0
BuildRequires: pkgconfig(libosmocore) >= 1.8.0
BuildRequires: pkgconfig(libosmoctrl) >= 1.8.0
BuildRequires: pkgconfig(libosmogsm) >= 1.8.0
BuildRequires: pkgconfig(libosmovty) >= 1.8.0
BuildRequires: pkgconfig(libosmocoding) >= 1.8.0
BuildRequires: pkgconfig(libosmoabis) >= 1.4.0
BuildRequires: pkgconfig(libosmotrau) >= 1.4.0
BuildRequires: pkgconfig(libosmo-netif) >= 1.4.0
BuildRequires: pkgconfig(libosmocore) >= 1.9.0
BuildRequires: pkgconfig(libosmoctrl) >= 1.9.0
BuildRequires: pkgconfig(libosmogsm) >= 1.9.0
BuildRequires: pkgconfig(libosmovty) >= 1.9.0
BuildRequires: pkgconfig(libosmocoding) >= 1.9.0
BuildRequires: pkgconfig(libosmoabis) >= 1.5.0
BuildRequires: pkgconfig(libosmotrau) >= 1.5.0
%{?systemd_requires}
%description
OsmoMGW is Osmocom's Media Gateway for 2G and 3G circuit-switched mobile networks.
%package -n libosmo-mgcp-client11
%package -n libosmo-mgcp-client12
Summary: Osmocom's Media Gateway Control Protocol client library
Group: System/Libraries
%description -n libosmo-mgcp-client11
%description -n libosmo-mgcp-client12
Osmocom's Media Gateway Control Protocol client library.
%package -n libosmo-mgcp-client-devel
Summary: Development files for Osmocom's Media Gateway Control Protocol client library
Group: Development/Libraries/C and C++
Requires: libosmo-mgcp-client11 = %{version}
Requires: libosmo-mgcp-client12 = %{version}
%description -n libosmo-mgcp-client-devel
Osmocom's Media Gateway Control Protocol client librarary.
@@ -90,8 +90,8 @@ find %{buildroot} -type f -name "*.la" -delete -print
%check
make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
%post -n libosmo-mgcp-client11 -p /sbin/ldconfig
%postun -n libosmo-mgcp-client11 -p /sbin/ldconfig
%post -n libosmo-mgcp-client12 -p /sbin/ldconfig
%postun -n libosmo-mgcp-client12 -p /sbin/ldconfig
%if 0%{?suse_version}
%preun
@@ -119,8 +119,8 @@ make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
%dir %{_sysconfdir}/osmocom
%config(noreplace) %{_sysconfdir}/osmocom/osmo-mgw.cfg
%files -n libosmo-mgcp-client11
%{_libdir}/libosmo-mgcp-client.so.11*
%files -n libosmo-mgcp-client12
%{_libdir}/libosmo-mgcp-client.so.12*
%files -n libosmo-mgcp-client-devel
%{_libdir}/libosmo-mgcp-client.so

80
debian/changelog vendored
View File

@@ -1,3 +1,83 @@
osmo-mgw (1.12.1) unstable; urgency=medium
[ Pau Espin Pedrol ]
* mgcp-client: Fix missing include in mgcp_client_pool.h
* mgcp-client: Introduce API osmo_mgcpc_ep_local_name()
* mgw: Configure IuUP if codec set during MDCX
-- Oliver Smith <osmith@sysmocom.de> Thu, 28 Sep 2023 15:58:17 +0200
osmo-mgw (1.12.0) unstable; urgency=medium
[ Philipp Maier ]
* mgcp_sdp: add spec reference
* mgcp_sdp: cosmetic: remove newline
* mgcp_endp: cosmetic move mgcp_endp_release to the end
* mgcp_endp: cosmetic: remove unnecessary new line
* mgcp_e1: fix log output
* mgcp_e1: be more frugal withe E1 line resources
* mgcp_client: fix sourcecode formatting
* mgcp_e1: fix typo
* mgcp_e1: rewrite comment
* mgcp_e1: rename e1_send to e1_send_ts_frame
* mgcp_e1: cosmetic: rewrite comment
* Revert "mgcp_codec: do not differentiate between oa and bwe when comparing codec"
* mgcp_codec: fix oa/bwe comparison in mgcp_codec_pt_translate()
* mgcp_codec: refactor payload type converstion
* mgcp_codec: cosmetic: remove line break in api-doc
* mgcp_network: fix apidoc
* mgcp_vty: add warnings for deprecated config options
* mgcp_codec: move mgcp_codec_decide down
* mgcp_codec: fix codec decision
* mgcp_network: do not deliver RTP packets with unpatched PT
* mgcp_codec: be sensitive about IuFP when checking codecs
* mgcp_client.h: also add spec ref to the other 3gpp defined payload types
[ Harald Welte ]
* cosmetic: Fix grammar suggesting reading _the_ user manual
[ arehbein ]
* Transition to use of 'telnet_init_default'
[ Oliver Smith ]
* mgcp_client: mgcp_msg_gen: add more error logs
* mgcp_client_pool: add mgcp_client_pool_empty()
* Cosmetic: mgcp_client: fix typo
* debian: set compat level to 10
* systemd: depend on networking-online.target
* Cosmetic: fix a typo
* mgcp_client: check rc of map_str_to_codec
[ Pau Espin Pedrol ]
* mgcp_network: Unregister osmo_fd before closing fd
* mgcp-client: Call osmo_fd_unregister() before closing and changing bfd->fd
* mgcp-client: Drop unused struct mgcp_client field
* mgcp_client: Introduce mgcp_client_conf_alloc(), deprecate mgcp_client_conf_init()
* mgcp-client: Move some static functions further above
* mgw: Allow auditing speciall 'null' endpoint
* mgcp-client: Add keepalive feature
* mgcp_client: pool: Only pick clients with an MGCP link considered to be UP
* mgcp-client: Always mark client as UP if keepalive request-interval disabled
* mgcp-client: Mark client as UP when keepalive request-interval/timeout is disabled through VTY
[ Vadim Yanitskiy ]
* */Makefile.am: libraries shall not be in AM_LDFLAGS
* tests: use -no-install libtool flag to avoid ./lt-* scripts
* tests: $(BUILT_SOURCES) is not defined, depend on osmo-mgw
* copyright: fix typo: sysmocom s/s.m.f.c./s.f.m.c./ GmbH
[ Neels Hofmeyr ]
* mgcp_find_section_end(): skip spaces at start of SDP
* mgcp_client: simpler error handling
* mgcp: fix "L: a:" header parsing: heed ";" separator
* mgcp_client: tweak extract_codec_name() implementation
[ Andreas Eversberg ]
* ASCI: Add new mode for voice group/broadcast call
* ASCI: Support conference briding with 1..n connections
-- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 12 Sep 2023 14:48:51 +0200
osmo-mgw (1.11.0) unstable; urgency=medium
[ Pau Espin Pedrol ]

12
debian/control vendored
View File

@@ -6,10 +6,10 @@ Build-Depends: debhelper (>= 10),
dh-autoreconf,
pkg-config,
autotools-dev,
libosmocore-dev (>= 1.8.0),
libosmo-netif-dev (>= 1.3.0),
libosmo-abis-dev (>= 1.4.0),
osmo-gsm-manuals-dev (>= 1.4.0)
libosmocore-dev (>= 1.9.0),
libosmo-netif-dev (>= 1.4.0),
libosmo-abis-dev (>= 1.5.0),
osmo-gsm-manuals-dev (>= 1.5.0)
Standards-Version: 3.9.8
Vcs-Git: https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw
Vcs-Browser: https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw
@@ -21,7 +21,7 @@ Multi-Arch: foreign
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: OsmoMGW: Osmocom's Media Gateway for 2G and 3G circuit-switched mobile networks
Package: libosmo-mgcp-client11
Package: libosmo-mgcp-client12
Section: libs
Architecture: any
Multi-Arch: same
@@ -33,7 +33,7 @@ Package: libosmo-mgcp-client-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libosmo-mgcp-client11 (= ${binary:Version}), ${misc:Depends}
Depends: libosmo-mgcp-client12 (= ${binary:Version}), ${misc:Depends}
Description: libosmo-mgcp-client: Osmocom's Media Gateway Control Protocol client utilities
Package: osmo-mgw-doc

View File

@@ -45,6 +45,7 @@ static inline void osmo_mgcpc_ep_ci_dlcx(struct osmo_mgcpc_ep_ci *ci)
void osmo_mgcpc_ep_clear(struct osmo_mgcpc_ep *ep);
const char *osmo_mgcpc_ep_name(const struct osmo_mgcpc_ep *ep);
const char *osmo_mgcpc_ep_local_name(const struct osmo_mgcpc_ep *ep);
const char *osmo_mgcpc_ep_ci_name(const struct osmo_mgcpc_ep_ci *ci);
const char *osmo_mgcpc_ep_ci_id(const struct osmo_mgcpc_ep_ci *ci);
struct mgcp_client *osmo_mgcpc_ep_client(const struct osmo_mgcpc_ep *ep);

View File

@@ -2,6 +2,8 @@
#include <stdbool.h>
#include <osmocom/vty/vty.h>
struct mgcp_client;
struct mgcp_client_pool;
struct mgcp_client_pool_member;

View File

@@ -19,7 +19,7 @@ AM_LDFLAGS = \
# 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!
MGCP_CLIENT_LIBVERSION=11:0:0
MGCP_CLIENT_LIBVERSION=13:0:1
lib_LTLIBRARIES = \
libosmo-mgcp-client.la \

View File

@@ -173,6 +173,30 @@ const char *osmo_mgcpc_ep_name(const struct osmo_mgcpc_ep *ep)
return osmo_fsm_inst_name(ep->fi);
}
/*! Get "local endpoint name" part of the endpoint name: (local-endpoint-name@domain-name)
*
* \param ep The MGCP Endpoint
* \returns the local endpoint name if found, NULL on error.
*/
const char *osmo_mgcpc_ep_local_name(const struct osmo_mgcpc_ep *ep)
{
static char buf[1024];
const char *sep;
OSMO_ASSERT(ep);
sep = strchr(ep->endpoint, '@');
if (!sep) {
OSMO_STRLCPY_ARRAY(buf, ep->endpoint);
return buf;
}
if (sep - ep->endpoint >= sizeof(buf))
return NULL;
memcpy(buf, ep->endpoint, sep - ep->endpoint);
buf[sep - ep->endpoint] = '\0';
return buf;
}
const char *mgcp_conn_peer_name(const struct mgcp_conn_peer *info)
{
/* I'd be fine with a smaller buffer and accept truncation, but gcc possibly refuses to build if

View File

@@ -173,8 +173,8 @@ struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
struct mgcp_conn *conn;
int rc;
/* Do not allow more then the maximum number of connections */
if (endp->type->max_conns && llist_count(&endp->conns) >= endp->type->max_conns)
/* Do not allow more than the maximum number of connections */
if (endp->type->max_conns > 0 && llist_count(&endp->conns) >= endp->type->max_conns)
return NULL;
/* Create new connection and add it to the list */

View File

@@ -1326,10 +1326,14 @@ int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg)
}
/* If the mode does not allow receiving RTP, we are done. */
if (conn->mode != MGCP_CONN_RECV_ONLY &&
conn->mode != MGCP_CONN_RECV_SEND &&
conn->mode != MGCP_CONN_CONFECHO)
switch (conn->mode) {
case MGCP_CONN_RECV_ONLY:
case MGCP_CONN_RECV_SEND:
case MGCP_CONN_CONFECHO:
break;
default:
return rc;
}
/* If the mode is "confecho", send RTP back to the sender. */
if (conn->mode == MGCP_CONN_CONFECHO)
@@ -1339,10 +1343,15 @@ int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg)
llist_for_each_entry(conn_dst, &endp->conns, entry) {
if (conn_dst == conn)
continue;
if (conn_dst->mode == MGCP_CONN_SEND_ONLY ||
conn_dst->mode == MGCP_CONN_RECV_SEND ||
conn_dst->mode == MGCP_CONN_CONFECHO)
rc = mgcp_conn_rtp_dispatch_rtp(&conn_dst->u.rtp, msg);
switch (conn_dst->mode) {
case MGCP_CONN_SEND_ONLY:
case MGCP_CONN_RECV_SEND:
case MGCP_CONN_CONFECHO:
rc = mgcp_conn_rtp_dispatch_rtp(&conn_dst->u.rtp, msg);
break;
default:
break;
}
}
return rc;
}

View File

@@ -967,7 +967,7 @@ mgcp_header_done:
}
/* Check if we are able to accept the creation of another connection */
if (endp->type->max_conns && llist_count(&endp->conns) >= endp->type->max_conns) {
if (endp->type->max_conns > 0 && llist_count(&endp->conns) >= endp->type->max_conns) {
LOGPENDP(endp, DLMGCP, LOGL_ERROR,
"CRCX: endpoint full, max. %i connections allowed!\n",
endp->type->max_conns);
@@ -1293,6 +1293,10 @@ mgcp_header_done:
error_code = rc;
goto error3;
}
/* Upgrade the conn type RTP_DEFAULT->RTP_IUUP if needed based on requested codec: */
/* TODO: "codec" probably needs to be moved from endp to conn */
if (conn->type == MGCP_RTP_DEFAULT && strcmp(conn->end.codec->subtype_name, "VND.3GPP.IUFP") == 0)
rc = mgcp_conn_iuup_init(conn);
/* check connection mode setting */
if (conn->conn->mode != MGCP_CONN_LOOPBACK