osmo-pcu (0.6.0) unstable; urgency=medium

  [ Harald Welte ]
  * debian/rules: Don't overwrite .tarball-version
  * gprs_rlcmac_received_lost(): Fix regression / uninitialized now_tv
  * initial checkin of manuals to public repo
  * Add link to Asciidoc source code of manual
  * Initial place-holder for the new Gb/IP interface documentation
  * Gb message sequence chart: flip sides (SGSN should be right)
  * Gb message sequence chart: Add notion of PCU unix domain socket
  * Gb: Various spelling fixes
  * gb: Some language improvements, formatting changes
  * consistently use '3GPP TS' not sometimes 3GPP TS and sometimes TS.
  * gb/NS: Clarify the language regarding the UDP port numbers / socket
  * vty-ref: Update URI of docbook 5.0 schema

  [ Pau Espin Pedrol ]
  * Cleanup of systemd service files
  * configure.ac: Set CXXFLAGS during --enable-sanitize
  * Install systemd services with autotools
  * Move examples/ to doc/examples/
  * Install osmo-pcu.cfg to docdir/examples
  * Allow easily disabling GFDL references

  [ Stefan Sperling ]
  * check for overlong unix socket paths

  [ Max ]
  * deb: add missing copyright file
  * OsmoPCU: fix Gb documentation front page
  * OsmoPCU: expand NS documentation
  * OsmoPCU: expand BSSGP documentation
  * OsmoPCU: add MSC chart

  [ Neels Hofmeyr ]
  * Importing history from osmo-gsm-manuals.git
  * make clean: also remove generated image files
  * add 'make check' target
  * fix 'make clean': shell glob, ignore failure
  * refactor Makefile build rules, don't use the FORCE

  [ Jonathan Brielmaier ]
  * fix various typos across all manuals

  [ Philipp ]
  * configuration: fixing typos

  [ Alexander Couzens ]
  * OsmoPCU: add rate counter documentation

  [ Daniel Willmann ]
  * Change OpenBSC mentions to OsmoBSC where applicable

  [ Oliver Smith ]
  * build manuals moved here from osmo-gsm-manuals.git
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd

 -- Harald Welte <laforge@gnumonks.org>  Mon, 21 Jan 2019 19:03:52 +0100

osmo-pcu (0.5.1) unstable; urgency=medium

  [ Harald Welte ]
  * Don't register SIGHUP handler without actually handling SIGHUP

  [ Pau Espin Pedrol ]
  * tbf: Fix memset(0) on object with no trivial copy-assignment
  * rlc: Fix memset(0) on object with no trivial copy-assignment
  * jenkins.sh: use flag --enable-werror for sysmo and none
  * tbf: Use incrementing id for rate_ctr_group_alloc
  * tbf: Replace '.' in counter names with ':'

  [ Stefan Sperling ]
  * fix a one-byte stack buffer overrun in osmo-pcu
  * read monotonic clock with clock_gettime() instead of gettimeofday()
  * fix time-delta calculations for measurement reports
  * change log level of "DL packet loss" log messages
  * check bssgp_tlv_parse() return code in gprs_bssgp_pcu_rcvmsg()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 21:56:38 +0200

