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
