osmo-msc (1.11.1) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix codecs in internal call bridge
  * make two functions static

  [ Mychaela N. Falconia ]
  * CC: don't start guard timer on mid-call MNCC messages
  * gsup_client_mux: set destination_name in error reply function
  * SMS over GSUP: correctly route GSUP responses to MT SMS
  * SMS over GSUP: set source_name in GSUP reply messages

  [ Andreas Eversberg ]
  * ASCI: Remove duplicated CLEAR COMMAND from VGCS/VBS channel handling

 -- Oliver Smith <osmith@sysmocom.de>  Thu, 28 Sep 2023 13:53:07 +0200

osmo-msc (1.11.0) unstable; urgency=medium

  [ arehbein ]
  * Transition to use of 'telnet_init_default'

  [ Neels Hofmeyr ]
  * sdp_msg.c: fix missing rate in sdp_audio_codecs_add()
  * comment: clarify L3 Info processing
  * IuCS: remove IuUP LOOPBACK hack
  * make: doc/sequence_charts: use wildcards for EXTRA_DIST and CLEANFILES
  * tweak MNCC logging, add RTP info
  * msc_log_to_ladder.py: various tweaks
  * charts: Rename voice_call_full.msc to voice_call_external_mncc.msc
  * update doc/sequence_charts/voice_call_external_mncc.msc
  * add voice_call_internal_mncc.msc
  * add codec_mapping.h,c
  * MNCC: use codec_mapping, drop mgcp_codec_to_mncc_payload_msg_type()
  * [codecs filter] add codec_filter.h,c
  * [codecs filter] add trans.cc.codecs
  * [codecs filter] store BSS codec list from Compl L3
  * [codecs filter] MO call: apply BSS codec list
  * [codecs filter] MT call: apply BSS codec list
  * [codecs filter] MT call: apply remote call leg codecs
  * [codecs filter] MT call: store MS Bearer Cap from CC Call Conf
  * msc_vlr_test_call: include RAN RTP addr in ass compl
  * [codecs filter] apply BSS codecs from Assignment Complete
  * add ran_infra.force_mgw_codecs_to_ran
  * rtp_stream: allow multiple codecs / use codec filter from Assignment
  * in ran_msg, return gsm0808_speech_codec (intra-MSC)
  * in ran_msg, return gsm0808_speech_codec (inter-MSC)
  * [codecs filter] use filter result in MT DTAP CC Setup
  * [codecs filter] use filter result in Assignment
  * [codecs filter] send + receive SDP via MNCC
  * msc_vlr_tests: confirm crcx by RAN/CN side separately
  * [codecs filter] use codecs filter on crcx ok
  * do CN CRCX first
  * mncc_recvmsg(): log caller file,line
  * [codecs filter] msc_vlr_test_call: test codecs resolution
  * codecs: compose HO Req Ch Type from cc.codecs
  * HO Req: include IE Codec List (MSC Preferred)
  * fix msc_vlr_test_call SDP mncc_rtp
  * coverity: sdp_msg_test.c: check rc of sdp_msg_from_sdp_str()
  * 3G: decapsulate IuUP to AMR at the MGW; allow 3G<-AMR->2G
  * TODO-RELEASE: add note on osmo-sip-connector and SDP

  [ Vadim Yanitskiy ]
  * src/Makefile.am: remove unneeded AM_LDFLAGS with LIBS
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * tests: $(BUILT_SOURCES) is not defined, depend on osmo-msc
  * copyright: fix typo: sysmocom s/s.m.f.c./s.f.m.c./ GmbH
  * fixup: contrib/jenkins: create workspace.tar.xz on error
  * tests/{ctrl,vty}_test_runner.py: raise an exception if proc's rc != 0
  * msc_vty: support spaces in short/long network name
  * ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks
  * ran_a_mgcp_codec_from_sc(): map GSM0808_SCT_CSD to CODEC_CLEARMODE
  * ran_a_channel_type_to_speech_codec_list(): set PI/PT for CSD
  * codec_mapping: codec_map[]: add missing speech codec for CLEARMODE
  * csd_bs_list_to_bearer_cap(): properly initialize bcap fields
  * csd_bs_list_to_bearer_cap(): add default branch for safety

  [ Pau Espin Pedrol ]
  * mncc_sock: Call osmo_fd_unregister() before closing and changing bfd->fd
  * rtp_stream: Update id after modifying fields upon Tx of MGCP msg
  * rtp_stream: Fix remote_osmux_cid_sent_to_mgw never set to true
  * UserManual: Include sigtran*.adoc from osmo-gsm-manuals.git
  * Write explicit role & sctp-role fields in ASP configurations
  * Use new mgcp_client_conf_alloc() API to alloc mgcp_client_conf
  * Tx Loc UPD ACC: Use PLMN provided by subscr
  * trans_lcls_compose(): Set PLMN fron cell currently in use

  [ Oliver Smith ]
  * msc_mgw_setup: use mgcp_client_pool_empty()
  * msc_main: close SMS db on startup error
  * debian: set compat level to 10
  * contrib/jenkins: create workspace.tar.xz on error
  * systemd: depend on networking-online.target
  * codec_mapping: add clearmode
  * ran_a_channel_type_to_speech_codec_list: add CSD
  * codec_filter_set_ms_from_bc: prepare for CSD
  * Cosmetic: gsm48_cc_tx_setup: tweak comment
  * Cosmetic: gsm48_cc_tx_setup: remove TODO comment
  * codec_filter_init: prepare for CSD
  * codec_filter_set_ran: prepare for CSD
  * codec_filter_set_bss: prepare for CSD
  * codec_filter_run: prepare for CSD
  * transaction: move cc.codecs.remote -> cc.remote
  * transaction: move cc.codecs.result -> cc.local
  * msc: add trans_cc_set_remote_from_bc
  * gsm48_cc_tx_setup: set trans->bearer_cap.transfer early
  * Add initial CSD support with external MNCC
  * smpp_handle_bind_tx: initialize tlv
  * sdp_msg_test: fix dereference after null check
  * smpp_msc: submit_to_sms: check ud_len > sms_msg_len
  * msc_ho_send_handover_request: fix check_after_deref
  * csd_bs_list_to_gsm0808_channel_type: fix rc check
  * gsm48_cc_tx_alerting: check rc of sdp_msg_from_sdp_str
  * mncc_test: fix talloc_named_const
  * gsm48_cc_tx_setup: use MNCC bcaps for CSD
  * test: add csd_test
  * csd_bs_list_remove: fix removal logic
  * mncc_builtin: permit data bearer types
  * csd_bs_to_gsm0808: add T 300 / proper ch_rate_type
  * Cosmetic: fix typo
  * csd_bs_list_to_gsm0808_ct: assert -> ret -EINVAL
  * msc_ho_send_handover_request: support CSD
  * msc_a_up_call_assignment_complete: check CSD codec
  * gsm48_cc_tx_call_proc_…: verify bcap.transfer

  [ Andreas Eversberg ]
  * ASCI: Add log categories for GCC/BCC (call control)
  * ASCI: Add log category for VGCS/VBS call and channel FSM
  * ASCI: Use a unique call-id for RTP streams
  * ASCI: rtp_stream_commit(): Also update MGW on conn mode change
  * ASCI: Allow usage of rtp_stream with other FSM
  * ASCI: Add transaction type to trans_find_by_callref()
  * ASCI: Add two new transaction types for VGCS and VBS
  * ASCI: Allow transaction without subscriber associated
  * ASCI: Add simple implementation of Group Call Register
  * ASCI: Add functions to transcode VGCS/VBS messages on A-interface
  * ASCI: Add callref to assignment command
  * ASCI: Add call control for VGCS/VBS
  * ASCI: Add decoder for VGCS/VBS messages to msc_a.c
  * ASCI: Add function to receive VGCS/VBS messages from BSS
  * ASCI: Add option to switch on or off ASCI support
  * ASCI: Check return code of osmo_mobile_identity_decode()
  * ASCI: Remove check for trans->msc_a to be set in _assign_complete()
  * ASCI: Add VTY to configure GCR (Group Call Register)
  * ASCI: Add reception of UPLINK RELEASE on dedicated channel
  * ASCI: Clear VGCS call and channel on BSSMAP reset message
  * ASCI: Receive messages from MSC-A role related to VGCS/VBS
  * ASCI: Null pointer bug fix in trans_create_bcc_gcc
  * ASCI: Fix wrong check for Null pointer in vgcs_cell_fsm_null()
  * ASCI: Check if codec mapping exists for given codec
  * ASCI: Fix Null pointer dereference bug in gsm44068_bcc_gcc_trans_free()
  * ASCI: Point to correct state machine when calling ran_encode_and_send()
  * ASCI: Add debugging and error logging to VGCS/VBS call control
  * ASCI: Add missing transaction ID to SET PARAMETER message

  [ Keith Whyte ]
  * SMPP: Fix Memory leaks

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

