libosmo-abis (1.5.0) unstable; urgency=medium

  [ Philipp Maier ]
  * e1_input: add define constant for full subslot (whole E1 timeslot)
  * trau_sync: allow multiple secondary sync patterns
  * trau_sync: add synchronization pattern for Ericsson RBS MCS9
  * trau_pcu_ericsson: change loglevel for CPS decoding
  * e1_input: add timeslot type NONE
  * e1_input: cleanup TS resources when timeslot type is changed
  * trau_pcu_ericsson_test: replace 64K CS1/CS2 testvectors
  * trau_pcu_ericsson: cosmetic: set hdr_good flag explictly to false
  * trau_pcu_ericsson: fix log line
  * trau_pcu_ericsson_test: fix comment, CS2 blocks are not CRC protected
  * trau_pcu_ericsson: add testvectors for MCS1-MCS8
  * trau_pcu_ericsson: add comment about uplink blocks
  * e1d: fix log output
  * e1d: clean up error logging in handle_ts_sign_read
  * e1d: maintain error log consistency in handle_ts_hdlc_read
  * e1d: fix sourcecode formatting
  * e1d: cosmetic: remove double whitespace
  * e1d: close fd when osmo_fd_setup fails
  * trau_pcu_ericsson: set uplink frame error bit correctly
  * e1d: do not set fd number to 0 after close
  * e1_input: add new driver callback function: line_create
  * e1d: initialize file descriptor numbers to -1 on startup
  * e1d: fix logic to detect if a timeslot is in use
  * e1d: get rid of strange file descriptor registered check
  * trau_pcu_ericsson: do not set unused D bits to 1
  * e1d: reconnect to osmo-e1d after connection loss

  [ Andreas Eversberg ]
  * Add more L1 signals to common part
  * Add function to set Sa bits to common part
  * Add L1 signals to misdn driver
  * Add setting of Sa bits to misdn driver
  * Use correct bit order of RAW channels at misdn driver
  * misdn driver: replace printf and fprintf by logging functions
  * Rework mi_e1_line_update() and some of its sub routines
  * Send raw data with e1d as it arrives from application
  * e1d: Remove useless call of handle_ts_trau_write()
  * e1d: Add support for HDLC type channels
  * dahdi: Disable OSMO_FD_WRITE if HDLC/RAW write queue is empty
  * dahdi: Add missing msg->l2h
  * dahdi: Add msgb_free() to prevent memeory leaks

  [ Oliver Smith ]
  * Cosmetic: osmo_ortp.h: fix typos
  * osmo_ortp.h: add RTP_PT_CSDATA
  * Run struct_endianness.py
  * debian: set compat level to 10

  [ arehbein ]
  * Transition to use of 'telnet_init_default'

  [ Pau Espin Pedrol ]
  * ipa: Call osmo_fd_unregister() before closing and changing bfd->fd

  [ Mychaela N. Falconia ]
  * osmo_rtp2trau() for FR & EFR: correctly handle the no-data case
  * osmo_rtp2trau() for FR & EFR: set SP=0 in DL if the frame is a SID
  * osmo_rtp2trau() for FR & EFR UL: set C13 & C14 correctly

  [ Vadim Yanitskiy ]
  * .gitignore: add new trau_{pcu_ericsson,sync} tests
  * cosmetic: struct e1inp_ts: fix coding style
  * cosmetic: e1inp_ipa_bts_rsl_close_n(): cache ipa_client_conn
  * fix use-after-free in ipaccess_bts_keepalive_fsm_alloc()
  * osmo_ortp: register a PayloadType for RTP_PT_CSDATA

  [ Harald Welte ]
  * trau_sync: Add sync pattern for FA protocol of 3GPP TS 43.045

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 12 Sep 2023 13:39:04 +0200

