Osmocom Media Gateway (RTP proxy and RTP/E1 gateway) https://osmocom.org/projects/osmo-mgw
Go to file
Neels Hofmeyr cc2f7937ed client: collapse codecs[] and ptmap[]; allow codec variants
codecs[] is an array of enum osmo_mgcp_codecs.
ptmap[] is an array of { enum osmo_mgcp_codecs, unsigned int ptmap }.

MGCP lists first a bunch of payload type numbers and then specifies them
again for details, like the numbers 112, 96, 3 in this example:

 m=audio <port> RTP/AVP 112 96 3
 a=rtpmap:112 AMR/8000
 a=rtpmap:96 VND.3GPP.IUFP/16000
 a=rtpmap:3 GSM-FR/8000

So far we keep these lists in two separate arrays:
- codecs[], codecs_len stores the 'm=audio' list
- ptmap[], ptmap_len stores the 'a=rtpmap' list (and may omit some
  elements present in codecs[])
This applies to both struct mgcp_response and struct mgcp_msg.

These are semantically identical, and the separation leads to checks,
conversions and dear hopes of correct ordering.

So let's keep only one list with both codec and payload type number in
it. The 'm=audio' list establishes the order of the pt numbers, and the
'a=rtpmap' list adds codec information to the established entries.

In the internal API structs mgcp_msg and mgcp_response, just drop the
codecs[] entirely.

In public API struct mgcp_conn_peer, keep the codecs[] array, mark it
deprecated, and provide a backwards compat conversion: if any caller
invokes mgcp_conn_create() or mgcp_conn_modify() with codecs[] still
present in the verb_info arg, then move codecs[] entries over to the
ptmap[] array in a sensible way.
(BTW, even mgcp_conn_create() and mgcp_conn_modify() are never called
from outside of libosmo-mgcp-client in any of our osmo-cni programs;
users call osmo_mgcpc_ep_ci_add() and osmo_mgcpc_ep_ci_request(), which
in turn may pass user-provided codecs[] lists on to mgcp_conn_create() or
mgcp_conn_modify().)

Tests for parsing the MGCP response are mostly missing. They will be
added in upcoming patch I842ce65a9a70f313570857b7df53727cc572b9e6,
because they will be using only the new ptmap API.

Related: OS#6171
Change-Id: I798e02c6663376d3d52f4a74fc4b32411ce95bed
2024-01-05 02:44:58 +01:00
contrib build: move mgcp/*.h to noinst_HEADERS, drop RPM libosmo-mgcp-devel 2023-12-23 07:23:33 +01:00
debian Bump version: 1.12.0.3-58d5b → 1.12.1 2023-09-28 15:58:57 +02:00
doc systemd,manual: set LimitNOFILE=65536 2023-12-03 02:20:48 +00:00
include client: collapse codecs[] and ptmap[]; allow codec variants 2024-01-05 02:44:58 +01:00
m4 Drop unneeded ax_check_compile_flag.m4 2022-01-11 17:46:41 +00:00
src client: collapse codecs[] and ptmap[]; allow codec variants 2024-01-05 02:44:58 +01:00
tests client: collapse codecs[] and ptmap[]; allow codec variants 2024-01-05 02:44:58 +01:00
.clang-format clang-format: remove foreach macros 2021-11-17 21:20:08 +00:00
.gitignore add vscode stuff to gitignore 2021-09-09 16:04:17 +02:00
.gitreview .gitreview: update repo url to new location 2017-08-08 17:15:31 +02:00
.mailmap add .mailmap file for mapping git author name/mail in shortlog 2016-08-08 17:40:28 +00:00
AUTHORS move openbsc/* to repos root 2017-08-27 17:44:55 +02:00
COPYING move openbsc/* to repos root 2017-08-27 17:44:55 +02:00
Makefile.am manuals: generate vty reference xml at build time 2020-07-11 02:02:50 +00:00
README Remove libosmo-legacy-mgcp and osmo-bsc-mgcp 2018-09-06 20:39:53 +00:00
README.vty-tests update git URLs (git -> https; gitea) 2022-06-18 12:18:10 +02:00
TODO-RELEASE client: collapse codecs[] and ptmap[]; allow codec variants 2024-01-05 02:44:58 +01:00
configure.ac Bump version: 1.11.0.51-af67-dirty → 1.12.0 2023-09-12 14:48:51 +02:00
git-version-gen git-version-gen: Don't check for .git directory 2018-07-24 18:06:54 +02:00
libosmo-mgcp-client.pc.in separate libosmo-mgcp-client from mgcp server code 2017-09-05 20:56:27 +00:00
osmoappdesc.py osmoappdesc.py: switch to python 3 2019-12-11 09:35:24 +01:00

README

About OsmoMGW
=============

OsmoMGW originated from the OpenBSC project, which started as a minimalistic
all-in-one implementation of the GSM Network. In 2017, OpenBSC had reached
maturity and diversity (including M3UA SIGTRAN and 3G support in the form of
IuCS and IuPS interfaces) that naturally lead to a separation of the all-in-one
approach to fully independent separate programs as in typical GSM networks.

OsmoMGW was one of the parts split off from the old openbsc.git. It originated
as a solution to merely navigate RTP streams through a NAT, but has since
matured to a Media Gateway implementation that is capable of streaming RTP for
2G (AoIP) and 3G (IuCS) GSM networks as well as (still not implemented at time
of writing) transcoding between TRAU, various RTP payloads and IuUP.

The OsmoMGW program exposes an MGCP interface towards clients like OsmoMSC and
OsmoBSC, and receives and sends RTP streams as configured via MGCP.

The libosmo-mgcp-client library exposes utilities used by e.g. OsmoMSC (found
in osmo-msc.git) to instruct OsmoMGW via its MGCP service.

Find OsmoMGW issue tracker and wiki online at
https://osmocom.org/projects/osmo-mgw
https://osmocom.org/projects/osmo-mgw/wiki