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