osmo-pcu (0.5.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
  * implement support for 3-digit MNC with leading zeros
  * configure: add --enable-werror
  * mslot_class: find_free_tfi(): use uint32_t to shift 1 << 31
  * mslot_class: two more: use uint32_t to shift 1 << 31
  * Revert "Use Timing Advance Index in UL assignments"
  * Revert "Rewrite Packet Uplink Assignment"
  * Revert "Rewrite Packet Downlink Assignment"
  * configure: fix --enable-sysmocom-dsp and --with-sysmobts flags
  * configure: properly quote CFLAGS in lc15 check
  * Revert "Rewrite EGPRS Packet Uplink Assignment"
  * use osmo_init_logging2() with proper talloc ctx

  [ Minh-Quang Nguyen ]
  * PCU: Fix TA adjustment
  * PCU: display TA information in TBF stats

  [ Max ]
  * Remove unused parameter
  * Move multislot table to separate file
  * Replace '.' in counter names with ':'
  * Fix compiler warning
  * TBF: log timer override
  * TBF: fix compiler warning in test
  * TBF: expand timer logging
  * vty: print class and TBFs for each MS
  * DL window: constify resend_needed() function
  * TBF: move EGPRS enablement into (U|D)L-TBF
  * TBF-DL: fix misleading idle time check
  * TBF: remove unused variable
  * Remove unused includes and forward declarations
  * Fix tests after rate_ctr change
  * Introduce LOGTBF* for consistent logging
  * TBF: implement independent T31xx timers
  * TBF: add N3101 counter
  * Fix warnings
  * Add function to get max supported MS class
  * Add --enable-sanitize configure option
  * Enable sanitize for CI test
  * Add tests for pcu_lsb()
  * Add optional profiling support
  * TBF: unify timer handling
  * TBF: log timer invocation source
  * TBF: bail out for unknown timers
  * Fix llc_queue_size() type
  * TBF-DL: mark rcvd_dl_ack() parameters as boolean
  * window: move encoding into functions
  * cosmetic: clarify coding scheme and puncturing
  * Make TBF state private
  * TBF: cleanup state flag handling
  * Clarify RACH-related interfaces
  * TBF-UL: add simpler test helper
  * Avoid code duplication in TBF test
  * TBF: move window parameters to UL/DL level
  * TBF-DL: move priority computation into function
  * TBF: unify EGPRS window calculation
  * Don't access TBF internals in vty functions
  * Fix jenkins.sh to match jenkins job axis filter
  * Allocate global context for TypesTest
  * Fix sanitizer build
  * Rewrite EGPRS Packet Uplink Assignment
  * Rewrite Packet Downlink Assignment
  * Rewrite Packet Uplink Assignment
  * Use Timing Advance Index in UL assignments
  * Allow specifying sysmocom headers explicitly
  * TBF: log source of state transitions
  * jenkins.sh: Disable building doxygen for deps
  * Set V_N and V_B to known initial state
  * TBF: add dedicated log categories
  * TBF: make UL/DL state internal
  * TBF: make UL ack state internal
  * TBF: make poll state internal
  * TBF: adjust test log levels
  * Add tests for find_multi_slots()
  * AllocTest: adjust test_alloc_b()
  * AllocTest: expand test output
  * AllocTest: remove assumption on max MS class
  * Add multislot classes from latest spec
  * cosmetic: fix whitespace issue with include files
  * TBF: decrease L1 logging verbosity in test
  * TBF: override send function via linker option
  * Simplify TS alloc: adjust allocator signatures
  * Simplify TS alloc: fix allocation calls
  * Simplify TS alloc: avoid TS reassignment
  * Simplify TS alloc: use defines for constants
  * Simplify TS alloc: adjust function signatures
  * TS alloc: print suggested TRX on allocation errors
  * Simplify TS alloc: internalize TRX check
  * TBF: decrease logging verbosity for traffic
  * TBF: add helpers for assignment type handling
  * TBF: show assignment kind in vty
  * vty: drop unused function
  * RACH: improve single block detection
  * TBF: move common test code into functions
  * emu: use libosmocore definitions
  * Use explicit type for pcu_lsb()
  * Move paging generation into PDCH
  * Move include guard to the top
  * Update header includes
  * Simplify TS alloc: split off RX mask computation
  * Simplify TS alloc: separate capacity computation
  * Simplify TS alloc: split allocation
  * Simplify TS alloc: split USF/UL allocation
  * Move PDCH-related functions into separate files
  * Simplify TS alloc: don't use PDCH for free TFI
  * Simplify TS alloc: constify max dl slot func
  * TBF: make network counters internal
  * Simplify TS alloc: move slot assignment
  * Simplify TS alloc: move slot check into functions

  [ Pau Espin Pedrol ]
  * Print error cause of pcu socket connect failure
  * gprs_bssgp_pcu.cpp: Comment unused function parse_ra_cap

  [ Stefan Sperling ]
  * Make osmo-pcu wait for BTS to become available at start-up time.
  * improve documentation of Encoding::write_paging_request()

  [ Alexander Couzens ]
  * pcuif_proto.h: fix whitespaces and indention
  * pcuif_proto: add version 8 features

  [ Philipp Maier ]
  * cosmetic: remove runaway semicolon
  * pcu_l1_if: add frame number to log output
  * tbf: add frame number to log output

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

osmo-pcu (0.4.0) unstable; urgency=medium

  [ Holger Hans Peter Freyther ]
  * Initial release.

  [ Max ]
  * Use value string check from osmo-ci
  * cosmetic: tighten direct-phy related code
  * Support receiving SI13 from BTS
  * Move gsmtap and accounting into separate function
  * cosmetic: convert explicit warnings to fixme/todo
  * Assert valid CS
  * TBF-DL: extend index check for RLC block copy
  * TS alloc: properly count UL slots
  * cosmetic: reformat multislot classes table

  [ Philipp Maier ]
  * gb: allow only packets from a specific SGSN

  [ Harald Welte ]
  * tests: Don't use private version of log_info but global gprs_log_info
  * Call osmo_init_logging() before static BTS constructor
  * Forward GPRS SUSPEND REQ from BTS to SGSN using BSSGP
  * Debian: Cosmetic changes to control file; add better Description
  * Debian: print test results in case of failure + clean-up autotest
  * Debian: migrate from DEB_BUILD_HARDENING to DEB_BUILD_MAINT_OPTIONS
  * Debian: upgrade to debhelper 9 / Standards 3.9.8

 -- Harald Welte <laforge@gnumonks.org>  Sun, 29 Oct 2017 12:03:05 +0100

osmo-pcu (0.3.0) UNRELEASED; urgency=medium

  * Initial release.

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Fri, 01 Apr 2016 18:59:00 +0200