osmo-msc (1.10.0) unstable; urgency=medium

  [ Keith Whyte ]
  * Don't let this osmo-msc operate on a libdbi database
  * Turn off secure_delete in sqlite
  * Update MNCC field validation mask.
  * Change CC_CAUSE returned on unanswered MT Call
  * LCLS: Fix Global Call Reference generation

  [ Neels Hofmeyr ]
  * fix typo in msgb name for CC SETUP
  * missing whitespace in gsm_04_08_cc.c
  * err log: fix reverse statement in msc_a call handling
  * cosmetic: log actual MNCC msg in tch_rtp_connect()
  * sdp_msg: s/_name_/_to_str_/g
  * in sdp logging: add payload type number like 'AMR#111'
  * sdp_msg: add sdp_audio_codecs_cmp(), add compare flags
  * sdp_msg: s/sdp_audio_codec_/sdp_audio_codecs_
  * msc_a,vlr: rename ciphering_required to is_ciphering_to_be_attempted
  * msc_a,vlr: add is_ciphering_required (accurately named)
  * vlr_lu_fsm: clarify naming of static functions
  * vlr: auth_fsm: clarify success/failure result
  * vlr: auth_fsm: rename AUTH_RES to AUTH_SUCCESS
  * vlr_auth_fsm: add result no_auth_info_event
  * vlr: implement fallback to no-auth
  * sdp_msg: when NULL, do not crash but return empty SDP str
  * log CC timeouts
  * add sdp_audio_codec_is_set
  * add some comments to sdp_msg.c,h
  * sdp_msg.c: parse send/recv mode
  * fix sdp_msg_to_sdp_str(), never add fmtp for unset codec
  * rtp_stream_commit: check missing MGW ep only when ready for RTP
  * rtp_stream: set_remote_addr: do nothing when unchanged

  [ Max ]
  * SMPP: clarify (re)start logic
  * Ignore .deb build byproducts
  * ESME: use osmo_sock_get_name() for logging
  * tests: use common stubs for SMS queue test
  * Introduce libsmpputil
  * Add ESME-specific logging
  * Set working directory in systemd service file
  * Make esme struct shared
  * Use libsmpputil functions in smpp_mirror tool
  * cosmetic: use proper name for SMPP handlers
  * SMPP: remove duplicate g_smsc definition
  * smpp_mirror: fix compiler warning
  * SMPP: use default port from libsmpp34
  * SMPP: fix possible NULL pointer dereference
  * SMPP: make smpp_smsc_stop() static
  * ctrl: take both address and port from vty config
  * SMPP: use proper type for boolean variables

  [ Vadim Yanitskiy ]
  * contrib/jenkins.sh: do not override parallel make for libsmpp34
  * mncc: move MNCC_F_ALL from mncc.c to mncc.h
  * mncc: cosmetic: fix coding style in mncc_prim_check_sign()
  * libmsc: check return value of gsm0808_create_ass2()
  * msc_main: fix wrong comment: HLR is a separate project
  * fix msc_vty_go_parent(): add missing case for MGW_NODE

  [ Pau Espin Pedrol ]
  * tests/test_nodes.vty: Avoid listing commands provided by lib
  * Introduce support for libosmo-mgcp-client MGW pooling
  * vty: Make use of new mgcp_client_pool_config_write() API
  * Use new mgcp-client VTY commands under mgw node
  * call_leg: Fix EV_MGW_ENDPOINT_GONE not processed in RELEASE state
  * doc: Include mgwpool.adoc from osmo-gsm-manuals

  [ Oliver Smith ]
  * contrib/jenkins.sh: use enable-werror with IU too

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

