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
