osmo-iuh (0.6.0) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * hnbgw_vty.c: fix: properly pass pointer to g_hnb_gw
  * osmo-hnbgw: make sure osmo_ss7_init() executed successfully

  [ Alexander Couzens ]
  * iu_client: sccp_sap_up: set rc early
  * iu_client: ensure UE is not NULL on CO primitives
  * iu_client: sccp_sap_up: don't decode empty disconnect indications
  * iu_client: introduce ranap_iu_free_ue() to free the UE connections
  * iu_client: emit RANAP_IU_EVENT_LINK_INVALIDATED on SCCP disconnect indication
  * iu_client: introduce a guard around global_iu_event_cb
  * iu_client: allow to control the notifications
  * iu_client: introduce ranap_iu_tx_release_free()
  * iu_client: introduce UE field free_on_release
  * iu_client: pass return value of osmo_sccp_user_sap_down() towards the caller
  * iu_client: ranap_iu_tx_release() change default cause code to Success

  [ Pau Espin Pedrol ]
  * hnbgw: Add libosmoctrl's VTY CTRL command initialization
  * debian/rules: Fix dbg pacakges
  * debian: Split libosmo-sabp from libosmo-ranap package

  [ Harald Welte ]
  * asn1enum.pl: Make compatible with modern perl
  * sabp: Initial import of SABP ASN.1 from 3GPP TS 25.419 V11.1.0 (2013-03)
  * sabp: fixup SABP ASN.1 to avoid IOC (which are not supported by our toolchain)
  * sabp: Add Procedure Codes and IEI constants to CommonDataTypes
  * sabp: Generate C/H files for SABP; create libosmo-sabp
  * Initial minimal OsmoHNBGW user manual
  * exit(2) on unsupported positional arguments on command line

  [ Oliver Smith ]
  * gitignore: add gen_sabp.stamp
  * debian, asn1tostruct.py: switch to python3

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 17:04:15 +0100