osmo-msc (1.9.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * utran: use new UTRAN encryption enum
  * libmsc/gsm_04_08: refactor require ciphering into an own function
  * ran_msg_iu: do not pass UEA0 to ranap_new_msg_sec_mod_cmd2()

  [ Vadim Yanitskiy ]
  * VTY: clarify deprecation message for cfg_net_per_loc_upd_cmd
  * libmsc: fix memory leak (struct gsm_sms) in gsm340_rx_tpdu()
  * libmsc: fix another memleak (struct gsm_sms) in gsm340_rx_tpdu()
  * libvlr: vlr_set_ciph_mode(): avoid redundant check
  * libvlr: fix is_ciph_required(): always send SecModeCmd for UTRAN
  * libmsc: ran_iu_make_security_mode_command(): improve readability
  * libmsc: ran_iu_make_security_mode_command(): clarify UIA mask
  * libmsc: fix memory leak (struct msgb) in msc_i_ran_enc()
  * tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'

  [ Oliver Smith ]
  * treewide: remove FSF address
  * tests/msc_vlr/Makefile.am: drop -ldbi

  [ Pau Espin Pedrol ]
  * Announce IuFP audio codec for UTRAN conns in CRCX towards MGW
  * Avoid setting audio codec if not available during assignment_complete (MDCX)
  * ran_msg_iu.c: Set proper codec in Assignment Complete
  * Drop unneeded ax_check_compile_flag.m4
  * call_leg: local_bridge: Avoid null pointer access if CN-side not ready

  [ Neels Hofmeyr ]
  * fix crash on CM Serv Rej: fix use count mismatch

  [ Harald Welte ]
  * call rate_ctr_init() to make rate counters work properly
  * switch sqlite3 to single-threaded mode
  * sms_queue: Annotate each function with some comment
  * vlr: Split vlr_subscr_rx_imsi_detach()
  * vlr: Add rate counters and stat items
  * sms_queue: Introduce rate_ctr / stat_item
  * smpp: Fix use-after-free bug when ESME disconnects but has write pending
  * smpp: don't enqueue write messages if ESME is disconnected
  * sms_queue: refactor sms_pending add/remove code
  * sms_queue: merge sms_pending_add into sms_pending_from
  * tests: Remove sms.db{-wal,-shm} files, not just sms.db
  * switch from libdbi to lbsqlite3
  * db: Switch from 'synchronous = FULL' to 'synchronous = NORMAL'
  * sms: Encapsulate SMS queue related config parameters
  * sms: Give smsc its own VTY config node
  * sms_queue: Use local variable rather than 9x pointer de-ref in function
  * sms_queue: Make deletion of messages from DB VTY-configurable
  * smpp: Parse and use SMPP-provided validity period
  * sms: Make default SMS validity period configurable via VTY
  * sms: Introduce VTY-configurable minimum SMS validity period
  * update git URLs (git -> https; gitea)
  * Convert + Expand README file
  * fix RPM build failures due to README -> README.md rename

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 29 Jun 2022 11:32:11 +0200

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
