Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package osmo-e1d for openSUSE:Factory checked in at 2026-08-26 19:52:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/osmo-e1d (Old) and /work/SRC/openSUSE:Factory/.osmo-e1d.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osmo-e1d" Wed Aug 26 19:52:53 2026 rev:12 rq:1373651 version:0.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/osmo-e1d/osmo-e1d.changes 2026-03-15 14:33:23.233908014 +0100 +++ /work/SRC/openSUSE:Factory/.osmo-e1d.new.1258/osmo-e1d.changes 2026-08-26 19:53:17.035810367 +0200 @@ -1,0 +2,7 @@ +Tue Aug 25 15:35:03 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 0.8.0 + * Add Channel-Associated Signalling (CAS) support + * HDLC timeslots: fix Rx of maximum-sized frames + +------------------------------------------------------------------- Old: ---- osmo-e1d-0.7.2.tar.bz2 New: ---- osmo-e1d-0.8.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ osmo-e1d.spec ++++++ --- /var/tmp/diff_new_pack.tPdzlk/_old 2026-08-26 19:53:18.498862039 +0200 +++ /var/tmp/diff_new_pack.tPdzlk/_new 2026-08-26 19:53:18.501862145 +0200 @@ -18,7 +18,7 @@ Name: osmo-e1d -Version: 0.7.2 +Version: 0.8.0 Release: 0 Summary: Osmocom E1 Daemon License: GPL-2.0-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.tPdzlk/_old 2026-08-26 19:53:18.580864935 +0200 +++ /var/tmp/diff_new_pack.tPdzlk/_new 2026-08-26 19:53:18.586865147 +0200 @@ -1,5 +1,5 @@ -mtime: 1773522980 -commit: 320315e58ad23dcd00aa0cc09af3d0188344462d2ddc8a41982cfba5f9de97cc +mtime: 1787672113 +commit: fdef1f7848fa9e2a441fa2a429bb70e1ccf15ed6b0652a41ded090fd4c48c107 url: https://src.opensuse.org/jengelh/osmo-e1d 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:35:13.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ osmo-e1d-0.7.2.tar.bz2 -> osmo-e1d-0.8.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/.tarball-version new/osmo-e1d-0.8.0/.tarball-version --- old/osmo-e1d-0.7.2/.tarball-version 2025-12-04 06:22:43.000000000 +0100 +++ new/osmo-e1d-0.8.0/.tarball-version 2026-08-21 15:12:17.000000000 +0200 @@ -1 +1 @@ -0.7.2 +0.8.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/.version new/osmo-e1d-0.8.0/.version --- old/osmo-e1d-0.7.2/.version 2025-12-04 06:22:42.000000000 +0100 +++ new/osmo-e1d-0.8.0/.version 2026-08-21 15:12:17.000000000 +0200 @@ -1 +1 @@ -0.7.2 +0.8.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/configure new/osmo-e1d-0.8.0/configure --- old/osmo-e1d-0.7.2/configure 2025-12-04 06:22:38.000000000 +0100 +++ new/osmo-e1d-0.8.0/configure 2026-08-21 15:12:11.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for osmo-e1d 0.7.2. +# Generated by GNU Autoconf 2.71 for osmo-e1d 0.8.0. # # Report bugs to <[email protected]>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='osmo-e1d' PACKAGE_TARNAME='osmo-e1d' -PACKAGE_VERSION='0.7.2' -PACKAGE_STRING='osmo-e1d 0.7.2' +PACKAGE_VERSION='0.8.0' +PACKAGE_STRING='osmo-e1d 0.8.0' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1402,7 +1402,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 osmo-e1d 0.7.2 to adapt to many kinds of systems. +\`configure' configures osmo-e1d 0.8.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1473,7 +1473,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of osmo-e1d 0.7.2:";; + short | recursive ) echo "Configuration of osmo-e1d 0.8.0:";; esac cat <<\_ACEOF @@ -1622,7 +1622,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -osmo-e1d configure 0.7.2 +osmo-e1d configure 0.8.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1897,7 +1897,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by osmo-e1d $as_me 0.7.2, which was +It was created by osmo-e1d $as_me 0.8.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -12476,7 +12476,7 @@ # Define the identity of the package. PACKAGE='osmo-e1d' - VERSION='0.7.2' + VERSION='0.8.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -15213,7 +15213,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by osmo-e1d $as_me 0.7.2, which was +This file was extended by osmo-e1d $as_me 0.8.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15272,7 +15272,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -osmo-e1d config.status 0.7.2 +osmo-e1d config.status 0.8.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/osmo-e1d-0.7.2/debian/changelog new/osmo-e1d-0.8.0/debian/changelog --- old/osmo-e1d-0.7.2/debian/changelog 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/debian/changelog 2026-08-21 15:12:01.000000000 +0200 @@ -1,3 +1,13 @@ +osmo-e1d (0.8.0) unstable; urgency=medium + + [ Andreas Eversberg ] + * Add Channel-Associated Signalling (CAS) support + + [ Mychaela N. Falconia ] + * HDLC timeslots: fix Rx of maximum-sized frames + + -- Pau Espin Pedrol <[email protected]> Thu, 20 Aug 2026 10:29:38 +0200 + osmo-e1d (0.7.2) unstable; urgency=medium [ Harald Welte ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/doc/Makefile new/osmo-e1d-0.8.0/doc/Makefile --- old/osmo-e1d-0.7.2/doc/Makefile 2025-12-04 06:22:41.000000000 +0100 +++ new/osmo-e1d-0.8.0/doc/Makefile 2026-08-21 15:12:16.000000000 +0200 @@ -224,7 +224,7 @@ CSCOPE = cscope CTAGS = ctags CYGPATH_W = echo -DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.7.2\" -DPACKAGE_STRING=\"osmo-e1d\ 0.7.2\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.7.2\" +DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.8.0\" -DPACKAGE_STRING=\"osmo-e1d\ 0.8.0\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.8.0\" DEPDIR = .deps DLLTOOL = false DOXYGEN = /usr/bin/doxygen @@ -276,10 +276,10 @@ PACKAGE = osmo-e1d PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = osmo-e1d -PACKAGE_STRING = osmo-e1d 0.7.2 +PACKAGE_STRING = osmo-e1d 0.8.0 PACKAGE_TARNAME = osmo-e1d PACKAGE_URL = -PACKAGE_VERSION = 0.7.2 +PACKAGE_VERSION = 0.8.0 PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_INSTALLED = /usr/bin/pkg-config @@ -294,7 +294,7 @@ STRIP = strip TALLOC_CFLAGS = TALLOC_LIBS = -ltalloc -VERSION = 0.7.2 +VERSION = 0.8.0 abs_builddir = /src/osmo-e1d/doc abs_srcdir = /src/osmo-e1d/doc abs_top_builddir = /src/osmo-e1d diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/doc/examples/Makefile new/osmo-e1d-0.8.0/doc/examples/Makefile --- old/osmo-e1d-0.7.2/doc/examples/Makefile 2025-12-04 06:22:41.000000000 +0100 +++ new/osmo-e1d-0.8.0/doc/examples/Makefile 2026-08-21 15:12:16.000000000 +0200 @@ -166,7 +166,7 @@ CSCOPE = cscope CTAGS = ctags CYGPATH_W = echo -DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.7.2\" -DPACKAGE_STRING=\"osmo-e1d\ 0.7.2\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.7.2\" +DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.8.0\" -DPACKAGE_STRING=\"osmo-e1d\ 0.8.0\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.8.0\" DEPDIR = .deps DLLTOOL = false DOXYGEN = /usr/bin/doxygen @@ -218,10 +218,10 @@ PACKAGE = osmo-e1d PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = osmo-e1d -PACKAGE_STRING = osmo-e1d 0.7.2 +PACKAGE_STRING = osmo-e1d 0.8.0 PACKAGE_TARNAME = osmo-e1d PACKAGE_URL = -PACKAGE_VERSION = 0.7.2 +PACKAGE_VERSION = 0.8.0 PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_INSTALLED = /usr/bin/pkg-config @@ -236,7 +236,7 @@ STRIP = strip TALLOC_CFLAGS = TALLOC_LIBS = -ltalloc -VERSION = 0.7.2 +VERSION = 0.8.0 abs_builddir = /src/osmo-e1d/doc/examples abs_srcdir = /src/osmo-e1d/doc/examples abs_top_builddir = /src/osmo-e1d diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/doc/manuals/Makefile new/osmo-e1d-0.8.0/doc/manuals/Makefile --- old/osmo-e1d-0.7.2/doc/manuals/Makefile 2025-12-04 06:22:41.000000000 +0100 +++ new/osmo-e1d-0.8.0/doc/manuals/Makefile 2026-08-21 15:12:16.000000000 +0200 @@ -136,7 +136,7 @@ CSCOPE = cscope CTAGS = ctags CYGPATH_W = echo -DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.7.2\" -DPACKAGE_STRING=\"osmo-e1d\ 0.7.2\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.7.2\" +DEFS = -DPACKAGE_NAME=\"osmo-e1d\" -DPACKAGE_TARNAME=\"osmo-e1d\" -DPACKAGE_VERSION=\"0.8.0\" -DPACKAGE_STRING=\"osmo-e1d\ 0.8.0\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"osmo-e1d\" -DVERSION=\"0.8.0\" DEPDIR = .deps DLLTOOL = false DOXYGEN = /usr/bin/doxygen @@ -188,10 +188,10 @@ PACKAGE = osmo-e1d PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = osmo-e1d -PACKAGE_STRING = osmo-e1d 0.7.2 +PACKAGE_STRING = osmo-e1d 0.8.0 PACKAGE_TARNAME = osmo-e1d PACKAGE_URL = -PACKAGE_VERSION = 0.7.2 +PACKAGE_VERSION = 0.8.0 PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_INSTALLED = /usr/bin/pkg-config @@ -206,7 +206,7 @@ STRIP = strip TALLOC_CFLAGS = TALLOC_LIBS = -ltalloc -VERSION = 0.7.2 +VERSION = 0.8.0 abs_builddir = /src/osmo-e1d/doc/manuals abs_srcdir = /src/osmo-e1d/doc/manuals abs_top_builddir = /src/osmo-e1d diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/include/osmocom/e1d/proto.h new/osmo-e1d-0.8.0/include/osmocom/e1d/proto.h --- old/osmo-e1d-0.7.2/include/osmocom/e1d/proto.h 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/include/osmocom/e1d/proto.h 2026-08-21 15:12:01.000000000 +0200 @@ -60,6 +60,10 @@ * filter: intf (required), line (required), ts n/a; in: uint8_t; */ E1DP_CMD_SABITS = 0x05, + /*! Send CAS bits to line. + * filter: intf (required), line (required), ts (required), in: uint8_t; */ + E1DP_CMD_CAS = 0x06, + /*! Received signal loss from interface. */ E1DP_EVT_LOS_ON = 0x40, @@ -84,6 +88,10 @@ /*! Ceased frame loss from interface. */ E1DP_EVT_LOF_OFF = 0x47, + /*! Received CAS bits from interface. + * out: uint8_t; */ + E1DP_EVT_CAS = 0x7e, + /*! Received Sa bits from interface. * out: uint8_t; */ E1DP_EVT_SABITS = 0x7f, @@ -182,6 +190,12 @@ uint8_t status; /*< TBD */ } __attribute__((packed)); +/*! Information about CAS bits */ +struct osmo_e1dp_cas_bits { + uint8_t bits; /*< CAS value */ + uint8_t query_rx; /*< set to 1, to query RX CAS information */ +} __attribute__((packed)); + struct msgb *osmo_e1dp_recv(struct osmo_fd *ofd, int *fd); int osmo_e1dp_send(struct osmo_fd *ofd, struct msgb *msgb, int fd); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/include/osmocom/e1d/proto_clnt.h new/osmo-e1d-0.8.0/include/osmocom/e1d/proto_clnt.h --- old/osmo-e1d-0.7.2/include/osmocom/e1d/proto_clnt.h 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/include/osmocom/e1d/proto_clnt.h 2026-08-21 15:12:01.000000000 +0200 @@ -44,6 +44,8 @@ int osmo_e1dp_client_line_config(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, enum osmo_e1dp_line_mode mode); int osmo_e1dp_client_set_sa_bits(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, uint8_t sa_bits); +int osmo_e1dp_client_set_cas(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, uint8_t ts, + struct osmo_e1dp_cas_bits *cas); int osmo_e1dp_client_ts_open(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, uint8_t ts, enum osmo_e1dp_ts_mode mode, uint16_t read_bufsize); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/include/osmocom/e1d/version.h new/osmo-e1d-0.8.0/include/osmocom/e1d/version.h --- old/osmo-e1d-0.7.2/include/osmocom/e1d/version.h 2025-12-04 06:22:43.000000000 +0100 +++ new/osmo-e1d-0.8.0/include/osmocom/e1d/version.h 2026-08-21 15:12:17.000000000 +0200 @@ -1,11 +1,11 @@ #pragma once -#define LIBOSMO_E1D_VERSION 0.7.2 -#define LIBOSMO_E1D_VERSION_STR "0.7.2" +#define LIBOSMO_E1D_VERSION 0.8.0 +#define LIBOSMO_E1D_VERSION_STR "0.8.0" #define LIBOSMO_E1D_VERSION_MAJOR 0 -#define LIBOSMO_E1D_VERSION_MINOR 7 -#define LIBOSMO_E1D_VERSION_PATCH 2 +#define LIBOSMO_E1D_VERSION_MINOR 8 +#define LIBOSMO_E1D_VERSION_PATCH 0 #define LIBOSMO_E1D_VERSION_GREATER_EQUAL(major, minor, patch) \ (LIBOSMO_E1D_VERSION_MAJOR > (major) || \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/include/osmocom/octoi/version.h new/osmo-e1d-0.8.0/include/osmocom/octoi/version.h --- old/osmo-e1d-0.7.2/include/osmocom/octoi/version.h 2025-12-04 06:22:43.000000000 +0100 +++ new/osmo-e1d-0.8.0/include/osmocom/octoi/version.h 2026-08-21 15:12:17.000000000 +0200 @@ -1,11 +1,11 @@ #pragma once -#define LIBOSMO_OCTOI_VERSION 0.7.2 -#define LIBOSMO_OCTOI_VERSION_STR "0.7.2" +#define LIBOSMO_OCTOI_VERSION 0.8.0 +#define LIBOSMO_OCTOI_VERSION_STR "0.8.0" #define LIBOSMO_OCTOI_VERSION_MAJOR 0 -#define LIBOSMO_OCTOI_VERSION_MINOR 7 -#define LIBOSMO_OCTOI_VERSION_PATCH 2 +#define LIBOSMO_OCTOI_VERSION_MINOR 8 +#define LIBOSMO_OCTOI_VERSION_PATCH 0 #define LIBOSMO_OCTOI_VERSION_GREATER_EQUAL(major, minor, patch) \ (LIBOSMO_OCTOI_VERSION_MAJOR > (major) || \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/Makefile.am new/osmo-e1d-0.8.0/src/Makefile.am --- old/osmo-e1d-0.7.2/src/Makefile.am 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/Makefile.am 2026-08-21 15:12:01.000000000 +0200 @@ -3,7 +3,7 @@ # This is _NOT_ the library release version, it's an API version. # Please read Chapter 6 "Library interface versions" of the libtool # documentation before making any modification -LIBVERSION=3:0:0 +LIBVERSION=4:0:1 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir) AM_CFLAGS=-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-result $(LIBOSMOCORE_CFLAGS) \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/Makefile.in new/osmo-e1d-0.8.0/src/Makefile.in --- old/osmo-e1d-0.7.2/src/Makefile.in 2025-12-04 06:22:38.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/Makefile.in 2026-08-21 15:12:12.000000000 +0200 @@ -429,7 +429,7 @@ # This is _NOT_ the library release version, it's an API version. # Please read Chapter 6 "Library interface versions" of the libtool # documentation before making any modification -LIBVERSION = 3:0:0 +LIBVERSION = 4:0:1 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir) AM_CFLAGS = -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-result $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOVTY_CFLAGS) $(LIBOSMOUSB_CFLAGS) $(LIBUSB_CFLAGS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/ctl.c new/osmo-e1d-0.8.0/src/ctl.c --- old/osmo-e1d-0.7.2/src/ctl.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/ctl.c 2026-08-21 15:12:01.000000000 +0200 @@ -379,6 +379,11 @@ return 0; } + if (hdr->ts == 16 && line->ts[16].mode == E1_TS_MODE_CAS) { + LOGPLI(line, DE1D, LOGL_NOTICE, "Client request for timeslot %u in CAS mode\n", hdr->ts); + return 0; + } + /* Select mode */ switch (cfg->mode) { case E1DP_TSMODE_RAW: @@ -432,6 +437,46 @@ } static int +_e1d_ctl_cas(void *data, struct msgb *msgb, struct msgb *rmsgb, int *rfd) +{ + struct e1_daemon *e1d = (struct e1_daemon *)data; + struct osmo_e1dp_msg_hdr *hdr = msgb_l1(msgb); + struct osmo_e1dp_cas_bits *cas = msgb_l2(msgb); + struct e1_intf *intf = NULL; + struct e1_line *line = NULL; + + /* Process query and find timeslot */ + intf = e1d_find_intf(e1d, hdr->intf); + if (!intf) { + LOGP(DE1D, LOGL_NOTICE, "Client request for non-existant Interface %u\n", hdr->intf); + return 0; + } + + line = e1_intf_find_line(intf, hdr->line); + if (!line) { + LOGPIF(intf, DE1D, LOGL_NOTICE, "Client request for non-existant line %u\n", hdr->line); + return 0; + } + + if (hdr->ts < 1 || hdr->ts == 16 || hdr->ts > 31) { + LOGPIF(intf, DE1D, LOGL_NOTICE, "Client request for invalid ts %u of line %u\n", hdr->ts, hdr->line); + return 0; + } + + if (line->ts[16].mode != E1_TS_MODE_CAS) { + LOGPIF(intf, DE1D, LOGL_NOTICE, "Client request for CAS control on non CAS line %u\n", hdr->line); + return 0; + } + + line->cas.tx.buf[hdr->ts - 1 - (hdr->ts >= 17)] = cas->bits; + /* Trigger CAS update. */ + if (cas->query_rx) + line->cas.rx.buf_valid[hdr->ts - 1 - (hdr->ts >= 17)] = false; + + return 0; +} + +static int _e1d_ctl_sabits(void *data, struct msgb *msgb, struct msgb *rmsgb, int *rfd) { struct e1_daemon *e1d = (struct e1_daemon *)data; @@ -498,6 +543,12 @@ .fn = _e1d_ctl_ts_open, }, { + .type = E1DP_CMD_CAS, + .flags = E1DP_SF_INTF_REQ | E1DP_SF_LINE_REQ | E1DP_SF_TS_REQ, + .payload_len = sizeof(struct osmo_e1dp_cas_bits), + .fn = _e1d_ctl_cas, + }, + { .type = E1DP_CMD_SABITS, .flags = E1DP_SF_INTF_REQ | E1DP_SF_LINE_REQ, .payload_len = sizeof(uint8_t), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/e1d.h new/osmo-e1d-0.8.0/src/e1d.h --- old/osmo-e1d-0.7.2/src/e1d.h 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/e1d.h 2026-08-21 15:12:01.000000000 +0200 @@ -75,6 +75,7 @@ E1_TS_MODE_OFF = 0, E1_TS_MODE_RAW, E1_TS_MODE_HDLCFCS, + E1_TS_MODE_CAS, }; extern const struct value_string e1_ts_mode_names[]; @@ -83,6 +84,11 @@ E1_FRAMING_MODE_NO_CRC4, }; +enum e1_cas_state { + E1_CAS_STATE_UNSYNC = 0, + E1_CAS_STATE_SYNC, +}; + struct e1_ts { struct e1_line *line; uint8_t id; @@ -95,7 +101,8 @@ struct osmo_isdnhdlc_vars tx; struct osmo_isdnhdlc_vars rx; - uint8_t rx_buf[E1DP_MAX_SIZE_HDLC]; + /* extra 2 bytes needed for FCS */ + uint8_t rx_buf[E1DP_MAX_SIZE_HDLC + 2]; uint8_t tx_buf[E1DP_MAX_SIZE_HDLC]; int tx_ofs; int tx_len; @@ -126,6 +133,21 @@ #define E1L_TS0_RX_CRC4_ERR 0x01 #define E1L_TS0_RX_ALARM 0x02 +#define E1_CAS_SYNC_VALID 4 + +struct e1_cas_tx { + uint8_t frame_count; + uint8_t buf[30]; +}; + +struct e1_cas_rx { + enum e1_cas_state state; + uint8_t frame_count; + uint8_t sync_count; + uint8_t buf[30]; + bool buf_valid[30]; +}; + struct e1_line { struct llist_head list; @@ -173,6 +195,12 @@ } framing; } usb; + /* CAS handling */ + struct { + struct e1_cas_tx tx; + struct e1_cas_rx rx; + } cas; + void *e1gen_priv; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/intf_line.c new/osmo-e1d-0.8.0/src/intf_line.c --- old/osmo-e1d-0.7.2/src/intf_line.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/intf_line.c 2026-08-21 15:12:01.000000000 +0200 @@ -279,6 +279,8 @@ _ts_init(&line->ts[i], line, i); _ts_init(&line->superchan, line, E1DP_TS_SUPERCHAN); + memset(line->cas.tx.buf, 0xff, sizeof(line->cas.tx.buf)); + INIT_LLIST_HEAD(&line->list); if (line_id == -1) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/mux_demux.c new/osmo-e1d-0.8.0/src/mux_demux.c --- old/osmo-e1d-0.7.2/src/mux_demux.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/mux_demux.c 2026-08-21 15:12:01.000000000 +0200 @@ -118,6 +118,24 @@ return len; } +static int +_e1_tx_cas(struct e1_line *line, uint8_t *buf, int len) +{ + int i; + + for (i = 0; i < len; i++) { + if ((line->cas.tx.frame_count) == 0) { + buf[i] = 0x0b; + } else { + buf[i] = line->cas.tx.buf[(line->cas.tx.frame_count) - 1] << 4; + buf[i] |= line->cas.tx.buf[(line->cas.tx.frame_count) + 14]; + } + line->cas.tx.frame_count = (line->cas.tx.frame_count + 1) & 0xf; + } + + return len; +} + /* read from a timeslot-FD (direction application -> hardware) */ static int _e1_ts_read(struct e1_ts *ts, uint8_t *buf, size_t len) @@ -131,6 +149,9 @@ case E1_TS_MODE_HDLCFCS: l = _e1_tx_hdlcfs(ts, buf, len); break; + case E1_TS_MODE_CAS: + l = _e1_tx_cas(ts->line, buf, len); + break; default: OSMO_ASSERT(0); break; @@ -306,6 +327,89 @@ return len; } +static int +_e1_rx_cas(struct e1_line *line, const uint8_t *buf, int len) +{ + int rv = 1, i; + + for (i = 0; i < len; i++) { + switch (line->cas.rx.state) { + case E1_CAS_STATE_UNSYNC: + /* Find sync mark '0000xxxx'. */ + if (!line->cas.rx.sync_count) { + /* If we found our first sync mark, align with it. */ + if ((buf[i] & 0xf0) == 0x00) { + line->cas.rx.sync_count = 1; + line->cas.rx.frame_count = 0; + } + break; + } + /* This is not a sync mark. */ + if ((buf[i] & 0xf0) != 0x00) { + if (line->cas.rx.frame_count != 0) + break; + /* If we expect a sync mark, reset sync counter. */ + line->cas.rx.sync_count = 0; + break; + } + /* This is a sync mark. */ + if (line->cas.rx.frame_count != 0) { + /* We got a sync mark at different frame count, align again. */ + line->cas.rx.sync_count = 1; + line->cas.rx.frame_count = 0; + break; + } + /* Count until the sync is valid. */ + if (++line->cas.rx.sync_count < E1_CAS_SYNC_VALID) + break; + line->cas.rx.state = E1_CAS_STATE_SYNC; + LOGPLI(line, DE1D, LOGL_INFO, "CAS frame now in sync.\n"); + /* FALLTHRU */ + case E1_CAS_STATE_SYNC: + /* Check if we are still in sync. */ + if (line->cas.rx.frame_count == 0) { + if ((buf[i] & 0xf0) == 0x00) { + /* Set valid-counter to upper limit. */ + line->cas.rx.sync_count = E1_CAS_SYNC_VALID; + } else { + /* Count down until sync expires. */ + if (--line->cas.rx.sync_count == 0) { + LOGPLI(line, DE1D, LOGL_INFO, "CAS frame sync lost.\n"); + line->cas.rx.sync_count = 0; + line->cas.rx.state = E1_CAS_STATE_UNSYNC; + break; + } + } + break; + } + /* Skip frame, if sync was not found for this frame. */ + if (line->cas.rx.sync_count < E1_CAS_SYNC_VALID) + break; + /* Store received subframe. */ + if (!line->cas.rx.buf_valid[line->cas.rx.frame_count - 1] || + line->cas.rx.buf[line->cas.rx.frame_count - 1] != (buf[i] >> 4)) { + struct osmo_e1dp_cas_bits cas; + cas.bits = line->cas.rx.buf[line->cas.rx.frame_count - 1] = (buf[i] >> 4); + line->cas.rx.buf_valid[line->cas.rx.frame_count - 1] = true; + osmo_e1dp_server_event(line->intf->e1d->srv, E1DP_EVT_CAS, line->intf->id, line->id, + line->cas.rx.frame_count - 1 + 1, (uint8_t *)&cas, sizeof(cas)); + } + if (!line->cas.rx.buf_valid[line->cas.rx.frame_count + 14] || + line->cas.rx.buf[line->cas.rx.frame_count + 14] != (buf[i] & 0x0f)) { + struct osmo_e1dp_cas_bits cas; + cas.bits = line->cas.rx.buf[line->cas.rx.frame_count + 14] = (buf[i] & 0x0f); + line->cas.rx.buf_valid[line->cas.rx.frame_count + 14] = true; + osmo_e1dp_server_event(line->intf->e1d->srv, E1DP_EVT_CAS, line->intf->id, line->id, + line->cas.rx.frame_count - 1 + 17, (uint8_t *)&cas, sizeof(cas)); + } + break; + } + line->cas.rx.frame_count = (line->cas.rx.frame_count + 1) % 16; + } + + return (rv <= 0) ? rv : i; +} + /* write data to a timeslot (hardware -> application direction) */ static int _e1_ts_write(struct e1_ts *ts, const uint8_t *buf, size_t len) @@ -319,6 +423,9 @@ case E1_TS_MODE_HDLCFCS: rv = _e1_rx_hdlcfs(ts, buf, len); break; + case E1_TS_MODE_CAS: + rv = _e1_rx_cas(ts->line, buf, len); + break; default: OSMO_ASSERT(0); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/proto.c new/osmo-e1d-0.8.0/src/proto.c --- old/osmo-e1d-0.7.2/src/proto.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/proto.c 2026-08-21 15:12:01.000000000 +0200 @@ -42,6 +42,7 @@ { E1DP_CMD_TS_QUERY, "CMD_TS_QUERY" }, { E1DP_CMD_TS_OPEN, "CMD_TS_OPEN" }, { E1DP_CMD_SABITS, "CMD_SABITS" }, + { E1DP_CMD_CAS, "CMD_CAS" }, { E1DP_EVT_LOS_ON, "EVT_LOS_ON" }, { E1DP_EVT_LOS_OFF, "EVT_LOS_OFF" }, { E1DP_EVT_AIS_ON, "EVT_AIS_ON" }, @@ -50,6 +51,7 @@ { E1DP_EVT_RAI_OFF, "EVT_RAI_OFF" }, { E1DP_EVT_LOF_ON, "EVT_LOF_ON" }, { E1DP_EVT_LOF_OFF, "EVT_LOF_OFF" }, + { E1DP_EVT_CAS, "EVT_CAS" }, { E1DP_EVT_SABITS, "EVT_SABITS" }, { E1DP_RESP_TYPE, "RESP_TYPE" }, { E1DP_ERR_TYPE, "ERR_TYPE" }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/proto_clnt.c new/osmo-e1d-0.8.0/src/proto_clnt.c --- old/osmo-e1d-0.7.2/src/proto_clnt.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/proto_clnt.c 2026-08-21 15:12:01.000000000 +0200 @@ -432,6 +432,41 @@ return 0; } +/*! Set CAS bits of a specific time-slot on E1 line in osmo-e1d. + * \param[in] clnt Client previously returned from osmo_e1dp_client_create(). + * \param[in] intf E1 interface number to configure. + * \param[in] line E1 line number (within interface) to configure. + * \param[in] time-slot number (within line) to configure. + * \param[in] CAS bits associated to this time-slot. + * \returns zero in case of success; negative in case of error. */ +int +osmo_e1dp_client_set_cas(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, uint8_t ts, + struct osmo_e1dp_cas_bits *cas) +{ + struct msgb *msgb; + struct osmo_e1dp_msg_hdr hdr; + int rc; + + memset(&hdr, 0x00, sizeof(struct osmo_e1dp_msg_hdr)); + hdr.type = E1DP_CMD_CAS; + hdr.intf = intf; + hdr.line = line; + hdr.ts = ts; + + rc = _e1dp_client_query_base(clnt, &hdr, cas, sizeof(*cas), &msgb, NULL); + if (rc) + return rc; + + if (msgb_l2len(msgb) != 0) { + msgb_free(msgb); + return -EPIPE; + } + + msgb_free(msgb); + + return 0; +} + static int _client_ts_open(struct osmo_e1dp_client *clnt, uint8_t intf, uint8_t line, uint8_t ts, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/src/vty.c new/osmo-e1d-0.8.0/src/vty.c --- old/osmo-e1d-0.7.2/src/vty.c 2025-12-04 06:22:28.000000000 +0100 +++ new/osmo-e1d-0.8.0/src/vty.c 2026-08-21 15:12:01.000000000 +0200 @@ -158,6 +158,7 @@ { E1_TS_MODE_OFF, "off" }, { E1_TS_MODE_RAW, "raw" }, { E1_TS_MODE_HDLCFCS, "hdlc-fcs" }, + { E1_TS_MODE_CAS, "cas" }, { 0, NULL } }; @@ -430,6 +431,29 @@ return CMD_SUCCESS; } +DEFUN(cfg_e1d_if_cas, cfg_e1d_if_line_cas_cmd, + "cas", + "Enable CAS signaling\n") +{ + struct e1_line *line = vty->index; + if (line->ts[16].mode != E1_TS_MODE_OFF && line->ts[16].mode != E1_TS_MODE_CAS) { + vty_out(vty, "%% Cannot set CAS signaling, timeslot 16 is already in use%s", VTY_NEWLINE); + return CMD_WARNING; + } + line->ts[16].mode = E1_TS_MODE_CAS; + return CMD_SUCCESS; +} + +DEFUN(cfg_e1d_if_no_cas, cfg_e1d_if_line_no_cas_cmd, + "no cas", + NO_STR "Disable CAS signaling\n") +{ + struct e1_line *line = vty->index; + if (line->ts[16].mode == E1_TS_MODE_CAS) + line->ts[16].mode = E1_TS_MODE_OFF; + return CMD_SUCCESS; +} + DEFUN(cfg_e1d_if_line_framing, cfg_e1d_if_line_framing_cmd, "framing (no-crc4|crc4)", NO_STR "Sets the E1 framing mode for both TX and RX\n") @@ -461,6 +485,8 @@ { vty_out(vty, " line %u%s", line->id, VTY_NEWLINE); vty_out(vty, " mode %s%s", get_value_string(e1_line_mode_names, line->mode), VTY_NEWLINE); + if (line->ts[16].mode == E1_TS_MODE_CAS) + vty_out(vty, " cas%s", VTY_NEWLINE); if (line->intf->drv == E1_DRIVER_USB) { if (line->usb.framing.tx != line->usb.framing.rx) { @@ -562,6 +588,8 @@ install_node(&line_node, NULL); install_element(LINE_NODE, &cfg_e1d_if_line_mode_cmd); + install_element(LINE_NODE, &cfg_e1d_if_line_cas_cmd); + install_element(LINE_NODE, &cfg_e1d_if_line_no_cas_cmd); install_element(LINE_NODE, &cfg_e1d_if_line_framing_cmd); install_element(LINE_NODE, &cfg_e1d_if_line_framing_txrx_cmd); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/tests/package.m4 new/osmo-e1d-0.8.0/tests/package.m4 --- old/osmo-e1d-0.7.2/tests/package.m4 2025-12-04 06:22:43.000000000 +0100 +++ new/osmo-e1d-0.8.0/tests/package.m4 2026-08-21 15:12:17.000000000 +0200 @@ -4,9 +4,9 @@ m4_define([AT_PACKAGE_TARNAME], [osmo-e1d]) m4_define([AT_PACKAGE_VERSION], - [0.7.2]) + [0.8.0]) m4_define([AT_PACKAGE_STRING], - [osmo-e1d 0.7.2]) + [osmo-e1d 0.8.0]) m4_define([AT_PACKAGE_BUGREPORT], [[email protected]]) m4_define([AT_PACKAGE_URL], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osmo-e1d-0.7.2/tests/testsuite new/osmo-e1d-0.8.0/tests/testsuite --- old/osmo-e1d-0.7.2/tests/testsuite 2025-12-04 06:22:43.000000000 +0100 +++ new/osmo-e1d-0.8.0/tests/testsuite 2026-08-21 15:12:17.000000000 +0200 @@ -921,7 +921,7 @@ # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 -osmo-e1d 0.7.2 test suite test groups: +osmo-e1d 0.8.0 test suite test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS @@ -962,7 +962,7 @@ exit $at_write_fail fi if $at_version_p; then - printf "%s\n" "$as_me (osmo-e1d 0.7.2)" && + printf "%s\n" "$as_me (osmo-e1d 0.8.0)" && cat <<\_ATEOF || at_write_fail=1 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1150,11 +1150,11 @@ # Banners and logs. printf "%s\n" "## -------------------------- ## -## osmo-e1d 0.7.2 test suite. ## +## osmo-e1d 0.8.0 test suite. ## ## -------------------------- ##" { printf "%s\n" "## -------------------------- ## -## osmo-e1d 0.7.2 test suite. ## +## osmo-e1d 0.8.0 test suite. ## ## -------------------------- ##" echo @@ -1971,7 +1971,7 @@ printf "%s\n" "Please send $at_msg and all information you think might help: To: <[email protected]> - Subject: [osmo-e1d 0.7.2] $as_me: $at_msg1$at_msg2 + Subject: [osmo-e1d 0.8.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
