osmo-pcu (0.8.0-fw.1) unstable; urgency=medium

  * relocated to master:20331ae5f6db

 -- Kirill Zakharenko <kirill.zakharenko@fairwaves.co>  Fri, 1 May 2020 18:23:29 +0300

osmo-pcu (0.8.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * tests: test encoding of egprs ul ack/nacks
  * tbf_dl: add comments to the scheduler
  * encoding: fix space, tabs

  [ Vadim Yanitskiy ]
  * osmobts_sock.cpp: pcu_sock_cb(): use libosmocore's socket API
  * osmobts_sock.cpp: pcu_sock_read(): use stack buffer, not heap
  * osmobts_sock.cpp: pcu_sock_read(): further simplify the code
  * osmobts_sock.cpp: do not print the same debug message twice
  * VTY: refactor pcu_vty_show_ms_all(): use show_ms()
  * VTY: fix command 'show tbf all': properly filter TBFs
  * BSSGP: do not reject SUSPEND ACK / NACK messages
  * BSSGP: properly print BVCI for signalling messages (BVCI=0)
  * tests/tbf: suspend warnings about the link quality measurements
  * GprsMs::update_cs_ul(): clarify the meaning of old_link_qual
  * gprs_bssgp_destroy(): fix memleak and NULL-pointer dereference
  * PTCCH: implement basic message codec and API
  * PTCCH: properly handle RTS.req for PCU_IF_SAPI_PTCCH
  * pcuif_proto.h: extend RACH.ind with TRX / TS numbers
  * PTCCH: properly handle RACH.ind for PCU_IF_SAPI_PTCCH
  * VTY: add warning about changing PCU socket path at run-time
  * VTY: cosmetic: use osmo_talloc_replace_string()

  [ Pau Espin Pedrol ]
  * cosmetic: tbf: Rename T and N arrays
  * Use proper API osmo_timer_setup() to set up timer struct
  * Introduce osmo_tdef infra and timer VTY commands
  * bts.cpp: Fix osmo_tdef initialization on older g++ compilers
  * Use osmo_tdef for BSSGP T1 and T2
  * Use osmo_tdef to implement T3190
  * tests: TbfTest: Unify stderr and stdout to ease debugging
  * Use osmo_tdef to implement ms-idle-time
  * Use osmo_tdef to implement dl-tbf-idle-time
  * pdch.cpp: Refactor bitvec param passing in rcv_control_block
  * pdch.cpp: Use pcu_l1_meas previously filled by lower layers
  * cosmetic: fix whitespace
  * Move out tbf subclasses from tbf.h to their own headers
  * Move tbf_{dl,ul} child constructors to respective .cpp files
  * tbf_dl: Setup m_llc_timer in constructor using osmocom API
  * tbf_dl.cpp: Remove dup call to tbf_update_ms_class() in state GPRS_RLCMAC_WAIT_RELEASE
  * vty: Fix osmo_tdef timers not listed in write config
  * Log RACH Requests using GSMTAP
  * Log AGCH and PCH blocks using GSMTAP
  * pcu_l1_if.cpp: Fix GSMTAP Imm Assign PCH wrong encoding
  * pcu_l1_if.cpp: Drop unneeded byte in Imm Ass PCH buffer
  * pcu_l1_if.cpp: Imm Assign PCH: clarify size of different items
  * pcu_l1_if.cpp: Replace value 23 with libosmocore's GSM_MACBLOCK_LEN
  * Fix assertion hit upon CCCH Paging Request
  * doc: vty: Update osmo-pcu_vty_reference.xml
  * Clarify (M)CS related VTY attributes
  * Remove dash from name used in VTY cmd prompt
  * tbf_dl.cpp: Fix typo in log line
  * pcu_l1_if: Check pag_req id_lv len fits buffer
  * prs_bssgp_pcu.cpp: Mark priv funcs as static and remove trailing whitespace
  * Fix trailing whitespace
  * fix typo in log message
  * Log BVCI PTP value upon msg recv
  * Split identity_lv param into mi+mi_len

  [ Oliver Smith ]
  * doc: update generated VTY reference
  * tbf_dl: make preemptive retransmission optional
  * Forward ETWS Primary Notification to MS
  * tests/app_info: fix compiling with older g++
  * configure.ac: set C and C++ dialects

  [ Harald Welte ]
  * manual: Fix copy+paste error
  * manual: Fix documentation missing "-D" command line option
  * manual: Add missing documentation for '-i' command line option

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 19:40:02 +0100

osmo-pcu (0.7.0) unstable; urgency=medium

  [ Rafael Diniz ]
  * Added support for daemonize to osmo-pcu.
  * Fix help message formatting of osmo-pcu.

  [ Max ]
  * Don't install pcuif_proto.h header
  * Move C include to proper place
  * Add define for dummy burst string
  * Add encoding tests for Immediate Assignment
  * Clarify write_immediate_assignment() signature
  * Restructure IA Rest Octets encoders
  * Rewrite Packet Downlink Assignment
  * Rewrite EGPRS Packet Uplink IA Rest Octets for MBA
  * Rewrite EGPRS Packet Uplink IA Rest Octets for SBA
  * MCS: internalize 'family' parameter
  * EDGE tests: reduce code duplication
  * MCS: remove dead code
  * EDGE tests: remove no-op check
  * Use msgb_eq_data_print() in tests
  * Tighten lqual table limits check
  * Enable LGLOBAL logging for TBF tests
  * Log (M)CS UL update errors
  * MCS: move Coding Scheme enum outside of class definition
  * Make get_retx_mcs() into regular function
  * MCS: remove unused function
  * Debian: bump copyright year
  * Use unique NSEI/BVCI/NSVCI in TBF tests
  * MS store: move test helper to unit test
  * Explicitly clean up BTS singleton
  * MCS: move HeaderType enum outside of class definition
  * MCS: use value_string for conversion
  * TBF-DL: log MCS as string
  * Fix TA index encoder
  * MCS: move Mode enum outside of class definition
  * MCS: add mcs_is_*() helpers
  * MCS: add Channel Coding Command encoder
  * Fix Channel Coding Command for MCS
  * Rewrite Packet Uplink IA Rest Octets for MBA
  * Rewrite Packet Uplink IA Rest Octets for SBA
  * Use Timing Advance Index in UL assignments
  * TBF: update MCS counters
  * TBF-DL: cosmetic update for helper routines
  * Update IA Rest Octets encoding
  * TS alloc: expand tests log
  * vty: add commands to show TBF of a certain kind
  * Update MCS selection for retransmission
  * cosmetic: use const pointer for bts_data
  * Add test for MS mode and (M)CS settings
  * Use libosmocore for IMSI parsing

  [ Harald Welte ]
  * Mark gprs_ns_reconnect() as static (not used outside of C file)
  * Optionally Use the NS Sub-Network-Service (SNS) on Gb
  * pcu_l1_if: Fix erroneous endian-swapping of the CellID
  * Forward GPRS SUSPEND REQ from BTS to SGSN using BSSGP
  * gprs_debug: Use named initializers and explicit array indicies
  * bssgp: Fix dead code: PDUT_STATUS can never reach this part

  [ JF Dionne ]
  * encoding: Fixes TMSI vs MI bit selection in repeated page info

  [ Oliver Smith ]
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * debian: create -doc subpackage with pdf manuals
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Daniel Willmann ]
  * Include pdch.h in bts.h even if we're not compiling C++
  * oc2g: Remove custom alarms
  * oc2g: Change log type (Litecell15->Oc2g)
  * jenkins.sh: Add oc2g build support
  * manuals: Add script to regenerate vty/counter documentation
  * manuals: Update VTY documentation

  [ Jean-Francois Dionne ]
  * Initial commit for OC-2G support.

  [ Minh-Quang Nguyen ]
  * OC-2G: Fix missing header
  * OC-2G: Fix TA adjustment
  * OC-2G: Always use positive TA information provided in PH-RA-IND

  [ Alexander Couzens ]
  * gprs_bssgp_pcu: make gprs_bssgp_ns_cb public
  * gprs_bssgp_pcu: explicit allocate & initialize bssgp_nsi instance
  * encoding: correct encoding of CRBB in ACK/NACK when not byte aligned
  * encoding: use `/* */` for comments instead of `#if 0 #endif`
  * egprs_rlc_compression: fix white spaces
  * tests/BitcompTest: fix wording in log message
  * rlc: replace int with uint16_t
  * Encoding: drop struct gprs_rlcmac_bts* from all functions
  * decompress_crbb: add length argument for search_runlen
  * Encoding: write_packet_ack_nack_desc_egprs: don't use a reference for rest_bits
  * bts.cpp: ensure left-shift operation does not exceed uint32_t
  * Encoding: use uint16_t when interacting with the window object
  * Encoding: ACK/NACK: always encode with length field present

  [ Keith ]
  * Cosmetic: Osmcoom -> Osmocom

  [ Vadim Yanitskiy ]
  * src/pcu_l1_if.cpp: fix: properly pass measurements from PCUIF
  * gprs_bssgp_pcu_rx_dl_ud(): fix: BSSGP_IE_IMSI is optional
  * gprs_bssgp_pcu.cpp: check return code of gsm48_mi_to_string()
  * gprs_bssgp_pcu_rx_dl_ud(): use OSMO_IMSI_BUF_SIZE

  [ Thorsten Alteholz ]
  * fix spelling errors detected by lintian

  [ Eric Wild ]
  * ubsan: fix shift

  [ Pau Espin Pedrol ]
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * Require newer libosmocore to avoid compile failures

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

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
