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

Reply via email to