osmo-bsc (1.6.0) unstable; urgency=medium

  [ Philipp Maier ]
  * bsc_msc_data: remove unused member is_authenticated
  * gsm_08_08.c: always pick first msc for unsolicit paging responses

  [ Neels Hofmeyr ]
  * add vty 'no neighbors' to remove all HO targets
  * neighbor config: allow re-using ARFCN+BSIC pairs
  * fsm: use deferred deallocation

  [ Vadim Yanitskiy ]
  * abis_nm.c: use LOGP() macro instead of LOGPC()
  * lchan_select.c: tune log level in lchan_select_by_type()
  * VTY: also print the active phan config in ts_dump_vty()
  * osmo_bsc_main.c: verify the physical channel mapping at startup
  * osmo_bsc_main.c: simplify computation of CCCH_CONFIG
  * osmo_bsc_main.c: fix CCCH_CONF computation: use pchan_from_config
  * abis_nm.c: fix error message in verify_chan_comb()
  * abis_nm.c: replace magic numbers with NM_CHANC_* constants
  * abis_nm.c: fix RSL connection timeout for trx->nr > 0

  [ Harald Welte ]
  * Cell Broadcast: CBSP and CBCH scheduling support
  * doc: update bsc_vty_reference.xml
  * manual: Update statements regarding SCCPlite
  * SMSCB: Send ETWS primary warning message via all dedicated channels
  * SMSCB: Send ETWS Primary Notifiation via RSL to BTS
  * check for osmo_fsm_register() error return value
  * check for osmo_ss7_init() error return value
  * manual: Fix copy+paste error
  * Move a_reset_fsm regstration to __attribute__((contructor))
  * exit(2) on unsupported positional arguments on command line
  * gsm_04_80: Avoid using deprecated API

  [ Pau Espin Pedrol ]
  * a_reset.c: Don't wait 2 seconds to send first BSSMAP RESET
  * bsc: gsm_08_08.c: Remove repeated conn not null check
  * bsc_subscr_conn_fsm: Cleanly clear BSSAP conn if associated channel closed during WAIT_CC
  * gsm_08_08.c: Mark func bsc_find_msc() static
  * sigtran: Set default remote ip to localhost instead of null
  * bsc_vty: Fix typo in 'no depends-on-bts' cmd
  * rsl: Send IE MS Power Param during CHAN ACT and MS PWR CTRL messages
  * rsl.c: Clean up some repeated use of long chains of pointers
  * rsl: Send IE MS Power Param to osmocom BTS models only
  * Remove unused API classmark_is_r99()
  * gsm_data.h: Remove unused field classmark from gsm_subscriber_connection
  * gsm_data.h: Remove unused func declarations
  * bsc: Adapt maximum MS Power Ctrl level based on band and MS Power class
  * cosmetic: bs11_config: clean trailing whitespace
  * bsc: Send MS Power Control msg upon max MS power change

  [ Martin Hauke ]
  * Fix some typos

  [ Oliver Smith ]
  * doc: osmux: use generated svg instead of pychart
  * debian, osmoappdesc.py, tests: switch to python 3

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 18:24:51 +0100

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
