osmo-bsc (1.5.0) unstable; urgency=medium

  [ Max ]
  * LCLS: constify helper parameters
  * LCLS: use libosmocore function to add status
  * nanobts: use libosmocore's osmo_store*() for OML attr. patching

  [ Philipp Maier ]
  * lchan_select: dont allow half rate EFR to be selected
  * lchan_select: Do not unsolicitedly select a TCH/F
  * bsc_vty: add vty command to display all lchans
  * bsc_vty: add features to disable specific lchans via vty
  * assignment_fsm: fix channel allocator preferences
  * assignment_fsm: use activate.info.s15_s0 for ASS. COMPL.
  * handover_fsm: copy old S15_S0 to new lchan
  * osmo_bsc_msc: Use meaningful amr rate configuration on BTS level
  * codec_pref: fix special handling for AMR rate configuration  (S15-S0)
  * lchan_fsm: make sure multi rate configuration is valid
  * lchan_fsm: do not include 12.2k in active set on HR channels
  * AMR: Signal usage of octet-aligned or bandwith-efficient mode to MSC
  * lchan_fsm: add missing header file.
  * osmo_bsc_bssap: check bssmap length field
  * rest_octets: add Serving Cell Priority Parameters

  [ Neels Hofmeyr ]
  * abis_rsl: Fix TCH-as-SDCCH allocation on Channel Request
  * handover_fsm: do not access conn->assignment.req, it may be outdated
  * comments: clarify usage of conn.assignment and .handover scopes
  * cosmetic: drop unused struct mgcp_ctx shadow
  * incoming connect: don't crash if calling addr is missing
  * log N-CONNECT from MSC
  * Revert "assignment_fsm: Properly support assigning signalling mode TCH/x"
  * fix log line end in assignment_fsm.c
  * avoid use-after-free: on MGW endpoint dealloc, also forget it in conn->ho.*
  * lchan activation: add explicit encryption info to activation
  * Handover Request: also parse Chosen Algorithm IE, pass to lchan activation
  * fix inter-BSC-HO-incoming for AoIP (1/2)
  * use libosmocore osmo_tdef
  * move mgw endpoint FSM to osmo-mgw.git
  * fix inter-BSC-HO-incoming for AoIP (1/2)
  * fix inter-BSC-HO-incoming for AoIP (2/2)
  * abis_rsl.c: missing newlines on log lines
  * doc/manuals: review and tweak handover docs
  * make bsc_clear_request() static
  * doc/manuals, vty doc: more handover doc clarifications
  * remove double BSSMAP Clear on HO failure
  * comment and VTY doc tweaks
  * silence error for "invalid enum handover_scope value: none"

  [ Harald Welte ]
  * gsm_data: Add gsm_bts_name() just like we have gsm_{trx,ts,lchan}_name()
  * manual: It's not "A over SCCP" but "BSSAP over SCCP"
  * manual: Add sections on 3G/4G neighbor cells
  * manual: Re-order chapters in more logical order
  * manual: s/OsmoNITB/OsmoBSC/ in examples; remove E1 based BTSs
  * manual: Remove bogus "Control interface" sub-section in overview
  * Implement CSFB "Fast Return" Handling at RR RELEASE
  * OML: Fix encoded length value of OML GET ATTRIBUTES
  * Make sure to default to AMR octet-aligned mode
  * abis_rsl: Add support for extended CBCH to rsl_sms_cb_command()
  * abis_rsl: Avoid "Unimplemented" log message for every CBCH LOAD IND
  * abis_rsl: Fix log message about unimplemented common channel msg
  * smscb: Allow transmit of SCHEDULE and DEFAULT SMSCB
  * chan_alloc: Don't include CBCH channels in load computation
  * keep per-BTS stat_items about RACH busy / RACH access percentage
  * vty: Dump per-bts stat_item group in 'show bts' output
  * Allow VTY to set the CCCH Load Indication Threshold
  * rx_fail_evt_rep(): Don't recycle variable
  * Re-introduce support for IPA-encapsulated MGCP
  * logging: introduce LOG_BTS and LOG_TRX and use it everywhere
  * vty: Fix typo in VTY command descrption -> description

  [ Pau Espin Pedrol ]
  * ipaccess/Makefile.am: Remove unneeded libmgcp-client dep
  * Move LCLS references from gsm_data to osmo_bsc_lcls
  * Move msc related code from gsm_data to bsc_msc
  * ipaccess/Makefile.am: Remove unneeded libosmo-sigtran dep
  * net_init.c: remove unneeded header
  * configure.ac: Add flag to enable/disable build of ipaccess related utils
  * src/utils/Makefile.am: Drop unneeded sigtran and mgcp-client deps
  * fix another log line end in assignment_fsm.c
  * Drop unused old osmux leftover code
  * vty: Add option to enable osmux towards MSC
  * bssap: Detect MSC Osmux support on RESET (ACK) recv
  * bssap: Announce Osmux support on RESET (ACK) send
  * bssap: Parse Osmux CID on BSSAP Assign Req recv and use it in MGCP
  * bssap: Feed Assign Complete with Osmux CID retrieved from MGW
  * lcls: Fix MDCX with garbage on LCLS loop break
  * Introduce msc_is_{sccplite,aoip}() helpers
  * bsc: Append Osmux Support IE only on AoIP
  * Remove extern declarations of libosmovty symbols
  * bsc_subscr_conn_fsm: Use gscon_bssmap_clear() helper on send failure
  * bsc_subscr_conn_fsm: Log Tx of BSSMAP Clear Request with cause
  * doc: Add Osmux documentation to User Manual
  * Remove undefined param passed to logging_vty_add_cmds

  [ Sylvain Munaut ]
  * assignment_fsm: Properly support assigning signalling mode TCH/x
  * assignment_fsm: Properly support assigning signalling mode TCH/x

  [ Vadim Yanitskiy ]
  * abis_nm.c: use proper format specifiers for BTS / TRX number
  * abis_nm.c: also print TRX number in abis_nm_get_attr()
  * abis_nm.c: use abis_nm_ipa_magic from libosmocore
  * abis_nm.c: use msgb_lv_put() to put abis_nm_ipa_magic
  * abis_nm.c: fix broken logging in abis_nm_rx_ipacc()
  * gsm_data.c: use REG_NOSUB flag of regcomp()
  * osmo_bsc_lcls.c: cosmetic: make Coverity happy
  * ipaccess-config: use POSIX regex for Unit ID format check
  * handover_fsm.c: fix: prevent possible buffer overflow

  [ Daniel Willmann ]
  * doc: Add generic counter chapter in manual
  * manuals: Fix example config to reflect OsmoBSC commands
  * Change comments/strings from OpenBSC to OsmoBSC
  * gsm_data.h: Remove unused variable from OpenBSC times
  * Revert "fix inter-BSC-HO-incoming for AoIP (1/2)"
  * manuals: Update generated VTY reference and counters
  * manuals: Add script to update vtr/counter documentation from docker

  [ Oliver Smith ]
  * debian: create -doc subpackage with pdf manuals
  * contrib/jenkins.sh: run "make maintainer-clean"
  * contrib/jenkins.sh: "maintainer-clean" after "publish"
  * osmo-bsc.cfg: work with osmo-bts example cfg

  [ Eric Wild ]
  * vty: adjust config name for unit-id
  * turn -Werror=null-dereference into a warning

  [ Ruben Undheim ]
  * Fix some spelling errors found by lintian

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 20:42:06 +0200

