osmo-msc (1.8.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * configure.ac: Depend on newer libosmo-ranap
  * Fill Last Used E-UTRAN PLMN Id when in CSFB
  * Use new osmo stat items/ctr APIs
  * sgs: Use available API to set vlr subscr LastUsedEutranPLMNId
  * vlr_sgs: Drop recorded LastEutranPlmnId when UE no longer associated
  * sgs_iface.c: Improve logging when paging over SGs
  * msc_a.c: Allow MSC_A_EV_CN_CLOSE in state MSC_A_ST_RELEASING
  * cosmetic: fix typos in comments
  * vlr_sgs.h: Set proper logic order of items in enum sgs_ue_fsm_state
  * vlr_auth_fsm.c: Simplify function auth_fsm_wait_ai_resync
  * vlr_sgs.c: Fix missing use_count decrease in vlr_sgs_imsi_detach
  * vlr_sgs: Balance use_count incremented in vlr_sgs_loc_update
  * cosmetic: Fix typo in comment

  [ Oliver Smith ]
  * contrib/osmo-msc.spec.in: depend on dbd-sqlite3
  * contrib/osmo-msc.spec.in: require libosmo-ranap >= 0.7.0
  * Revert "Turn some compiler warnings into errors"

  [ Vadim Yanitskiy ]
  * SMS-over-GSUP: notify sender if no transaction found
  * msc_tx_common_id(): fix potential NULL pointer dereference
  * libmsc: fix NULL pointer dereference in trans_lcls_compose()
  * libmsc: struct smsc: drop 'const' qualifier from bind_addr
  * smpp_smsc: use osmo_talloc_replace_string() in smpp_smsc_conf()
  * mncc: rework passing GCR over the MNCC interface
  * manuals: remove deprecated -C / --no-dbcounter options
  * Do not mention deprecated -M / --mncc-sock-path options
  * Do not mention deprecated -l / --database options

  [ Neels Hofmeyr ]
  * osmo-msc main: use osmo_select_shutdown()
  * ran_msg_a.c: use gsm0808_create_cipher2()
  * support A5/4 in Cipher Mode Command
  * support A5/4 in inter-BSC handover
  * improve logging on encryption, for Ciphering and HO
  * add sequence_charts/call_reestablishment.msc
  * add vlr_subscr_find_by_mi
  * implement CM Re-Establish for voice calls

  [ Eric Wild ]
  * vty: allow A5/4 encryption in config

  [ Philipp Maier ]
  * running.adoc: add section about MGCP configuration
  * msc_vlr_test: remove DLMGCP log messages from unit test output

  [ Harald Welte ]
  * smpp: Fix help string in vty for "alert-notifications"
  * smpp_mirror: Factor-out reset of SMPP read state
  * smpp_mirror: Don't allocate msgb's for unrealistic amounts of memory
  * Fix enabling of UMTS UEA encryption
  * Make UTRAN encryption algorithms configurable

  [ Keith Whyte ]
  * Add support for LCLS to the MSC

  [ Alexander Couzens ]
  * Validate the choosen UTRAN encryption algorithm

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 17:44:54 +0100

osmo-msc (1.7.0) unstable; urgency=medium

  [ Keith Whyte ]
  * Use GSM411_RP_* and not GSM48_CC_*
  * Trivial: code simplification, return early
  * vty: allow configuring db path from cfg file
  * Don't Store an SMS in the database when the ESME is not Bound

  [ Pablo Neira Ayuso ]
  * libmsc: SMS, Avoid premature RP-ACK to MS

  [ Vadim Yanitskiy ]
  * manuals/vty: update the VTY reference to reflect recent changes
  * libvlr: remove unused 'periodic_lu_timer' from struct vlr_subscr
  * osmo-msc: fix: properly initialize default values for MGW timers
  * msc/signal.h: remove unused (since the NiTB split up) signals
  * VTY: mark 'subscriber create imsi' command as deprecated
  * VTY: add osmo_tdef introspection and configuration commands
  * libvlr: use generic osmo_tdef API for T3250, T3260, and T3270
  * libmsc: move subscriber expiration timer T3212 to libvlr
  * vlr: remove unused parameter 'log_level' of auth_fsm_start()
  * vlr_sgs_fsm: add missing break, do not call to_null() twice
  * msc/sccp_ran.h: fix: do not pass -1 to osmo_rat_type_name()
  * VTY: cosmetic: make struct cmd_node for GSMNET_NODE static
  * libmsc/gsm_04_08: make use of msc_a in gsm48_rx_rr_app_info()
  * libmsc/gsm_04_08: use DRR in gsm48_rx_rr_pag_resp(), not DMM
  * libmsc/gsm_04_11.h: remove unused sms_deliver definition
  * osmo-msc: use stderr to print error messages, not stdout
  * libmsc/sdp: cosmetic: fix less-than-zero comparison of an unsigned value
  * SMS-over-GSUP: clarify error message about unexpected MO/MT SMS
  * SMS-over-GSUP: move net->sms_over_gsup check to gsm411_gsup_rx()
  * SMS-over-GSUP: respond with error if net->sms_over_gsup is false
  * SMS-over-GSUP: notify sender about unhandled GSUP messages
  * SMS-over-GSUP: notify sender about malformed GSUP messages
  * SMS-over-GSUP: notify sender in case of RPL delivery failure
  * gsm_04_14: fix off-by-one error in create_gsm0414_msg()
  * vty: fix vsub reference counting: call vlr_subscr_put()
  * debian/control: change maintainer to the Osmocom team / mailing list
  * mncc_builtin: cosmetic: fix coding style in int_mncc_recv()
  * mncc_builtin: log type of unhandled message in int_mncc_recv()
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * submit_to_sms(): fix the use of deprecated gsm_septets2octets()
  * ran_a_decode_cipher_mode_reject(): use gsm0808_get_cause()
  * fix _gsm48_cc_trans_free(): send MNCC REL.ind on Clear Request

  [ Neels Hofmeyr ]
  * fix segfault: unsolicited Paging Response
  * manual: add missing mention of MGCP in "Multiple instances"
  * manual: Multiple Instances: tweak MNCC, add missing SGs doc
  * manual: link to new common cs7-config.adoc, remove some dup of that
  * vlr_subscr_rx_id_resp(): dont assert on received MI type
  * msc_vlr_test_gsm_ciph.c: fix IMEISV MI: even number of digits, clear odd bit
  * use new osmo_mobile_identity API everywhere
  * add rudimentary NRI support for MSC pooling
  * add osmo-msc --vty-ref-xml: dump VTY ref XML to stdout
  * add comments to clarify some complete l3 details
  * vty 'show connection': show msc_a->via_cell instead of vsub->cgi
  * propagate Compl L3 Info Cell ID to the VLR subscriber record
  * make vty-transcrip-test: use $VTY_TEST var like osmo-bsc
  * refactor: move RESET Osmux TLV parsing to ran_msg_a.c
  * sgs_tx_loc_upd_resp_cb(): fix error handling for MI encoding
  * is_reset_msg: use proper enum for rc value
  * manuals: generate vty reference xml at build time
  * Clear Command: set cause value to "Call Control"
  * fix crash for unknown MI during Paging Response
  * fix MGCP timeout timer
  * drop duplicate ran_peer_find() vs ran_peer_find_by_addr()
  * fix comment in ran_peer.h
  * msc_vlr_tests: make independent of libosmocore talloc
  * gsm_network: drop unused neighbor_list member

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer

  [ Philipp Maier ]
  * doc: do not use random ip-address for MGW
  * msc_vty: remove emergency-call command from network
  * msc_a: add callref as call id to ASSIGNMENT REQ.
  * msc_ho: fix CALL IDENTIFIER in HANDOVER REQUEST
  * mncc_call: fix memory overrun
  * gsm_04_08: check return code of osmo_mobile_identity_decode_from_l3()

  [ Harald Welte ]
  * vlr_auth_fsm: Fix compilation with gcc-10
  * contrib/osmo-msc.spec.in: Enable SMPP in RPM builds
  * remove empty + unused ran_up_l2.c
  * osmo-msc.spec.in: Use %config(noreplace) to retain current config file
  * Send "BSSMAP CommonID" to tell BSC about the IMSI
  * Use osmo_fd_setup() whenever applicable
  * debian/control: Recommend installation of osmo-mgw
  * Use osmo_fd_*_{disable,enable}
  * README update. Explain more what it is than just the history

  [ Pau Espin Pedrol ]
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * ran_msg_iu.c: Avoid redefining osmo-iuh global variables
  * configure.ac: Drop trailing whitespace
  * Support setting rt-prio and cpu-affinity mask through VTY
  * Change default SCTP conn NULL->127.0.0.1 to localhost->localhost
  * Support sending IPv6 Transport Address in Assignment Command
  * Support handling IPv6 Transport Address in Assignment Complete
  * tests: Fix VTY results after switch to newer libosmo-mgcp-client
  * Support handling IPv6 Transport Address in Handover Request (Ack)
  * mncc: Support IPv6 addresses (new version mncc 7)
  * contrib/jenkins: Enable parallel make in make distcheck
  * main: generate coredump and exit upon SIGABRT received
  * .gitignore: Ignore new autofoo tmp files
  * tests: Explicitly drop category from log
  * tests: Replace deprecated API log_set_print_filename

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

  [ Alexander Couzens ]
  * Convert paging response timer into an osmocom own X4 timer

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 20:22:34 +0100

osmo-msc (1.6.1) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * libmsc/gsm_04_08.c: fix: verify MI before calling vlr_subscr_rx_id_resp()

  [ Neels Hofmeyr ]
  * vlr_gsup_rx: fix uninitialized rc
  * vlr.c: fix condition to check MSISDN presence

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 09 Jan 2020 12:29:08 +0100

osmo-msc (1.6.0) unstable; urgency=medium

  [ Philipp Maier ]
  * cosmetic: make function mncc_tx_to_gsm_cc static
  * sgs_iface: do not use SGsAP-MO-CSFB-INDICATION for CSFB return
  * msc_a: switch RAN type back to SGs when a CSFB-Call is cleared
  * sgs_iface: Accept messages with unknown TLV elements
  * paging: Send SGsAP-SERVICE-ABORT-REQUEST on paging timeout

  [ Neels Hofmeyr ]
  * add 'encryption uea 1 2' cfg / fix ttcn3 iu tests
  * mncc: send payload type matching chosen codec
  * memleak on cc setup errors
  * cc trans: make sure bearer cap is empty
  * fix segfault: don't send CC REL on NULL msc_a
  * vlr_lu_fsm: ignore ID_IMEISV during VLR_ULA_S_WAIT_HLR_UPD
  * tweak CC cause for incoming call to unattached nr
  * log, cosmetic: add "RR" to "Ciphering Mode Complete"
  * msc_vlr_tests: GSUP: don't care about extra IEs
  * gsm48_tch_rtp_create(): check against NULL mgcp_info
  * msc_a.c, CC trans: change a comment to a debug log
  * cosmetic: fix call_leg_ensure_ci() decl. arg name to match impl.
  * vlr: don't log about "gratuitous ID RESPONSE"
  * ran_dec logging: log message sizes on errors
  * msc_a fsm: ignore state chg to same state
  * fix error on BSSMAP Cipher Mode Complete L3 msg IE
  * catch GSUP auth result without auth_fsm
  * LOG_TRANS for CC: always log CC state
  * log which DTAP messages are sent to RAN
  * log: drop duplicate MNCC log
  * also log MNCC_SETUP_REQ
  * BSSMAP log tweak
  * log: RANAP encode: use RANAP message names instead of BSSAP
  * log: ran_msg_a: tweak a message name
  * send MNCC REL only if MNCC has actually started
  * fsm: use deferred deallocation
  * rtp_stream: sanely cancel MGW endpoint FSM notify
  * use osmo_sockaddr_str_is_nonzero()
  * CC: add error handling for CRCX responses
  * add msc_log_to_ladder.py
  * charts: add full MO and MT voice call diagram
  * cc trans: remove unused tch_rtp_create
  * fix msc_vlr_test_call.c
  * BSSMAP: decode Codec List (BSS Supported)
  * fail on invalid RTP address from MGW
  * msc_a CC: add some basic sanity tests
  * fix incoming call while Paging
  * add sdp_msg API: SDP parsing/composition
  * MNCC v6: add optional SDP to the socket protocol
  * msc_vlr_tests: better err logging for dtap msgs
  * msc_vlr_test_call.c: add MNCC logging
  * msc_vlr_tests: log descriptions in color with -v
  * msc_vlr_test_call: rename lu_utran_tmsi
  * gsup: indicate CN-Domain in SendAuthInfo Requests
  * sms db: when storing an SMS, retrieve the ID
  * sms log tweak

  [ Vadim Yanitskiy ]
  * libvlr/vlr.c: cosmetic: move message_type assignment
  * counters: clarify documentation for MSC_CTR_SMS_* entries
  * counters: clarify documentation for MSC_CTR_LOC_UPDATE_* entries
  * counters: clarify documentation for MSC_CTR_CALL_* entries
  * counters: polish documentation of cm_service_request / paging_resp
  * libmsc: fix potential NULL-pointer dereferences detected by GCC's LTO
  * libmsc/gsm_04_11_gsup.c: do not init a buffer in gsm411_gsup_mo_fwd_sm_req()
  * libmsc/gsm_04_11_gsup.c: fix SM-RP-OA encoding for MO SMS over GSUP

  [ Alexander Couzens ]
  * smpp_openbsc.c: check acl before deref it
  * vlr: gmm_cause_to_fsm_and_mm_cause() drop fsm_cause_p argument
  * make vlr_gmm_cause_to_mm_cause public
  * vlr_auth_fsm: on SAI use the GSUP provided GMM cause code

  [ Keith Whyte ]
  * Implement a global switch on the network to disable call waiting.

  [ Pau Espin Pedrol ]
  * vty: fix access to wrong argv in paging response-timer

  [ Oliver Smith ]
  * tests: only check IU configs if IU is enabled
  * osmoappdesc.py, tests: switch to python 3

  [ Martin Hauke ]
  * Fix some typos

  [ Harald Welte ]
  * check for osmo_ss7_init() error return value
  * manual: Fix copy+paste error
  * Check for osmo_fsm_register() error return value
  * msc: exit(2) on unsupported positional arguments on command line

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

osmo-msc (1.5.0) unstable; urgency=medium

  [ Max ]
  * Handle LCLS-NOTIFICATION message from BSS
  * Various logging fixes
  * VLR tests: use msgb_eq_data_print() for comparison
  * transaction: drop meaningless ti_flag of trans_assign_trans_id()
  * transaction: clarify magic 0xff transaction ID

  [ Vadim Yanitskiy ]
  * transaction.c: cosmetic: use 'default' branch in trans_free()
  * libmsc/ran_conn.c: cosmetic: use tabs instead of N * 8 spaces
  * transaction: change arguments of trans_find_by_sm_rp_mr()
  * libmsc/gsm_04_11.c: also assign SM-RP-MR to MO transactions
  * libmsc/gsm_04_11.c: introduce and use gsm411_assign_sm_rp_mr()
  * libmsc/gsm_04_80.c: use gsm0480_create_release_complete()
  * libmsc/gsm_04_80.c: add msc_send_ussd_release_complete_cause()
  * libmsc/osmo_msc.c: move connection ref-counting code to 'ran_conn.c'
  * transaction: fix description of trans_assign_trans_id()
  * transaction.h: use #pragma once as include guard
  * libmsc/gsm_09_11.c: implement guard timer for NCSS sessions
  * libmsc/ran_conn.c: add missing 'break' to OSMO_RAT_EUTRAN_SGS
  * libmsc/sgs_iface.c: fix SGS_STATE_NS11 counter reference
  * libmsc/sgs_vty.c: always write server address and VLR name
  * libmsc/msc_vty.c: drop dead comparison against null
  * libmsc/sgs_iface.c: fix copy-paste error
  * libmsc/sgs_iface.c: register sgs_vlr_reset_fsm on DSO load
  * libmsc/sgs_vty.c: don't print SGs socket error twice
  * libmsc: fix: properly initialize the SGs server
  * libmsc/sms_queue.c: fix memleak in smsq_take_next_sms()
  * tests/sms_queue: track the use of NULL talloc memory contexts
  * msc/gsm_data.h: drop unused SMS_HDR_SIZE macro
  * configure.ac: drop rudimentary check for -fvisibility=hidden
  * configure.ac: drop useless SQLite3 dependency
  * libmsc/db.c: print info about database name and libdbi version
  * libmsc/gsm_04_11.c: clarify implicit CP-ACK handling
  * libmsc/ran_peer.c: fix msgb memleak in ran_peer_rx_reset()
  * libmsc/gsm_04_11.c: properly handle TP-User-Data-Length
  * libmsc/gsm_04_11.c: fix double init of both SMR and SMC FSMs
  * libmsc/gsm_04_11.c: cosmetic: restructure gsm411_mm_send()
  * libmsc/gsm_04_08.c: fix: print proper length value
  * libmsc/gsm_04_08.c: refactor CM Service Request parsing
  * libmsc/gsm_04_08.c: clarify IMEI rejection in gsm48_rx_mm_serv_req()
  * libmsc/gsm_04_11_gsup.c: cosmetic: drop useless variable
  * tests/.../Makefile.am avoid redundant linkage with librt
  * libmsc/sgs_server.c: do not override rc in case of SCTP_SHUTDOWN_EVENT
  * libmsc/msc_ho.c: fix unreacheable check of MSC-T role allocation
  * libmsc/msc_a.c: fix possible NULL-pointer dereferences
  * sms_queue_test: assert return value of osmo_use_count_get_put()
  * libmsc/gsm_04_11.c: fix NULL-pointer dereference in gsm340_rx_tpdu()
  * libmsc/ran_msg_a.c: avoid ternary operator in struct initialization
  * libmsc/ran_msg_a.c: refactor ran_a_decode_lcls_notification()
  * libmsc/ran_msg_a.c: prevent chosen_encryption->key buffer overrun
  * libmsc/mncc_call.c: fix uninitialized access of stack memory
  * libmsc/ran_peer.c: fix msgb memleaks in ran_peer_down_paging()
  * libmsc/ran_peer.c: avoid unreasonable use of goto in ran_peer_down_paging()
  * libmsc/msc_vty.c: fix: use msub_for_vsub() in subscr_dump_full_vty()
  * libmsc/msc_vty.c: fix documentation of 'show subscriber id'
  * libmsc/msc_vty.c: use llist_count() in subscr_dump_full_vty()
  * libmsc/rtp_stream.c: prevent NULL-pointer dereference
  * libmsc/gsm_04_11.c: properly handle MMTS indication
  * transaction: accept trans_type enum in trans_log_subsys()
  * Use GSM23003_MSISDN_MAX_DIGITS from libosmogsm
  * libmsc/msc_vty.c: refactor 'show subscr / conn / trans' commands
  * libmsc/msc_vty.c: do not abuse strlen() to check char buffers
  * tests: share stubs.h from msc_vlr_test as stubs.c
  * Introduce initial unit test for db_sms_* API
  * libmsc/db.c: fix storing SMS with empty TP-User-Data
  * debian/control: add missing libdbd-sqlite3 to Build-Depends
  * libmsc/db.c: fix potential integer overflow
  * libmsc/db.c: introduce and use parse_sm_ud_from_result()
  * libmsc/db.c: warn user about SMS text truncation
  * libmsc/db.c: get rid of hard-coded SMS expiry threshold
  * libmsc/mncc_builtin.c: drop dummy switch in int_mncc_recv()
  * libmsc/gsm_0(4|9)_11_gsup.c: print error message if subscr is not known
  * gsup_client_mux_tx_error_reply(): fix: do not override IMSI
  * gsup_client_mux_tx_error_reply(): fix: do not omit session IEs
  * gsup_client_mux_tx_error_reply(): fix: do not omit message class IE
  * gsup_client_mux_tx_error_reply(): fix: do not omit SM-RP-MR IE
  * libmsc/gsm_09_11.c: fix: return trans from establish_nc_ss_trans()
  * libmsc/gsm_09_11.c: send GSUP PROS_SS ERROR message when needed
  * libmsc/gsm_04_08.c: clean up unused leftover includes
  * libmsc/msc_a.c: fix: remove dummy allstate_action of msc_a_fsm
  * libmsc/paging.c: avoid double zero-initialization
  * libmsc/paging.c: cosmetic: actually use default branch of switch
  * libmsc/paging.c: cosmetic: remove leading space in log line
  * libmsc/gsm_09_11.c: do not abuse LOG_TRANS() and early trans allocation
  * libmsc/gsm_09_11.c: log network-originated session establishment error
  * libmsc/gsm_09_11.c: drop rudimentary vsub->cgi.lai.lac check
  * libmsc/gsm_09_11.c: drop meaningless check for concurrent paging
  * libmsc/msc_net_init.c: pass pointer to gsm_network directly
  * libmsc/gsm_09_11.c: inform HLR/EUSE if Paging has failed
  * libmsc/gsm_09_11.c: properly handle OSMO_GSUP_MSGT_PROC_SS_ERROR
  * libmsc/gsm_09_11.c: avoid double zero-initialization of gsup_msg
  * libmsc/gsm_09_11.c: fix broken reference counting for vsub
  * libmsc/gsm_09_11.c: do not abuse LOG_TRANS() in gsm0911_rcv_nc_ss()
  * libmsc/gsm_09_11.c: do not suppress rc of gsup_client_mux_tx()
  * tests/msc_vlr: fix: do not pass RAT type to expect_bssap_clear()
  * libvlr/vlr.c: do not expire subscribers if periodic LU is disabled
  * gsm_04_11_gsup.c: fix broken reference counting for vsub
  * libmsc/gsm_04_11.c: do not abuse LOG_TRANS() in gsm411_alloc_mt_trans()
  * libmsc/ran_msg_iu.c: fix: properly handle SAPI IE of RANAP_DirectTransfer
  * Fix: add missing semicolons to OSMO_ASSERT statements
  * libmsc/msc_vty.c: print subscriber expiration time

  [ Harald Welte ]
  * Add SGs Interface
  * debian: depend on libsctp-dev
  * configure.ac: Check for libsctp
  * a_iface: Centralize/wrap BSSAP / N-DATA transmission
  * a_iface: use 'const' qualifier for ran_conn whenever possible
  * a_iface: Fix hexdumping of N-DATA.req
  * a_iface: OSMO_ASSERT() if we ever want to send BSSAP with invalid length
  * smpp_smsc: Call destroy_tlv() when using build_tlv()
  * smpp: Make libsmpp34 use talloc for its allocations
  * msub_check_for_release(): Initialize msc_role_a_c
  * SMPP: Don't accept password or system-id exceeding spec length
  * Iu: Send SMS over SAPI-3

  [ Philipp Maier ]
  * a_iface: Include CSFB Indication into BSSMAP CLEAR COMMAND
  * silent_call: use osmo_strlcpy() instead of strncpy()
  * msc_vty: add missing header file
  * vlr_sgs: fix SGs IMSI detech from non EPS services
  * vlr_sgs: start lu expiration timer on sgs eps detach
  * sgs_iface: fix nullpointer dereference
  * vlr_sgs_fsm: make sure vsub is marked used when LA is present
  * sgs_iface: detect and react to VLR/HLR failure

  [ Oliver Smith ]
  * debian: depend on libdbd-sqlite3
  * vlr_lu_fsm.c: assert for invalid events
  * vty: make retrieve-imeisv-early configurable
  * vlr: fix IMEI length
  * vlr: when setting IMEISV, also set IMEI
  * vlr: optionally send IMEI early to HLR
  * debian: create -doc subpackage with pdf manuals
  * contrib/jenkins.sh: run "make maintainer-clean"
  * vlr_lu_fsm.c: don't send LU reject twice

  [ Keith ]
  * Don't deliver alert notifications to ESME not yet bound.
  * Write configuration correctly from vty (alert notifications)

  [ Neels Hofmeyr ]
  * use only accepted ran_conns for new transactions
  * gsm_04_11_gsup.c: drop unused conn lookup
  * SMS queue: properly log failed attempts number
  * vty: add cmd subscriber ID sms delete-all
  * vlr_subscr_name(): use OSMO_STRBUF
  * enable osmo_fsm_term_safely(), apply logging changes
  * sms queue: avoid repeated Paging for a failed SMS
  * vlr_subscr: use osmo_use_count
  * add LOG_TRANS, proper context for all transactions
  * gsm_04_08_cc: improve logging for CC trans
  * smpp: fix vlr_subscr use count bugs
  * vlr subscr get/put: also check against NULL
  * fix various missing line endings in logging
  * gsm_04_11: use gsm48_decode_bcd_number2(), evaluate rc
  * large refactoring: support inter-BSC and inter-MSC Handover
  * GSUP: include terminating nul in inter-MSC source/destination name
  * rename bscconfig.h to config.h, cleanup
  * fix regression: fix internal MNCC operation
  * vty/cfg: add missing write-back of inter-BSC and inter-MSC HO config
  * comment: apply function renames to message cycle explanation
  * ran_a_make_handover_request(): allow no encryption
  * make msc_a_vsub() and others NULL-safe
  * no HO call forwarding if no RTP stream
  * LOG_TRANS: store subsys in trans, unify USSD logging back to DMM
  * call_leg: remove unused event MSC_EV_CALL_LEG_RTP_RELEASED
  * call_leg: document the parent_event_* items
  * add DSS logging category
  * silence error messages about HANDOVER_END not permitted
  * build osmo-msc: add "missing" LIBASN1C_LIBS
  * minor comments in msc_vty.c
  * manual: adjust and fix auth and ciph docs
  * do not force encryption on UTRAN
  * add msc_vlr tests for UMTS without ciphering
  * doc/sequence_charts/mncc_fsm.msc: add SIP messages, tweak
  * doc/sequence_charts: fix naming of mncc_fsm to mncc_call
  * vlr_lu_fsm: fix missing event for IMEISV

  [ Sylvain Munaut ]
  * libmsc: Allow different channel types to be requested as silent calls
  * libvlr: Allow 2G auth tuples to be re-used without going through AUTH
  * make LOG_TRANS() NULL-safe again

  [ Pau Espin Pedrol ]
  * debian/control: Fix typo
  * sms_queue: Print dest msisdn instead of unknown subscriber
  * ran_peer: Move rx_reset_ack logic into its own func
  * vty: Add option to enable osmux towards BSCs
  * bssap: Detect BSC Osmux support on RESET (ACK) recv
  * a_iface: Announce Osmux support on RESET (ACK) send
  * Request Osmux CID and forward it in Assign Req and Assign Compl
  * db: Fix call to mempcy with NULL src ptr
  * db_sms_test: Do not print exact memcmp result
  * db_sms_test: Remove libdbi expected driver load errors
  * sms_queue.c: Improve misleading log line
  * doc: Add Osmux documentation to User Manual
  * Remove undefined param passed to logging_vty_add_cmds
  * Fix dependency version requirements

  [ Omar Ramadan ]
  * Allow MME name preformatted as FQDN in SGsAP

  [ Alexander Couzens ]
  * remove msc specific db counters
  * replace osmo_counter with stat_items

  [ Eric Wild ]
  * libvlr: fix sgsn tmsi creation, replace constant with define
  * turn -Werror=null-dereference into a warning

  [ Daniel Willmann ]
  * manuals: Add script to update vty/counter documentation from docker
  * manuals: Update counter/vty documentation
  * manuals: Include overview chapter about counters

  [ Thorsten Alteholz ]
  * fix spelling detected by lintian

  [ Keith Whyte ]
  * Set coding in mncc_set_cause()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 08 Aug 2019 16:01:38 +0200

osmo-msc (1.3.1) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix build: apply msgb_wrap_with_TL() rename

 -- Harald Welte <laforge@gnumonks.org>  Tue, 22 Jan 2019 16:02:11 +0100

osmo-msc (1.3.0) unstable; urgency=medium

  [ Philipp Maier ]
  * vlr_access_req_fsm: use correct cause codes
  * a_reset: cleanup + remove dead code
  * mgcp: do not start connections in loopback mode
  * mgcp: hack to keep IuUP working
  * mgcp: use codec information returned with ASSIGNMENT COMPL.
  * doc: update mgw settings in example config file
  * mncc: fix byte ordering of IP-Address in mncc
  * msc_mgcp: move mncc struct initalization to where its actually needed
  * gsm_04_08_cc: Add global guard timer for MNCC
  * cosmetic: remove forgotten debug printf
  * vlr: drop unused is_ps parameter in vlr_subscr_req_lu()
  * osmo_msc: remove unused parameter from msc_dtap()
  * gsm_subscriber: make function msc_paging_request() static
  * msc_vty: display subscriber flags
  * msc_vty: display current RAN type
  * msc_vty: also show IMEI and IMEISV
  * gsm_04_08: Fix nullpointer deref

  [ Stefan Sperling ]
  * remove redundant unconditional PKG_CHECK_MODULES for libsmpp
  * implement periodic Location Update expiry in the VLR
  * VLR: reject overlong IMSIs in ID RESP messages
  * fix a use-after-free in msc_mgcp.c:_handle_error()
  * detach cancelled subscribers from VLR
  * make gsup ipa name configurable in osmo-msc.cfg
  * provide software version information to gsup peer
  * require 'ipa-name' option to be set via config file
  * use vty->type instead of local variable

  [ Vadim Yanitskiy ]
  * libmsc/ussd.c: FIX: properly indicate errors
  * libmsc: properly name the MSC_CONN_USE token for SS
  * libmsc/ussd.c: use connection ref-counting and transactions
  * Use proper naming for GSM TS 09.11 implementation
  * libmsc/gsm_04_08.c: expose gsm48_tx_simple()
  * libmsc/gsm_09_11.c: properly indicate transaction errors
  * libmsc/gsm_04_80.c: make the API abstract from ss_request struct
  * .gitignore: ignore src/libgsupclient/gsup_test_client
  * configure.ac: drop unused dependencies
  * msc_vlr_tests: don't abuse USSD-request to conclude connections
  * libvlr/vlr.c: forward unhandled GSUP messages towards MSC
  * libmsc/gsm_09_11.c: forward SS/USSD messages to HLR over GSUP
  * libmsc/gsm_09_11.c: implement network-initiated sessions
  * libmsc/gsm_09_11.c: properly handle MS-initiated release
  * libmsc/gsm_09_11.c: introduce rate counters for NC_SS sessions
  * libmsc/gsm_09_11.c: introduce counter for active sessions
  * msc/signal.h: use #pragma once include guard
  * msc/rrlp.h: use #pragma once include guard
  * libmsc/rrlp.c: add missing include
  * libmsc/gsm_09_11.c: clean up the local GSM 04.80 API
  * RRLP: properly name the init function
  * RRLP: fix: actually init the RRLP signal handlers
  * RRLP: migrate and share mode definitions from msc_vty.c
  * RRLP: print log when sending a position request
  * osmo-msc: free the VTY talloc context on exit
  * osmo-msc: track the use of talloc NULL memory contexts
  * libmsc/db.c: cosmetic: mark missing breaks in switch as intended
  * msc/gsm_04_11.h: drop unused sms_next_rp_msg_ref()
  * msc/gsm_04_11.h: use forward-declaration for _gsm411_sms_trans_free()
  * msc_vlr_tests.c: drop duplicating DMM category definition
  * libmsc/gsm_04_11.c: don't pass msgb to gsm411_rx_rp_{ack|error}
  * libmsc/gsm_04_11.c: refactor RP-DATA header validation
  * libmsc/transaction.c: cosmetic: fix typo
  * libmsc/gsm_09_11.c: drop redundant assertion of stored msgb
  * libmsc/gsm_04_11.c: refactor MT SMS message handling
  * libmsc/gsm_04_11.c: fix: always use SAPI 3 for MT SMS
  * libmsc/VTY: introduce kill-switch for routing SMS over GSUP
  * libmsc/gsm_04_11.c: forward MO SMS messages over GSUP
  * libmsc/gsm_04_11.c: accept MT SMS messages over GSUP

  [ Pau Espin Pedrol ]
  * msc_main: Fix typo in description of version param
  * jenkins.sh: Use --enable-werror only when iu support is disabled
  * osmo-msc: Improve shutdown due to signal and print talloc report on exit
  * msc: Set talloc ctx for osmo_signal structures
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * msc: vty: Fix integer printf formatting

  [ Daniel Willmann ]
  * git-version-gen: Don't check for .git directory
  * OsmoBSC/HLR/MSC: Fix default config file name

  [ Harald Welte ]
  * libmsc: move L3 call-control to separate C file (gsm_04_08_cc.c)
  * migrate to oap_client in libosmogsm
  * Remove local libgsupclient; Use libosmo-gsup-client from osmo-hlr
  * gsm0407_is_duplicate(): Handle error ret of gsm0407_pdisc_ctr_bin()
  * share chapters/gsup.adoc from OsmoSGSN to OsmoMSC + OsmoHLR
  * vty-ref: Update URI of docbook 5.0 schema
  * add SGs / CSFB related dot + msc files

  [ Neels Hofmeyr ]
  * vlr_access_req_fsm.c: use osmo_strlcpy and avoid compiler error
  * Iu MGCP: no need to loopback on the cn side
  * cosmetic: typos in log and comment
  * use __FILE__, not __BASE_FILE__
  * cosmetic: mute "COMPLETE_LAYER_3 not permitted"
  * store classmark in vlr_subscr, not conn
  * msc_vlr_tests: cosmetically tweak perm algo printing
  * A5/n Ciph: request Classmark Update if missing
  * fix Classmark Update without VLR subscriber
  * vty: add SCCP related vty commands
  * GSUP client: send CN domain IE on LU request
  * lu_fsm: result cb: use proper cause type (warning/coverity)
  * Importing history from osmo-gsm-manuals
  * add OsmoMSC manual
  * add OsmoHLR manual, OsmoHLR VTY reference
  * refactor Makefile build rules, don't use the FORCE
  * OsmoMSC: update VTY reference
  * msc: update vty reference
  * drop unused gsm_subscr_conn->mncc_rtp_bridge
  * drop unused gsm_network->handover.active
  * drop unused openbscdefines.h
  * drop unused SUBSCR_CONN_E_INVALID
  * drop unused gsm0408_allow_everyone() declaration
  * drop unused tests/db/*
  * cosmetic: subscr_conn_fsm_auth_ciph() should be static
  * adjust copyright in subscr_conn.c
  * populate gsm_subscriber_connection->encr during Ciph
  * rename gsm_encr to geran_encr, it is only applicable on GERAN
  * drop msc_compl_l3() return value
  * rename gsm_subscriber_connection to ran_conn
  * rename some RAN conn related stuff to ran_conn_*
  * move subscr_conn.c to ran_conn.c
  * move ran_conn declarations to new ran_conn.h
  * combine several small .h in msc_common.h
  * cosmetic: drop some unused opaque struct defs
  * move gsm_auth_tuple to vlr.h as vlr_auth_tuple
  * GSM_EXTENSION_LENGTH -> VLR_MSISDN_LENGTH
  * drop cruft from gsm_subscriber.h
  * move gsm_cbfn to gsm_subscriber.h, the only user
  * python tests: use py shebang instead of $(PYTHON)
  * make: prepare for adding transcript tests
  * add test_nodes.vty transcript test
  * cosmetic: msc_main.c: default args definition style
  * msc_main: mncc: move mncc socket decision to after read_cfg
  * vty: mncc cfg: separate the 'mncc' from 'mncc-guard-timeout'
  * add VTY commands: mncc internal / external (== -M)
  * ASS-COMPL: do not fire Sec Mode Compl event
  * move ASS-COMPL MGCP handling out of a_iface_bssap.c
  * drop gsm48 RR ciph mode compl from permitted initial messages
  * LU: do not always invoke sub_pres_vlr_fsm_start()
  * Revert "move ASS-COMPL MGCP handling out of a_iface_bssap.c"
  * log: by default start with all categories on LOGL_NOTICE
  * tweak comment to indicate sub_pres_vlr fsm as dead code
  * vlr_lu_fsm: drop unused out_state INIT -> WAIT_IMEI
  * comment: vlr: put the 'balancing' comment closer to the put()
  * vty: show subscriber: put() before printing the use count
  * fix msc_mgcp_fsm_evt_names: two missing events
  * mgcp log tweak: say RAN, not BTS, like surrounding logging
  * fix test_nodes.vty after libosmo-mgcp-client vty changes
  * cosmetics in msc_mgcp_call_release()
  * release RTP stream only for matching CC transaction
  * fix vlr ops.subscr_assoc re-association
  * remove code dup: add msc_mgcp_try_call_assignment()
  * move trans->assignment_done to cc.assignment_started
  * fix: incoming call during ongoing call
  * abort assignment on Assignment Failure
  * vlr: auth_fsm: make sure vsub->auth_fsm = NULL when it terminates
  * vty cfg: move 'ipa-name' from 'msc' to 'hlr' section
  * use osmo_rat_type from libosmocore
  * use mgcp-client configured endpoint domain name
  * use osmo_lu_type_name() from libosmocore
  * add LOG_RAN_CONN() to use the conn->fi->id for context
  * rx CM Service Req: reject double use sooner
  * refactor log ctx for vlr_subscr and ran_conn
  * mm_rx_id_resp(): use osmo_mi_name()
  * tweak fsm_msc_mgcp FSM and FI name
  * err log: fully log MS supported A5 algos on mismatch
  * msc_vlr_tests: tweak logging in verbose mode

  [ Keith ]
  * libmsc/mncc_sock.c: Add lchan_type_offset in queue_hello()
  * Make alert notifications vty configurable per ESME
  * Cosmetic: Fix spelling in smpp vty

  [ Max ]
  * Properly parse cause in cipher mode reject
  * Add counters for BSSMAP cipher mode messages
  * vty: add command to show all known BSC
  * msc_vlr_tests: tweak conn_exists()
  * Fix build with latest libosmocore
  * Use BSSAP-specific TLV parser from libosmocore
  * Use libosmocore to function to parse cipher mode reject cause
  * cosmetic: drop duplicated #include
  * cosmetic: drop unused variable
  * CC: log more details about unhandled message/state
  * VLR tests: add logging macro with explicit value description
  * VLR tests: avoid leaking LAC access details
  * Use proper type for tch_rtp_connect() parameter
  * VLR: drop unused struct members
  * Remove redundancy in LAC processing
  * MNCC: use log wrapper for call processing
  * Constify transaction helpers parameters
  * Use explicit protocol discriminator for NC SS/USSD session
  * Fix trans_has_conn() doxygen description
  * Enable SMS-related log in VLR tests
  * MNCC: use explicit struct type in gsm_call
  * SMS: remove code duplication in transaction init
  * vty: make 'sh connect/transact' readable again

  [ Keith Whyte ]
  * libmsc: Don't send SMS STATUS REPORT locally if the ESME accepted it.

  [ Alexander Couzens ]
  * OsmoMSC: add rate counter documentation

  [ Oliver Smith ]
  * build manuals moved here from osmo-gsm-manuals.git
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd
  * Cosmetic: msc_vty: remove redundant "0 =", "1 ="
  * msc_vty.c: make check-imei-rqd configurable
  * vlr_core.h: remove duplicate declarations
  * VLR: vlr_subscr_{,msisdn_or_}name: const vsub arg
  * VLR: send CHECK-IMEI to EIR/HLR

  [ Ivan Kluchnikov ]
  * libmsc/transaction: introduce trans_find_by_sm_rp_mr()

  [ gsmevent admin ]
  * gsm_04_08_cc.c: drop non-sensible error message

 -- Harald Welte <laforge@gnumonks.org>  Mon, 21 Jan 2019 00:16:26 +0100

osmo-msc (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * msc_vlr_tests: fix rebuild: rebuild when src/ libs were rebuilt
  * cosmetic: vlr: rename auth_tuple_max_use_count to _reuse_
  * tests: add msc_vlr_test_authen_reuse
  * vty: make auth tuple reuse configurable
  * vty: drop deprecated 'logging level sms...'
  * defaults: assign TMSI by default
  * vty: skip installing cmds now always installed by default
  * examples: apply mgcp_client vty rename from 'mgcpgw' to 'mgw'
  * vlr: auth_fsm_start: check return value of fsm alloc
  * add --enable-sanitize config option
  * rate_ctr: don't use . as separator
  * sub_pres_vlr_fsm_start: fix heap use after free
  * vlr_gsupc_read_cb: fix use after free of GSUP msgb
  * subscr_conn: don't close after conn timeout
  * vlr_subscr_conn_timeout(): don't fire events to discarded fi
  * cosmetic: msc_vlr_tests: add comment to show expected tallocs
  * sms_queue_test: sanitize: clean up talloc contexts when done
  * cosmetic: log: CC state transition: log trans id and subscr
  * cosmetic: log: CC trans_alloc: log trans_id and subscr, not memory addrs
  * cosmetic: debug log: mncc: detached subscr: show subscriber
  * msc_vlr_tests: fix test nr arg: clear errno before strtol()
  * msc_vlr_tests: set a valid lac for fake conns
  * use only 0.23.1 as point code for both A and Iu
  * subscr_conn: introduce usage tokens for ref error tracking
  * cosmetic: log error when using a conn that's in release
  * add msc_vlr_test_call to reproduce a sanitizer error
  * fix use after free: missing conn_get on CC paging response
  * sms db: don't attempt to query pending SMS for unset MSISDN
  * sms db: properly quote MSISDN in various SQL queries
  * sms.db: silence libdbi warnings on out-of-range index
  * fix vty write: add missing 'authentication optional/required' output
  * compiler warning: drop double 'const' in a_iface_tx_cipher_mode()
  * debug log: a_iface_tx_cipher_mode(): log cipher and key
  * cosmetic: msc_vlr_tests: log SMS details when invoked with -v
  * vlr: debug log: log Ciphering Mode details
  * fix BSSMAP Cipher Mode Cmd: properly set permitted algorithms
  * cosmetic: move translation of vlr_ciph into msc_vlr_set_ciph_mode()
  * cosmetic prep: publish vlr_use_umts_aka() decision
  * cosmetic prep: tell vlr_ops.set_ciph_mode() whether UMTS AKA is used
  * drop unused T* timers (BSC land, not MSC)
  * cosmetic: msc_paging_request: drop obsolete comment
  * fix GSM-Milenage in presence of 2G keys
  * compiler warning: extend #if 0 to include unused array
  * a_iface_bssap: compiler warning: cast const away from TLV val for l2h
  * smpp_smsc: fix truncated string copy into bind_r.system_id
  * log: a_iface.c: revisit logging, use LOGPCONN
  * cosmetic: rename sccp_rx_udt and sccp_rx_dt to a_*
  * fix paging: add timeout to discard unsuccessful paging
  * fix: properly cancel all Paging on IMSI Detach
  * a_iface_tx_assignment: fix log lvl for "Sending Assignment..."
  * fix build: missing LIBOSMORANAP flags in libmsc
  * drop unused libmsc/meas_feed.h
  * cosmetic: gsm_network_init(): imply default 001-01 PLMN
  * implement support for 3-digit MNC with leading zeros
  * vlr: fix post-auth LU failure handling
  * vlr_lu_fsm: guard against using the wrong fi
  * msc_vlr_tests: revert IMSI parameter and test nr output
  * msc_vlr_test_gsm_ciph: drop unused function
  * msc_vlr_tests: make all test functions static
  * msc_vlr_tests: improve cipher mode coverage
  * fix: clear vlr_subscr->msc_conn_ref when the conn is discarded
  * vty: drop unused commands
  * vty: add 'msisdn' as alias for 'extension'
  * vty: add 'subscriber ... paging' cmd
  * msc_main: do not say 'osmo-nitb' in the usage
  * silent call: clarify rc and error messages logged on vty
  * msc_vlr_tests: clearly separate Ciph Mode from Security Mode checking
  * msc_vlr_test_gsm_ciph: add test for GSM AKA in UMTS environment
  * vlr: fix GSM AKA in a UMTS AKA capable environment
  * vlr auth: gracefully reject malformed auth response
  * gsm48_rx_mm_auth_resp(): pass is_r99 from classmark, not response size
  * cosmetic: gsm48_rx_mm_auth_resp(): log 'UMTS AUTH', not 'R99 AUTH'
  * msc_vlr_test_umts_authen: test response with too short RES
  * msc_vlr_test_umts_authen: test response with too long RES
  * msc_vlr_test_umts_authen: test response with only SRES half of RES
  * cosmetic: vlr_auth_fsm: clarify decision on UMTS AKA or GSM AKA
  * cosmetic: vlr_auth_fsm: log RAN and size along with SRES/RES
  * msc_vlr_tests: add test_a5_3_not_supported
  * configure: add --enable-werror
  * vlr_ciph_result: fix use after free of imeisv
  * trans_free: safeguard against a still running CC timer on free
  * cosmetic: vlr_auth: log decision to send UMTS or GSM AKA challenge
  * cosmetic: msc_vlr_tests: enable CC logging in debug
  * cosmetic: rename conn_fsm "bump" event to "release_when_unused"
  * msc_vlr_tests: add CC Release test and test to catch OS#2779
  * cosmetic: gsm_04_08.c: drop unused struct gsm_lai
  * trans_free: tear down conn when last transaction is done
  * dissolve libcommon,libcommon-cs: clean up vty definitions
  * cosmetic: msc_vty.c: use static gsmnet instead of gsmnet_from_vty()
  * dissolve libcommon: drop unused bsc_version.c
  * dissolve libcommon: drop debug.c
  * dissolve libcommon: move talloc ctx into msc_main.c, drop talloc_ctx.c
  * dissolve libcommon: drop gsm_subscriber_base.c, move vlr_subscr_* to vlr.c
  * dissolve libcommon: drop gsm_data.c, move code to libmsc
  * rename libcommon to libgsupclient
  * dissolve libcommon-cs: mv a_reset.c to libmsc
  * dissolve libcommon-cs: move gsm_network_init() to libmsc
  * dissolve libcommon-cs: move gsm48_* code to libmsc, drop sms_next_rp_msg_ref()
  * remove empty libcommon-cs
  * gsup_test_client: gsupc_read_cb: fix uninitialized value 'io'
  * use osmo_init_logging2() with proper talloc ctx
  * drop some dead definitions (gsm_data.h, gsup_client.c)
  * test_reject_concurrency: missing assert
  * cosmetic: rx_bssmap: read message type once into local var
  * cosmetic: rename gsm_subscriber_connection->conn_fsm to ->fi
  * cosmetic: rename subscr_conn_from to complete_layer3_type
  * subscr_conn: store complete_layer3_type in conn, not FSM event arg
  * unify allocation of gsm_subscriber_connection
  * trans_free: drop bad assertion
  * msc_vlr_test_call: reproduce OS#3062
  * CC: intentionally release T308 on BSSMAP Clear Request from BSC
  * refactor subscr_conn and subscr_conn_fsm de-/alloc
  * properly receive BSSMAP Clear Complete and Iu Release Complete
  * fix BSC Clear Request
  * cosmetic: embed compl_l3_type in FSM id
  * refactor VLR FSM result handling
  * msc conn ref counts: log human readable list of conn owners
  * cosmetic: use enum ranap_nsap_addr_enc instead of int

  [ Harald Welte ]
  * sms_route_mt_sms: Don't return uninitialized variable
  * MNCC: Add input validation
  * Log difference between SETUP and EMERGENCY_SETUP
  * Emergency Call: Set MNCC_F_EMERGENCY flag
  * Refuse Emergency Calls by IMEI with proper CM SERVICE REJECT Cause
    (Closes: #2866)
  * Reject any CM SERVICE we don't support
  * Remove traces of meas_feed
  * Fix msc_vlr test results (.err) for new libosmocore GSM48_PDISC names
  * Properly reject CM Re-Establishment Request
  * msc_cipher_mode_compl: Handle CIPH MOD COMPL without L3 message
  * remove unused paging.h and osmo_bsc_grace.h
  * debug: Remove code for filters that don't exist in OsmoMSC
  * remove traces of bsc_subscriber
  * jenkins.sh: Don't depend on osmo-ggsn
  * Massive removal of unused code/structs/headers
  * remove unused ipaccess.h
  * remove dead code in auth.h / auth.c
  * remove dead header files bsc_msc.h, bsc_msc_data.h and bsc_rll.h
  * signal.h: Remove unused/dead signal definitions
  * remove dead ctrl.h header file
  * debug: Remove dead log categories
  * Shift ciphering algorithm selection from VLR to MSC
  * Permit a set of multiple different A5 ciphers
  * MSC: Intersect configured A5 algorithms with MS-supported ones
  * Change GSUP re-connect interval to 1s
  * Implement checks for duplicate uplink UL L3 message (Closes: #2908)
  * VTY: Add 'show connections' and 'show transactions' commands
  * a_reset: Add additional "a_reset_alloc" argument
  * Don't answer to BSC-originated RESET with another RESET
  * cosmetic: Use msgb_hexdump*() rather than manual osmo_hexdump() on msg
  * a_iface: Reduce log levels
  * a_iface_bssap.c: Use LOGPCONN() whenever possible
  * a_sccp_rx_dt(): Don't print hexdump of message multiple times
  * cosmetic: a_iface: Harmonize log statements
  * cosmetic: No need for 'break' after 'return'
  * a_iface: centralize lookup of subscriber_conn
  * cosmetic: a_iface: More logging harmonization
  * a_iface: Add copyright statement (after recent contributions)
  * Introduce new BSSAP logging category/subsystem
  * a_iface: Fix heap-use-after-free by cleaning up msgb ownership
  * Add VTY command to configure destination MSISDN for emergency calls
  * a_iface: Fix heap-use-after-free in a_clear_all()
  * MGCP: Response code 250 is *not* an error for DLCX
  * a_iface: s/Abis/L3/ for speech version/preference fields
  * a_iface: Consistent and understandable function names
  * MT Calls: Copy bearer capabilities from NNCC primitive to trans
  * MNCC: Copy bearer_cap from MNCC to gsm_trans
  * gsm_data: remove unused gsm_subscriber_connection members
  * remove bsc_api.h and all users - they're all dead code
  * dead code removal
  * remove unused dyn_ts_allow_tch_f VTY option
  * osmo-msc: Add talloc context introspection via VTY
  * remove unused VTY command "location updating reject cause"
  * remove unused "authorized-regexp" VTY command
  * remove unused "auth policy" VTY command
  * remove dead code (gsm_parse_reg)
  * BSSAP: Return error code if COMPL L3 with no or too short L3 payload
  * a_iface_bssap: Treat inbound RESET as implicit RESET ACK
  * a_iface: If L3/DTAP returns error in COMPL L3, close SCCP connection
  * DTAP: Ensure proper DLCI is used in MSC-originated DTAP
  * Permit any Sender MSISDN when sending SMS from VTY
  * smpp: Unset esme->acl on socket close
  * sms_queue: fix use-after-free on 'pending'

  [ Alexander Couzens ]
  * debian/rules: remove doublicated project name in example files
  * libmsc/vty: don't access old bsc rate counters

  [ Philipp Maier ]
  * reset: remove name variable from reset context
  * cosmetic: move log message to else branch
  * cosmetic: add missing spaces
  * cosmetic: remove duplicate logging
  * mncc: re-add lchan members to structs
  * mncc: remove deprecated commandline option.
  * a_iface: correct data type for a.conn_id in gsm_subscriber_connection
  * mgcp: use osmo-mgw to switch rtp streams
  * increase RAN timeout in MGCP FSM
  * a_reset: Add FSM event names
  * msc_mgcp: Add FSM event names
  * a_iface: fix BSSMAP reset handling
  * msc_mgcp: fix mgw timeout handling
  * mgcp: be sure that pending mgcp transactions are canceled before free
  * msc_mgcp: use more conceise error msg on truncation
  * mcgp: let the MGW allocate the MGCP endpoint
  * cosmetic: remove disabled (debug) code gsm_04_08.c
  * msc_mgcp: to not access higher layers after release
  * cosmetic: remove unused variable
  * msc_mgcp.c: log endpoint name instead of pointer
  * msc_mgcp: do not send wildcarded DLCX messages

  [ Max ]
  * Use osmo-ggsn instead of openggsn in jenkins tests
  * Add basic CTRL test
  * Remove obsolete ./configure option
  * Remove unneeded .py scripts
  * Enable sanitize for CI tests
  * Migrate from OpenSSL to osmo_get_rand_id()
  * VLR: remove unused parameter
  * VLR: log subscriber update
  * Add control command to expire subscriber
  * VLR: constify GSUP-related function parameters
  * cosmetic: log prim operation as text
  * Remove unused code
  * Wrap osmo_strlcpy() calls
  * Fix whitespace issues
  * Constify msc_subscr_conn_is_accepted() parameter
  * Move IMSI into test parameters
  * VLR tests: mark static test functions as such
  * Expand VLR tests
  * VLR tests: don't fail via assert
  * VLR tests: remove weird code
  * VLR tests: always print test parameters
  * VLR tests: move network init into function
  * GSUP: check osmo_gsup_encode() result
  * VLR: fix potential NULL dereference

  [ Alexander Huemer ]
  * Add missing CFLAGS
  * Remove utils imported from openbsc, fix building remaining util smpp_mirror

  [ Pau Espin Pedrol ]
  * libmsc: db.c: Replace dbi APIs marked as deprecated
  * libmsc: msc_vty: Fix compilation warning
  * libmsc: bssap: Fix typo in log message
  * libmsc: bssap: Refactor rx paths to to avoid parse_tlv code duplication
  * libmsc: bssap: Catch TLV parse failures
  * libmsc: bssap: Remove fixme and properly update msgb tail
  * msc_mgcp.c: Fix several wrong ptr printf fmt
  * contrib: osmo-msc.service: Depend on osmo-mgw.service
  * smpp_smsc_conf: Fix heap-use-after-free
  * Remove unused GSM_PAGING_OOM
  * setup_trig_pag_evt: Remove uneeded default case in switch statement
  * setup_trig_pag_evt: Always log correct paging failure case
  * setup_trig_pag_evt: Fix heap-use-after-free

  [ the 34c3 gsm team ]
  * smpp_smsc.c: don't talloc_strdup NULL pointers

  [ Vadim Yanitskiy ]
  * msc/gsm_04_80.h: clean up useless declarations
  * msc/gsm_04_80.h: cosmetic: whitespace fix
  * msc/gsm_04_80.h: use '#pragma once' instead of includes
  * src/libmsc/ussd.c: drop useless forward declaration
  * ussd.h: cosmetic: remove useless comment
  * ussd.h: cosmetic: use '#pragma once' include guard
  * libmsc/gsm_04_80.c: drop unused 'in_msg' argument
  * libmsc/ussd.c: cosmetic: correct log level and message
  * libmsc/ussd: don't overwrite rc if decoding failed
  * tests/msc_vlr: fix expected SS message names

  [ Stefan Sperling ]
  * Improve an error message in db_init().
  * Delete SMS from the database once they were sent successfully
  * Store/retrieve SMS validity time in the SMS datebase
  * Fix value of stored SMS validity time.
  * Add a VTY command which deletes all expired SMS.
  * Accept SMS for any receiver
  * Delete expired SMS automatically.
  * Make sending an SMS to an unknown subscriber B work over SMPP.
  * enable osmo_fsm vty commands in osmo-msc vty
  * Track libosmocore API change in osmo-msc.
  * restore sending of optional MM info messages
  * use libosmocom to parse cell identifier in bssmap_rx_l3_compl()

  [ Daniel Willmann ]
  * iucs: Add a function to return the connection ID for the IU SCCP conn
  * libmsc: Add a function to return a unique ID of the subscriber conn
  * libmsc: Pretend MNCC requested release in handle_error()

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

osmo-msc (1.1.2) unstable; urgency=medium

  * Depend on both libosmo-sigtran-dev and libosmo-sccp-dev
  * Debian: require minimum versions of packages we depend on

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

osmo-msc (1.1.1) unstable; urgency=medium

  * Debian: Depend on libosmo-sigtran-dev, not libsomo-sccp-dev!

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

osmo-msc (1.1.0) unstable; urgency=medium

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

  [ Neels Hofmeyr ]
  * build: check for -lgsm
  * am: msc_vlr_tests: use AM_LDFLAGS instead of COMMON vars
  * jenkins: fix build: osmo-mgw from master, not pre_release
  * jenkins: drop unused build matrix vars, always --enable-smpp
  * configure.ac: fix to "AC_INIT[osmo-msc]"
  * rewrite README
  * rename openbsc.pc to osmo-msc.pc
  * debian: fix web and VCS links, tweak osmo-msc.install
  * drop files unrelated to osmo-msc
  * rename include/openbsc to include/osmocom/msc
  * doc/examples: add detailed cs7 config examples
  * use separated libosmo-mgcp-client, apply rename to mgcp_client_*
  * ctrl: subscriber-list-active: list only attached subscribers
  * debian: fix dependency to mgcp library
  * main: remove cmdline args no longer available for osmo-msc
  * vty: fix: missing default cmds at hlr node
  * ctrl: remove unimplemented cmds subscriber-{modify,delete}
  * fix build: remove obsolete header legacy_mgcp/mgcp.h
  * fix debian: fix erratic doc/examples install path
  * fix memory leak: vlr: vlr_gsupc_read_cb() must msgb_free()
  * fix vty tests: long timeout due to unreachable STP address
  * cosmetic: vlr: declare a struct in .h; drop unused header
  * add ';' after OSMO_ASSERT()

  [ Philipp Maier ]
  * a_iface: fix memory leaks
  * a_iface: fix typo

  [ Max ]
  * Remove rest_octets.h
  * Remove SI-related code
  * Remove BTS-specific attributes
  * Remove unused osmo_bsc_rf.h header
  * Remove pkg-config file

  [ Harald Welte ]
  * Update .gitignore for post-nitb-split
  * remove further files and autotest/autoconf bits irrelevant to osmo-msc
  * Rename osmo_fsm to avoid illegal space in name + more meaningful name
  * Debian: remove obsolete Dependencies
  * configure.ac: Depend on latest tagged/released libosmo-* versions
  * Debian: Build with enabled SMPP support
  * osmo-msc: Don't link against libasn1c
  * Debian: Include systemd.service in package
  * Debian: include all (not just one) example config files

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 14:45:58 +0200

osmo-msc (0.1.0) UNRELEASED; urgency=low

  * Initial release.

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