osmo-iuh (0.5.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * ranap_msg_factory.h: fix enum def within function signature
  * osmo-hnbgw: fix cmdline: do not force-disable colored logging
  * osmo-hnbgw: set a proper talloc ctx for logging
  * osmo-hnbgw: logging tweaks
  * osmo-hnbgw: reply with RESET ACK when receiving a RESET

  [ Oliver Smith ]
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * contrib/jenkins.sh: run "make maintainer-clean"
  * osmo-hnbgw.cfg: set local-ip to 0.0.0.0

  [ Harald Welte ]
  * iu_client: Implement transmission of ResetAcknowledge
  * ranap_msg_factory: Fix criticality of PDUs

  [ Thorsten Alteholz ]
  * spelling stuff found by lintian

  [ Daniel Willmann ]
  * Add VTY reference manual
  * jenkins: Enable manual publishing and building

  [ Pau Espin Pedrol ]
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 21:23:57 +0200

osmo-iuh (0.4.0) unstable; urgency=medium

  [ Bernhard M. Wiedemann ]
  * asn1tostruct: allow to override build date

  [ Alexander Couzens ]
  * hnbgw: remove close_cb() to fix a crash when releasing a hnbgw

  [ Harald Welte ]
  * debian/rules: Don't overwrite .tarball-version
  * hnbgw_tx_hnb_register_rej(): Missing return statement

  [ Neels Hofmeyr ]
  * fix decoding of incoming X.213 NSAP addr
  * hnbgw: vty: add SCCP related vty commands
  * fix transport layer addr again, for nano3g

  [ Pau Espin Pedrol ]
  * debian: package osmo-hnbgw.service
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom

  [ Stefan Sperling ]
  * add a VTY command which shows a specific HNB

  [ Oliver Smith ]
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib: fix makedistcheck with disabled systemd

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 21:46:05 +0100

osmo-iuh (0.3.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: use osmo-clean-workspace.sh before and after build
  * vty: skip installing cmds now always installed by default
  * src/Makefile.am: drop unused COMMON_LDADD
  * add --enable-sanitize config option
  * osmo-hnbgw: drop erratic log line on remote STP address
  * api doc: clarify byte order in ranap_new_msg_rab_assign_*
  * tests: sanitize: fix mem leaks, clean after tests
  * ranap_msg_factory: sanitize: memcpy instead of unaligned int copy
  * test_common: fix compiler warning: include ranap_common.h
  * osmo-hnbgw: auto-config local and remote PCs if omitted
  * cosmetic: osmo-hnbgw: log remote SCCP addresses on startup
  * osmo-hnbgw: don't configure specific local IP address for STP connection
  * iu client: store multiple LAC,RAC per RNC = fix paging for multiple RNC
  * hnbgw: use proper VTY port number defined in libosmocore (4261)
  * fix 3 compiler warnings in ranap_common.c
  * hnbgw: use proper talloc ctx for vty telnet init
  * hnbgw: hnb info: record MCC, MNC, show on 'show hnb'
  * hnbap,rua,ranap decode: fix segfault on decode error
  * vty: tweak / improve HNB and cnlink introspection
  * osmo-hnbgw: vty: revamp output of context maps on 'show hnb'
  * compiler warning: asn1tostruct.py: return 0 at end of *_free_*()
  * segfault: context_map gc: use llist_for_each_entry_safe()
  * rua: discard context maps on id-Disconnect
  * rua_to_scu(): don't create a context map for UNITDATA
  * cosmetic: context_map_tmr_cb(): fix comment
  * osmo-hnbgw config: add 'rnc-id' config item
  * osmo-hnbgw: startup: log the RNC-Id that is going to be used
  * comments: hnbgw_rua.c: remove obsolete fixmes for asn1 free
  * vty typo: 'show hnb': SCTP stream, not SCCP stream
  * hnbgw_rua.c: log: fix integer format for cN_DomainIndicator
  * hnbgw_rua: fix dereference of unset pointer
  * hnbgw_cn: rx ranap: set rc in all cases
  * hnbgw_hnbap: fix missing return in rx [un]successful outcome
  * cosmetic: hnbgw: hnbap: log rx of unsuccessful outcome
  * hnbap: log errors on decoding/encoding HNB-REGISTER msgs
  * hnb-test: log accurate three-digit MNC with leading zeros
  * configure: add --enable-werror
  * cosmetic: use osmo_plmn_id instead of mcc,mnc

  [ Harald Welte ]
  * osmo-hnbgw: Avoid useless linking to libosmogsm and libsctp
  * Link libosmo-ranap against libosmovty
  * Add "-Wall" to the compile rules of the non-asn1c-generated source code
  * hnbgw.c: Remove dead code creating libsctp linker dependency
  * sccp_sap_up(): Fix never-hit "default" case in switch
  * Fix various compiler warnings in hnb-gw code
  * hnbgw_vty.c: cosmetic: Fix non-tab-indented code
  * hnbgw_vty.c: Fix "-Werror=format-security" failure in vty_out()

  [ Philipp Maier ]
  * iu: iu_helpers: add functions to decode ip/port from rab-ass
  * ranap_msg_factory: check IE encoder return codes
  * ranap_msg_factory: remove unusued variable

  [ Max ]
  * Use proper package version
  * Add control interface
  * Expand ctrl interface
  * Enable sanitize for CI tests

  [ Pau Espin Pedrol ]
  * iu_client.c: Remove unusued variable
  * configure.ac: Enable -Wall flag
  * contrib: jenkins.sh: Disable doxygen in libosmocore build
  * debian/changelog: set prev releases to unstable

  [ Stefan Sperling ]
  * ensure unique CellIDs in HNB-GW

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 18:29:13 +0200

osmo-iuh (0.2.0) unstable; urgency=low

  * Upstream 0.2.0 release

 -- Harald Welte <laforge@gnumonks.org>  Fri, 27 Oct 2017 22:19:00 +0000

osmo-iuh (0.1.0) unstable; urgency=low

  * Initial release.

 -- Alexander Couzens <lynxis@fe80.eu>  Tue, 08 Aug 2017 04:13:19 +0000