osmo-bsc (1.4.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * inter-BSC HO: add neighbor_ident API to manage neighbor-BSS-cells
  * inter-BSC HO: neighbor_ident API: drop 9bit BSIC
  * doc: update/fix FSM charts
  * fix / clarify rsl dtap cache
  * rename gsm_04_08_utils.[hc] to gsm_04_08_rr
  * cosmetic: move RR functions from bsc_api.c to gsm_04_08_rr.c
  * add gsm_timers, for Tnnn definitions usable by FSMs
  * large refactoring: use FSMs for lchans; add inter-BSC HO
  * fix nanobts: timeslot FSM: use flags to remember OML,RSL status
  * fix: dispatch TS_EV_RSL_DOWN when losing RSL
  * timeslot FSM: fix infinite recursion on failure to send PDCH ACT
  * timeslot FSM: permit entering broken state from anywhere
  * cosmetic: FSMs: allow ignorable events
  * fix BSC_CTR_ASSIGNMENT doc strings
  * lchan_fsm: split off lchan_rtp_fsm, establish RTP a bit earlier
  * lchan_fsm: add in_release_handler flag
  * allocate larger lchans if no SDCCH are available
  * create separate logging categories for lchan,ts,as FSMs
  * cosmetic: constify gsm_bts_num() net arg
  * vty: 'handover any': pick more random chans, use lchan_select_by_type()
  * cosmetic: dissolve bsc_api.c
  * cosmetic: reduce bsc_api.h
  * cosmetic: rename bsc_api.h to gsm_08_08.h
  * cosmetic: rename osmo_bsc_api.c to gsm_08_08.c
  * cosmetic: gscon: don't re-enter ST_CLEARING
  * use __FILE__, not __BASE_FILE__
  * fix lchan_rtp_fsm: missing event handling
  * MGCP: add 'X-Osmo-IGN: C' for SCCPlite by default
  * cosmetic: neighbor_ident_vty.c: add and use common string defs
  * neighbor_ident_vty.c: fix CI format, should be 16bit
  * inter-BSC HO incoming: continue despite missing Classmark
  * inter-BSC HO incoming: drop old/wrong RTP port code
  * lchan_fsm: lchan_fail_to(): store target state early
  * cosmetic: lchan_fsm failure: log about state transitions
  * lchan_fsm: safer 'concluded' flag
  * log: lchan_rtp_fsm: add missing '\n'
  * log: 'sending BSSMAP HO Request ACK'
  * inter-BSC HO: send failure msg directly
  * log: tweaks and more context in osmo_bsc_sigtran_send()
  * fix dependency bug: include mgcp_client/, not mgcp/
  * cosmetic: lchan activ: no need to clear mr again
  * cosmetic: lchan activ: drop todo comments
  * lchan: pick proper power and ta values
  * SCCPlite Assignment Complete: include Speech Codec (Chosen)
  * inter-BSC HO incoming: send BSSMAP HO Complete directly
  * inter-BSC HO outgoing: fix L3 forwarding
  * ho fsm: handle RR HO Failure for inter-BSC outgoing
  * lchan_fsm: allow late RTP release events without erroring
  * ts,lchan_fsm: do not attempt to allocate CBCH subslots
  * Implement RR Classmark Enquiry
  * fix LCLS during Assignment: actually use new TCH lchan
  * cosmetic: drop param from send_assignment_complete()
  * vty: add SCCP related vty commands
  * make: allow vty-tests without configure
  * test neighbor ident vty docs
  * neighbor vty: drop keyword 'add'
  * neighbor vty: rather 'no neighbor', not 'neighbor del'
  * neighbor vty: allow setting local neighbors by CGI
  * vty: write local neighbors by bts nr, not lac-ci
  * fix counters for inter-BSC outgoing
  * gscon_forget_lchan(): no Clear Request after Clear Command
  * gscon_forget_lchan(): Clear Request iff no lchans remain
  * subscr conn: properly forget lchan before release
  * lchan_fsm: fix failure handling: notify conn when released
  * handover_decision_2.c: tweak comments
  * handover_decision_2.c: tweak ho candidate logging
  * handover_decision_2.c: find_alternative_lchan: drop goto
  * handover_decision_2.c: drop redundant debug_candidate() args
  * lchan_fsm: notify conn of released lchan upon RF Release
  * handover_fsm: adjust inter-BSC HO failure handling to spec
  * remote-BSS neighbors: allow only one cell ID
  * handover_decision_2.c: refactor trigger_*()
  * handover_decision_2.c: implement HO to remote BSS
  * abis_rsl.c: fix uninitialized RSL cause issues
  * handover_fsm: fix missing newline for log statement
  * handover_fsm: fix failure logging of uninitialized chan mode
  * fix build: revert bad neighbor_ident.vty change
  * vty doc: drop "(HO algo 2 only)" strings
  * lchan_fsm_cleanup: drop redundant 'forget_lchan' call
  * lchan: rf release: make sure conn is NULL
  * dbug log: verbosely detach conn<->lchan
  * fix: send RR Release (e.g. after BSSMAP Clear Cmd)
  * abis_rsl.c: drop unused enum sacch_deact
  * lchan: release in error: fix missing messages / events
  * lchan release: always Deact SACCH
  * cosmetic: lchan: introduce sub-struct lchan->release.*
  * cosmetic: abis_rsl.c: drop uneccesary braces
  * lchan: set cause for 4 instances of release_in_error = true
  * coverity: gscon_forget_lchan: squelch forward-null
  * always directly send BSSMAP Clear Request
  * send Immediate Assignment Reject only before Immediate Assignment
  * Importing history from osmo-gsm-manuals
  * minor tweak
  * make clean: also remove generated image files
  * add 'make check' target
  * OsmoBSC+NITB/running: fix title levels, one too deep
  * OsmoBSC: include bts-examples.adoc from OsmoNITB
  * fix 'make clean': shell glob, ignore failure
  * refactor Makefile build rules, don't use the FORCE
  * OsmoBSC: update overview to explain both SCCPlite and SCCP/M3UA
  * common / OsmoBSC: drop unused alink.adoc
  * OsmoBSC: update VTY reference
  * bsc: document handover
  * bsc: handover: clarify default of all-cells-are-neighbors
  * bsc: handover: mention the need to resend SI for telnet neighbor cfg
  * author info: add "former" to Holger's job title
  * OsmoBSC: update VTY reference
  * follow-up: logging tweak for Immediate Assignment
  * set gscon FSM instances' log level to DEBUG
  * make sure early lchan act failure resets the lchan
  * comments: describe some lchan details
  * use mgcp-client configured endpoint domain name

  [ Philipp Maier ]
  * endpoint_fsm: add missing return in mgcp_pick_codec
  * gscon: use BSS-common payload types on BSS side
  * sigtran: fix memleak in osmo_bsc_sigtran_send()
  * GSCON: avoid sending connection oriented data when not connected
  * GSCON: call api of a_reset.c with msc object directly
  * lcls: do not LCLS call legs with different codecs
  * doc: update mgw settings in example config file
  * assignment: remove unnecessary call to gsm0808_speech_codec_from_chan_type()
  * codec_pref: fix typo in comment
  * codec_pref: add AMR configuration bits to make_scl_config() in unit-test
  * codec_pref: fix missing breaks in switch-case statement
  * LCLS: fix codec mismatch detection
  * gsm_data: remove unused struct member full_rate.
  * gsm_data: remove unused struct member chan_mode
  * assignment_fsm: only include speech codec (choosen) on AoIP networks
  * gsm_data.c: Set reasonable AMR codec defaults in gsm_bts_alloc()
  * codec_pref: Add Codec List to COMPLETE LAYER 3 INFORMATION
  * lcls: log channel type and lchan names on LCLS codec mismatch
  * codec_pref: handle S0-S15 in ASSIGNMENT REQUEST
  * gsm_08_08: abort complete L3 3 msg gen when no codecs are set
  * osmo_bsc_msc: Set reasonable codec list defaults
  * codec_pref: check codec configuration before start
  * codec_pref: cosmetic: seperate half/full rate determination
  * codec_pref: also check physical channels
  * gsm_08_08: allow zero length speech codec lists in compl l3 info.
  * gsm_08_08: do not include zero length speech codec list.
  * gsm_data: set meaningful default values for amr modes
  * codec_pref: also check amr codec rates in check_codec_pref()
  * gsm_04_08: improve gsm48_multirate_config()
  * bsc_vty: check amr mode parameters
  * lchan_fsm: generate proper multirate configuration IE on RSL
  * gsm_data: make cgi_for_msc available for other modules
  * handover_fsm: send HANDOVER PERFORMED msg on internal ho
  * paging: fix nullpointer deref
  * chan_alloc: remove references to lchan_alloc()

  [ Harald Welte ]
  * Migrate from osmo_ipa_idtag_parse() to ipa_ccm_id_resp_parse()
  * handover_fsm.c: Fix -Werror=format-security errors
  * cbch: Don't send cell-broadcast command on BTS without CBCH channel
  * gsm48_lchan2chan_desc() belongs to gsm_data.h
  * Introduce gsm48_lchan2chan_desc_as_configured()
  * CBCH: Fix SI4 CBCH IE generation
  * CBCH: Fix gsm_bts_get_cbch()
  * nanoBTS: Allow BCCH with CBCH on TS0
  * range_enc_determine_range(): Don't dereference array on size=0
  * handover_start_inter_bsc_in(): Uninitialized variable
  * ipaccess-config: Fix open() return value checking
  * bssmap_handle_cipher_mode(): Don't sent reject if !conn
  * subscr_conn_fsm: Fix null-pointer deref / N-CONNECT.ind from unknown MSC
  * acc_ramp: An unsigned int is always >= 0
  * ipaccess-proxy: Add error handling to IAP CCM ID RESP parsing
  * initial checkin of manuals to public repo
  * Add link to Asciidoc source code of manual
  * add Ericsson OM2000 message sequence charts (one for each MO)
  * OM2000 message sequence charts: specify MO in node name
  * OM2000 MSC: Fix spelling
  * Add chapter on Cell Broadcast Support in Osmocom (to BSC+NITB manual)
  * BSC: Add series of message sequence charts about MGCP handling
  * mgw: Fix endpoint names for new MGW
  * MGW: Include MGCP endpoint naming scheme of old IPA/SCCPlite approach
  * add message sequence chart MS/BTS/BSC/MSC for 3GPP aoIP MO call
  * vty-ref: Update URI of docbook 5.0 schema

  [ Pau Espin Pedrol ]
  * bsc: Use libosmocore API to track osmo_signal structs
  * abis_nm: Fix heap-use-after-free in abis_nm_set_channel_attr
  * abis_nm: Fix trailing whitespacing
  * Fix heap-use-after-free due to OML link destruction
  * abis_nm_ipaccess_rsl_connect: Log bts and trx nr
  * codec_pref: Log unsupported codec name used
  * codec_pref: Log HR2 specifically as never specified
  * codec_pref.c: Add comment in expected switch case without break
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * osmo-bsc: Add default case for switch(enum)
  * abis_nm_get_ts: Return TS of correct TRX, not always TRX0
  * ipaccess-config: Use enum value for OML IP
  * abis_nm: Rename m_id_len to ease review of forthcoming patches
  * abis_nm: Split handling of Attribute Response Info into its own func
  * abis_nm: Split reported attr list parsing from Attribute Response Info into its own func
  * abis_nm: Allow sending and receiving Get Attributes (Response) against nanoBTS
  * abis_nm: Add support to parse some nanoBTS Attribute Response attributes
  * abis_nm: Add support to parse OML IP and Unit Id in Get Attributes
  * abis_nm: Support parsing nanoBTS format for Get Attributes Info
  * abis_nm: parse_attr_resp_info_unreported: Fix offset calculation
  * examples: Remove neighbor-list invalid for default setup
  * bsc: bts_alloc: Use enum value during neigh_list_manual_mode initialization
  * bsc: vty: Use enum value in neighbor-list check
  * bsc: gsm0808: Fix return code in bsc_compl_l3
  * osmo-bsc: gsm_timers_vty: Set global T_defs during vty_init
  * bsc: Prefix log string with related SI type during call to list_arfcn
  * bsc: si: Fix SI2bis L2 pseudo length
  * bsc: si: Fix SI2ter L2 pseudo length
  * bsc: Enable force-combined-si on nanoBTS by default
  * bsc: band_compatible: Return band non-compatible for invalid arfcn
  * bsc: vty: Verify and warn on invalid arfcn passed
  * abis_nm: Introduce new signal S_NM_GET_ATTR_REP
  * ipaccess-config: Fix whitespace
  * ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID
  * ipaccess-config: cosmetic: Remove unneeded comment with hex values
  * gsm0408_rcvmsg: Release lchan if L3 fails to complete
  * ipaccess-config: Introduce -q quiet param
  * Add osmux-reference document
  * osmux-reference: Use packetdiag to draw packet header structures
  * osmux-reference: Add sequence charts
  * osmux-reference: Add traffic saving plot
  * osmux-reference-docinfo: Add latest changes to revhistory
  * osmux: Fix description for Dummy frames FT field
  * Allow easily disabling GFDL references
  * cosmetic: bsc: timeslot_fsm: Clean uneeded scope brackets
  * bsc: lchan_select: Avoid returning a TCH/H lchan when TCH/F is requested
  * bsc: ts_as_pchan_for_each_lchan: reorder and improve documentation
  * bsc: ts_for_each_lchan: Improve documentation
  * bsc: Add define for ts_as_pchan_for_each_lchan with ts->pchan_on_init
  * bsc: Fix lchan iteration for dyn TS during PDCH Deact
  * bsc: timelost_fsm: Remove unneeded set of out variable on failure
  * bsc: timeslot_fsm: Fix ts_is_lchan_waiting_for_pchan
  * bsc: ts_is_pchan_switching: Return correct IPA dyn TS target_pchan
  * bsc: timeslot_fsm: Fix possible skip of some lchans in ts_terminate_lchan_fsms
  * bsc: timeslot_fsm: Fix count in ts_lchans_waiting
  * bsc: lchan_rtp_fsm: Avoid duplicate LCHAN_EV_RTP_RELEASED event
  * bsc: lchan_fsm: Add missing transition WAIT_TS_READY->WAIT_RLL_RTP_RELEASED
  * bsc: timeslot_fsm: Handle and ignore tear down of lchan during PDCH DEACT
  * bsc: lchan_fsm: Fix invalid duplicated transition
  * paging: Add VTY options to calculate T3113 timeout dynamically
  * paging: fix whitespace
  * paging: Properly enclose logging imsi filter scope
  * bsc_main: filter_fn: Compare imsi values instead of subscr pointers
  * bsc: Set subscr log context during complete_layer3
  * bsc: rsl: Set subscr log context during meas report
  * bsc: dtap: Set subscr log context
  * bsc: bssap: Set subscr log context during paging
  * Add VTY option to avoid sending empty Full BCCH Info for disabled SI

  [ Stefan Sperling ]
  * check for overlong unix socket paths
  * fix unaligned access in abis_nm_rx_ipacc()
  * re-order condition checks for clarity
  * show dynamic timeslot details in 'show timeslot' vty command
  * check return value of gsm48_multirate_config()
  * add missing 'break' in switch statement
  * unlink socket path correctly in rf_create_socket()

  [ Martin Hauke ]
  * cosmetics: Fix typo in bsc_vty.c
  * ipaccess-config: Generate valid JSON output when using the -G parameter
  * ipaccess-config: Fix indentation of the usage output

  [ Oliver Smith ]
  * osmo_bsc_main.c: initialize rate counters
  * vty 'show bts'/'show trx': display IPs and ports
  * cosmetic: fix spec ref for gsm0808_cipher_mode()
  * cipher mode reject: send proper cause codes
  * vty: add 'show rejected-bts'
  * ipaccess_sign_link_reject: fix: use osmo_strlcpy() to safely copy IP
  * copy NITB's osmobsc-usermanual.adoc to OsmoBSC
  * build manuals included from osmo-gsm-manuals.git
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd

  [ Daniel Willmann ]
  * debian: Require libcdk and install meas_vis osmo-bsc-meas-utils
  * OsmoBSC/HLR/MSC: Fix default config file name
  * gsm_04_08: Free GSM subscr conn if paging response can't be matched
  * VTY: Allow logging filter imsi statements for IMSIs we haven't seen yet

  [ Max ]
  * vty: don't show GPRS details if not configured
  * LCLS: move MGCP MDCX into separate function
  * Make IP address helper accessible via header file
  * constify rsl_tx_ipacc_*cx() parameters
  * LCLS: expand logging to print the name of the mode in use
  * LCLS: tighten GCR check
  * LCLS: explicitly check for mode before closing the loop
  * LCLS: move mode check into separate function
  * LCLS: make config and control redable in 'sh conns'
  * RSL: restructure MDCX functions
  * LCLS: add bts-loop variant
  * vty: add command to show TRX selectively
  * Add OsmoBSC control interface description
  * Add OsmoBSC control interface description
  * OsmoBSC: update CTRL docs
  * LCLS: update parameter representation
  * LCLS: log config/control update
  * IPA: log OML/RSL link drop reason
  * LCLS: use enum values instead of magic numbers
  * Print BTS number on GPRS options error
  * Log MDCX ACK for established lchan

  [ Jonathan Brielmaier ]
  * fix various typos across all manuals

  [ Ivaylo Kostov ]
  * BSC,BTS: add diagrams of PCU-BTS-NITB-SGSN relationships

  [ Alexander Couzens ]
  * OsmoBSC: add rate counter documentation

  [ Vadim Yanitskiy ]
  * osmo_bsc_bssap.c: fix incorrect link_id assignment

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

osmo-bsc (1.3.0) unstable; urgency=medium

  [ Philipp Maier ]
  * a_reset: cleanup + remove dead code
  * gscon: remove dead code
  * gscon: pick suitable payload type / encoding name for MGCP
  * lcls: set codec info when performing MGW operation
  * codec_pref: move match_codec_pref() to separate c-file and add unit-test
  * codec_pref: check bts codec support
  * chan_alloc: reset rtp voice related bits in lchan_free()
  * rsl: use 3GPP assigned payload type constants from libosmo-netif

  [ Stefan Sperling ]
  * show all global counters of osmo-bsc in vty
  * add counter for connection attempts from BTS with unknown unit id
  * fix misaligned memory write access in abis_nm_ipaccess_rsl_connect()
  * increment 'paging responded' counter for active paging only
  * fix handling of invalid pchan names in vty

  [ Pau Espin Pedrol ]
  * nat: Add jitter buffer on the uplink receiver
  * acc_ramp: Increase log level of some messages
  * chan_alloc: Print bts nr on chan alloc failure
  * abis_rsl.c: Fix whitespace
  * abis_rsl: rsl_rx_chan_rqd: Format bts log string as in everywhere else
  * pcu_sock: Log event pcu_sock created
  * osmo-bsc: Clean help description of cmd line parameters
  * osmo-bsc: Add -V param to print version
  * debian: Move meas related binaries into new package osmo-bsc-meas-utils
  * bsc-filter: Remove unused func barr_adapt and set barr_find static
  * bsc_vty: Write access list entries when storing bsc config
  * Init access_lists before passing it as a parameter
  * Rename bsc_msg_acc_lst_vty_init to have more uniform prefix
  * filter: vty: Print policy list in cmd show access-list
  * filter: Replace '.' in counter names with ':'
  * filter: Allocate each ctr group with a different idx
  * ctrl: Avoid sending back received ERROR msgs

  [ Neels Hofmeyr ]
  * bsc_api.c: actually log with context
  * abis_rsl.h: drop unused rsl_chan_activate() declaration
  * cosmetic: bsc_dyn_ts.c: make local functions static
  * cosmetic: define TCH_F_PDCH_PENDING_MASK as actual bitwise or
  * cosmetic: logging and ordering in handle_ass_compl()
  * doc: add msc charts on Assignment/Handover internals
  * tests: remove bssap_test
  * tests: remove channel_test
  * bsc_test: drop "scan to MSC" code path
  * dissolve libbsc: move all to src/osmo-bsc, link .o files
  * remove struct bsc_api
  * cosmetic: magic number: use RSL_ACT_ constant for chan act
  * cosmetic: gscon: undup code: add common assignment_failed()
  * assignment: signal assignment failure on chan act nack
  * log: fix logging in rsl_rx_chan_act_nack()
  * log: assignment: add two logs on unexpected lchan release
  * use libosmocore's gsm0808_permitted_speech(), gsm0808_chosen_channel()
  * cosmetic: penalty timers: constify, tweak doc
  * cosmetic: bsc_subscr_alloc: log initial get
  * gscon: put subscriber a little later
  * try to pick up subsrc IMSI on l3-compl
  * store subscriber identity on paging
  * cosmetic: handover_test: add IMSI to subscr for logging
  * doc: tweak msc charts on Assignment/Handover: act_timer
  * doc: add lchan-release.msc
  * doc: add ms-channel-request.msc
  * doc: charts: illustrate new plan for ts and lchans
  * cosmetic: gscon: drop odd use of OSMO_STRINGIFY
  * HO: introduce T7, T8, T101 timers
  * drop dead code: conn->T10, handled by gscon instead
  * make T10 configurable like the rest of them
  * fix dyn TS init: properly identify BTS on OML OPSTART ACK
  * cosmetic / linking: move str_to_imsi() out of abis_rsl.c
  * cosmetic: name osmo-bsc's root ctx 'osmo-bsc', not 'openbsc'
  * call osmo_xua_msg_tall_ctx_init()
  * fix handover start: dealloc ho if event not permitted
  * ho cfg: fix unit strings
  * hodec2 log: less verbose, more concise logging
  * various logging: fix missing/extra newlines
  * BTS codec pref legacy compat: allow all codecs per default

  [ Harald Welte ]
  * bsc: Fix check for MSC-side FSM allocation failure
  * vty: Permit selection of other ASP protocol than M3UA
  * bsc: Add mgcp_port_to_cic() to determine CIC from RTP Port
  * bsc: Use correct MGCP endpoint name for IPA/SCCPlite
  * bsc: Don't reject ASSIGNMENT for Audio in IPA/SCCPlite case
  * bsc: Don't include AoIP IEs in ASSIGNMENT COMPLETE over SCCPlite
  * bsc: Don't create MSC-side MGCP connection in IPA/SCCPlite case
  * remove remaining bits of osmo-bsc_nat
  * Remove 'struct bsc_msc_connection' + fix IPA-encapsulated CTRL
  * move 'extern struct gsm_network *bsc_gsmnet" to header file
  * VTY: Print some more information in "show conns"
  * Add initial 3GPP LCLS support to OsmoBSC
  * LCLS: add VTY config to enable/disable LCLS on per-MSC basis
  * Reject ASSIGNMENT REQ with CIC but no AoIP transp addr in AoIP case
  * Ignore "dest" command in MSC node
  * Explicitly register CTRL-over-IPA callback with libosmo-sigtran
  * Remove unused logging subsystems DCC and DMGCP
  * remove traces of osmo-bsc_nat in python test (osmoappdesc/test_runner)
  * Add missing event string name for GSCON_EV_LCLS_FAIL
  * bsc_subscr_conn_fsm: BSC must not release SCCP connection
  * absi_rsl: Fix segfault in rsl_rx_conn_fail()

  [ Daniel Willmann ]
  * git-version-gen: Don't check for .git directory

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 19:25:05 +0200

osmo-bsc (1.2.1) unstable; urgency=medium

  [ Philipp Maier ]
  * bsc_api/GSCON: prevent unnecessary channel mode modifications

  [ Neels Hofmeyr ]
  * resurrect meas_feed.c: vty, vty-test
  * dyn ts, bts_ipaccess_nanobts.c: init PDCH on Chan OPSTART ACK
  * dyn TS, assignment: set lchan state to LCHAN_S_ACT_REQ in the proper place
  * dyn TS, assignment: allow switch from PDCH with associated conn
  * dyn TS: init only when both RSL and the Channel OM are established
  * dyn TS: allow any pchan type changes, fix for gprs mode none
  * debug log: verbosely log all lchan alloc choices
  * deprecate dyn_ts_allow_tch_f and by default allow all TCH
  * fix default fallbacks in audio_support_to_gsm88()
  * log: indicate hr/fr in audio_support_to_gsm88() error
  * cosmetic: dyn ts init: undup logging for gprs = none

  [ Vadim Yanitskiy ]
  * osmo_bsc_vty.c: fix: write MGW configuration

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 15 May 2018 14:10:38 +0200

osmo-bsc (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * vty: skip installing cmds now always installed by default
  * bssap: paging: page entire BSS for unimplemented cell id list
  * fix build: bssap test broke by undefined references
  * osmo-bsc RESET FSM: use distinct struct names
  * osmo-bsc: SCCP addrs: default only if unset, reject invalid
  * osmo-bsc vty: be fatal for addressbook entry errors
  * use osmo_sccp_inst_addr_name() instead of looking up ss7
  * add --enable-sanitize config option
  * bsc_init: fix Werror: define rc for 2quater with si2q_count == 0
  * bsc filter: don't ignore imsi-allow on "global" filter level
  * compiler warnings: drop some unused variables
  * compiler warnings: constify in abis_nm.c
  * cleanup: drop unused gsm_bts.role
  * compiler warnings: add includes in abis_rsl.h, gsm_data_shared.h
  * cosmetic: handover.h: use "#pragma once", declare structs, comments
  * examples: add osmo-bsc-minimal.cfg
  * HO prep: pass gsm_network to gsm_bts_alloc() already
  * fix segfault upon release paging on BSSMAP Reset: init llist
  * log typo fix in gsm0808_cipher_mode()
  * debug log: log Cipher Mode info upon sending down RSL/A-bis
  * fix bssmap_handle_cipher_mode()'s encryption decision
  * abisip-find: add getopt option parsing in preparation for a new option
  * abisip-find: add -l to list base stations instead of streaming replies
  * abisip-find: update copyright
  * abisip-find: add timeout option
  * abisip-find: add --interval option
  * vty: fix 'show lchan ...' arg [lchan_nr] to [<0-7>]
  * vty: change handover command's arg LCHAN_NR to <0-7>
  * vty: cosmetic: use common BTS, TRX, TS, LCHAN strings
  * vty: add various manual handover and assignment trigger commands
  * osmo_bsc_mgcp: cosmetic: introduce mgcp_init(), soak up fsm init
  * HO: fix recovery from failed handover
  * HO prep: introduce per-BTS handover config, with defaults on net node
  * HO: add indicators for inter-cell and async ho, use for chan act type
  * cosmetic: explicitly init ho_ref start value
  * fixup: neigh_meas_avg: detect invalid window size as <=0, log if invalid
  * fixup: neigh_meas_avg: fix condition to reduce window size
  * HO: enable handover by initializing at startup; rename init function
  * HO: add handover algo 2 parameters; skip HO 1 if HO 2 is configured
  * HO: rename gsm_bts_neighbor() to bts_by_arfcn_bsic()
  * HO: make bts_by_arfcn_bsic() public
  * libcommon: eliminate bsc_version.c
  * libcommon: eliminate common_vty.c
  * libcommon: eliminate debug.c
  * libcommon: eliminate socket.c
  * libcommon: eliminate talloc_ctx.c
  * ipaccess-proxy: don't redefine tall_bsc_ctx
  * libcommon: join gsm_data_shared.* into gsm_data.*
  * drop libcommon completely, move remaining files to libbsc
  * libcommon-cs: move a_reset.c into libbsc
  * libcommon-cs: move gsm_network_init() into bsc_network_init()
  * gsm_network: drop unused trans_list
  * libcommon_cs: move gsm48 bits to libbsc
  * libcommon-cs: move vty bits to libbsc/bsc_vty.c
  * common_cs.h: mv gsm_encr to gsm_data.h
  * drop libcommon-cs completely
  * drop unused common.h
  * gsm_network: drop unused subscr_epxire_timer
  * vty: 'show bts': write '(none)' if none are found.
  * vty: 'show bts': fix indenting
  * bts chan_load: ignore unusable BTS
  * handover_logic.c: always do inter-cell channel activation
  * handover_logic.c: on HO command, send new lchan's MS power
  * HO: process_meas_rep: guard against modulo zero
  * HO: cosmetic: bsc_handover_start(): "fix" memcpy for AMR config
  * HO: add new_lchan_type arg to bsc_handover_start()
  * HO: cosmetic: bsc_handover_start_lchan_change(): tweak local vars
  * HO: always do async handover
  * HO: bsc_handover_start_lchan_change(): set MS to max power on handover
  * HO: logging: more logs, and more concise logging
  * HO: move penalty timers to own file as proper API
  * HO: store speech codec list from BSSMAP Assignment in conn
  * HO: cfg: tweak vty write
  * vty: 'show bts': list the TRXs' ARFCNs
  * vty: 'show bts': print neighbor cells
  * HO: cfg: separate hodec1 from hodec2 parameters
  * HO: lchan: store last seen measurement report nr, tweak log
  * HO: clearly mark conn penalty timer member for hodec2
  * HO: cosmetic: handover_decision.c: make process_meas_rep() return void
  * HO: introduce ho decision callbacks
  * HO: cosmetic: getting a chan activ nack on a non-ho lchan is not an error
  * HO: Implement load based handover, as handover_decision_2.c
  * HO: vty: rename ho decision 1 vty to 'handover1' with 'handover' alias
  * cosmetic: adjust copyrights on handover_cfg.c,_vty.c
  * HO: vty: clearly mark 'handover foo' as legacy alias for 'handover1 foo'
  * drop unused libbsc/meas_proc.c
  * HO: fix minor issues found by coverity
  * bsc_api.c: fix log string format
  * fix build: gprs_ra_id_by_bts(): ensure to init all values
  * compiler warning: chan_compat_with_mode(): clearly handle all enum vals
  * add test for gsm48_ra_id_by_bts()
  * add test for abis_nm_ipaccess_cgi()
  * ctrl_test_runner: add tests for 3-digit MNC
  * gsm48_ra_id_by_bts(): struct gsm48_ra_id* instead of buf
  * cosmetic: bsc_network_init(): imply default 001-01 PLMN
  * implement support for 3-digit MNC with leading zeros
  * gsm48_parse_meas_rep(): set num_cell=0 if no neighbor cells are reported
  * cosmetic: hodec2: log nr of neighbors in meas report
  * cosmetic: typo in log: handover_decision2.c: 'measuements'
  * handover_test: explicitly wrap abis_rsl_sendmsg()
  * pcu_if: implement support for 3-digit MNC
  * configure: add --enable-werror
  * cosmetic: abis_nm: use osmo_cell_global_id, parse 3-digit MNC
  * fixup: apply mnc3 change also in ipaccess/network_listen.c
  * vty: drop unused vty definitions (*_NODE, msc_*)
  * gsm0408_test: drop LAI encoding test
  * range_enc_arfcns: avoid runtime error on zero size
  * fix gsm0408_test: properly free bts struct after each test
  * move init from gsm_bts_alloc_register() to gsm_bts_alloc(); fix gsm0408_test
  * cosmetic: gsm0408_test: drop unused arg from bts_init()
  * ctx cleanup: use non-NULL talloc ctx for osmo_init_logging2()
  * vty: re-add 'timeout-ping' and 'timeout-pong' as dummy commands
  * resurrect meas_feed.c from openbsc.git history
  * resurrect meas_feed.c: make it compile, add logging

  [ Max ]
  * Check OML state per-BTS
  * OML: consider administrative state when reporting
  * cosmetic: remove obsolete ROLE_BSC
  * cosmetic: tighten function type signatures
  * cosmetic: drop unused include
  * cosmetic: mark gsm_objclass2mo as static
  * OML: expand status reporting checks
  * Generate SI2ter Rest Octets
  * Generate SI2bis Rest Octets
  * Fix tests after rate_ctr change
  * Remove unneeded .py scripts
  * Enable sanitize for CI tests
  * Migrate from OpenSSL to osmo_get_rand_id()
  * Add optional profiling support
  * Fix .deb builds
  * Check and handle SMS encoding failure
  * Remove obsolete ./configure option
  * cosmetic: remove duplicated code
  * RSL: print link state per-TRX
  * vty: fix OML link state printing
  * cosmetic: log prim operation as text

  [ Philipp Maier ]
  * mgcp: use osmo-mgw to switch RTP streams
  * cosmetic: remove distracting newline
  * cosmetic: reorder case list
  * cosmetic: replace term MGCP-GW with MGW
  * mgcp: add missing out state
  * mgcp: remove unused variable
  * reset: remove name variable from reset context
  * doc: add example configuration for osmo-mgw
  * auth: remove obsolete VTY commands
  * bssap: remove libosmo-legacy-mgcp dependancy
  * sccp-lite: remove obsolete VTY commands
  * auth: remove unused structs
  * auth: remove obsolete VTY commands
  * mgcp: use hexadecimal digits in endpoint names
  * mgcp: use mgw assigned connection identifiers
  * mgcp: add missing switch case
  * mgcp: do not fail silently on snprintf()
  * cosmetic: remove duplicate logging
  * cosmetic: do not cast void pointer
  * cosmetic: add missing log prefix
  * cosmetic: correct sourcecode formatting
  * cosmetic: use fsm pointer from parameter list
  * mgcp: cosmetic fixups
  * paging: paging_flush_bts: be sure pending_requests is initalized
  * cosmetic: osmo_bsc_mgcp: improve comments
  * mgcp: cancel transactions on timeout
  * mgcp: validate rtp connection data in MGW response (ip/port)
  * mgcp: log file and line of calls to handle_error()
  * cosmetic: mgcp: remove duplicate logging
  * abis_rsl: permit first EstablishInd only on SAPI=0
  * abis_rsl: do not allow SACCH in MF mode on SAPI=0
  * SIGTRAN: correct wrong log category
  * bsc_api: drop unknown RR messages.
  * paging: page all bts when no cell is associated
  * paging: fix paging attemt rate counter
  * a_reset: Add FSM event names
  * gsm_data: use feature list from libosmocore
  * bsc_vty: display bts features in show bts
  * cosmetic: remove unused enum members
  * cosmetic: fix typo
  * cosmetic: fix argument order of forward_dtap()
  * cosmetic: remove needless fixme note.
  * cosmetic: fix incomplete sentence in comment.
  * Cosmetic: fix missing semicolon after osmo-assert
  * cosmetic: remove dead code and obsolete fixmes
  * cosmetic: remove old, already commented-out code
  * ipaccess: make ipaccess-config build again
  * bs11: make bs11_config build again
  * cosmetic: remove dead code: osmo_bsc_reset.c
  * gscon: fix illegal state transitions
  * cosmetic: remove dead code
  * cosmetic: Add fixme note for OS#3112
  * inform A-RESET FSM about MSC CR timeouts
  * gscon: fix assignment of signalling channels
  * cosmetic: Add note about libosmo-legacy-mgcp to configure.ac

  [ Harald Welte ]
  * debian: Add dependency to libosmo-mgcp-client-dev
  * debian: Increase required libosmo-legacy-mgcp-dev version
  * configure.ac/debian: Require libosmo-mgcp-client-dev >= 1.2.0
  * osmo-bsc: Print NOTICE message on unimplemented BSSMAP UDT
  * Move many counters from BSC-global to per-BTS granularity
  * rate_ctr: Use ':' as separator, not '.'
  * Remove 'msc' counter group from BSC
  * Change T3101 default from 10s to 3s.
  * paging.c: add more documentation on what the functions actually do
  * paging: Remove obsolete paging call-back support
  * paging: Stop all paging if MSC sends us BSSMAP RESET
  * Fix per-BTS counter group index
  * libbsc: paging: more reasonable (and detailed) paging statistics
  * Reduce T3113 default from 60s to 10s
  * Add per-BTS rate_ctr for total + failed number of RSL CHAN_ACT
  * Add new per-BTS "rsl:unknown" counter to count unknown RSL messages
  * Add a new counter "rsl:ipa_nack" to count number of IPA related NACKs
  * Add new "chan:mode_modify_nack" counter to count RSL MODE MODIFY NACK
  * Remove dead code left over from NITB split
  * Remove unused RRLP options/codec
  * Remove bogus vty config for LU reject cause
  * Remove bogus MM INFO configuration
  * Remove some more dead code
  * remove libosmo-sccp dependency for osmo-bsc
  * osmo_bsc_bssap.c: Spelling fixes in comment
  * Remove unused struct osmo_bsc_sccp_con member sccp_queue_size
  * osmo_bsc.h: document every field in 'struct osmo_bsc_sccp_con'
  * osmo-bsc: Move user plane/voice related bits into sub-structure
  * gsm_data.h: Document all fields of gsm_subscriber_connection
  * remove unused 'lac' member of 'struct gsm_subscriber_connection'
  * BSC: Add "show subscriber all" command
  * BSC: Fix bsc_subsc leak on paging
  * bsc_test.c: Use proper network/bts/lchan structures
  * cosmetic: Hide all accesses to conn->bts behind conn_get_bts()
  * Reduce T3109 default from 19s to 5s
  * Make libcommon, libcommon-cs, libfilter, utils depend on mgcp/sigtran
  * cosmetic: Remove data/len variables in bssmap_handle_assignm_req()
  * bssmap_handle_assignm_req(): Decode channel type as first step
  * remove obsolete gsm_subscriber_connection.bts member
  * update.gitignore with 'tags' files and 'deps' directory
  * gsm_data_shared.h: Remove unused sacch_deact member field
  * vty: print RTP IP of lchan if actually bound; print remote (mgw) IP
  * osmo-bsc: Add talloc context introspection via VTY
  * Structural reform: Get rid of osmo_bsc_sccp_con
  * vty: Permit codec-list containing both full-rate and half-rate codecs
  * logging: Remove obsolete log categories
  * Permit set of multiple different A5 ciphers
  * bssmap_handle_assignm_req(): Use proper cause values
  * bssmap_handle_assignm_req(): Use more conscise error/log message texts
  * bssmap_handle_assignm_req(): Don't print log statemens in malloc failure case
  * chan_compat_with_mode: signalling works over all channel types
  * osmo-bts/nanobts: Set RACH_Busy Threshold to -90 dBm
  * Align syntax of "handover" + "assignment"  command with that of lchan act/deact
  * Revert "Generate the S_L_INP_TEI_UP signal earlier."
  * bsc_vty: Merge more VTY documentation string #defines
  * sysinfo: Fix regression causing missing L2 Pseudo-Length in SI5/SI6
    (Closes: #3059)
  * introduce an osmo_fsm for gsm_subscriber_connection
  * cosmetic: Fix infinite number of formatting errors in gscon_fsm_states
  * abis_nm: Improve and fix OML logging
  * paging: Unify formatting of log messages with (bts=%d) prefix
  * RR: Send RR STATUS in case of unsupported/unknown message
  * BSSAP: Fix test_codec_pref() implementation for AMR
  * BSSAP: document match_codec_pref() more thoroughly
  * GSCON FSM: Fix argument order when calling gsm0808_assign_req()
  * bssmap: State correct speech codec in ASSIGNMENT COMPLETE
  * Start Dynamic PDCH Initialization after RSL is up
  * "show timeslot": Show dynamic PDCH state also for Osmocom-style dyn PDCH

  [ Alexander Couzens ]
  * debian: remove doublicated project name in example files
  * use _NUM_CHREQ_T to define the size of ctype_by_chreq
  * pcuif_proto.h: fix whitespaces and indention
  * pcuif_proto.h: add features of version 7 (txt indication)

  [ Pau Espin Pedrol ]
  * tests: Fix selection of python version
  * Use type bool for boolean fields in gsm48_si_ro_info
  * vty: Add cmd to configure 3g Early Classmark Sending
  * cosmetic: bsc_vty: Fix trailing whitespace
  * cosmetic: bsc_vty: Document bvci reserved values
  * osmo_bsc_bssap.c: Fix discard of const qualifier in assignment
  * debian: Move abisip-find from osmo-bsc to its own package
  * abisip-find: Add option to bind to a specific source address
  * abisip-find: Force stdout buffer flush
  * abisip-find: Add --format-json option
  * ipaccess-config: Enable logging all categories to print errors
  * ipaccess-config: Add missing path with log error
  * ipaccess-config: Improve handling of last parameter
  * abisip-find: Improve use information output
  * ipaccess-config: Check cmdlie arg unit-id format
  * bsc_api.c: bsc_handle_lchan_signal: Remove unused variable
  * bsc_subscr_conn_fsm.c: Fix wrong param list passed to LOGPFSML
  * tests: handover_test.c: Add missing header
  * pcu_sock.c: Avoid breaking strict-aliasing on ptr derreference
  * contrib: jenkins.sh: Add --enable-werror flag
  * contrib: osmo-bsc.service: Update description
  * contrib: osmo-bsc.service: Fix osmo-mgw.service dependency
  * libbsc: nokia_site: Fix uninitialized return val
  * bsc_vty: Fix uninitialized var false positive on gcc 7.3.1
  * paging: paging_request_bts: Fix wrong return value
  * bssap: Log non handled paging requests
  * libbsc: set_net_mcc_mnc_apply: Fix memleak on parsing incorrect mcc mnc
  * bsc_nat: ctrl: fix memleak on reply receival
  * bsc_nat: forward_to_bsc: remove one level of indentation
  * bsc_nat: forward_to_bsc: Fix memleak on send failure
  * bsc_nat: Drop redundant ccon ptr in bsc_cmd_list
  * bsc_nat: ctrl: Fix crash on receveing bsc reply
  * use osmo_init_logging2
  * chan_alloc.c: Fix log var formatting issues
  * abis_rsl.c: abis_rsl_rx_cchan: Print msg type name for unimplemented messages received
  * abis_rsl.c: Clean ericsson specific imm assign code
  * gsm_data_shared.h: Remove unused enum gsm_paging_event

  [ Stefan Sperling ]
  * Fix "CTRL GET msc_connection_status" response.
  * Support control connection status query for a particular MSC.
  * Implement support for paging by LAI.
  * Add TAGS files (produced by 'make tags') to .gitignore file.
  * Implement support for CELL_IDENT_NO_CELL.
  * Implement support for paging based on CI (cell identifier).
  * Move BTS selection for paging from osmo_bsc_grace.c into osmo_bsc_bssap.c.
  * Implement support for paging based on a Cell Global Identifier.
  * Implement support for paging based on LAC and CI.
  * Show the BTS number for outgoing paging commands in debug log.
  * Split paging cases in bssmap_handle_paging() off into helper functions.
  * Remove an unused variable.
  * Improve an error message in page_lai_and_lac()
  * Make "waiting indicator" of IMMEDIATE ASSIGN REJECT dynamic.
  * Add stat items for the BTS's channel load average and T3122.
  * Make RSL connection attempts time out.
  * fix handover_test link error
  * Add support for Access Control Class ramping.
  * Generate the S_L_INP_TEI_UP signal earlier.
  * use libosmocore to parse cell identifiers in osmo-bsc
  * fix an error message in bssmap_handle_paging()
  * change return type of page_subscriber() to void
  * Generate the S_L_INP_TEI_UP signal earlier.
  * fix a format string error in bts_update_t3122_chan_load()
  * fix initialization of acc ramping
  * only log actual access control class ramping changes
  * ensure that acc_ramp_init() is only called once
  * trigger acc ramping based on trx rf-locked state
  * rename helper functions in the acc ramp code to avoid confusion
  * trigger acc ramping on state-changed-event reports
  * only trigger acc ramping if trx 0 is usable and unlocked
  * fix handling of state changes in acc ramping
  * properly skip paging is OML link is down
  * extend documentation of paging_flush_bts()
  * flush paging when RSL link is dropped

  [ Vadim Yanitskiy ]
  * bsc/gsm_04_80.h: use '#pragma once' instead of includes
  * bsc/gsm_04_80.h: clean up useless declarations
  * libbsc/bsc_vty.c: prevent uninitialized access
  * doc/examples: use NECI = 1 by default

  [ Ivan Kluchnikov ]
  * handover_decision: Fix condition for power budget handover attempt
  * handover_decision: log HO causes more accurately

  [ Andreas Eversberg ]
  * HO: Send Channel Mode and Multirate IE along with handover command
  * HO: Add function to count currently ongoing handovers to a given BTS
  * Fix: If paging for half rate was requested, use hr, if supported by MS
  * HO: Assign SDCCH on channel request
  * Fix of checking TCH rate at chan_compat_with_mode
  * HO: Count the actual meas.rep. get_meas_rep_avg fails if not reached
  * HO: Count neighbor measurements and reduce window of neigh_meas_avg
  * HO: Changed availablilty of ts_is_usable() from static to extern
  * HO: Always update rqd_ta after receiving measurement report
  * HO: If handover logic is used to do assignment, signal assignment result
  * HO: Add handover decision debugging category
  * Do not perform assignment, if the new channel equals the current one
  * Allow assignment to TCH channel with signalling only mode
  * Correctly set T3105 for ipaccess BTS type
  * HO: fix: increase the number of measurement report history to 10
  * HO: Change debug category at handover decision: DHO -> DHODEC
  * HO: Count number of free timeslot on a given BTS
  * HO: add queue to cache DTAP messages during handover/assignment
  * Fix: meas_rep.c will only use valid DL measurement reports
  * HO: Add a penalty timer list to the subscriber connection entity

  [ Keith ]
  * Cosmetic: Fix typo: Siganlling->Signalling

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

osmo-bsc (1.1.2) unstable; urgency=medium

  * Debian: depend on libosmo-sigtran (bsc) and libosmo-sccp (bsc-nat)
  * debian/control: Specify versions of packages we depend upon

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

osmo-bsc (1.1.1) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: use osmo-clean-workspace.sh before and after build

  [ Harald Welte ]
  * Debian: re-introduce missing build dependency to libssl-dev

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 21:49:00 +0200

osmo-bsc (1.1.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * Initial release.
  * debian/rules: show testsuite.log when tests are failing

  [ Neels Hofmeyr ]
  * jenkins: fix build: osmo-mgw from master, not pre_release
  * drop files unrelated to osmo-bsc
  * rename openbsc.pc to osmo-bsc.pc
  * rewrite README
  * move include/openbsc to include/osmocom/bsc
  * drop MGCP client from osmo-bsc
  * fix vty tests: vty no longer goes to parent node implicitly
  * doc/examples: tweak osmo-bsc.cfg, add osmo-bsc_custom-sccp.cfg
  * add ';' after OSMO_ASSERT()

  [ Harald Welte ]
  * configure.ac: No more libosmogb dependency
  * configure.ac: remove --enable-osmo-bsc, --enable-nat
  * configure.ac: remove smpp_mirror, which has no relation to a BSC
  * contrib/jenkins.sh: MGCP is unconditional now
  * configure.ac: Remove --enable-mgcp-transcoding
  * configure.ac: Remove --enable-iu
  * configure.ac: Remove checks for libgtp + c-ares
  * configure.ac: Remove check for GMTOFF
  * configure.ac: Package is now called osmo-bsc, not openbsc
  * libbsc: document arguments of generate_bcch_chan_list()
  * Make sure BA-IND in all SI2xxx is '0' and in all SI5xxx is '1'
  * gsm0408_test: Verify that BA-IND is 0 in SI2xxx and 1 in SI5xxx
  * .gitignore: Update to post-NITB-split realities
  * Remove any references to RANAP and Iu
  * Fix nanobts_omlattr unit test
  * nanobts_omlattra_test: Initialize logging before executing tests
  * osmo-bsc: Initialize logging before initializing rate_ctr
  * Rename osmo_fsm to avoid illegal space in name + more meaningful name

  [ Max ]
  * Make TRX rf locking more visible
  * SI13: drop PBCCH-related bits
  * Wrap channel state assignment in macro
  * Further cleanup leftovers from BSC/MSC split
  * CTRL: cleanup write-only command functions
  * Show OML link uptime in vty
  * Fix repo split aftermath
  * SI2q: cleanup UARFCN addition
  * OML: consider RSL link state
  * SI2q: fix generation for multiple UARFCNs
  * Remove pkg-config file
  * ctrl: add oml-uptime command
  * SI1q: fix EARFCN appender

  [ Pau Espin Pedrol ]
  * Remove unneeded dbi dependency
  * bsc_api: Fix NULL secondary_lchan access in handle_ass_fail
  * libbsc: Use correct printf formatting for uint64_t
  * bsc_vty: Improve description of mid-call-text cmd

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 11:19:03 +0200

osmo-bsc (0.1.0) UNRELEASED; urgency=low

  [ Alexander Couzens ]
   * Initial release.

 -- Alexander Couzens <lynxis@fe80.eu>  Tue, 08 Aug 2017 01:12:56 +0000