libosmo-abis (1.4.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * configure.ac: Set libosmo-e1d dependency version
  * cosmetic: Remove unneeded empty line
  * ipa: Allow users closing lower layer tcp/ipa connections
  * e1inp_line_ipa_rsl_ts(): Return null instead of reading out of bounds
  * ipaccess_close(): No need to lookup already available struct e1i_ts
  * ipaccess: Call line->ops->sign_link_down() only if set

  [ Vadim Yanitskiy ]
  * libosmo{abis,trau}: add -no-undefined to *_la_LDFLAGS

  [ Jan Engelhardt ]
  * pkgconf: require libosmocore

  [ Harald Welte ]
  * input/unixsocket: Remove write delay timer
  * Support building with -Werror=strict-prototypes / -Werror=old-style-definition
  * trau_sync: Add the V.110 sync pattern
  * trau_sync: Fix typo tray_sync_pat_id -> trau_sync_pat_id

  [ Oliver Smith ]
  * e1_input: enable tcp keepalive by default
  * ipaccess: require tcp keepalive related defines
  * ipaccess: update_fd_settings: use LOGL_ERROR

  [ Daniel Willmann ]
  * ipaccess: Clean up keepalive FSM properly
  * ipa: Add ipa_client_conn_open2 with connect timeout argument
  * ipaccess: Add connect timeout in e1inp_line
  * ipa: Guard against calling ipa_client_conn_open* multiple times

  [ Philipp Maier ]
  * trau_sync: add Ericsson RBS GPRS TRAU synchronization pattern (16kbps)
  * trau_sync: support more than 40 bytes sync pattern.
  * trau_sync: add Ericsson RBS GPRS TRAU synchronization pattern (64kbps)
  * GPRS Trau frame encoder/decoder for Ericsson RBS
  * trau_pcu_ericsson: fix broken length check
  * trau_pcu_ericsson: also support ER_UL_CHMOD_NB_UNKN in 16k mode.

  [ Eric ]
  * lapd_pcap: fix illegal VLA within struct

  [ Andreas Eversberg ]
  * Fix support for HDLC/RAW type channels at mISDN.c
  * Add missing functions to send HDLC/RAW data
  * Remove mISDN header from received channel data
  * Initialize devinfo at misdn.c
  * Send raw data with mISDN as it arrives from application

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 07 Feb 2023 13:15:21 +0100

libosmo-abis (1.3.0) unstable; urgency=medium

  [ Harald Welte ]
  * lapd: don't add parenthesis around datalink name
  * input/ipaccess: Don't start zero-ms timer on every write
  * update git URLs (git -> https; gitea)
  * update git URLs (git -> https; gitea)
  * osmo_pcap_lapd_write: Fix write of uninitialized byte(s)

  [ Oliver Smith ]
  * treewide: remove FSF address

  [ Philipp Maier ]
  * ipaccess.c: register RSL/OML related osmo_fds for monitoring

  [ Michael Iedema ]
  * stats: add RSL line number to TCP stats name
  * stats: add BTS index to IPA RSL TCP stats name
  * stats: add site_id scope to ipa-rsl tcp stat names

  [ Vadim Yanitskiy ]
  * input/e1d: fix a memleak in handle_ts_raw_read()
  * input/e1d: use msgb_hexdump_l2() in handle_ts_raw_read()

  [ Pau Espin Pedrol ]
  * input/ipaccess: Remove unneeded osmo_fd_write_enable()
  * input/ipaccess: Avoid extra poll() call when e1i_ts tx queue becomes empty

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 28 Jun 2022 17:59:38 +0200

libosmo-abis (1.2.0) unstable; urgency=medium

  [ Keith ]
  * Configure E1 pcap file per line
  * Log TRAU FSM at INFO not NOTICE
  * Fix up vty 'show' commands for E1 line/timeslots

  [ Harald Welte ]
  * ipa: Introduce support for user-specific DSCP and priority
  * e1_input: Allow (vty) configuration of IP DSCP and socket priority
  * trau: Introduce osmo_rtp_socket_set_priority()

  [ Philipp Maier ]
  * ipaccess: do not block ipaccess_line_update on failure

  [ Pau Espin Pedrol ]
  * Use new stat item/ctr getter APIs
  * osmo_ortp: Fix seqno reset to 0 upon ssrc_changed
  * e1_input: Fix line not removed from e1inp_line_list when freed
  * e1_input: Document e1inp_line_create()
  * ipaccess: Allow reconfiguring the ipa line during line_update()
  * ipaccess: e1inp_ipa_bts_rsl_connect: Fix memleak recreating ipa_client_conn
  * e1inp_input: Fix e1inp_line_clone removing original line from global list when freed

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 14:18:45 +0100

libosmo-abis (1.1.1) unstable; urgency=medium

  * attempt to fix RPM spec file after recent soversion bump

 -- Harald Welte <laforge@osmocom.org>  Wed, 24 Feb 2021 09:32:29 +0100

libosmo-abis (1.1.0) unstable; urgency=medium

  [ Harald Welte ]
  * trau_frame: New API
  * trau_frame: Introduce support for Downlink Time Alignment
  * osmo_trau_frame_encode(): Check for sufficiently sized output buffer
  * Add new TRAU frame sync code
  * TRAU frame RTP conversion
  * Add 'trau2rtp' demo program illustrating the use of new TRAU code
  * Add missing build dependency to libosmocodec-dev
  * trau_frame: Fix computation of odd parity while encoding HR frames
  * trau_sync: Check return value of osmo_fsm_register()
  * trau_frame: Add missing break statement in osmo_trau_frame_encode()
  * Fix RPM spec file (.so.6 -> .so.9)
  * debian: Build libosmo-abis with osmo-e1d support
  * Revert "debian: Build libosmo-abis with osmo-e1d support"
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * Use osmo_fd_setup() wherever applicable
  * e1_input: Support I.460 timeslot type
  * osmo_ortp: Don't print ERROR message for every missing RTP frame
  * migrate to osmo_fd_{read,write}_{enable,disable}()

  [ Philipp Maier ]
  * trau_sync: prevent false positive synchronization on startup
  * trau_sync: make sync pattern configurable
  * vty: add attributes to VTY commands indicating when they apply

  [ Vadim Yanitskiy ]
  * debian/control: change maintainer to the Osmocom team / mailing list
  * vty: use install_lib_element() and install_lib_element_ve()
  * cosmetic: fix spelling in logging messages: existAnt -> existEnt
  * ipaccess: fix verbosive logging in __handle_ts1_write()

  [ Pau Espin Pedrol ]
  * tests: Disable stderr log color in trau_sync_test
  * contrib/jenkins: Enable parallel make in make distcheck
  * ipaccess: Use LOGPITS macro in __handle_ts1_write
  * ipaccess: Fix log error printed on wrong conditional branch
  * ipaccess: Fix wrong assertion in ipaccess_drop() when used by BTS code
  * tests: trau_sync: Explicitly drop category from log
  * gitignore: Ignore autofoo files *~

  [ Oliver Smith ]
  * configure.ac: set -std=gnu11

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 16:21:49 +0100

libosmo-abis (1.0.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * add/clean big-endian packed structs (struct_endianess.py)

  [ Harald Welte ]
  * dahdi: Don't use perror() directly, use osmocom logging instead
  * introduce and use logging macros with context on E1 line / timeslot
  * e1d: Use HAVE_E1D in C source, not ENABLE_E1D
  * e1d: add missing forward-declaration of e1inp_e1d_init()
  * e1d: Don't use perror() directly, use osmocom logging instead
  * e1d: Remove EXCEPTFD handling
  * e1d: Remove bogus vty_show function.
  * e1d: Use line->port_nr to specify e1d interface/line
  * e1d: Use LOGPIL/LOGPITS logging macros to give context
  * e1d: Don't connect to e1d at program start time
  * e1d: Implement varions non-LAPD timeslot modes
  * Add rtp_test to show the double-bind bug of OS#4444
  * ortp: disable SO_REUSEADDR + SO_REUSEPORT
  * subchan_demux: Use 'ubit_t' for unpacked bit buffer; use const
  * trau_frame: use 'ubit_t' for unpacked bits
  * subchan_demux: Use ubit_t where appropriate
  * trau_frame.h: Fix definition of TRAU_FT_OM_UP
  * Fix subchan_demux_test compiler warning on some gcc versions
  * trau_frame: Fix AMR frame decoding
  * lapd: Always print context information when logging
  * fix compilation with --enable-e1d
  * lapd: Replace magic numbers with #defines
  * input/lapd.c: Enlarge message buffers for DL-SAP primitives
  * input/dahdi.c: Don't simply read beyond end of msgb
  * subchan_demux: Fix out-of-bounds write
  * e1d: Add new osmo_e1dp_client_ts_open() argument
  * e1d: Fix compilation after I4a088f91f23aaad05c5ab84a4783c1915d85aca6
  * contrib/jenkins.sh: Test builds with --enable-e1d
  * dahdi: Use osmo_revbytebits_buf() instead of local flip table
  * input/e1d: Fix support for TRAU slots
  * input/e1d: Add missing "RAW" timeslot support
  * e1_input_vty: Fix VTY help strings

  [ Sylvain Munaut ]
  * e1d: Initial osmo-e1d support
  * e1_input: Allow to change the pcap fd and/or unset it
  * e1_input: Add VTY command to enable PCAP debug output

  [ Oliver Smith ]
  * ipaccess.c: line_already_initialized: int -> bool
  * osmo_ortp: add osmo_rtp_socket_set_dscp()
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
  * src/input/ipaccess.c: set TCP_NODELAY

  [ Eric Wild ]
  * add ipa ping/pong keepalive for OML/RSL links between bts and bsc

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer

  [ Pau Espin Pedrol ]
  * e1_input: refcount inc line during e1_sign_link_create, not during line update
  * ipaccess.c: Drop repeated ipaccess_keepalive_fsm_cleanup in write error path
  * ipaccess: Fix log formatting of RESP_ID IPA attributes
  * cosmetic: e1_input.h: Fix trailing whitespace
  * e1_input: Use osmo_use_count in e1inp_line
  * ipaccess: Drop e1inp_line reference in ipacess_drop()
  * ipacces: Fix e1inp_line reference put in ipaccess_close
  * ipaccess: Set bfd->data to NULL before releasing its reference
  * ipaccess_recvmsg: Clean up release steps upon error condition
  * ipaccess_recvmsg: Assert the new bfd from new line differs from the old one
  * ipaccess_recvmsg: Untangle code updating line
  * cosmetic: lapd: Fix trailing whitespace
  * lapd: Use lapd_dl_init2 instead of deprecated lapd_dl_init
  * tests: Use API e1inp_line_put2 instead of deprecated e1inp_line_put
  * ipaccess: Fix use-after-free in ipaccess_drop()

 -- Harald Welte <laforge@osmocom.org>  Thu, 13 Aug 2020 12:09:39 +0200

libosmo-abis (0.8.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * ipa: ipa_server_link_close() add checks of link state

  [ Pau Espin Pedrol ]
  * ipa: Allow setting local addr and port for struct ipa_client_conn

  [ Harald Welte ]
  * dahdi: Use ioctl(DAHDI_SPECIFY) instead of legacy /dev/dahdi/%u
  * Enable DAHDI support by default; require --disable-dahdi otherwise

  [ Vadim Yanitskiy ]
  * input/ipaccess.c: propagate errors from ipa_parse_unitid()
  * input/ipaccess.c: fix debug message on receipt of IPAC_MSGT_ID_GET
  * e1_input.c: make reference counting get() / put() more verbose
  * input/ipa_keepalive.c: make sure IPA keepalive FSM is registered

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 02 Jan 2020 20:53:32 +0100

libosmo-abis (0.7.0) unstable; urgency=medium

  [ Max ]
  * Set local IP in ipa_server_link properly
  * Log peer's port in accept callback

  [ Harald Welte ]
  * ipa: Make ipa_server_conn_destroy() re-entrant
  * Add IPA keep-alive FSM implementation
  * ipa_keepalive_fsm: Fix OSMO_IPA_KA_E_STOP allstate event
  * ipa_keepalive_fsm: Suppress error messages for INIT -> INIT transition
  * ipaccess.c: Avoid calling close(-1) on error path

  [ Oliver Smith ]
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Sylvain Munaut ]
  * rtp: Add 'autoconnect' feature to the osmo_rtp_socket

  [ Eric Wild ]
  * ipaccess: allow tcp keepalive for ipa clients
  * add TCP_USER_TIMEOUT to keepalive
  * extend the ipa keepalive fsm

  [ Debian Mobcom Maintainers ]
  * spelling

 -- Harald Welte <laforge@gnumonks.org>  Sun, 21 Jul 2019 21:32:08 +0200

libosmo-abis (0.6.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix strncpy bugs in ipaccess.c, ipa_proxy.c
  * ipa: don't crash on missing IPA ID GET message

  [ Harald Welte ]
  * Migrate from ipa_ccm_idtag_parse to ipa_ccm_id_resp_parse()
  * debian/rules: Don't overwrite .tarball-version

  [ Pau Espin Pedrol ]
  * ipaccess: Use osmo_fd_setup to set up callbacks
  * ipaccess_rcvmsg: Fix bug introduced in previous commit
  * ipa: Simplify code in ipa_client_read
  * ipa: Simplify code in ipa_server_conn_read
  * ipa: Allow signalling fd destroyed in ipa_client_read
  * ipa: Allow signalling fd destroyed in ipa_server_conn_read
  * ipaccess: Return -EBADF when closing socket in ipaccess_bts_read_cb
  * ipaccess: Allow passing return code in e1inp_line_ops->sign_link()
  * debian: Fix libosmoabis soname package version
  * debian: Conflict libosmoabis6 with libosmoabis5
  * ipacces: Log correct trx_nr during IPA GET
  * ipaccess: Simplify handling of ipaccess e1line ts
  * e1_input.h: Set correct type for input_signal_data->link_type
  * osmo_ortp: Log domain and fix strings without endl char

  [ Stefan Sperling ]
  * Properly deal with sockaddr_un socket path length limitations.
  * ensure unix socket paths are NUL-terminated for bind/connect

 -- Harald Welte <laforge@gnumonks.org>  Sat, 19 Jan 2019 22:20:46 +0100

libosmo-abis (0.5.1) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * ipaccess: ipaccess_rcvmsg: Drop unneeded memcpy
  * ipaccess: Avoid using released line and bfd in ipaccess_fd_cb
  * e1_input.c: Replace '.' in counter names with ':'

  [ Stefan Sperling ]
  * fix double-free/use-after-free of pointers in struct e1inp_line

  [ Philipp Maier ]
  * ortp: make sure the ortp scheduler is started
  * ortp: reset rtp session on SSRC changes
  * ortp: detect ssrc changes immediately
  * ortp: enable scheduled mode on rtp socket creation
  * Revert "ortp: make sure the ortp scheduler is started"
  * Revert "ortp: enable scheduled mode on rtp socket creation"

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 18:15:18 +0200

libosmo-abis (0.5.0) unstable; urgency=medium

  [ Max ]
  * Use value string check from osmo-ci
  * cosmetic: update ipaccess_bts_handle_ccm()
  * IPA: log remote address

  [ Neels Hofmeyr ]
  * cosmetic: ipa.c: use msgb_dequeue(), drop local var
  * jenkins: use osmo-clean-workspace.sh before and after build
  * vty: skip installing cmds now always installed by default
  * add --enable-sanitize config option
  * configure: add --enable-werror
  * jenkins.sh: use --enable-werror configure flag, not CFLAGS

  [ Alexander Couzens ]
  * debian/rules: show testsuite.log when tests are failing
  * unixsocket: fix a potential string overflow

  [ Harald Welte ]
  * debian/copyright: fix upstream-name
  * Add SPDX-License-Identifier to all source files
  * Add a new osmo_rtp_set_source_desc() function to set the RTCP SDES items
  * debian/control: Fix Vcs-Browser

  [ Pau Espin Pedrol ]
  * contrib: jenkins.sh: Disable doxygen in libosmocore build
  * e1_input.h: Remove dead declaration of unexistent API ipaccess_setup
  * configure.ac: Fix condition check for RTP_SIGNAL_PTR_CAST define
  * use osmo_init_logging2
  * git-version-gen: Check first for new tag format

  [ Stefan Sperling ]
  * preserve 'when' flags of new osmo_fd in ipaccess_rcvmsg()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 16:12:04 +0200

libosmo-abis (0.4.0) unstable; urgency=medium

  * Move forward towards a new release.
  * libosmo-abis   API change      major: add parameter to struct
    input_signal_data
  * libosmo-trau   API change      major: add parameters to rx_cb()
    callack in osmo_ortp.h

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Fri, 25 Aug 2017 16:09:46 +0200

libosmo-abis (0.3.2) unstable; urgency=medium

  * Bump so version to re-link libosmovty

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Tue, 03 Nov 2015 09:42:01 +0100

libosmo-abis (0.3.1) unstable; urgency=medium

  * New upstream release of libosmo-abis

 -- Holger Hans Peter Freyther <holger@freyther.de>  Sun, 18 Jan 2015 19:26:40 +0100

libosmo-abis (0.3.0) unstable; urgency=medium

  * New upstream release of libosmo-abis

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 08 Sep 2014 07:29:39 +0200

libosmo-abis (0.2.0) unstable; urgency=medium

  * New upstream release of libosmo-abis

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 08 Sep 2014 07:29:19 +0200

libosmo-abis (0.1.6) unstable; urgency=medium

  * New upstream release of libosmo-abis

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 20 Jan 2014 10:33:36 +0100

libosmo-abis (0.1.5+git1) unstable; urgency=low

  * Rebuild 0.1.5 with the right libosmocore depedency

 -- Holger Hans Peter Freyther <holger@freyther.de>  Thu, 12 Dec 2013 11:47:01 +0100

libosmo-abis (0.1.4) unstable; urgency=low

  * New upstream release

 -- Holger Hans Peter Freyther <holger@freyther.de>  Tue, 06 Nov 2012 13:33:45 +0100

libosmo-abis (0.1.3+git3-1) precise; urgency=low

  * Fix version issue.

 -- Eric Butler <eric@codebutler.com>  Tue, 14 Aug 2012 20:50:50 -0700

libosmo-abis (0.1.3+git3) precise; urgency=low

  Created new Ubuntu package.

 -- Eric Butler <eric@codebutler.com>  Tue, 14 Aug 2012 13:00:18 -0700
