osmo-pcu (1.4.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * tbf: Log poll timeout reason

  [ Vadim Yanitskiy ]
  * pdch_ul_controller: migrate from fn_cmp() to gsm0502_fncmp()
  * bts: bts_tfi_find_free(): fix -Wmaybe-uninitialized (false positive)

  [ Oliver Smith ]
  * systemd: remove RestartPreventExitStatus=1
  * Revert "pdch_ul_controller: migrate from fn_cmp() to gsm0502_fncmp()"

  [ Philipp Maier ]
  * pcuif_proto: rename PCU_IF_FLAG_SYSMO to PCU_IF_FLAG_DIRECT_PHY
  * pcuif_proto: drop support for PCUIF v10
  * pcu_l1_if: signal BTS model via PCUIF
  * gprs_rlcmac_sched: fix condition for generating dummy blocks on idle
  * bts: rename struct member gen_idle_blocks to gen_idle_blocks_C0

  [ Andreas Eversberg ]
  * Increase RR scheduler priority to 20, to avoid dropped bursts
  * Use uniform log format for default config files

  [ Keith ]
  * TBF status: Fix VTY output text

 -- Oliver Smith <osmith@sysmocom.de>  Tue, 12 Dec 2023 16:58:16 +0100

osmo-pcu (1.3.1) unstable; urgency=medium

  * tbf_dl_fsm: Fix assert hit due to EV_MAX_N3105 received in ST_RELEASING

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 15 Sep 2023 11:33:44 +0200

osmo-pcu (1.3.0) unstable; urgency=medium

  [ Philipp Maier ]
  * pcuif_proto: move gsm_pcu_if_e1_ccu_ind into right place
  * pcu_l1_if.cpp: handle TLLI based IMMEDIATE ASSIGNMENT confirmation
  * pcu_l1_if: move direct phy l1if functions to dedicated header file
  * lc15/oc2g: fix function signature of l1if_open_pdch()
  * osmo-bts-xyz: include pcu_l1_if_phy.h in phy in l1_if code
  * en/decoding: fix deprecated include path
  * pcu_l1_if: use only the term "direct PHY access"
  * pcu_l1_if_phy: add header file for struct gsmtap_inst
  * pcu_l1_if_phy: add new PHY API function to disconnect PDCH
  * pcu_l1_if_phy: add new PHY API function to initialize PHY
  * pcu_l1_if: cosmetic: remove whitespace after *
  * pcu_l1_if_phy: support multiple BTS (in theory)
  * bts: add IMMEDIATE ASSIGNMENT via PCH transmission
  * support for Ericsson RBS E1 CCU
  * pcu_l1_if: get rid of strange paging group calculation
  * doc: add sample config to illustrate how to use an E1 CCU
  * pcu_l1_if: do not copy IMSI when it is NULL
  * Makefile.am: remove phy specific EXTRA_DIST variables
  * doc: overview: put BTS and PCU on the same rank
  * doc: Add details regarding BSC co-location
  * pdch_ul_controller: log reserved frame numbers
  * pcu_l1_if: cosmetic: reformat comment
  * er_ccu_l1_if: use one ccu_desr per timeslot
  * pcu_l1_if_phy: fix API function names
  * pcu_l1_if: replace magic numbers with IMSI_DIGITS_FOR_PAGING
  * gprs_rlcmac: also use PCU_IF_SAPI_PCH_DT for paging MAC blocks
  * pcu_l1_if: use correct SAPI in PCUIF message PCU_IF_MSG_DATA_CNF_DT
  * neigh_cache: make neigh_cache_lookup_entry static
  * nacc_fsm: Add support for NACC with UTRAN and E-UTRAN cells
  * nacc_fsm: fix uninitialized neigh_key variable
  * pcuif_proto: rename tlli to msg_id
  * bts: get rid of fn parameter in bts_rcv_imm_ass_cnf
  * pcuif_proto: remove unnecessary members from gsm_pcu_if_data_cnf_dt
  * pcuif_proto: get rid of _DT, _dt (Direct TLLI)
  * pcuif_proto: add confirm flag to struct gsm_pcu_if_pch
  * pcu_l1_if: add support for PCU_IF_SAPI_AGCH_2 for PCUIF v.11
  * osmobts_sock: cosmetic: rename osmobts_sock.c to pcuif_sock.c
  * pcuif_sock: improve log output (OsmoBTS/OsmoBSC)

  [ Oliver Smith ]
  * Run struct_endianness.py
  * lc15bts.h: add missing extern keyword
  * debian: set compat level to 10
  * systemd: depend on networking-online.target

  [ Pau Espin Pedrol ]
  * tbf: Increase log level if polling requested in wrong TS
  * tbf_ul_fm: Allow receiving event TBF_EV_MAX_N3105 in state RELEASING
  * osmo_bts_sock.c: Call osmo_fd_unregister() before closing and changing bfd->fd
  * Update libosmogsm deprecated include
  * ms: Fix MS without PTMSI not freed immediatelly
  * ms: Drop setting tlli during ms_alloc()
  * tbf_dl: Avoid attempt scheduling DL ACK/NACK in TS != CTRL TS
  * ms: Drop setting (egprs_)ms_class during bts_alloc_ms()
  * bts: Rename bts_ms_by_{tlli,imsi} -> bts_get_ms_by_{tlli,imsi}
  * ms: Merge ms_storage into bts.cpp
  * ms: store in bts->ms_list during alloc/destroy of ms object
  * Merge bts_alloc_ms() and ms_alloc()
  * ms: Use osmo_use_count to track references
  * ms: Make sure tbf!=NULL in ms_attach_{ul,dl}_tbf()
  * ms: Make ms_{attach,detach}_tbf expectancies more robust
  * ms: Log detaching tbf log line in proper place
  * ms: Rewrite MS release lifecycle
  * tbf: Store initial timestamp during constructor
  * tbf: Move m_ctrs alloc to constructor
  * tbf_ul: Move rate_ctr allocation to constructor
  * tbf: Move enable_egprs() to constructor
  * cosmetic: Fix indentation in comment
  * ms: Hold a reference during ms_alloc
  * dl_tbf: Set BandWidth timestamps to current time directly
  * Add new log category 'ms'
  * ms: Increase log level when scheduling release timer
  * meas: Improve logging formatting
  * ms: Get rid of ms->delay field
  * ms: Rename field timer -> release_timer
  * ms: Log MS active/idle state in 'show ms' VTY commands
  * vty: Several improvements to 'show ms' output format
  * alloc_algo: Pass a struct containing all req params
  * alloc_algo: Move printing outside of update_ms_reserved_slots()
  * Move out of alloc_algo code modifying the data model
  * Move resource allocation outside of tbf allocation
  * ms: Mark ms_reset() as static
  * ms: Fix unsafe iterating freeing items in list
  * cosmetic: ms: fix formatting of function comment
  * tbf: Improve TBF name description in logs
  * cosmetic: tbf_ul_ack_fsm: Clean up use of ul_tbf and tbf pointers
  * Use always RFN when handling RACH indications
  * Error trying to obtain FN from RFN if curr_fn not known
  * bts: use RFN directly to calculate fn416
  * encoding: pass RFN to write_immediate_assignment(_reject)()
  * Derive FN from RFN once and cache it in struct rach_ind_params
  * Use fn_valid() helper in pcu_rx_time_ind()
  * Move call to bts_set_current_frame_number() earlier in the code path
  * Use OSMO_UNLIKELY() in bts_rfn_to_fn()
  * pcu_utils.h: Replace software based bitcount impl with gcc builtin
  * Document pcu_lsb() function
  * Log MS information in error message using usual MS API
  * tbf_dl_fsm: Apply T3193 using FSM infrastructure instead of manually
  * tbf_{ul,dl}_fsm: Remove unneeded asserts
  * tbf_{ul,dl}_fsm: remove impossible dst state transitions
  * Avoid using N3101 in DL TBFs
  * Avoid using N3103 in DL TBFs
  * Avoid using N3105 in UL TBFs
  * tbf_dl_fsm: Remove T3169 references, simplify T3195 set up as consequence
  * tbf_ul_fsm: Remove 3195 references, simplify T3169 set up as consequence
  * Abort UL TBF PACCH Ass based on T3168
  * Remove unused GPRS_RLCMAC_FLAG_TO_MASK
  * Improve logging in bts_snd_dl_ass()
  * tbf_dl_fsm: Fix wrong lchan specified in log line
  * tbf_{ul,dl}_fsm: Abort on unexpected path
  * tbf_{ul,dl}_fsm.c: Rearrange code/logs in mod_ass_type()
  * Move GPRS_RLCMAC_FLAG_TO_DL_ACK from state_fsm to dl_tbf
  * Move GPRS_RLCMAC_FLAG_DL_ACK from state_fsm to dl_tbf
  * tests/tbf: Drop unneeded line re-setting CCCH ass type
  * cosmetic: tbf_dl_fsm: Fix a couple comment typos
  * Move call to bts_snd_dl_ass() from tbf_dl.cpp to tbf_dl_fsm.c
  * Change several log lines to start with capital letter
  * cosmetic: Improve comment
  * Fix DL_TBF PACCH ass done on UL_TBF already scheduled to tx last PKT CTRL ACK
  * bts: Use same default value for T3193 as set in osmo-bts/bsc
  * Store T3192 value received from SI13, do some sanity checks
  * tbf_dl_fsm: Drop impossible event
  * cosmetic: tbf_fsm: Fix typo in comment
  * pdch.cpp: Drop impossible code path
  * Differentiate between T3192 and T3193
  * ms_need_dl_tbf(): Fix state checks and document function
  * tbf_ul: Avoid processing rx UL blocks for UL TBFs in RELEASING state
  * tbf_ul_fsm: Delay moving ul_tbf to FLOW
  * Avoid using UL TBF in RELEASE state to assign DL TBF over PACCH
  * Avoid re-assigning DL TBF over PACCH upon duplicate FinalACKs received
  * tbf_dl_fsm: Ignore DL_ACKNACK_MISS events in WAIT_{RELEASE,REUSE_TFI} states
  * Reestore last LLC frames never completely acked when freeing DL TBF
  * cosmetic: pdch.cpp: Drop wrong comment due to copy-paste error
  * tbf_dl_fsm: Fix '{FLOW}: Event ASSIGN_PCUIF_CNF not permitted'
  * pcuif: Log read() error cause
  * gprs_ms: Constify variable in ms_is_reachable_for_dl_ass()
  * gprs_ms: Update assert condition
  * oc2g: Fix multiple definitions of arrays
  * pcu_l1_if: Document tx_pch empty IMSI scenario
  * gprs_rlc_ul_window: Make sure V(N) array is cleared during reset_state()
  * Split rlc_{dl_,ul_,}window out of rlc.{h,cpp}
  * gprs_rlc_ul_window: Mark received BSNs falling out of the V(N)/RBB when V(R) is raised
  * cosmetic: mslot_class.h: Update spec reference
  * cosmetic: Document foce_two_phase feature based on specs
  * pcu_l1_if.cpp: Fix gsmtap not sent in PCU_IF_SAPI_PCH_DT
  * vty: Allow modifying default msclass

  [ Vadim Yanitskiy ]
  * {src,tests}/Makefile.am: libraries shall not be in AM_LDFLAGS
  * tests/Makefile.am: do not overwrite global LDFLAGS
  * fix pcu_rx(): actually discard malformed container message
  * tests: $(BUILT_SOURCES) is not defined, depend on osmo-pcu
  * copyright: fix typo: sysmocom s/s.m.f.c./s.f.m.c./ GmbH

  [ arehbein ]
  * PCU interface: Log version when starting listener

  [ Max ]
  * gprs_rlcmac: convert from C++ to C
  * ctrl: drop deprecated neighbor resolution interface

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 12 Sep 2023 16:00:25 +0200

osmo-pcu (1.2.0) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * encoding: fix an uninitialized field in gen_freq_params()
  * neigh_cache: fix: properly convert from nanoseconds to microseconds
  * tests/rlcmac: remove unused #includes
  * tests/rlcmac: remove unused printSizeofRLCMAC()
  * tests/rlcmac: make all test functions static
  * tests/rlcmac: cosmetic: fix coding style in arrays
  * tests/rlcmac: use ARRAY_SIZE macro
  * tests: make target 'check-local' depend on 'atconfig'
  * tests: target 'check-local' does not depend on BUILT_SOURCES
  * Makefile.am: generate missing .version file
  * Makefile.am: add 'git-version-gen' to EXTRA_DIST
  * {ms,gprs_pcu}_talloc_destructor(): call osmo_timer_del() unconditionally
  * {src,tests}/Makefile.am: $(COMMON_LA) is not definied
  * fix pcu_l1if_tx_ptcch(): do not send empty blocks to GSMTAP
  * Make linter happy: fix coding style issues
  * bts_set_current_frame_number(): log expected TDMA FN
  * bts: bts_snd_dl_ass(): clarify the meaning of last_rts_fn + 21216
  * bts: bts_snd_dl_ass(): use GSM_TDMA_FN_SUM() macro
  * Makefile.am: drop unneeded '-ldl -pthread' from AM_CXXFLAGS

  [ Pau Espin Pedrol ]
  * nacc_fsm: Fix uninitialized plmn.mnc_3_digits parsing CTRL neigh resolution cmd
  * cosmetic: Add missing spacing between params
  * Use GSM48_MT_RR_IMM_ASS instead of hardcoded 0x3f value
  * Clarify use RR imm_ass msg fields
  * bts_rcv_imm_ass_cnf(): Improve logging
  * cosmetic: Update reference to func renamed in the past
  * gprs_ms: Document functions setting/updating TLLI
  * Call ms_store->get_ms() with GSM_RESERVED_TMSI instead of 0
  * gprs_ms: Move creating string name of object to a function
  * Move LLC enqueuing and retransmit timer to MS object
  * tbf_ul_ack_fsm: Pass ul_tbf instead of generic tbf
  * Rename tbf_alloc_dl_tbf() -> dl_tbf_alloc()
  * tbf_dl: Make dl_tbf_alloc API available in C code
  * Fix mess with struct tbf types passed to LOGPTBF macro
  * Rename as_{dl,ul}_tbf -> tbf_as_{dl,ul}_tbf
  * tbf_ul_ack_fsm: get ul_tbf base class only when needed
  * use new {dl,ul}_tbf_as_tbf(_const) helper functions
  * pdch: Use helper function tbf_as_ul_tbf()
  * rcv_resource_request(): Validate expected message before MS lookup & allocation
  * encoding: Use MT_PACKET_UPLINK_ASSIGNMENT define instead of hardcoded value
  * rcv_resource_request(): Update meas before allocating and assigning new UL TBF
  * Delay ImmAss(PCH, PktDlAss) if waiting for PKT_CTRL_ACK answering UL_ACK_NACK (FinACK=1)
  * Refactor and clarify tbf->triger_ass() code
  * Rename function tbf_dl_request_dl_ack() -> dl_tbf_request_dl_ack()
  * Replace tbf->establish_dl_tbf_on_pacch() refactoring GprsMs functions
  * ul_tbf: Define m_contention_resolution_done as bool
  * tbf_fsm: Identify several events as Dl-TBF only
  * Move UL allocation&assign functions to gprs_ms.c
  * update_ms(): Set TLLI of new MS object before merge with old MS
  * Join ms_merge_and_clear_ms() and ms_merge_old_ms()
  * gprs_ms: Add comment warning the user that a ptr may be freed after call to func
  * Rename tbf_alloc_ul_tbf -> ul_tbf_alloc
  * Rework tbf::update_ms()
  * tbf_fsm: Introduce new event TBF_EV_FIRST_UL_DATA_RECVD
  * Avoid losing DL-TBF during MS merge
  * tbf_fsm: Introduce new event to act upon contention resolution success
  * tbf_ul: Assign DL-TBF if needed after UL-TBF has gone over contenion resolution
  * Improve TBF logging
  * Improve MS logging
  * Disable logging fsm addresses
  * tbf_fsm: Move tbf_fsm_state_chg macro to .c file
  * tbf_fsm: Move osmo_fsm_inst fi out of struct tbf_fsm_ctx
  * tbf: Drop unused function
  * tbf: Add tbf_as_{ul,dl}_tbf_const func helpers
  * Refactor tbf_is_tfi_assigned() to avoid accessing tbf->state_fsm
  * Split tbf_fsm as tbf_{ul,dl}_fsm
  * Convert gprs_debug.cpp to C
  * pdch: Initial support Handling PktResReq with ID_TYPE=UL/DL_TFI
  * pdch_ulc_get_node(): assert if ulc pointer is null
  * Pass gprs_rlcmac_pdch to tbf_is_control_ts
  * Pass pdch ptr to tbf_compute_priority
  * encoding::write_immediate_assignment(): Constify tbf param
  * tbf_ul_fsm_ctx: Properly define tbf backptr as ul_tbf
  * tbf_dl_fsm_ctx: Properly define tbf backptr as dl_tbf
  * Move control_ts explicit checks out of the scheduler implementation
  * sched: Pass pdch to *_create_rlcmac_msg() functions
  * Move first_common_ts from gprs_rlcmac_tbf to GprsMs
  * Get rid of tbf->first_ts
  * Refactor code related to DL-TBF upgrade to multislot
  * Trigger PACCH assignment inside dl_tbf_upgrade_to_multislot()
  * tbf_ul: Fix wrong struct type in field
  * Refactor code rejecting UL-TBF upon rx of PktResourceReq
  * bts: Adapt slot_mask to trx defined array size
  * Convert ms_first_common_ts to struct gprs_rlcmac_pdch
  * Rename gprs_rlcmac_ts_alloc.cpp -> alloc_algo.cpp & create own .h file
  * pdch: Introduce APIs to print PDCH name
  * tbf: Fix typo in define used
  * Convert tbf->control_ts to be a gprs_rlcmac_pdch*
  * tests/tbf: test_tbf_dl_llc_loss(): Fix wrong param passed and wrong expectancies
  * Pass gprs_rlcmac_pdch to create_dl_acked_block()
  * Pass gprc_rlcmac_pdch to tbf_check_polling
  * Pass gprc_rlcmac_pdch to tbf_set_polling
  * bts: Adapt trx check based on bts->trx[] defined array size
  * tests/TbfTest: reproduce buggy corner case: MS with TBFs on 2 TRXs
  * Avoid moving DL-TBF from old_msg to new_ms during ms_merge
  * llc: Mark llc_is_user_data_frame() as static
  * llc: Refactor code checking if PDU expired while dequeueing
  * llc: remove unused reference to msgb address
  * cosmetic: Remove unneeded curly braces
  * Mark several fsm related internal symbols as static
  * rlc.h: Fix typo in param name

  [ Max ]
  * Set working directory in systemd service file
  * Update and document realtime scheduling priority in service file
  * cosmetic: drop unused field from struct pdch_ulc
  * cosmetic: drop duplicated comment
  * constify pdch_ulc_get_next_free_fn() parameter

  [ Philipp Maier ]
  * pcuif_proto: cosmetic: rename struct member "h" to "hopping"
  * pcuif_proto: cosmetic: rename gsm_pcu_if_info_ts to gsm_pcu_if_info_trx_ts
  * pcuif_proto: use define constant to specify nax number of trx
  * bts: refuse to set invalid frame numbers
  * bts: use GSM_TDMA_FN_ macros and uint32_t in bts_rfn_to_fn
  * bts: log FN jump delta in bts_set_current_frame_number()
  * pcuif_proto: add indication to communicate E1 parameters
  * pcu_l1_if: cosmetic: use sizeof instead of constants
  * pcu_l1_if: ignore frame numbers that exceed the valid range
  * pcuif_proto: rename PCU_IF_SAPI_AGCH_DT to PCU_IF_SAPI_PCH_DT

  [ Harald Welte ]
  * update horribly outdated copyright statement on VTY

  [ arehbein ]
  * osmo-pcu:  Transition to use of 'telnet_init_default'

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 07 Feb 2023 17:10:40 +0100

osmo-pcu (1.1.0) unstable; urgency=medium

  [ Oliver Smith ]
  * treewide: remove FSF address

  [ Pau Espin Pedrol ]
  * Fix assert hit if connecting to SGSN fails
  * llc: Convert to C: s/m_//g
  * llc: Convert to C
  * llc: Move static functions below related object
  * ms: validate codel enabled against proper define
  * ms: Remove unneeded bts!=NULL check
  * gprs_ms_storage: MS always has non NULL ms->bts
  * llc: schedule frames to MS based on SAPI priority
  * pdch is_enabled: Use API getter instead of accessing field directly
  * llc_queue: Refactor to handle codel_state per prio queue internally
  * tests/llc: Add test_llc_meta_pdu_life_expire
  * tests/llc: Add test_llc_codel
  * gprs_ms: Use osmo_timer_setup() API
  * gprs_ms_storage: Use bts_stat_item_inc/dec APIs
  * tests/tbf: Set up pcu timers in prepare_pcu()
  * gprs_pcu: Explicitly free all bts objects in list before freeing pcu
  * bts: Call gprs_bssgp_destroy() in destructor
  * TbfTest: Reset MS timeout to 0 in test_tbf_dl_llc_loss()
  * gprs_ms_stoage: Release all MS in ms_storage cleanup()

  [ Harald Welte ]
  * update git  URLs (git -> https; gitea)

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 29 Jun 2022 09:48:53 +0200

osmo-pcu (1.0.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * Support uplink multi-slot allocations
  * tbf: Log timeslot allocation failure
  * bts: Count TBF TS allocation failure
  * pdch: Standarize and improve logging
  * tbf: Improve logging when TBF being allocated or no TBF avail
  * Remove uneeded ms param from alloc_algorithm_func_t func
  * bts: Add new stats to detect TBF allocation failure reasons
  * llc: use memset to fill llc dummy frame padding
  * tbd_dl: Don't re-initialize class field twice
  * tbf: log keep_open condition status
  * tbf_dl: Fix m_last_dl_drained_fn not set under some conditions
  * tbf_dl: fix FBI not set upon X2031 = 0
  * ms: clarify delayed MS release process related code and logging
  * gprs_ms: Use standarized logging on more messages
  * sched: sched_select_ctrl_msg(): Clean up param list and improve logging
  * sched: sched_select_downlink(): Clean up param list and improve logging
  * TODO-RELEASE: document requirement of master libosmocore
  * tbf: Log N310* counter increments
  * pdch: Silently ignore DATA.ind with len=0
  * direct_phy: Support submitting DATA.ind with len=0 to upper layers
  * pcu_utils.h: Fix trailing whitespace
  * Track TDMA clock with DATA.ind instead of TIME.ind
  * Introduce init() APIs for PDCH and TRX objects
  * tests: rlcmac: Fix C vs C++ linkage of extern symbol
  * pdch.h: Drop uneeded include bts.h
  * Improve DATA.ind logging
  * Improve logging in DATA.req and ACT.req
  * tbf: Fix wrong variable printed in log
  * pdch: Log FN when decoding UL Ctrl block
  * Add new PDCH UL Controller, drop SBAllocator class
  * Replace PollController with newly added PDCH UL Controller
  * sched: Use new PDCH UL Controller
  * bts: Detect FN jumps
  * cosmetic: tests/Makefile.am: Split content into several lines
  * tests: Introduce unit tests for PDCH UL Controller
  * tests: ulc: Show current bug with FN wrap around
  * ulc: Fix FN store order upon wrap around
  * sysmo: fix wrong FN jumps in rx RA.ind
  * direct_phy: Fix condition dropping rx DATA.ind payload in in
  * Fix: left shift cannot be repesented in type int
  * sched: Fix scheduling UL TBF not matching conditions
  * sched: Simplify usf selection code
  * Set matching USF if available when polling a UL TBF
  * pdch: Add mising pdch_ulc_release_node in Rx Cell Change Notif
  * pdch_ulc: Create helper API pdch_ulc_release_node
  * Track scheduled UL blocks through USF
  * Properly implement N3101
  * sba: Document AGCH_START_OFFSET after some experimental tests
  * pdch_ulc: Optimize rbtree FN search
  * Pick unreserved UL FN when allocating an SBA
  * pdch_ulc: Support picking RRBP other than N+13
  * Drop unused function tbf_check()
  * pdch_ulc: Store TBF poll reason
  * tbf: Get rid of unneeded poll_scheduled()
  * tbf: Allow multiple concurrent polls
  * Remove unneeded poll_state check
  * tbf: get rid of poll_state completely
  * Get rid of param 'poll' with constant value
  * tbf: Get rid of attribute poll_fn
  * tbf: Get rid of attribute poll_ts
  * RIM: Improve logging
  * sba: Drop unused function find_sba_rts
  * pdch: rcv_resource_request: Improve robustness
  * pdch: tbf_by_tfi(): Allow returning TBFs in state RELEASING
  * Stop abusing T3169
  * Make use of T3142 received from BTS
  * Use negative numbers for non-spec osmo-specific timers
  * ul_tbf: Clean up handle_tbf_reject()
  * Make WaitIndication T3172 configurable
  * sched: Simplify else-if condition
  * Clarify, document Assignment related timers
  * doc/tbf.txt: Update and improve some information
  * bts: constify arg in func bts_ms_store()
  * sched: Rename func to describe its used only for RLCMAC CTRL blocks
  * rim: Constify param in func
  * Simplify helper function tbf_select_slot_set()
  * alloc_algorithm_b: Rearrange variable initialization
  * Rename function s/tbf_alloc_ul/tbf_alloc_ul_pacch/
  * Split ul_tbf alloc on CCCH into new function
  * Implement T3141
  * tbf_ul: Use is_tlli_valid() API
  * Tx ul ack/nack: Avoid sending invalid/unknown TLLI
  * encoding: Use gsm48_ta_is_valid() API
  * encoding: Encode TA in UL ACK/NACK if available
  * sched: Clean up helper function and improve logging
  * Drop existing tbf->ms() check condition
  * ul_tbf: Simplify function rcv_data_block_acknowledged
  * ul_tbf: Fix accessing zeroed block when checking if transfer is complete
  * sched: Clean up param passing and improve logging
  * pdch: Use llist_first_entry() API
  * RIM: Refactor Rx path to decode stack in proper order
  * Clean false positive in newer GCC version checking guard of else clause
  * Use LOGPDCH macro in bts_add_paging()
  * Optimize PAGING-CS PDCH set selection when target MS is known
  * bts: Use ms_store when calculating set of target PDCHs for Pkt Paging Request
  * tbf: Log error path in setup() failing to assign control TS
  * Move TBF list from BTS to the TRX structure
  * MsTest: Set up tbf talloc destructor
  * tbf: Move existing tbf_state implementation to osmo_fsm
  * cosmetic: Fix typo s/TIMSI/TMSI/
  * gsm_rlcmac.c: Fix arg list of 2 callbacks
  * csn1: Implement CSN_CALLBACK type in encoder
  * bts: Fix typo in field name
  * Use new stat item/ctr getter APIs
  * pdch: Log pdch_ulc reason upon rx of pkt ctrl ack
  * pcuif: Support receiving System Information 2
  * pdch: Fix null MS access gprs_rlcmac_pdch::rcv_control_ack
  * pcuif_proto.h: Add new container message
  * Support proto IPAC_PROTO_EXT_PCU BSC<->PCU
  * pdch: Fix heap-use-after-free in pdch->ulc
  * Make gcc 11.1.0 false positivies happy
  * tbf: Drop impossible paths in create_dl_ass()
  * tests/tbf: Fix null pointer access if slowly stepping with gdb
  * Revert "coverity: fix null deref from recent UL TBF leak fix"
  * Revert "fix: handle NULL return of as_dl_tbf() and as_ul_tbf()"
  * Revert "Revert "Stop abusing T3169""
  * Move NULL and ASSIGN tbf_state transition to tbf_fsm
  * Move FLOW tbf_state transition to tbf_fsm.
  * tests: tbf: Fix dl_tbf polled for data without being in FLOW state
  * Move FINISHED tbf_state transition to tbf_fsm
  * Move WAIT_RELEASE tbf_state transition to tbf_fsm
  * Move RELEASING tbf_state transition to tbf_fsm
  * Move T3169 and T3195 to tbf_fsm
  * Drop duplicate log line
  * Put dl_tbf::cleanup into destructor
  * Drop logging last mas report before freeing TBF
  * Remove duplicate call to gprs_rlcmac_lost_rep
  * Move rate_ctr free to tbf subclass destructor
  * Get rid of tbf_dl:abort()
  * tbf_free: Get rid of uneeded tbf_state transition
  * Replace ul_ass_state with osmocom FSM
  * tbf: Reimplement rlcmac_diag() and make it available from C
  * tbf: Drop unuseful flag GPRS_RLCMAC_FLAG_TO_UL_ASS
  * replace dl_ass_state with osmocom FSM
  * tbf: Drop unuseful flag GPRS_RLCMAC_FLAG_TO_DL_ASS
  * tbf: Drop unuseful flag GPRS_RLCMAC_FLAG_UL_DATA
  * Move timer X2001 to tbf_fsm
  * Get rid of lots of code only used by tests
  * tbf: Merge handle_ack_nack() into rcvd_dl_ack()
  * Fix typos in comments documenting fsm st chg macro
  * tbf: Use type bool for upgrade_to_multislot
  * Move timer X2002 to tbf_fsm
  * tbf_dl: Clarify requirements for DL ACK/NACK
  * tbf.h: Improve documentation on several flags
  * Move tbf ul_ack_state to osmocom FSM
  * Simplify tbf::set_polling()
  * tbf: Move T3193 to tbf_state FSM
  * fix typo 's/dowlink/downlink/g'
  * cosmetic: Fix typo in comment
  * sched: energy saving: Avoid Tx dummy blocks on empty PDCH TS
  * Fix crash with dyn TS when using direct pcu
  * Use LOGPDCH macro to standarize log line
  * cosmetic: sysmo: Drop unneded comment line
  * bts: Use public getter instead of class member
  * sched: Lower log level of RTS on disabled pdch
  * pdch: Make sure pending ImmAssRej scheduled for disabled pdch are dropped
  * Support Neighbor Address Resolution over PCUIF IPA multiplex
  * nacc_fsm: Move logic checking if SI is being waited for to a func helper
  * scheduler: Skip Tx DL idle blocks in TRX0 when not in DIRECT_PHY mode
  * PTCCH: skip Tx DL idle blocks when possible
  * tbf_ul_ass_fsm.c: Fix missing state transition in FSM description
  * tbf: poll_timeout(): Validate expected poll reason
  * nacc: Introduce helper function nacc_fsm_exp_ctrl_ack()
  * tbf: refactor poll_timeout() with a switch statement
  * tests: TbfTest: Fix wrong behavior in test_tbf_dl_reuse()
  * pdch: refactor rcv_control_ack() with a switch statement
  * cosmetic: Fix missing space
  * assert if tbf pointer for POLL event is NULL
  * tbf_fsm: Ignore event DL_ACKNACK_MISS in state RELEASING
  * tests: RLCMACTest: Add one more sample RA capabilities to suite
  * rlcmac: Fix CSN1 definition for DownlinkDualCarrierCapability_r7_t in MS RA cap
  * tbf: Assert if FSM allocation fails
  * sched: Rename function
  * pdch: Only release ULC entry if rx ul block matches the expected one
  * pdch: Validate poll reason matches in rcv_control_(egprs)_dl_ack_nack()
  * pdch: PktResReq: Avoid releasing ULC entry if expecting something else on UL
  * Handle Final UL ACK/NACK Confirmation in tbf_fsm
  * tbf_fsm: rename state NULL -> NEW
  * pdch_ulc: Log POLL reason upon timeout
  * tbf_dl_ass_fsm: Move block msg generation conditions to rts() function
  * tbf_ul_ass_fsm: Fix use of incorrect log macro
  * tbf_fsm: Handle MAX_N3105 in state ASSIGN
  * tbf: Use define to flag control_ts unset special value
  * tbf: Document temporary change of control_ts and move code assigning it back to FSM
  * Return void in tbf_assign_control_ts()
  * pdch: rcv_data_block: Avoid releasing ULC entry if expecting something else on UL
  * tbf: Avoid keeping poll nodes in pdch_ulc of temporary control_ts used during PACCH assignment
  * tbf_ul_ass_fsm: Avoid retrying Pkt Ul Ass if tbf is not in state ASSIGN
  * Abort scheduling of pending Pkt Ul Ass if tbf goes into RELEASE step
  * tbf: Drop pending polls during free also on states != ASSIGN
  * pdch: Simplify code path allocating UL TBF
  * pdch: Log reason of expected POLL when receiving unexpected UL data
  * bts_rcv_rach(): Gather pointers to data objects early and use them later
  * bts_rcv_rach(): Split code paths for Ass and Ass Rej
  * Get rid of tbf tsc field
  * ts_alloc: Rename s/tbf_/tbf/
  * tbf: Update FSM names when TFI change during tbf_update()
  * tbf_fsm: Add assert verifying X2002 only triggers for DL TBF
  * tbf: Assert if update() is called on UL TBF
  * tbf: update(): return negative val on error
  * tbf: Drop unneeded braces in one line condition
  * cosmetic: Fix typo in comment
  * pcuif: Submit data_req with len=0 as idle frames
  * Split csn1.c into common, enc and dec files
  * csn1: Add unit test showing RadioAccess Capability decoding failure
  * csn1: Avoid failing if optional DownlinkDualCarrierCapability_r7 is missing
  * csn1: Avoid storing existence bit as true if content was actually NULL
  * csn1_dec.c: Fix stored bit in CSN_NEXT_EXIST_LH
  * bts: Fix misleading log line in bts_rcv_rach()
  * tbf_ul: Document context where tbf_alloc_ul_ccch() is used
  * bts: Rename 11bit RACH request counter
  * vty: Avoid crash in tbf_print_vty_info with null ptr ctrg
  * vty: Log tbf_state when showing a TBF
  * vty: show tbf: Drop unneeded check for non-null ms
  * bts: Introduce new RACH req counters for one/two phase access
  * bts: Improve logging to clarify RACH req is for 2 phase access
  * bts: Count RACH Request with unexpected content
  * tbf: Increase log level of line about unable to allocate poll for TBF
  * pdch: Improve log line and increase log level
  * tbf_ul: Set first_(common_)ts in handle_tbf_reject
  * tbf: Set m_created_ts in constructor
  * tbf: Mark initial first_(common_)ts with special value
  * tbf: Set tfi to initial special value
  * bts: Add counters for successful 1,2 phase pkt access
  * tbf_ul: Update FSM names for dummy reject TBFs
  * cosmetic: Add parenthesis around expression to clarify it
  * pdch::rcv_resource_request(): Use local var to store bts pointer
  * tbf_ul: Improve documentation of tbf_alloc_ul_pacch()
  * Add counter for successful contention resolution procedures
  * doc: Update counters_generated.adoc using osmo_vty_interact.py
  * bts_pch_timer: Fix timer working only for MI type IMSI
  * tests/alloc: Extend test_bts_pch_timer() to validate MI type TMSI
  * bts_pch_timer: Avoid resend Paging Request over PCUIF if T3113 is armed
  * pdch: Log line detaching TBF at start of the function
  * pdch: Log TS enable/disable transitions
  * pdch: Log DL TBF originating the new UL TBF
  * ts_alloc: Simplify tfi_find_free logic
  * ts_alloc: rename function to clraify what it does
  * ts_alloc: rename variable to clarify meaning
  * pdch: Update ms_reserved_slots in GprsMS when TS becomes disabled
  * pdch: Drop previous UL TBF from MS who sent PktResReq through SBA
  * pdch: Increase log level of line informing about TS control change
  * tbf_ul_ass_fsm: Log both TBFs if old TBF is handling assignment for new one
  * cosmetic: gprs_pcu.h: Fix typo in comment
  * tbf_dl_ass_fsm: Log both TBFs if old TBF is handling assignment for new one
  * tbf_dl_ass_fsm: Fix missing transition to NONE if DL TBF is nonexistent
  * tbf_{dl,ul}_ass_fsm.c: use proper macro to log tbf
  * pcu_main: Mark -r cmdline param as deprecated
  * vty: Introduce command 'gsmtap-remote-host' and 'gsmtap-category enable-all'
  * Fix MS ending up with assigned imsi 000
  * bts: Add counter availablePDCHAllocatedTime
  * tbf_dl_ass_fsm: Drop unsued X2000 timer callback
  * T_defs_pcu: Set default val for X2000 to 0 ms
  * Move T3172 T_defs_bts->T_defs_pcu to have it configurable in VTY

  [ Alexander Couzens ]
  * gprs_bssgp_pcu: rework BSSGP Reset messages to support SGSN originated BSSGP-RESET
  * gprs_bssgp_pcu: ensure only known BVCI can be resetted by the SGSN
  * gprs_bssgp_pcu: add comments to the pcu states

  [ Harald Welte ]
  * pdch_ul_controller: Fix compiler warning on gcc-10.2
  * manual: remove revhistory, as we don't maintain it manually anyyway
  * manual: Update copyright years
  * vty: Add configuration for Gb DSCP and socket priority
  * manual: Include QoS chapter and add osmo-pcu specific example

  [ Vadim Yanitskiy ]
  * gprs_rlcmac_sched: fix incorrect length for CTR_RLC_DL_BYTES
  * PCUIF protocol: add message definition for interference report
  * pcu_l1_if: ignore PDCH interference reports, do not log errors

  [ Oliver Smith ]
  * test: add 'make update_exp' target
  * Add counters: pcu.sgsn.N.rx_paging_{cs,ps}
  * Add counters: pcu.bts.N.pch.requests
  * Add counters: pcu.bts.N.pch.requests.timeout
  * bts: delete pch_timer list in destructor
  * tests: make update_exp: build check_PROGRAMS first
  * debian/control: remove dh-systemd build-depend
  * Add stats: pcu.bts.N.pdch.available/occupied
  * Add stats: pcu.bts.N.pdch.occupied.gprs/egprs
  * pdch: has_gprs_only_tb_attached: use m_num_tbfs

  [ Neels Hofmeyr ]
  * T_defs_bts: remove unit from doc strings
  * Revert "Stop abusing T3169"
  * fix: handle NULL return of as_dl_tbf() and as_ul_tbf()
  * coverity: fix null deref from recent UL TBF leak fix

  [ Daniel Willmann ]
  * gprs_bssgp_pcu: Fix crash when configuring an existing ns bind

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 16:47:29 +0100

osmo-pcu (0.9.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * Pass paging group instead of imsi where later is not needed
  * Allow Gb PAGING-PS without P-TMSI
  * Support Gb PAGING-CS
  * Support PAGING-CS and PAGING-PS on on PTP-BVCI
  * tests/rlcmac: print test name at the start
  * tests/rlcmac: Memzero decoded struct
  * tests/rlcmac: Fix missing commas with unexpected results
  * tests/rlcmac: Use osmo_hexdump to print buffers
  * tests/rlcmac: Don't check stderr output
  * tests/rlcmac: Add test to showcase that decode_gsm_ra_cap() fails
  * csn1: Extend CSN_SERIALIZE to allow 0 bit of length
  * csn1: Allow CHOICE elements to re-process the bits used for the choice
  * csn1: Fix pedantic compiler warnings in csn.1 dissectors
  * csn1: Drop format_p union from CSN_DESCR
  * gsm_rlcmac.cpp: Fix trailing whitespace
  * cosmetic: csn1.cpp: Fix whitespace
  * csn1.cpp: Rework ProcessError() function to print errors
  * rlcmac: Return error code from csn1 encoder/decoder
  * Check return code of rlcmac decode/encode functions
  * rlcmac: Transform a few LOGPC messages to LOGP
  * Fix trailing newline mess with LOGP(C) in rlcmac/csn1
  * llc_queue::{dequeue,enqueue}() refactor
  * gsm_rlcmac: fix Packet_Resource_Request_t: s/Slot/I_LEVEL_TN/
  * tests/llc: Change unrealistic time jump to avoid runtime error under ARM
  * Use clock_gettime(CLOCK_MONOTONIC) and timespec everywhere
  * Use downlink BSSGP RA Cap IE
  * tests/RLCMACTest: free allocated bitvectors
  * tests/RLCMACTest: Several fixes and improvements to RAcap tests
  * rlcmac: Don't pass array element to CSN1 descriptors
  * csn1: Validate recursive array max size during decoding
  * rlcmac: Fix bug receiving RA cap
  * rlcmac: Log names of de/encoded rlcmac packet types
  * rlcmac: Introduce MS Radio Access Capabilities 2 to fix related spare bits
  * cosmetic: rlcmac: Fix comment typo and whitespace introduced recently
  * rlcmac: Rename field to MS RA Cap2 in Additional_MS_Rad_Access_Cap_t
  * pcu_l1_if.cpp: Add missing header ctype.h
  * gsm_rlcmac: Use 'struct bitvec' instead of 'bitvec'
  * cosmetic: Do not indent header includes inside extern C block
  * gsm_rlcmac.cpp: Avoid declaring variable in for loop
  * csn1.h: Fix trailing whitespace
  * tbf.cpp: Include c++ <new> header required for new operator's replacement type
  * gsm_rlcmac: Disable unused CSN1 descriptors
  * Move gsm_rlcmac.cpp -> .c
  * rlcmac: support decode FDD_CELL_INFORMATION of "UTRAN FDD Description
  * rlcmac: add dissection of 2G->3G/4G PS handover
  * csn1: Fix Several typos & whitespace
  * csn1: verify enough bits present to decode whole CSN_UINT_ARRAY
  * csn1: Properly verify CSN_BITMAP length
  * csn1: Remove code block from CSN_NEXT_EXIST_LH
  * pcu_l1_if: Don't use GSMTAP_CHANNEL_PACCH when sending unknown gsmtap blocks
  * pdch: Avoid sending GSMTAP_CHANNEL_UNKOWN for rejected UL EGPRS data block
  * tbf: Avoid crash: don't set TBF window size if setup failed
  * bts: Rename mslot_class_from_ra
  * bts: Fix Decoding EGPRS MultislotClass from 11-bit EGPRS PACKET CHANNEL REQUEST
  * bts: Return uint8_t in egprs_mslot_class_from_ra()
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * Expect ms object to exist before calling tbf_alloc_ul_tbf()
  * Expect ms object to exist before calling tbf_alloc_dl_tbf()
  * pdch: rcv_resource_request(): Clarify tbf_free only needed if MS used to exist beforehand
  * Drop unneeded arg 'ta' in tbf_alloc_ul()
  * bts: Drop specific functions to increase counters
  * bts: Drop specific functions to add values to counters
  * bts: Drop specific functions to add values to stats
  * pcu: tbf_ul: Clean up maybe_schedule_uplink_acknack()
  * sysmo: femtobts.h: Avoid redefining global variables
  * rlc: Drop unused function gprs_rlc_data::put_data
  * rlc: Move prepare() function out of gprs_rlc_data struct
  * tbf_ul: Fix UL ACK not sent to MS if intermediate UL block is lost
  * Get rid of class GprsCodingScheme
  * gsmtap: Set signal level and SNR fields
  * gprs_ms: Small clean ups in IMSI storage related code
  * gprs_ms: Transfer known EGPRS MS class when mergling old MS
  * tbf: Drop unneeded method set_tlli_from_ul
  * pdch.cpp: Fix logging line format in rcv_block wrong length
  * Set correct GSMTAP channel type for PDTCH messages returning error
  * decoding.cpp: Improve logging in malformed UL data parsing
  * tbf_dl: uint8_t is enough to store a TA value
  * encoding: Encode TA as unsigned and check validty against GSM48_TA_INVALID
  * encoding.cpp: Fix missing spacing in function param
  * pdch.cpp: Avoid dropping existing DL TBF during rcv_resource_request
  * pdch.cpp: Avoid resetting (egprs_)ms_class to unknown if not found in MS RadioAccCap
  * pdch.cpp: Fix wrong annoying log line about non-scheduled ResourceReq received
  * pdch.cpp: Store TLLI promptly on newly created TLLI in rcv_resource_request
  * Fix typo in log message
  * pdch: Drop unneeded notice log message in rcv pkt meas report
  * Introduce log macro helper LOGPMS
  * configure.ac: Fix trailing whitespace
  * doc: Update VTY reference xml file
  * Support setting rt-prio and cpu-affinity mask through VTY
  * pdch: rcv pkt meas rep: Allocate MS object early in path and use it
  * Fix recent typo preventing MS from registering
  * gitignore: Add __pychache__ dir
  * tbf: Don't log rlcmac_diag() output in separate lines
  * gprs_ms_storage.h: Set pointer to NULL instead of 0
  * Free all MS TBFs when receiving GPRS Suspension Request
  * cosmetic: fix indentation alignment
  * vty: Add 'show bts pdch' command
  * cosmetic: Fix indentation of for loops
  * cosmetic: Fix typo in comment
  * Fix crash accessing NULL tbf->pdch[first_ts]
  * contrib/jenkins: Enable parallel make in make distcheck
  * Improve debug logging for alloc algos
  * Fix several calls to LOGPAL
  * Move gprs_rlcmac_ul_tbf::window to correct file
  * Move constructor gprs_rlcmac_dl_tbf::BandWidth to correct file
  * tbf: Make window() available to tbf base class
  * tbf: Implement enable_egprs() once
  * tbf: Set MS during constructor time
  * Move ul_tbf allocation code to correct file
  * Move dl_tbf allocation code to correct file
  * tbf: Drop unused function disable_egprs()
  * tests: ms: Pass correct pointer in constructor instead of NULL
  * tbf: Clean up gprs_rlcmac_dl_tbf::handle()
  * alloc_algo_b: Select TRX with least assigned TFIs during TBF alloc
  * bts: define egprs_enabled as bool
  * cosmetic: Fix ws between if keyword and parenthesis
  * tbf_dl: Update (egprs_)ms_class for already known MS
  * cosmetic: tests: pcu_emu: fix trailing whitespace
  * gprs_ms: Use proper function to get CS
  * Move BTS initial values inside bts.cpp
  * pcuif: Improve BTS-supported CS/MCS handling
  * Move EGPRS MS mode set to gprs_ms.cpp
  * Take into account BTS supported (M)CS values when retrieving the maximum
  * Enable egprs support through PCUIF from BTS/BSC
  * pdch: Process received CS1-4 data blocks regardless of egprs_enabled
  * tbf_dl: Don't fake EGPRS MS class when no related info is available
  * tbf_ul: Allow non-egprs phones if EGPRS is enabled
  * Get rid of bts->egprs_enabled
  * Fix configuration of initial_(m)cs
  * Fix mcs_is_valid(): UNKNOWN value is not a valid (M)CS
  * gprs_ms: Avoid enabling EGPRS if no MCS are supported
  * tbf_ul: Log mismatching TLLI on log message
  * Fix ctr reports: Remove ctr description from already removed counter
  * encoding: Fix duplicate word in log str
  * sched: Fix sending GSMTAP DL data blocks with unset USF
  * sched: Use correct GMSTAP category for EGPRS DL data blocks
  * Support multiplexing of GPRS and EGPRS TBFs in one PDCH
  * pdch: packet_paging_request: Put back non-fitting paging entry where where it was
  * pdch: Log hexdump of decde failure for dl rlcmac block
  * csn1: Fix readIndex pointer change in CSN_VARIABLE_ARRAY
  * csn1: Log CSN_VARIABLE_ARRAY values as hex
  * main: generate coredump and exit upon SIGABRT received
  * tbf: Log previous TS when changing Control TS
  * Implement downgrade to DL MCS1-4 when USF for GPRS_only MS
  * Dl TBF: Get rid of LLC UI dummy blocks following other data
  * rlcmac: Fix typo in MT_PACKET_CELL_CHANGE_NOTIFICATION value_string
  * gprs_rlcmac_sched: Use helper structure to store several tbf pointer params
  * sched: Convert code handling next_list array to be size independant
  * Convert GprsMS and helpers classes to C
  * tbf: Fix wrong verb used in log message
  * .gitignore: ignore files ending with ~
  * doc: Improve CS/MCS GPRS/EGPRS considerations in User Manual
  * tbf: remove 'software error' logs from tbf_free
  * ms: Replace struct var with rate_ctr
  * AllocTest: Avoid queuing tons of to-be-freed ms
  * gprs_ms: Mark ms_ctrg_desc static
  * Workaround ASan false positive runtime errors under some platforms
  * Split PCU global PCU object from BTS object
  * Move T_defs_pcu from BTS to PCU object
  * Move force_two_phase field from BTS to PCU
  * Move alpha,gamma fields from BTS to PCU
  * Move dl_tbf_preemptive_retransmission field from BTS to PCU
  * Move dl_arq_type field from BTS to PCU
  * Move cs_adj* fields from BTS to PCU
  * Move cs_downgrade_threshold field from BTS to PCU
  * Move (m)cs_lqual_ranges fields from BTS to PCU
  * Move ns_dialect field from BTS to PCU
  * Move fc_* fields from BTS to PCU
  * tests/tbf: Allocate PCU per test instead of globally
  * Move ws_* fields from BTS to PCU
  * Move llc_* fields from BTS to PCU
  * Fix configuration mess of initial_cs/mcs between PCUIF and VTY
  * Unify BTS into a C usable structure
  * Get rid of bts singletons
  * Rename 'bts_data' leftovers to 'bts'
  * bts: combine bts_{init,cleanup} into consturctor/destructor methods
  * Get rid of unused gsm_timer.{cpp,h}
  * Convert gprs_bssgp_pcu.cpp to C
  * Move tbf::free_all static methods to proper object files
  * Convert osmo_bts_sock.cpp to C
  * Allow multiple bts objects in PCU
  * bts: Store RAC+CI from info_ind
  * Get rid of singleton gprs_bssgp_pcu_current_bctx()
  * Initial handling support for RIM messages
  * gprs_pcu: Use libosmocore osmo_cgi_ps_cmp API
  * ms: Drop always-false check
  * sched: Check if egprs is enabled in TBF rather than MS being egprs capable
  * tbf: Drop always-true condition checking for MS
  * encoding: fix typos in comment
  * ms: Set proper initial MCS values setting mode EGPRS_GMSK
  * ms: Properly handle EGPRS_GMSK mode in ms_max_cs_dl/ul()
  * Fix Dl EGPRS data blocks being generated occasionally on GPRS TBFs
  * sched: Avoid picking TBF with nacked dl blocks when GMSK is required
  * tbf: Make tbf_ms() param const
  * Introduce NACC support
  * NACC: Fix crash freeing struct if CTRL conn was refused during alloc
  * NACC: delay CTRL conn socket init until it's needed
  * NACC: allow setting keep time for entries in neigh and si cache
  * NACC: Configure neighbor and SI resolution timeout values
  * NACC: Send only Pkt Cell Chg Continue if SI retrieve fails
  * doc: Mark PCU node red in network node diagram
  * doc: Introduce section documenting NACC support
  * nacc: Improve log line failing to establish CTRL neigh conn
  * Update TS 04.60 references to new TS 44.060
  * Drop comment about an already implemented TODO
  * Move src/tbf.txt to doc/
  * encoding: Fix comment description of S/P field
  * tbf: Reuse stored result in variable in check_polling()
  * tbf: Constify some methods
  * nacc: Fix typo in function name
  * nacc: Implement Pkt Cell Change Continue retransmission
  * nacc: Avoid RIM procedures targeting cells under same PCU
  * rlc.h: Fix struct bit fields on big endian systems
  * cosmetic: fix typo in comment
  * nacc_fsm: Move code filling struct to helper function
  * nacc_fsm: Remove NACC_EV_RX_SI from in_event_mask of some states
  * nacc_fsm: Support receiving Pkt Cell Change Notify in state WAIT_RESOLVE_RAC_CI
  * nacc_fsm: nacc_fsm: Support receiving Pkt Cell Change Notify in state WAIT_REQUEST_SI
  * nacc_fsm: Support receiving Pkt Cell Chg Notif while in some advanced states
  * nacc_fsm: Improve log when sending RIM RAN-INFO to gather SI from remote cell
  * vty: Write 'neighbor resolution' config to file
  * cosmetic: fix line indentation
  * sched: Avoid selecting TBF to tx NACC Dl msg if no TFI is assigned
  * tests: Explicitly drop category from log
  * tests: Replace deprecated API log_set_print_filename
  * Use NULL as default value for pointer type
  * find_multi_slots: Avoid calling mslot_class_get_tx() on each iteration
  * find_multi_slots: Avoid multiple calls to mslot_class_get_rx()
  * find_multi_slots: Mark mslot_class properties const
  * find_multi_slots: Avoid multiple calls to mslot_class_get_type()
  * Use ALPHA value received in SI13 from PCUIF

  [ Vadim Yanitskiy ]
  * pcu_l1_if.cpp: fix NULL-pointer dereference in imsi2paging_group()
  * gsm_timer: fix comparison of constant LONG_MAX with an integer
  * encoding: fix log_alert_exit(): do not treat error as format string
  * tests/alloc: fix implicit conversion from 'double' to 'int8_t'
  * gprs_bssgp_pcu: fix invalid use of non-static data member 'frame'
  * gprs_bssgp_pcu: fixup: fix length check in gprs_bssgp_pcu_rx_dl_ud()
  * csn1: fix csnStreamDecoder(): avoid conditional calls to bitvec_read_field()
  * VTY: get rid of pcu_vty_go_parent() / pcu_vty_is_config_node()
  * VTY: install talloc context introspection commands
  * pcu_sock: fix memleak, allocate pcu_sock_state on stack
  * pcu_sock: cosmetic: fix typo in a comment message
  * tbf: cosmetic: fix spacing in gprs_rlcmac_tbf::create_ul_ass()
  * tbf: fix NULL pointer dereference in create_[ul|dl]_ass()
  * encoding: assert return value of bitvec_set_u64()
  * csn1: fix some mistaken CSN.1 error names
  * csn1: fix csnStreamDecoder(): catch unknown CSN_CHOICE values
  * tests/rlcmac: mark Packet Polling Request as malformed
  * csn1: fix existNextElement(): use bitvec_get_bit_pos()
  * tests/rlcmac: additionally match debug output of the CSN.1 codec
  * csn1: get rid of C++ specific code, compile with GCC
  * csn1: fix csnStreamDecoder(): do not subtract no_of_bits twice
  * csn1: fix csnStreamDecoder(): always keep remaining_bits_len updated
  * csn1: fix csnStreamDecoder(): update bit_offset in CSN_EXIST{_LH}
  * csn1: bitvec_get_uint() may return a negative, use %d
  * csn1: use proper format specifier for unsigned integers
  * gsm_rlcmac: fix misleading LOGP statement in decode_gsm_ra_cap()
  * tests/rlcmac: fix malformed MS RA capability in testRAcap()
  * tests/rlcmac: also verify encoding of MS RA Capability
  * tests/rlcmac: add a new test vector for Packet Resource Request
  * csn1: fix csnStreamDecoder(): skip bits unhandled by serialize()
  * tests/rlcmac: also enable logging for DRLCMACDATA category
  * rlcmac: fix encode_gsm_*(): do not suppress encoding errors
  * csn1: fix: do not return 0 if no bits left in the buffer
  * BSSGP: cosmetic use OSMO_IMSI_BUF_SIZE from libosmocore
  * BSSGP: fix: properly encode P-TMSI in RR Paging Request
  * pdch: fix packet_paging_request(): properly print paging MI
  * pdch: cosmetic: use GSM_MI_TYPE_* constants from libosmocore
  * fix: properly include pure C headers from C++ code
  * l1if: fix pcu_rx_rach_ind(): use proper format string specifiers
  * sba: fix possible memleak in SBAController::alloc()
  * TBF/UL: fix rcv_data_block_acknowledged(): print the actual TLLI
  * fix egprs_mslot_class_from_ra(): multislot class may not be present
  * l1if: fix: s/pcu_rx_rach_ind_pdtch/pcu_rx_rach_ind_ptcch/g
  * csn1: fix M_CHOICE: restirct maximum length of the choice list
  * csn1: fix csnStreamEncoder(): also check length of the choice list
  * csn1: fix csnStreamEncoder(): always check the choice index
  * csn1: fix: never use enumerated types in codec structures
  * encoding: cosmetic: use RLC_MODE_ACKNOWLEDGED where possible
  * RLC/MAC: implement decoding of EGPRS Packet Channel Request
  * encoding: fix write_ia_rest_egprs_uplink_sba(): add missing CHECK(rc)
  * doc/manuals: fix typo in overview.adoc: s/Omsocom/Osmocom/g
  * bts: refactor handling and parsing of RACH.ind
  * BTS::parse_rach_ind(): properly handle EGPRS Packet Channel Request
  * bts: add send_gsmtap_rach(), also send PTCCH/U over GSMTAP
  * bts: fix send_gsmtap_rach(): properly pack 11 bit RA
  * bts: cosmetic: use DUMMY_VEC for padding where possible
  * encoding: drop log_alert_exit(), use OSMO_ASSERT() instead
  * encoding: assert() presence of Downlink TBF
  * direct-phy: fix handle_ph_ra_ind(): handle PH-RA.ind on PRACH SAPI
  * debian/control: change maintainer to the Osmocom team / mailing list
  * pcu_l1_if: use proper format specifier for PCUIF version
  * pcu_l1_if: constify the argument of pcu_rx_info_ind()
  * pcu_l1_if: cosmetic: rename both 'trx'/'ts' to 'trx_nr'/'ts_nr'
  * pcu_l1_if: cosmetic: move struct 'gprs_rlcmac_pdch' into the for loop
  * pcu_l1_if: cosmetic: correct error message in pcu_rx_info_ind()
  * gsm_rlcmac: use consistent naming for [Extended] Packet Timing Advance
  * tbf: cosmetic: use GSM_MACBLOCK_LEN where possible
  * tbf: allocate the bitvec on stack in create_{dl,ul}_ass()
  * encoding: constify 'tbf' in UL/DL assignment functions
  * encoding: do not encode out of range Timing Advance values
  * encoding: fix RRBP field in write_packet_uplink_assignment()
  * encoding: use bool for use_egprs in write_packet_uplink_assignment()
  * encoding: pass pdch slot directly to encoding functions
  * encoding: clarify docstring for write_packet_downlink_assignment()
  * encoding: use CSN.1 codec to generate Packet Uplink Assignment
  * encoding: implement handing of hopping parameters
  * encoding: fix gen_freq_params(): do not check pdch twice
  * pcuif_proto: version 10: add frequency hopping parameters
  * pcu_l1_if: cosmetic: use ARRAY_SIZE() in pcu_rx_info_ind()
  * pcu_l1_if: correct logging level in pcu_rx_info_ind()
  * pcu_l1_if: cosmetic: make {local,remote}_sockaddr scoped variables
  * pcu_l1_if: use proper format string specifiers: %d -> %u
  * pcu_l1_if: print NSVC address in more common format
  * gprs_bssgp_pcu: make osmo_sockaddr local/sgsn arguments const
  * gprs_bssgp_pcu: fix possible memleak in gprs_nsvc_create_and_connect()
  * struct gprs_rlcmac_bts: remove unused 'nsei' field
  * gprs_bssgp_pcu: fix: do not crash on receipt of subsequent INFO.ind
  * doc/manuals: (re-)generate XML VTY reference automatically
  * fix tbf_select_slot_set(): use LOGP() instead of LOGPC()
  * main: remove line breaks in print_help(), increase spacing
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * BSSGP: use tlvp_val8() in gprs_bssgp_pcu_rx_paging_cs()
  * BSSGP: constify argument 'tp' of gprs_bssgp_pcu_rx_paging_{cs,ps}
  * TLLI 0x00000000 is a valid TLLI, use 0xffffffff instead
  * gprs_rlcmac_sched: fix incorrect SBA frame number assignment
  * bts: fix uninitialized memaccess in BTS::send_gsmtap_rach()
  * bts: fix uninitialized memaccess in BTS::send_gsmtap()
  * tests/rlcmac: add more test vectors for Packet Resource Request
  * contrib/osmo-pcu.spec.in: require libosmo* version 1.4.0
  * contrib/osmo-pcu.spec.in: add missing libosmoctrl dependency
  * vty: register libosmocore's FSM introspection commands

  [ Anders Broman ]
  * csn1: Update M_NULL CSN_DESCR to match wireshark
  * csn1: packet-csn1.c:179: warning: 'pui8' may be used uninitialized in this function
  * csn1: Fix warning with -Wmissing-prototypes
  * csn1: Try to fix cast discards '__attribute__((const))' qualifier from pointer target type
  * gsm_rlcmac.cpp: hanged all M_BIT macros to M_UINT, as M_BIT does not use the referenced hf.

  [ Jeff Morriss ]
  * csn1: shuffle decrements of remaining_bits_len

  [ Pascal Quantin ]
  * csn1: Fix an infinite loop in CSN.1 dissector when having more than 255 padding bits
  * gsm_rlcmac.h: Remove Uplink messages from the RlcMacDownlink_t structure
  * gsm_rlcmac: Enhance dissection of PSI1
  * gsm_rlcmac.cpp: Do not skip too many lines of the CSN_DESCR when the field is missing
  * gsm_rlcmac.cpp: fix an out of bounds access
  * gsm_rlcmac.cpp: fix another global-buffer-overflow error reported by ASAN
  * gsm_rlcmac.cpp: fix global-buffer-overflow error reported by ASAN

  [ Guy Harris ]
  * csn1: Don't cast away constness

  [ Alexis La Goutte ]
  * csn1: fix this statement may fall through [-Werror=implicit-fallthrough=] found by gcc7

  [ Bill Meier ]
  * gsm_rlcmac.h: #if 0 unused stuff

  [ Gerald Combs ]
  * gsm_rlcmac.h: Make sure we have a corresponding 'u' member to RlcMacDownlink_t for every call

  [ Vincent Helfre ]
  * gsm_rlcmac: add dissection of NAS container
  * gsm_rlcmac: improve dissection of MS RA Capability IE

  [ AndersBroman ]
  * gsm_rlcmac: Update : PACKET RESOURCE REQUEST to Release 14.0.0

  [ Keith ]
  * Send UL-CTRL Packet to GSMTAP even if we fail to decode.
  * Don't check ul_control_block before decoding into it.

  [ Harald Welte ]
  * csn1.c: Almost all of the logging is DEBUG, not NOTICE
  * TODO: remove those that have obviously been implemented 5+ years ago
  * bts.cpp: Increase constructor priority
  * Use osmo_fd_setup() whenever applicable
  * Use osmo_fd_*_{disable,enable}
  * gb manual: 08.16 -> 48.016 / 08.18 -> 48.018
  * gb manual: NS is implemented in libosmogb, not libosmocore
  * manuals/gb/ns.adoc: Update documentation regarding SNS capability
  * migrate to DLBSSGP as log sub-system for BSSGP

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer
  * tbf: add virtual destructor

  [ Philipp Maier ]
  * gprs_debug: Use only LOGL_NOTICE as default loglevel
  * vty: add attributes to VTY commands indicating when they apply
  * pcu_main: add commandline option --vty-ref-xml
  * gprs_bssgp_rim: add serving BSS NACC application

  [ Oliver Smith ]
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
  * contrib/jenkins: don't build osmo-gsm-manuals
  * configure.ac: set -std=gnu11

  [ Neels Hofmeyr ]
  * use new osmo_mobile_identity api (avoid deprecation)
  * paging: pass struct osmo_mobile_identity, not encoded IE bytes

  [ Alexander Couzens ]
  * pcuif_proto: version 0xa: add support for IPv6 NSVCs
  * Revert "pcuif_proto: version 0xa: add support for IPv6 NSVCs"
  * pcuif_proto: version 10: add support for IPv6 NSVCs
  * Use the new NS2 lib
  * Rework NS configuration over the info indication
  * pcu_l1_if: fix misaligned assignment of remote address
  * NS2: follow the change of ownership
  * gprs_bssgp_pcu: follow ns2 library changes
  * NS2: rework handling of unknown primitive
  * ns2: follow ns2 dialect changes
  * ns2: follow changes to add a unique name to all binds
  * ns2: follow ns2 sns api changes
  * gprs_ns2: set default dialect to ipaccess
  * gprs_rlcmac_sched: don't leak a sched_dummy()
  * gprs_rlc_ts_alloc: ensure no rolling slots are allocated
  * follow gprs_ns2 API enum changes
  * gprs_ns2: migrate to the new vty syntax
  * gprs_bssgp: rework and rename ns_create_nsvc -> ns_configure_nse
  * gprs_bssgp: rename gprs_ns_config -> gprs_ns_update_config
  * gprs_bssgp: use gprs_ns2_sns_add_bind() to allow the NSE to use the binds for IP-SNS configuration

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 14:41:00 +0100

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
