Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libosmo-abis for openSUSE:Factory checked in at 2026-08-26 19:52:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libosmo-abis (Old) and /work/SRC/openSUSE:Factory/.libosmo-abis.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libosmo-abis" Wed Aug 26 19:52:54 2026 rev:26 rq:1373652 version:2.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libosmo-abis/libosmo-abis.changes 2026-04-09 16:25:36.928664514 +0200 +++ /work/SRC/openSUSE:Factory/.libosmo-abis.new.1258/libosmo-abis.changes 2026-08-26 19:53:20.572935291 +0200 @@ -1,0 +2,7 @@ +Tue Aug 25 15:21:57 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 2.2.0 + * amr_trau: added the `osmo_amrt_fill_with_dhf` function + * Add CAS channel support + +------------------------------------------------------------------- Old: ---- libosmo-abis-2.1.0.tar.bz2 New: ---- libosmo-abis-2.2.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libosmo-abis.spec ++++++ --- /var/tmp/diff_new_pack.9kKZjH/_old 2026-08-26 19:53:22.447001479 +0200 +++ /var/tmp/diff_new_pack.9kKZjH/_new 2026-08-26 19:53:22.455001762 +0200 @@ -17,7 +17,7 @@ Name: libosmo-abis -Version: 2.1.0 +Version: 2.2.0 Release: 0 Summary: Osmocom library for A-bis interface between BTS and BSC License: AGPL-3.0-or-later AND GPL-2.0-or-later @@ -32,12 +32,12 @@ BuildRequires: libtool >= 2 BuildRequires: pkg-config >= 0.20 BuildRequires: xz -BuildRequires: pkgconfig(libosmo-e1d) >= 0.7.0 -BuildRequires: pkgconfig(libosmo-netif) >= 1.6.0 -BuildRequires: pkgconfig(libosmocodec) >= 1.11.0 -BuildRequires: pkgconfig(libosmocore) >= 1.11.0 -BuildRequires: pkgconfig(libosmogsm) >= 1.11.0 -BuildRequires: pkgconfig(libosmovty) >= 1.11.0 +BuildRequires: pkgconfig(libosmo-e1d) >= 0.8.0 +BuildRequires: pkgconfig(libosmo-netif) >= 1.8.0 +BuildRequires: pkgconfig(libosmocodec) >= 1.14.2 +BuildRequires: pkgconfig(libosmocore) >= 1.14.2 +BuildRequires: pkgconfig(libosmogsm) >= 1.14.2 +BuildRequires: pkgconfig(libosmovty) >= 1.14.2 BuildRequires: pkgconfig(talloc) %description @@ -45,12 +45,12 @@ BSC. This interface allows control of the radio equipment and radio frequency allocation in the BTS. -%package -n libosmoabis15 +%package -n libosmoabis17 Summary: Osmocom GSM A-bis interface library License: AGPL-3.0-or-later Group: System/Libraries -%description -n libosmoabis15 +%description -n libosmoabis17 In the GSM system architecture, A-bis is a Base Station System-internal interface linking the Base Transceiver Stations (BTS) and Base Station Controller (BSC). This interface allows control of @@ -64,7 +64,7 @@ Summary: Development files for the Osmocom GSM A-bis library License: AGPL-3.0-or-later Group: Development/Libraries/C and C++ -Requires: libosmoabis15 = %version +Requires: libosmoabis17 = %version Requires: libosmocore-devel >= 1.4.0 Requires: libosmogsm-devel >= 1.4.0 @@ -125,10 +125,10 @@ %endif fi -%ldconfig_scriptlets -n libosmoabis15 +%ldconfig_scriptlets -n libosmoabis17 %ldconfig_scriptlets -n libosmotrau11 -%files -n libosmoabis15 +%files -n libosmoabis17 %_libdir/libosmoabis.so.* %files -n libosmoabis-devel ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.9kKZjH/_old 2026-08-26 19:53:22.525004234 +0200 +++ /var/tmp/diff_new_pack.9kKZjH/_new 2026-08-26 19:53:22.533004517 +0200 @@ -1,5 +1,5 @@ -mtime: 1775736245 -commit: 2178633a03b2244f2f31a768f370945926a8e2d824049042757095384aa44560 +mtime: 1787672670 +commit: 0c75105a27dbd106c8f8681e2971b2b3c9e8e4d49d17fd9c3aaea3b6787781ae url: https://src.opensuse.org/jengelh/libosmo-abis revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-08-25 17:44:30.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ libosmo-abis-2.1.0.tar.bz2 -> libosmo-abis-2.2.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/.tarball-version new/libosmo-abis-2.2.0/.tarball-version --- old/libosmo-abis-2.1.0/.tarball-version 2025-12-04 06:19:31.000000000 +0100 +++ new/libosmo-abis-2.2.0/.tarball-version 2026-08-21 07:19:22.000000000 +0200 @@ -1 +1 @@ -2.1.0 +2.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/.version new/libosmo-abis-2.2.0/.version --- old/libosmo-abis-2.1.0/.version 2025-12-04 06:19:30.000000000 +0100 +++ new/libosmo-abis-2.2.0/.version 2026-08-21 07:19:21.000000000 +0200 @@ -1 +1 @@ -2.1.0 +2.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/configure new/libosmo-abis-2.2.0/configure --- old/libosmo-abis-2.1.0/configure 2025-12-04 06:19:26.000000000 +0100 +++ new/libosmo-abis-2.2.0/configure 2026-08-21 07:19:15.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libosmo-abis 2.1.0. +# Generated by GNU Autoconf 2.71 for libosmo-abis 2.2.0. # # Report bugs to <[email protected]>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libosmo-abis' PACKAGE_TARNAME='libosmo-abis' -PACKAGE_VERSION='2.1.0' -PACKAGE_STRING='libosmo-abis 2.1.0' +PACKAGE_VERSION='2.2.0' +PACKAGE_STRING='libosmo-abis 2.2.0' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1400,7 +1400,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libosmo-abis 2.1.0 to adapt to many kinds of systems. +\`configure' configures libosmo-abis 2.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1471,7 +1471,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libosmo-abis 2.1.0:";; + short | recursive ) echo "Configuration of libosmo-abis 2.2.0:";; esac cat <<\_ACEOF @@ -1622,7 +1622,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libosmo-abis configure 2.1.0 +libosmo-abis configure 2.2.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1840,7 +1840,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libosmo-abis $as_me 2.1.0, which was +It was created by libosmo-abis $as_me 2.2.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3112,7 +3112,7 @@ # Define the identity of the package. PACKAGE='libosmo-abis' - VERSION='2.1.0' + VERSION='2.2.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -12972,19 +12972,19 @@ pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmocore >= 1.12.0" >&5 -printf %s "checking for libosmocore >= 1.12.0... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmocore >= 1.14.2" >&5 +printf %s "checking for libosmocore >= 1.14.2... " >&6; } if test -n "$LIBOSMOCORE_CFLAGS"; then pkg_cv_LIBOSMOCORE_CFLAGS="$LIBOSMOCORE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocore >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmocore >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocore >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmocore >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOCORE_CFLAGS=`$PKG_CONFIG --cflags "libosmocore >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOCORE_CFLAGS=`$PKG_CONFIG --cflags "libosmocore >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -12996,12 +12996,12 @@ pkg_cv_LIBOSMOCORE_LIBS="$LIBOSMOCORE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocore >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmocore >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocore >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmocore >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOCORE_LIBS=`$PKG_CONFIG --libs "libosmocore >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOCORE_LIBS=`$PKG_CONFIG --libs "libosmocore >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13022,14 +13022,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBOSMOCORE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmocore >= 1.12.0" 2>&1` + LIBOSMOCORE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmocore >= 1.14.2" 2>&1` else - LIBOSMOCORE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmocore >= 1.12.0" 2>&1` + LIBOSMOCORE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmocore >= 1.14.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBOSMOCORE_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libosmocore >= 1.12.0) were not met: + as_fn_error $? "Package requirements (libosmocore >= 1.14.2) were not met: $LIBOSMOCORE_PKG_ERRORS @@ -13063,19 +13063,19 @@ fi pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmovty >= 1.12.0" >&5 -printf %s "checking for libosmovty >= 1.12.0... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmovty >= 1.14.2" >&5 +printf %s "checking for libosmovty >= 1.14.2... " >&6; } if test -n "$LIBOSMOVTY_CFLAGS"; then pkg_cv_LIBOSMOVTY_CFLAGS="$LIBOSMOVTY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmovty >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmovty >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmovty >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmovty >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOVTY_CFLAGS=`$PKG_CONFIG --cflags "libosmovty >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOVTY_CFLAGS=`$PKG_CONFIG --cflags "libosmovty >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13087,12 +13087,12 @@ pkg_cv_LIBOSMOVTY_LIBS="$LIBOSMOVTY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmovty >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmovty >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmovty >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmovty >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOVTY_LIBS=`$PKG_CONFIG --libs "libosmovty >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOVTY_LIBS=`$PKG_CONFIG --libs "libosmovty >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13113,14 +13113,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBOSMOVTY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmovty >= 1.12.0" 2>&1` + LIBOSMOVTY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmovty >= 1.14.2" 2>&1` else - LIBOSMOVTY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmovty >= 1.12.0" 2>&1` + LIBOSMOVTY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmovty >= 1.14.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBOSMOVTY_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libosmovty >= 1.12.0) were not met: + as_fn_error $? "Package requirements (libosmovty >= 1.14.2) were not met: $LIBOSMOVTY_PKG_ERRORS @@ -13154,19 +13154,19 @@ fi pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmogsm >= 1.12.0" >&5 -printf %s "checking for libosmogsm >= 1.12.0... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmogsm >= 1.14.2" >&5 +printf %s "checking for libosmogsm >= 1.14.2... " >&6; } if test -n "$LIBOSMOGSM_CFLAGS"; then pkg_cv_LIBOSMOGSM_CFLAGS="$LIBOSMOGSM_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmogsm >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmogsm >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmogsm >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmogsm >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOGSM_CFLAGS=`$PKG_CONFIG --cflags "libosmogsm >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOGSM_CFLAGS=`$PKG_CONFIG --cflags "libosmogsm >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13178,12 +13178,12 @@ pkg_cv_LIBOSMOGSM_LIBS="$LIBOSMOGSM_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmogsm >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmogsm >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmogsm >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmogsm >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOGSM_LIBS=`$PKG_CONFIG --libs "libosmogsm >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOGSM_LIBS=`$PKG_CONFIG --libs "libosmogsm >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13204,14 +13204,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBOSMOGSM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmogsm >= 1.12.0" 2>&1` + LIBOSMOGSM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmogsm >= 1.14.2" 2>&1` else - LIBOSMOGSM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmogsm >= 1.12.0" 2>&1` + LIBOSMOGSM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmogsm >= 1.14.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBOSMOGSM_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libosmogsm >= 1.12.0) were not met: + as_fn_error $? "Package requirements (libosmogsm >= 1.14.2) were not met: $LIBOSMOGSM_PKG_ERRORS @@ -13245,19 +13245,19 @@ fi pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmocodec >= 1.12.0" >&5 -printf %s "checking for libosmocodec >= 1.12.0... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmocodec >= 1.14.2" >&5 +printf %s "checking for libosmocodec >= 1.14.2... " >&6; } if test -n "$LIBOSMOCODEC_CFLAGS"; then pkg_cv_LIBOSMOCODEC_CFLAGS="$LIBOSMOCODEC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocodec >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmocodec >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocodec >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmocodec >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOCODEC_CFLAGS=`$PKG_CONFIG --cflags "libosmocodec >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOCODEC_CFLAGS=`$PKG_CONFIG --cflags "libosmocodec >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13269,12 +13269,12 @@ pkg_cv_LIBOSMOCODEC_LIBS="$LIBOSMOCODEC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocodec >= 1.12.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmocodec >= 1.12.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmocodec >= 1.14.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmocodec >= 1.14.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMOCODEC_LIBS=`$PKG_CONFIG --libs "libosmocodec >= 1.12.0" 2>/dev/null` + pkg_cv_LIBOSMOCODEC_LIBS=`$PKG_CONFIG --libs "libosmocodec >= 1.14.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13295,14 +13295,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBOSMOCODEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmocodec >= 1.12.0" 2>&1` + LIBOSMOCODEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmocodec >= 1.14.2" 2>&1` else - LIBOSMOCODEC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmocodec >= 1.12.0" 2>&1` + LIBOSMOCODEC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmocodec >= 1.14.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBOSMOCODEC_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libosmocodec >= 1.12.0) were not met: + as_fn_error $? "Package requirements (libosmocodec >= 1.14.2) were not met: $LIBOSMOCODEC_PKG_ERRORS @@ -13337,19 +13337,19 @@ pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmo-netif >= 1.7.0" >&5 -printf %s "checking for libosmo-netif >= 1.7.0... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libosmo-netif >= 1.8.0" >&5 +printf %s "checking for libosmo-netif >= 1.8.0... " >&6; } if test -n "$LIBOSMONETIF_CFLAGS"; then pkg_cv_LIBOSMONETIF_CFLAGS="$LIBOSMONETIF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmo-netif >= 1.7.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmo-netif >= 1.7.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmo-netif >= 1.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmo-netif >= 1.8.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMONETIF_CFLAGS=`$PKG_CONFIG --cflags "libosmo-netif >= 1.7.0" 2>/dev/null` + pkg_cv_LIBOSMONETIF_CFLAGS=`$PKG_CONFIG --cflags "libosmo-netif >= 1.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13361,12 +13361,12 @@ pkg_cv_LIBOSMONETIF_LIBS="$LIBOSMONETIF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmo-netif >= 1.7.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libosmo-netif >= 1.7.0") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosmo-netif >= 1.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libosmo-netif >= 1.8.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_LIBOSMONETIF_LIBS=`$PKG_CONFIG --libs "libosmo-netif >= 1.7.0" 2>/dev/null` + pkg_cv_LIBOSMONETIF_LIBS=`$PKG_CONFIG --libs "libosmo-netif >= 1.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -13387,14 +13387,14 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBOSMONETIF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmo-netif >= 1.7.0" 2>&1` + LIBOSMONETIF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosmo-netif >= 1.8.0" 2>&1` else - LIBOSMONETIF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmo-netif >= 1.7.0" 2>&1` + LIBOSMONETIF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosmo-netif >= 1.8.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBOSMONETIF_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (libosmo-netif >= 1.7.0) were not met: + as_fn_error $? "Package requirements (libosmo-netif >= 1.8.0) were not met: $LIBOSMONETIF_PKG_ERRORS @@ -14365,7 +14365,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libosmo-abis $as_me 2.1.0, which was +This file was extended by libosmo-abis $as_me 2.2.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14433,7 +14433,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libosmo-abis config.status 2.1.0 +libosmo-abis config.status 2.2.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/configure.ac new/libosmo-abis-2.2.0/configure.ac --- old/libosmo-abis-2.1.0/configure.ac 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/configure.ac 2026-08-21 07:19:04.000000000 +0200 @@ -66,12 +66,12 @@ dnl Generate the output AM_CONFIG_HEADER(config.h) -PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.12.0) -PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.12.0) -PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.12.0) -PKG_CHECK_MODULES(LIBOSMOCODEC, libosmocodec >= 1.12.0) +PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.14.2) +PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.14.2) +PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.14.2) +PKG_CHECK_MODULES(LIBOSMOCODEC, libosmocodec >= 1.14.2) -PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.7.0) +PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.8.0) AC_ARG_ENABLE([ortp], [AS_HELP_STRING([--disable-ortp], [Build without ortp support])], [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/debian/changelog new/libosmo-abis-2.2.0/debian/changelog --- old/libosmo-abis-2.1.0/debian/changelog 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/debian/changelog 2026-08-21 07:19:04.000000000 +0200 @@ -1,3 +1,28 @@ +libosmo-abis (2.2.0) unstable; urgency=medium + + [ Mychaela N. Falconia ] + * amr_trau: add osmo_amrt_fill_with_dhf() function + * trau cosmetic: update osmo_trau2rtp API comments + * trau2rtp: rm defunct AMR WIP code + * trau_rtp cosmetic: rm dead const lines + * trau_frame cosmetic: rm dead/invalid definitions + * cosmetic: fix white space in lapd_sap_{start,stop}() + * lapd_sap_stop(): fix use of uninitialized stack memory + + [ Pau Espin Pedrol ] + * ipaccess: Remove unused function + * ipaccess: Add ipa_unit_data to logging context of bsc ipaccess srv stream + * ipaccess: Move bts/bsc specific line_update code to helper functions + + [ Timur Davydov ] + * lapd-over-datagram-user: fix printf format for timeval fields + * gitignore: ignore generated .wasm files + + [ Andreas Eversberg ] + * Add CAS channel support + + -- Pau Espin Pedrol <[email protected]> Thu, 20 Aug 2026 11:27:00 +0200 + libosmo-abis (2.1.0) unstable; urgency=medium [ Mychaela N. Falconia ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/debian/control new/libosmo-abis-2.2.0/debian/control --- old/libosmo-abis-2.1.0/debian/control 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/debian/control 2026-08-21 07:19:05.000000000 +0200 @@ -25,13 +25,13 @@ Package: libosmo-abis Section: oldlibs Architecture: any -Depends: libosmoabis15 (= ${binary:Version}), libosmotrau11 (= ${binary:Version}), ${misc:Depends} +Depends: libosmoabis17 (= ${binary:Version}), libosmotrau11 (= ${binary:Version}), ${misc:Depends} Multi-Arch: same Description: Legacy package for libosmo-abis libosmo-abis is an empty package helping in the transition to one package per DSO. -Package: libosmoabis15 +Package: libosmoabis17 Section: libs Architecture: any Multi-Arch: same @@ -63,7 +63,7 @@ Section: libdevel Depends: ${misc:Depends}, libosmotrau11 (= ${binary:Version}), - libosmoabis15 (= ${binary:Version}), + libosmoabis17 (= ${binary:Version}), libosmo-netif-dev (>= 1.7.0), libosmocore-dev (>= 1.12.0), Description: Development headers for A-bis interface @@ -77,7 +77,7 @@ Multi-Arch: same Section: debug Priority: extra -Depends: libosmoabis15 (= ${binary:Version}), +Depends: libosmoabis17 (= ${binary:Version}), libosmotrau11 (= ${binary:Version}), ${misc:Depends} Description: Debug symbols for A-bis interface diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/debian/libosmoabis15.install new/libosmo-abis-2.2.0/debian/libosmoabis15.install --- old/libosmo-abis-2.1.0/debian/libosmoabis15.install 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/debian/libosmoabis15.install 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -usr/lib/*/libosmoabis.so.* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/debian/libosmoabis17.install new/libosmo-abis-2.2.0/debian/libosmoabis17.install --- old/libosmo-abis-2.1.0/debian/libosmoabis17.install 1970-01-01 01:00:00.000000000 +0100 +++ new/libosmo-abis-2.2.0/debian/libosmoabis17.install 2026-08-21 07:19:04.000000000 +0200 @@ -0,0 +1 @@ +usr/lib/*/libosmoabis.so.* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/doc/examples/lapd-over-datagram/lapd-over-datagram-user.c new/libosmo-abis-2.2.0/doc/examples/lapd-over-datagram/lapd-over-datagram-user.c --- old/libosmo-abis-2.1.0/doc/examples/lapd-over-datagram/lapd-over-datagram-user.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/doc/examples/lapd-over-datagram/lapd-over-datagram-user.c 2026-08-21 07:19:04.000000000 +0200 @@ -5,6 +5,7 @@ #include <signal.h> #include <unistd.h> #include <arpa/inet.h> +#include <inttypes.h> #include <osmocom/core/linuxlist.h> #include <osmocom/core/talloc.h> @@ -163,8 +164,8 @@ timersub(&tv, &found->tv, &diff); LOGP(DLINP, LOGL_NOTICE, "message %d replied " - "in %lu.%.6lu\n", - num, diff.tv_sec, diff.tv_usec); + "in %" PRIdMAX ".%.6" PRIdMAX "\n", + num, (intmax_t)diff.tv_sec, (intmax_t)diff.tv_usec); talloc_free(found); } else { LOGP(DLINP, LOGL_ERROR, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/include/osmocom/abis/e1_input.h new/libosmo-abis-2.2.0/include/osmocom/abis/e1_input.h --- old/libosmo-abis-2.1.0/include/osmocom/abis/e1_input.h 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/include/osmocom/abis/e1_input.h 2026-08-21 07:19:04.000000000 +0200 @@ -195,6 +195,10 @@ /* Optional callback to perform driver specific initialization when the line is created. */ int (*line_create)(struct e1inp_line *line); + + /* Set CAS bits to transmit in TS16, that are associated with given time slot */ + int (*set_cas)(struct e1inp_ts *ts, uint8_t bits, bool query_rx); + }; struct e1inp_line_ops { @@ -274,6 +278,7 @@ S_L_INP_LINE_SA_BITS, S_L_INP_LINE_LOF, S_L_INP_LINE_NOLOF, + S_L_INP_LINE_CAS, }; extern const struct value_string e1inp_signal_names[]; @@ -344,6 +349,12 @@ */ int e1inp_ts_set_sa_bits(struct e1inp_line *line, uint8_t sa_bits); +/* + * configure CAS bits on TS16 that are associated to given TS, if supported by driver + * cas (MSB to LSB): 0000ABCD + */ +int e1inp_ts_set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx); + /* obtain a string identifier/name for the given timeslot */ void e1inp_ts_name(char *out, size_t out_len, const struct e1inp_ts *ts); @@ -403,6 +414,7 @@ uint8_t sa_bits; struct gsm_bts_trx *trx; struct e1inp_line *line; + uint8_t cas; }; int abis_sendmsg(struct msgb *msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/include/osmocom/abis/version.h new/libosmo-abis-2.2.0/include/osmocom/abis/version.h --- old/libosmo-abis-2.1.0/include/osmocom/abis/version.h 2025-12-04 06:19:30.000000000 +0100 +++ new/libosmo-abis-2.2.0/include/osmocom/abis/version.h 2026-08-21 07:19:21.000000000 +0200 @@ -1,10 +1,10 @@ #pragma once -#define LIBOSMO_ABIS_VERSION 2.1.0 -#define LIBOSMO_ABIS_VERSION_STR "2.1.0" +#define LIBOSMO_ABIS_VERSION 2.2.0 +#define LIBOSMO_ABIS_VERSION_STR "2.2.0" #define LIBOSMO_ABIS_VERSION_MAJOR 2 -#define LIBOSMO_ABIS_VERSION_MINOR 1 +#define LIBOSMO_ABIS_VERSION_MINOR 2 #define LIBOSMO_ABIS_VERSION_PATCH 0 #define LIBOSMO_ABIS_VERSION_GREATER_EQUAL(major, minor, patch) \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/include/osmocom/trau/amr_trau.h new/libosmo-abis-2.2.0/include/osmocom/trau/amr_trau.h --- old/libosmo-abis-2.1.0/include/osmocom/trau/amr_trau.h 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/include/osmocom/trau/amr_trau.h 2026-08-21 07:19:04.000000000 +0200 @@ -344,4 +344,6 @@ const struct osmo_amrt_if *fr, enum osmo_amrt_rtp_format fmt); +int osmo_amrt_fill_with_dhf(struct osmo_amrt_if *fr, enum osmo_amr_type mode); + /*! @} */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/Makefile.am new/libosmo-abis-2.2.0/src/Makefile.am --- old/libosmo-abis-2.1.0/src/Makefile.am 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/Makefile.am 2026-08-21 07:19:04.000000000 +0200 @@ -1,8 +1,8 @@ # This is _NOT_ the library release version, it's an API version. # Please read chapter "Library interface versions" of the libtool documentation # before making any modifications: https://www.gnu.org/software/libtool/manual/html_node/Versioning.html -ABIS_LIBVERSION=16:0:1 -TRAU_LIBVERSION=12:0:1 +ABIS_LIBVERSION=17:0:0 +TRAU_LIBVERSION=13:0:2 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir) AM_CFLAGS= -Wall \ @@ -52,7 +52,8 @@ -no-undefined \ $(NULL) libosmotrau_la_LIBADD = $(COMMONLIBS) $(LIBOSMOCODEC_LIBS) $(ORTP_LIBS) -libosmotrau_la_SOURCES = trau/amr_rtp.c \ +libosmotrau_la_SOURCES = trau/amr_misc.c \ + trau/amr_rtp.c \ trau/amr_trau.c \ trau/csd_ra2.c \ trau/csd_v110.c \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/Makefile.in new/libosmo-abis-2.2.0/src/Makefile.in --- old/libosmo-abis-2.1.0/src/Makefile.in 2025-12-04 06:19:26.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/Makefile.in 2026-08-21 07:19:16.000000000 +0200 @@ -162,15 +162,16 @@ $@ libosmotrau_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am__libosmotrau_la_SOURCES_DIST = trau/amr_rtp.c trau/amr_trau.c \ - trau/csd_ra2.c trau/csd_v110.c trau/raa_prime_decode.c \ - trau/raa_prime_encode.c trau/tfo_frame.c trau/trau_frame.c \ - trau/trau_pcu_ericsson.c trau/trau_sync.c trau/trau_rtp_conv.c \ - trau/twts007.c trau/osmo_ortp.c +am__libosmotrau_la_SOURCES_DIST = trau/amr_misc.c trau/amr_rtp.c \ + trau/amr_trau.c trau/csd_ra2.c trau/csd_v110.c \ + trau/raa_prime_decode.c trau/raa_prime_encode.c \ + trau/tfo_frame.c trau/trau_frame.c trau/trau_pcu_ericsson.c \ + trau/trau_sync.c trau/trau_rtp_conv.c trau/twts007.c \ + trau/osmo_ortp.c @ENABLE_ORTP_TRUE@am__objects_2 = trau/libosmotrau_la-osmo_ortp.lo -am_libosmotrau_la_OBJECTS = trau/libosmotrau_la-amr_rtp.lo \ - trau/libosmotrau_la-amr_trau.lo trau/libosmotrau_la-csd_ra2.lo \ - trau/libosmotrau_la-csd_v110.lo \ +am_libosmotrau_la_OBJECTS = trau/libosmotrau_la-amr_misc.lo \ + trau/libosmotrau_la-amr_rtp.lo trau/libosmotrau_la-amr_trau.lo \ + trau/libosmotrau_la-csd_ra2.lo trau/libosmotrau_la-csd_v110.lo \ trau/libosmotrau_la-raa_prime_decode.lo \ trau/libosmotrau_la-raa_prime_encode.lo \ trau/libosmotrau_la-tfo_frame.lo \ @@ -207,6 +208,7 @@ input/$(DEPDIR)/ipaccess.Plo input/$(DEPDIR)/lapd.Plo \ input/$(DEPDIR)/lapd_pcap.Plo input/$(DEPDIR)/misdn.Plo \ input/$(DEPDIR)/rs232.Plo input/$(DEPDIR)/unixsocket.Plo \ + trau/$(DEPDIR)/libosmotrau_la-amr_misc.Plo \ trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Plo \ trau/$(DEPDIR)/libosmotrau_la-amr_trau.Plo \ trau/$(DEPDIR)/libosmotrau_la-csd_ra2.Plo \ @@ -412,8 +414,8 @@ # This is _NOT_ the library release version, it's an API version. # Please read chapter "Library interface versions" of the libtool documentation # before making any modifications: https://www.gnu.org/software/libtool/manual/html_node/Versioning.html -ABIS_LIBVERSION = 16:0:1 -TRAU_LIBVERSION = 12:0:1 +ABIS_LIBVERSION = 17:0:0 +TRAU_LIBVERSION = 13:0:2 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir) AM_CFLAGS = -Wall \ $(LIBOSMONETIF_CFLAGS) \ @@ -451,11 +453,12 @@ $(NULL) libosmotrau_la_LIBADD = $(COMMONLIBS) $(LIBOSMOCODEC_LIBS) $(ORTP_LIBS) -libosmotrau_la_SOURCES = trau/amr_rtp.c trau/amr_trau.c trau/csd_ra2.c \ - trau/csd_v110.c trau/raa_prime_decode.c \ - trau/raa_prime_encode.c trau/tfo_frame.c trau/trau_frame.c \ - trau/trau_pcu_ericsson.c trau/trau_sync.c trau/trau_rtp_conv.c \ - trau/twts007.c $(am__append_2) +libosmotrau_la_SOURCES = trau/amr_misc.c trau/amr_rtp.c \ + trau/amr_trau.c trau/csd_ra2.c trau/csd_v110.c \ + trau/raa_prime_decode.c trau/raa_prime_encode.c \ + trau/tfo_frame.c trau/trau_frame.c trau/trau_pcu_ericsson.c \ + trau/trau_sync.c trau/trau_rtp_conv.c trau/twts007.c \ + $(am__append_2) noinst_HEADERS = trau/ubit_buf.h all: all-am @@ -554,6 +557,8 @@ trau/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) trau/$(DEPDIR) @: > trau/$(DEPDIR)/$(am__dirstamp) +trau/libosmotrau_la-amr_misc.lo: trau/$(am__dirstamp) \ + trau/$(DEPDIR)/$(am__dirstamp) trau/libosmotrau_la-amr_rtp.lo: trau/$(am__dirstamp) \ trau/$(DEPDIR)/$(am__dirstamp) trau/libosmotrau_la-amr_trau.lo: trau/$(am__dirstamp) \ @@ -609,6 +614,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/misdn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/rs232.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/unixsocket.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trau/$(DEPDIR)/libosmotrau_la-amr_misc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@trau/$(DEPDIR)/libosmotrau_la-amr_trau.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@trau/$(DEPDIR)/libosmotrau_la-csd_ra2.Plo@am__quote@ # am--include-marker @@ -653,6 +659,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +trau/libosmotrau_la-amr_misc.lo: trau/amr_misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosmotrau_la_CFLAGS) $(CFLAGS) -MT trau/libosmotrau_la-amr_misc.lo -MD -MP -MF trau/$(DEPDIR)/libosmotrau_la-amr_misc.Tpo -c -o trau/libosmotrau_la-amr_misc.lo `test -f 'trau/amr_misc.c' || echo '$(srcdir)/'`trau/amr_misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) trau/$(DEPDIR)/libosmotrau_la-amr_misc.Tpo trau/$(DEPDIR)/libosmotrau_la-amr_misc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trau/amr_misc.c' object='trau/libosmotrau_la-amr_misc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosmotrau_la_CFLAGS) $(CFLAGS) -c -o trau/libosmotrau_la-amr_misc.lo `test -f 'trau/amr_misc.c' || echo '$(srcdir)/'`trau/amr_misc.c + trau/libosmotrau_la-amr_rtp.lo: trau/amr_rtp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosmotrau_la_CFLAGS) $(CFLAGS) -MT trau/libosmotrau_la-amr_rtp.lo -MD -MP -MF trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Tpo -c -o trau/libosmotrau_la-amr_rtp.lo `test -f 'trau/amr_rtp.c' || echo '$(srcdir)/'`trau/amr_rtp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Tpo trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Plo @@ -898,6 +911,7 @@ -rm -f input/$(DEPDIR)/misdn.Plo -rm -f input/$(DEPDIR)/rs232.Plo -rm -f input/$(DEPDIR)/unixsocket.Plo + -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_misc.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_trau.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-csd_ra2.Plo @@ -971,6 +985,7 @@ -rm -f input/$(DEPDIR)/misdn.Plo -rm -f input/$(DEPDIR)/rs232.Plo -rm -f input/$(DEPDIR)/unixsocket.Plo + -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_misc.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_rtp.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-amr_trau.Plo -rm -f trau/$(DEPDIR)/libosmotrau_la-csd_ra2.Plo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/e1_input.c new/libosmo-abis-2.2.0/src/e1_input.c --- old/libosmo-abis-2.1.0/src/e1_input.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/e1_input.c 2026-08-21 07:19:04.000000000 +0200 @@ -527,6 +527,16 @@ return driver->set_sa_bits(line, sa_bits); } +int e1inp_ts_set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx) +{ + struct e1inp_driver *driver; + + driver = ts->line->driver; + if (!driver->set_cas) + return -ENOTSUP; + return driver->set_cas(ts, bits, query_rx); +} + static int e1inp_line_use_cb(struct osmo_use_count_entry *use_count_entry, int32_t old_use_count, const char *file, int file_line) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/input/e1d.c new/libosmo-abis-2.2.0/src/input/e1d.c --- old/libosmo-abis-2.1.0/src/input/e1d.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/input/e1d.c 2026-08-21 07:19:04.000000000 +0200 @@ -93,6 +93,7 @@ struct e1inp_line *e1_line; struct input_signal_data isd; int signal; + struct osmo_e1dp_cas_bits *cas; memset(&isd, 0, sizeof(isd)); @@ -133,6 +134,13 @@ if (len < 1) return; isd.sa_bits = *data; + case E1DP_EVT_CAS: + signal = S_L_INP_LINE_CAS; + cas = (struct osmo_e1dp_cas_bits *)data; + if (len < sizeof(*cas)) + return; + isd.cas = cas->bits; + isd.ts_nr = ts; break; default: /* Ignore all other events. */ @@ -844,10 +852,22 @@ return osmo_e1dp_client_set_sa_bits(g_e1d, e1d_intf, e1d_line, sa_bits); } +static int set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx) +{ + /* we use higher 4 bits for interface, lower 4 bits for line, + * resulting in max. 16 interfaces with 16 lines each */ + uint8_t e1d_intf = (ts->line->port_nr >> 4) & 0xF; + uint8_t e1d_line = ts->line->port_nr & 0xF; + struct osmo_e1dp_cas_bits cas = { bits, query_rx }; + + return osmo_e1dp_client_set_cas(g_e1d, e1d_intf, e1d_line, ts->num, &cas); +} + struct e1inp_driver e1d_driver = { .name = "e1d", .want_write = e1d_want_write, .set_sa_bits = set_sa_bits, + .set_cas = set_cas, .line_update = e1d_line_update, .line_create = e1d_line_create, }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/input/ipaccess.c new/libosmo-abis-2.2.0/src/input/ipaccess.c --- old/libosmo-abis-2.1.0/src/input/ipaccess.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/input/ipaccess.c 2026-08-21 07:19:04.000000000 +0200 @@ -1,6 +1,6 @@ /* OpenBSC Abis input driver for ip.access */ -/* (C) 2024 by sysmocom - s.f.m.c. GmbH <[email protected]> +/* (C) 2024-2026 by sysmocom - s.f.m.c. GmbH <[email protected]> * (C) 2009-2021 by Harald Welte <[email protected]> * (C) 2010 by Holger Hans Peter Freyther * (C) 2010 by On-Waves @@ -45,6 +45,7 @@ #include <osmocom/core/logging.h> #include <osmocom/core/talloc.h> #include <osmocom/core/socket.h> +#include <osmocom/core/utils.h> #include <osmocom/core/backtrace.h> #include <osmocom/core/stats_tcp.h> #include <osmocom/core/fsm.h> @@ -69,14 +70,6 @@ struct osmo_stream_cli *ipa_cli[NUM_E1_TS]; /* 0=OML, 1+N=TRX_N */ }; -static inline struct e1inp_ts *ipaccess_line_ts(struct osmo_fd *bfd, struct e1inp_line *line) -{ - if (bfd->priv_nr == E1INP_SIGN_OML) - return e1inp_line_ipa_oml_ts(line); - else - return e1inp_line_ipa_rsl_ts(line, bfd->priv_nr - E1INP_SIGN_RSL); -} - static inline void ipaccess_keepalive_fsm_cleanup(struct e1inp_ts *e1i_ts) { struct osmo_ipa_ka_fsm_inst *ka_fsm; @@ -215,6 +208,20 @@ return conn; } +static void ipaccess_bsc_srv_conn_set_name(struct osmo_stream_srv *conn, + struct e1inp_ts *e1i_ts, + const struct ipaccess_unit *unit_data) +{ + char buf[256]; + struct osmo_strbuf sb = { .buf = buf, .len = sizeof(buf) }; + + OSMO_STRBUF_PRINTF(sb, "ts-%u-%u-%s", e1i_ts->line->num, e1i_ts->num, + e1inp_signtype_name(ipaccess_e1i_ts_sign_type(e1i_ts))); + if (unit_data) + OSMO_STRBUF_PRINTF(sb, ",ipa-unit-%u/%u/%u", unit_data->site_id, unit_data->bts_id, unit_data->trx_id); + osmo_stream_srv_set_name(conn, buf); +} + static int ipaccess_bsc_write_cb(struct e1inp_ts *e1i_ts); /* Returns -1 on error, and 0 or 1 on success. If -1 or 1 is returned, line has @@ -283,6 +290,7 @@ LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "Failed to parse unit ID '%s'\n", unitid); goto err; } + ipaccess_bsc_srv_conn_set_name(conn, e1i_ts, &unit_data); if (!line->ops->sign_link_up) { LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "Unable to set signal link, closing socket.\n"); @@ -761,7 +769,7 @@ snprintf(conn_name, sizeof(conn_name), "ts-%u-%u-oml", line->num, e1i_ts->num); conn = osmo_stream_srv_create2(link, link, fd, e1i_ts); OSMO_ASSERT(conn); - osmo_stream_srv_set_name(conn, conn_name); + ipaccess_bsc_srv_conn_set_name(conn, e1i_ts, NULL); osmo_stream_srv_set_read_cb(conn, ipaccess_bsc_conn_read_cb); osmo_stream_srv_set_closed_cb(conn, ipaccess_bsc_conn_closed_cb); osmo_stream_srv_set_segmentation_cb(conn, osmo_ipa_segmentation_cb); @@ -815,7 +823,7 @@ snprintf(conn_name, sizeof(conn_name), "ts-%u-%u-rsl", line->num, e1i_ts->num); conn = osmo_stream_srv_create2(link, link, fd, e1i_ts); OSMO_ASSERT(conn); - osmo_stream_srv_set_name(conn, conn_name); + ipaccess_bsc_srv_conn_set_name(conn, e1i_ts, NULL); osmo_stream_srv_set_read_cb(conn, ipaccess_bsc_conn_read_cb); osmo_stream_srv_set_closed_cb(conn, ipaccess_bsc_conn_closed_cb); osmo_stream_srv_set_segmentation_cb(conn, osmo_ipa_segmentation_cb); @@ -1002,137 +1010,144 @@ return 0; } -static int ipaccess_line_update(struct e1inp_line *line) +static int ipaccess_bsc_line_update(struct e1inp_line *line) { - int ret = -ENOENT; - struct ipaccess_line *il; + struct ipaccess_line *il = line->driver_data; + + /* We only initialize this line once. */ + if (il->line_already_initialized) + return 0; + + struct osmo_stream_srv_link *oml_link, *rsl_link; + const char *ipa = e1inp_ipa_get_bind_addr(); char conn_name[128]; - if (!line->driver_data) - line->driver_data = talloc_zero(line, struct ipaccess_line); + LOGPIL(line, DLINP, LOGL_NOTICE, "enabling ipaccess BSC mode on %s " + "with OML %u and RSL %u TCP ports\n", ipa, IPA_TCP_PORT_OML, IPA_TCP_PORT_RSL); - if (!line->driver_data) { - LOGPIL(line, DLINP, LOGL_ERROR, "ipaccess: OOM in line update\n"); - return -ENOMEM; + oml_link = osmo_stream_srv_link_create(tall_ipa_ctx); + OSMO_ASSERT(oml_link); + snprintf(conn_name, sizeof(conn_name), "ts-%u-oml", line->num); + osmo_stream_srv_link_set_name(oml_link, conn_name); + osmo_stream_srv_link_set_proto(oml_link, IPPROTO_TCP); + osmo_stream_srv_link_set_addr(oml_link, ipa); + osmo_stream_srv_link_set_port(oml_link, IPA_TCP_PORT_OML); + osmo_stream_srv_link_set_data(oml_link, line); + osmo_stream_srv_link_set_nodelay(oml_link, true); + osmo_stream_srv_link_set_priority(oml_link, g_e1inp_ipaccess_pars.oml.dscp); + osmo_stream_srv_link_set_ip_dscp(oml_link, g_e1inp_ipaccess_pars.oml.priority); + osmo_stream_srv_link_set_accept_cb(oml_link, ipaccess_bsc_oml_accept_cb); + + if (osmo_stream_srv_link_open(oml_link)) { + LOGPIL(line, DLINP, LOGL_ERROR, "cannot open OML BTS link %s:%u (%s)\n", + ipa, IPA_TCP_PORT_OML, strerror(errno)); + osmo_stream_srv_link_destroy(oml_link); + return -EIO; + } + + rsl_link = osmo_stream_srv_link_create(tall_ipa_ctx); + OSMO_ASSERT(rsl_link); + snprintf(conn_name, sizeof(conn_name), "ts-%u-rsl", line->num); + osmo_stream_srv_link_set_name(rsl_link, conn_name); + osmo_stream_srv_link_set_proto(rsl_link, IPPROTO_TCP); + osmo_stream_srv_link_set_addr(rsl_link, ipa); + osmo_stream_srv_link_set_port(rsl_link, IPA_TCP_PORT_RSL); + osmo_stream_srv_link_set_data(rsl_link, line); + osmo_stream_srv_link_set_nodelay(rsl_link, true); + osmo_stream_srv_link_set_priority(rsl_link, g_e1inp_ipaccess_pars.rsl.dscp); + osmo_stream_srv_link_set_ip_dscp(rsl_link, g_e1inp_ipaccess_pars.rsl.priority); + osmo_stream_srv_link_set_accept_cb(rsl_link, ipaccess_bsc_rsl_accept_cb); + + if (osmo_stream_srv_link_open(rsl_link)) { + LOGPIL(line, DLINP, LOGL_ERROR, "cannot open RSL BTS link %s:%u (%s)\n", + ipa, IPA_TCP_PORT_RSL, strerror(errno)); + osmo_stream_srv_link_destroy(rsl_link); + return -EIO; } - il = line->driver_data; - switch(line->ops->cfg.ipa.role) { - case E1INP_LINE_R_BSC: { - /* We only initialize this line once. */ - if (il->line_already_initialized) - return 0; - struct osmo_stream_srv_link *oml_link, *rsl_link; - const char *ipa = e1inp_ipa_get_bind_addr(); - - LOGPIL(line, DLINP, LOGL_NOTICE, "enabling ipaccess BSC mode on %s " - "with OML %u and RSL %u TCP ports\n", ipa, IPA_TCP_PORT_OML, IPA_TCP_PORT_RSL); - - oml_link = osmo_stream_srv_link_create(tall_ipa_ctx); - OSMO_ASSERT(oml_link); - snprintf(conn_name, sizeof(conn_name), "ts-%u-oml", line->num); - osmo_stream_srv_link_set_name(oml_link, conn_name); - osmo_stream_srv_link_set_proto(oml_link, IPPROTO_TCP); - osmo_stream_srv_link_set_addr(oml_link, ipa); - osmo_stream_srv_link_set_port(oml_link, IPA_TCP_PORT_OML); - osmo_stream_srv_link_set_data(oml_link, line); - osmo_stream_srv_link_set_nodelay(oml_link, true); - osmo_stream_srv_link_set_priority(oml_link, g_e1inp_ipaccess_pars.oml.dscp); - osmo_stream_srv_link_set_ip_dscp(oml_link, g_e1inp_ipaccess_pars.oml.priority); - osmo_stream_srv_link_set_accept_cb(oml_link, ipaccess_bsc_oml_accept_cb); - - if (osmo_stream_srv_link_open(oml_link)) { - LOGPIL(line, DLINP, LOGL_ERROR, "cannot open OML BTS link %s:%u (%s)\n", - ipa, IPA_TCP_PORT_OML, strerror(errno)); - osmo_stream_srv_link_destroy(oml_link); - return -EIO; - } + il->line_already_initialized = true; + return 0; +} - rsl_link = osmo_stream_srv_link_create(tall_ipa_ctx); - OSMO_ASSERT(rsl_link); - snprintf(conn_name, sizeof(conn_name), "ts-%u-rsl", line->num); - osmo_stream_srv_link_set_name(rsl_link, conn_name); - osmo_stream_srv_link_set_proto(rsl_link, IPPROTO_TCP); - osmo_stream_srv_link_set_addr(rsl_link, ipa); - osmo_stream_srv_link_set_port(rsl_link, IPA_TCP_PORT_RSL); - osmo_stream_srv_link_set_data(rsl_link, line); - osmo_stream_srv_link_set_nodelay(rsl_link, true); - osmo_stream_srv_link_set_priority(rsl_link, g_e1inp_ipaccess_pars.rsl.dscp); - osmo_stream_srv_link_set_ip_dscp(rsl_link, g_e1inp_ipaccess_pars.rsl.priority); - osmo_stream_srv_link_set_accept_cb(rsl_link, ipaccess_bsc_rsl_accept_cb); - - if (osmo_stream_srv_link_open(rsl_link)) { - LOGPIL(line, DLINP, LOGL_ERROR, "cannot open RSL BTS link %s:%u (%s)\n", - ipa, IPA_TCP_PORT_RSL, strerror(errno)); - osmo_stream_srv_link_destroy(rsl_link); - return -EIO; - } - ret = 0; - break; +static int ipaccess_bts_line_update(struct e1inp_line *line) +{ + struct ipaccess_line *il = line->driver_data; + struct osmo_stream_cli *cli; + struct e1inp_ts *e1i_ts = e1inp_line_ipa_oml_ts(line); + char cli_name[128]; + + LOGPITS(e1i_ts, DLINP, LOGL_NOTICE, "enabling ipaccess BTS mode, " + "OML connecting to %s:%u\n", line->ops->cfg.ipa.addr, IPA_TCP_PORT_OML); + + /* Drop previous line */ + if (il->ipa_cli[0]) { + osmo_stream_cli_close(il->ipa_cli[0]); + ipaccess_keepalive_fsm_cleanup(e1i_ts); + e1i_ts->driver.ipaccess.fd.fd = -1; + osmo_stream_cli_destroy(il->ipa_cli[0]); + il->ipa_cli[0] = NULL; } - case E1INP_LINE_R_BTS: { - struct osmo_stream_cli *cli; - struct e1inp_ts *e1i_ts = e1inp_line_ipa_oml_ts(line); - char cli_name[128]; - - LOGPITS(e1i_ts, DLINP, LOGL_NOTICE, "enabling ipaccess BTS mode, " - "OML connecting to %s:%u\n", line->ops->cfg.ipa.addr, IPA_TCP_PORT_OML); - - /* Drop previous line */ - if (il->ipa_cli[0]) { - osmo_stream_cli_close(il->ipa_cli[0]); - ipaccess_keepalive_fsm_cleanup(e1i_ts); - e1i_ts->driver.ipaccess.fd.fd = -1; - osmo_stream_cli_destroy(il->ipa_cli[0]); - il->ipa_cli[0] = NULL; - } - e1inp_ts_config_sign(e1i_ts, line); + e1inp_ts_config_sign(e1i_ts, line); - cli = osmo_stream_cli_create(tall_ipa_ctx); - OSMO_ASSERT(cli); + cli = osmo_stream_cli_create(tall_ipa_ctx); + OSMO_ASSERT(cli); - snprintf(cli_name, sizeof(cli_name), "ts-%u-%u-oml", line->num, e1i_ts->num); - osmo_stream_cli_set_name(cli, cli_name); - osmo_stream_cli_set_data(cli, e1i_ts); - osmo_stream_cli_set_addr(cli, line->ops->cfg.ipa.addr); - osmo_stream_cli_set_port(cli, IPA_TCP_PORT_OML); - osmo_stream_cli_set_proto(cli, IPPROTO_TCP); - osmo_stream_cli_set_nodelay(cli, true); - osmo_stream_cli_set_priority(cli, g_e1inp_ipaccess_pars.oml.dscp); - osmo_stream_cli_set_ip_dscp(cli, g_e1inp_ipaccess_pars.oml.priority); - - /* Reconnect is handled by upper layers: */ - osmo_stream_cli_set_reconnect_timeout(cli, -1); - - osmo_stream_cli_set_segmentation_cb(cli, osmo_ipa_segmentation_cb); - osmo_stream_cli_set_connect_cb(cli, ipaccess_bts_connect_cb); - osmo_stream_cli_set_disconnect_cb(cli, ipaccess_bts_disconnect_cb); - osmo_stream_cli_set_read_cb2(cli, ipaccess_bts_read_cb); - - cli_apply_tcp_pars(line, cli); - - if (osmo_stream_cli_open(cli)) { - LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "cannot open OML BTS link: %s\n", strerror(errno)); - osmo_stream_cli_destroy(cli); - return -EIO; - } + snprintf(cli_name, sizeof(cli_name), "ts-%u-%u-oml", line->num, e1i_ts->num); + osmo_stream_cli_set_name(cli, cli_name); + osmo_stream_cli_set_data(cli, e1i_ts); + osmo_stream_cli_set_addr(cli, line->ops->cfg.ipa.addr); + osmo_stream_cli_set_port(cli, IPA_TCP_PORT_OML); + osmo_stream_cli_set_proto(cli, IPPROTO_TCP); + osmo_stream_cli_set_nodelay(cli, true); + osmo_stream_cli_set_priority(cli, g_e1inp_ipaccess_pars.oml.dscp); + osmo_stream_cli_set_ip_dscp(cli, g_e1inp_ipaccess_pars.oml.priority); + + /* Reconnect is handled by upper layers: */ + osmo_stream_cli_set_reconnect_timeout(cli, -1); + + osmo_stream_cli_set_segmentation_cb(cli, osmo_ipa_segmentation_cb); + osmo_stream_cli_set_connect_cb(cli, ipaccess_bts_connect_cb); + osmo_stream_cli_set_disconnect_cb(cli, ipaccess_bts_disconnect_cb); + osmo_stream_cli_set_read_cb2(cli, ipaccess_bts_read_cb); + + cli_apply_tcp_pars(line, cli); + + if (osmo_stream_cli_open(cli)) { + LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "cannot open OML BTS link: %s\n", strerror(errno)); + osmo_stream_cli_destroy(cli); + return -EIO; + } + + /* Compatibility with older ofd based implementation. osmo-bts accesses + * this fd directly in get_signlink_remote_ip() and get_rsl_local_ip() */ + e1i_ts->driver.ipaccess.fd.fd = osmo_stream_cli_get_fd(cli); - /* Compatibility with older ofd based implementation. osmo-bts accesses - * this fd directly in get_signlink_remote_ip() and get_rsl_local_ip() */ - e1i_ts->driver.ipaccess.fd.fd = osmo_stream_cli_get_fd(cli); - - ipaccess_bts_keepalive_fsm_alloc(e1i_ts, cli, "oml_bts_to_bsc"); - il->ipa_cli[0] = cli; - ret = 0; - break; + ipaccess_bts_keepalive_fsm_alloc(e1i_ts, cli, "oml_bts_to_bsc"); + il->ipa_cli[0] = cli; + + il->line_already_initialized = true; + return 0; +} + +static int ipaccess_line_update(struct e1inp_line *line) +{ + if (!line->driver_data) + line->driver_data = talloc_zero(line, struct ipaccess_line); + + if (!line->driver_data) { + LOGPIL(line, DLINP, LOGL_ERROR, "ipaccess: OOM in line update\n"); + return -ENOMEM; } + + switch (line->ops->cfg.ipa.role) { + case E1INP_LINE_R_BSC: + return ipaccess_bsc_line_update(line); + case E1INP_LINE_R_BTS: + return ipaccess_bts_line_update(line); default: - break; + return -ENOENT; } - - il->line_already_initialized = true; - return ret; } /* backwards compatibility */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/input/lapd.c new/libosmo-abis-2.2.0/src/input/lapd.c --- old/libosmo-abis-2.1.0/src/input/lapd.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/input/lapd.c 2026-08-21 07:19:04.000000000 +0200 @@ -521,10 +521,10 @@ /* prepare prim */ msg = msgb_alloc_headroom(DLSAP_MSGB_SIZE, DLSAP_MSGB_HEADROOM, "DL EST"); msg->l3h = msg->data; - osmo_prim_init(&dp.oph, 0, PRIM_DL_EST, PRIM_OP_REQUEST, msg); + osmo_prim_init(&dp.oph, 0, PRIM_DL_EST, PRIM_OP_REQUEST, msg); - /* send to L2 */ - return lapd_recv_dlsap(&dp, &sap->dl.lctx); + /* send to L2 */ + return lapd_recv_dlsap(&dp, &sap->dl.lctx); } /* Stop a (user-side) SAP for the specified TEI/SAPI on the LAPD instance */ @@ -548,10 +548,17 @@ /* prepare prim */ msg = msgb_alloc_headroom(DLSAP_MSGB_SIZE, DLSAP_MSGB_HEADROOM, "DL REL"); msg->l3h = msg->data; - osmo_prim_init(&dp.oph, 0, PRIM_DL_REL, PRIM_OP_REQUEST, msg); + osmo_prim_init(&dp.oph, 0, PRIM_DL_REL, PRIM_OP_REQUEST, msg); - /* send to L2 */ - return lapd_recv_dlsap(&dp, &sap->dl.lctx); + /* DL-RELEASE can be done in two ways: by sending DISC and waiting + * for UA, or a purely local clearing of state. The only current + * users of this lapd_sap_stop() API are vendor-specific E1 BTS + * handlers for Ericsson and Nokia in OsmoBSC, and both of them + * need local release handling. */ + dp.u.rel_req.mode = 1; + + /* send to L2 */ + return lapd_recv_dlsap(&dp, &sap->dl.lctx); } /* Transmit Data (DL-DATA request) on the given LAPD Instance / TEI / SAPI */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/trau/amr_misc.c new/libosmo-abis-2.2.0/src/trau/amr_misc.c --- old/libosmo-abis-2.1.0/src/trau/amr_misc.c 1970-01-01 01:00:00.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/trau/amr_misc.c 2026-08-21 07:19:04.000000000 +0200 @@ -0,0 +1,92 @@ +/* + * AMR TRAU interworking facility: miscellaneous functions. + * + * This code was contributed to Osmocom Cellular Network Infrastructure + * project by Mother Mychaela N. Falconia of Themyscira Wireless. + * Mother Mychaela's contributions are NOT subject to copyright: + * no rights reserved, all rights relinquished. + */ + +#include <stdint.h> +#include <stdbool.h> +#include <string.h> +#include <errno.h> + +#include <osmocom/core/bits.h> +#include <osmocom/core/utils.h> +#include <osmocom/codec/codec.h> +#include <osmocom/trau/amr_trau.h> + +/*! \addgroup amr_trau + * @{ + */ + +/*! Fill AMR frame buffer with constant DHF + * + * \param[out] fr AMR frame buffer in intermediate format of the present + * library. + * \param[in] mode One of 8 AMR codec modes, AMR_4_75 through AMR_12_2. + * \returns 0 if successful, or negative if \ref mode is invalid. + * + * IMPORTANT NOTE: unlike osmo_amrt_decode_trau_frame() and + * osmo_amrt_decode_rtp(), this function does NOT fully fill out + * struct osmo_amrt_if - instead it operates as follows: + * + * - frame_class, cmi, cmi_valid and s_bits are set by this function. + * + * - Fields related to CMR, RIF, TA+DTXd+TFOE and 3GPP Rel4 TFO configuration + * protocol are the responsibility of the application. If they were + * already filled before calling this function, they will not be overwritten; + * alternatively the application may fill them after calling this function. + * + * This function is needed for implementation of an MGW that interfaces to + * E1 Abis in the place of a TRAU: during prolonged absence of RTP input + * (not yet connected through, call on hold etc), the BTS needs to be + * supplied with valid traffic other than endless No_Data frames; filling + * with constant DHFs, with mode selected per CMR from the BTS/CCU, is + * the simplest solution. The resulting effect is also indistinguishable + * from a real TRAU operating with G.711 A-law (although not mu-law) + * when that G.711 A-law input is pure 0xD5 silence. + */ +int osmo_amrt_fill_with_dhf(struct osmo_amrt_if *fr, enum osmo_amr_type mode) +{ + const uint16_t *param; + + switch (mode) { + case AMR_4_75: + param = osmo_amr_dhf_4_75; + break; + case AMR_5_15: + param = osmo_amr_dhf_5_15; + break; + case AMR_5_90: + param = osmo_amr_dhf_5_90; + break; + case AMR_6_70: + param = osmo_amr_dhf_6_70; + break; + case AMR_7_40: + param = osmo_amr_dhf_7_40; + break; + case AMR_7_95: + param = osmo_amr_dhf_7_95; + break; + case AMR_10_2: + param = osmo_amr_dhf_10_2; + break; + case AMR_12_2: + param = osmo_amr_dhf_12_2; + break; + default: + return -EINVAL; + } + + fr->frame_class = OSMO_AMRT_FC_SPEECH_GOOD; + fr->cmi = mode; + fr->cmi_valid = true; + osmo_amr_param_to_sbits(fr->s_bits, param, mode); + + return 0; +} + +/*! @} */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/trau/trau_frame.c new/libosmo-abis-2.2.0/src/trau/trau_frame.c --- old/libosmo-abis-2.1.0/src/trau/trau_frame.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/trau/trau_frame.c 2026-08-21 07:19:04.000000000 +0200 @@ -1640,10 +1640,6 @@ } } -#define TRAU8_FT_AMR_NO_SPEECH_CMI 0x10 /* 1, 0, 0, 0, 0 */ -#define TRAU8_FT_AMR_NO_SPEECH_CMR 0x14 /* 1, 0, 1, 0, 0 */ -#define TRAU8_FT_AMR_475_515_590 0..7 - static const uint8_t bit8_0[8] = { 0, }; /*!< check sync pattern for hr/data/oam */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/src/trau/trau_rtp_conv.c new/libosmo-abis-2.2.0/src/trau/trau_rtp_conv.c --- old/libosmo-abis-2.1.0/src/trau/trau_rtp_conv.c 2025-12-04 06:19:16.000000000 +0100 +++ new/libosmo-abis-2.2.0/src/trau/trau_rtp_conv.c 2026-08-21 07:19:04.000000000 +0200 @@ -97,9 +97,6 @@ memcpy(check_bits + 6 , d_bits + 252, 2); } -//static const uint8_t c_bits_check_fr[] = { 0, 0, 0, 1, 0 }; -//static const uint8_t c_bits_check_efr[] = { 1, 1, 0, 1, 0 }; - /* * This little helper function modifies a marked-bad (BFI=1) GSM-FR payload * so it would no longer classify as SID by the bit counting rules @@ -1121,142 +1118,6 @@ return 0; } -#if 0 -static inline memcpy_inc(uint8_t *out, const uint8_t *in, size_t len, unsigned int *idx) -{ - memcpy_inc(out, in, len); - *idx += len; -} - -static int amr_speech_extract_sbits(ubit_t *s_bits, const struct osmo_trau_frame *tf, - enum osmo_amr_mode mode) -{ - unsigned int s_idx = 0; - - switch (mode) { - case AMR_4_75: - memcpy_inc(s_bits + s_idx, tf->d_bits + 44, 67 - 44, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 67, 92 - 67, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 108 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 111, 132 - 111, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 135, 148 - 135, &s_idx); - break; - case AMR_5_15: - memcpy_inc(s_bits + s_idx, tf->d_bits + 46, 96 - 46, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 69, 92 - 69, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 114 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 117, 136 - 117, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 139, 158 - 139, &s_idx); - break; - case AMR_5_90: - memcpy_inc(s_bits + s_idx, tf->d_bits + 41, 67 - 41, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 67, 92 - 67, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 116 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 119, 144 - 119, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 147, 168 - 147, &s_idx); - break; - case AMR_6_70: - memcpy_inc(s_bits + s_idx, tf->d_bits + 37, 63 - 37, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 63, 92 - 63, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 120 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 123, 152 - 123, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 155, 180 - 155, &s_idx); - break; - case AMR_7_40: - memcpy_inc(s_bits + s_idx, tf->d_bits + 34, 60 - 34, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 60, 92 - 60, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 124 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 127, 159 - 127, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 162, 191 - 162, &s_idx); - break; - case AMR_7_95: - memcpy_inc(s_bits + s_idx, tf->d_bits + 31, 58 - 31, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 58, 92 - 58, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 127 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 130, 164 - 130, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 167, 199 - 167, &s_idx); - break; - case AMR_10_2: - memcpy_inc(s_bits + s_idx, tf->d_bits + 20, 46 - 20, &s_idx); /* D21..D46 */ - memcpy_inc(s_bits + s_idx, tf->d_bits + 46, 92 - 46, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 95, 138 - 95, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 141, 187 - 141, &s_idx); - memcpy_inc(s_bits + s_idx, tf->d_bits + 190, 233 - 190, &s_idx); - break; - case AMR_12_2: - memcpy_inc(s_bits + s_idx, tf->d_bits + 0, 38 - 0, &s_idx); /* D1..D38 */ - memcpy_inc(s_bits + s_idx, tf->d_bits + 38, 91 - 38, &s_idx); /* D39..D91 */ - memcpy_inc(s_bits + s_idx, tf->d_bits + 94, 144 - 94, &s_idx); /* D95..D144 */ - memcpy_inc(s_bits + s_idx, tf->d_bits + 147, 200 - 147, &s_idx);/* D148..D200 */ - memcpy_inc(s_bits + s_idx, tf->d_bits + 203, 253 - 203, &s_idx);/* D204..D253 */ - break; - } - - return s_idx; -} - -/* TS 48.060 Section 5.5.1.2.2 */ -static int trau2rtp_16(uint8_t *out, const struct osmo_trau_frame *tf, enum osmo_amr_mode last_cmi) -{ - enum osmo_amr_mode mode = last_cmi; - uint8_t frame_class = tf->c_bits[21] << 1 | tf->c_bits[20]; - uint8_t cmr_cmi = tf->c_bits[23] << 2 | tf->c_bits[24] << 1 | tf->cb_bits[25]; - uint8_t no_speech_cls; - uint8_t s_bits[242]; - uint8_t d_bits[242]; - unsigned int s_idx = 0; - ubit_t rif = FIXME; - - if (tf->type != OSMO_TRAU16_FT_AMR) - return -EINVAL; - - if (rif == 0) - mode = cmr_cmi; - - switch (frame_class) { - case 0: // no speech - no_speech_cls = tf->d_bits[32] << 2 | tf->d_bits[33] << 1 | tf->d_bits[34]; - cmi_abs = tf->d_bits[35] << 2 | tf->d_bits[36] < 1 || tf->d_bits[37]; - cmr_abs = tf->d_bits[38] << 2 | tf->d_bits[39] < 1 || tf->d_bits[40]; - switch (no_speech_cls) { - case 7: // sid first - break; - case 6: // onset - break; - case 5: // sid_update - break; - case 4: // sid_bad - break; - case 0: // no_data - break; - } - break; - case 1: // speech bad - break; - case 2: - case 3: - /* Extract the s-bits from the TRAU frame */ - amr_speech_extract_sbits(s_bits, tf, mode); - /* Convert the s-bits to d-bits */ - osmo_amr_s_to_d(d_bits, s_bits, mode); - break; - } -} - -int trau2rtp_amr(uint8_t *out, const struct osmo_trau_frame *tf, enum osmo_amr_mode last_cmi)) -{ - switch (tf->type) { - case OSMO_TRAU16_FT_AMR: - return trau2rtp_16(out, tf, last_cmi); - case OSMO_TRAU8_AMR_LOW: - case OSMO_TRAU8_AMR_6k7: - case OSMO_TRAU8_AMR_7k4: - default: - return -EINVAL; - } -} -#endif - /* * CSD support: converting TRAU frames of type 'data' to 64 kbit/s * like the RA part of TRAU, using RTP clearmode representation. @@ -1719,9 +1580,10 @@ * * In the case of FR/EFR speech, the output format is either RFC 3551 or * TW-TS-001; in the case of HRv1 speech, the output format is either RFC 5993 - * or TW-TS-002. st->rtp_extensions field selects the use or non-use of - * Themyscira RTP extensions; the structure passed in \ref st currently - * has no other uses in the TRAU->RTP direction. + * or TW-TS-002. In the case of CSD, the output format is either 160-octet + * CLEARMODE or compressed TW-TS-007. st->rtp_extensions field selects the use + * or non-use of Themyscira RTP extensions; the structure passed in \ref st + * currently has no other uses in the TRAU->RTP direction. * * The following TRAU frame types are _not_ supported: * @@ -1734,7 +1596,9 @@ * - D144 sync frames: these special frames are not convertible to RTP; * their synchronization function needs to be handled by the application. * - * - AMR speech frames: not currently implemented. + * - AMR speech frames are not supported by this API; AMR TRAU frame + * interworking facility of <osmocom/trau/amr_trau.h> needs to be used + * instead. */ int osmo_trau2rtp(uint8_t *out, size_t out_len, const struct osmo_trau_frame *tf, struct osmo_trau2rtp_state *st) @@ -1767,8 +1631,9 @@ * * - UFE checks exist only for HRv1 and EFR speech frames; for all other frame * types, this function never writes to *ufe. (AMR is another frame type - * for which TRAU-UL decoding would include a UFE check, but we currently - * don't support AMR at all.) + * for which high-level decoding can produce UFE and DFE results, but those + * frames need to be decoded with osmo_amrt_decode_trau_frame() and not the + * present API.) */ int osmo_trau2rtp_ufe(uint8_t *out, size_t out_len, const struct osmo_trau_frame *tf, struct osmo_trau2rtp_state *st, bool *ufe) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/tests/package.m4 new/libosmo-abis-2.2.0/tests/package.m4 --- old/libosmo-abis-2.1.0/tests/package.m4 2025-12-04 06:19:30.000000000 +0100 +++ new/libosmo-abis-2.2.0/tests/package.m4 2026-08-21 07:19:21.000000000 +0200 @@ -4,9 +4,9 @@ m4_define([AT_PACKAGE_TARNAME], [libosmo-abis]) m4_define([AT_PACKAGE_VERSION], - [2.1.0]) + [2.2.0]) m4_define([AT_PACKAGE_STRING], - [libosmo-abis 2.1.0]) + [libosmo-abis 2.2.0]) m4_define([AT_PACKAGE_BUGREPORT], [[email protected]]) m4_define([AT_PACKAGE_URL], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libosmo-abis-2.1.0/tests/testsuite new/libosmo-abis-2.2.0/tests/testsuite --- old/libosmo-abis-2.1.0/tests/testsuite 2025-12-04 06:19:30.000000000 +0100 +++ new/libosmo-abis-2.2.0/tests/testsuite 2026-08-21 07:19:21.000000000 +0200 @@ -966,7 +966,7 @@ # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 -libosmo-abis 2.1.0 test suite test groups: +libosmo-abis 2.2.0 test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS @@ -1007,7 +1007,7 @@ exit $at_write_fail fi if $at_version_p; then - printf "%s\n" "$as_me (libosmo-abis 2.1.0)" && + printf "%s\n" "$as_me (libosmo-abis 2.2.0)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1195,11 +1195,11 @@ # Banners and logs. printf "%s\n" "## ------------------------------ ## -## libosmo-abis 2.1.0 test suite. ## +## libosmo-abis 2.2.0 test suite. ## ## ------------------------------ ##" { printf "%s\n" "## ------------------------------ ## -## libosmo-abis 2.1.0 test suite. ## +## libosmo-abis 2.2.0 test suite. ## ## ------------------------------ ##" echo @@ -2016,7 +2016,7 @@ printf "%s\n" "Please send $at_msg and all information you think might help: To: <[email protected]> - Subject: [libosmo-abis 2.1.0] $as_me: $at_msg1$at_msg2 + Subject: [libosmo-abis 2.2.0] $as_me: $at_msg1$at_msg2 You may investigate any problem if you feel able to do so, in which case the test suite provides a good starting point. Its output may
