openbsc (1.3.2) unstable; urgency=medium

  [ Harald Welte ]
  * manual: Fix copy+paste error

  [ Oliver Smith ]
  * osmoappdesc.py, tests, ipa.py: switch to python 3

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 19:12:23 +0100

openbsc (1.3.1) unstable; urgency=medium

  [ Daniel Willmann ]
  * manuals: Update osmonitb counter/vty documentation
  * manuals: Generate vty/counter documentation for osmo-bscnat

  [ Pau Espin Pedrol ]
  * nat: Remove unused func bsc_vty_init()
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * debian/control: Match dependency versions against configure.ac

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 08 Aug 2019 17:32:51 +0200

openbsc (1.3.0) unstable; urgency=medium

  [ Keith ]
  * Don't deliver alert notifications to an ESME that is not yet bound.
  * Write configuration correctly from vty (alert notifications)
  * tests: Mute stdout during db_prepare()

  [ Pau Espin Pedrol ]
  * osmo-bsc-mgcp.service: Fix parsing of cmdline option s
  * talloc_ctx_init: Use public API osmo_signal_talloc_ctx_init
  * Replace broken ipa_ccm_idtag APIs with new ipa_ccm_id ones
  * vty_test_runner: Handle MGCP message recv len dynamically
  * nat: Return error code in queue_for_msc
  * tests: Fix selection of python version
  * nat: Fix crash (double-free) in forward_sccp_to_msc
  * nat: Allocate bsc_nat_parsed on the stack instead of heap
  * mgcp: Handle CI and X-Osmux param name as case insensitive
  * bsc-nat: Remove whitespace at the end of CTR descriptions

  [ Max ]
  * Drop openggsn from build dependencies
  * Drop Iu*S support and related dependencies

  [ Rafael Diniz ]
  * Fixed MNCC_RTP_CREATE after MNCC_DISC_IND.

  [ Daniel Willmann ]
  * osmo-bsc_nat: Parse MGCP Connection ID as hex
  * libmgcp: Parse CI as hex string in verify_ci()
  * manuals: Add script to regenerate counter/vty documentation

  [ Oliver Smith ]
  * contrib/jenkins.sh: run "make maintainer-clean"

 -- Harald Welte <laforge@gnumonks.org>  Sun, 14 Jul 2019 08:42:36 +0800

openbsc (1.2.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * acc_ramp: Increase log level of some messages
  * bsc_nat.c: Return correct err code to avoid heap-user-after-free
  * chan_alloc: Print bts nr on chan alloc failure
  * abis_rsl: rsl_rx_chan_rqd: Format bts log string as in everywhere else
  * gitignore: Filter m4 files
  * bsc-nat: Avoid sending reset ack twice in a row
  * bsc-nat: bsc_nat_filter_ipa: Improve documentation
  * bsc-nat: forward_sccp_to_msc: Remove unneeded goto
  * bsc-nat: forward_sccp_to_msc: Remove unneeded exit3 section
  * bsc-nat: forward_sccp_to_msc: Fix memleak on receive from non authenticated bsc
  * bsc-nat: ipaccess_auth_bsc: Close bsc conn immediately on bad format received
  * bsc-nat: Avoid heap-use-after-free on bsc auth failure
  * chan_alloc: Fix crash when failing to allocate channel
  * gsm0408_dispatch: Fix uninitialized var warning
  * bsc-nat: Fix missing help description for -T timestamp cmdline option
  * bsc-nat: Add -V param to print version
  * bsc-sccplite: Add -V param to print version
  * bsc-nat: show running-config now prints bsc nodes
  * bsc-nat: Avoid heap-use-after-free on USSD conn lost
  * configure.ac: Add --enable-sanitize flag
  * bsc-nat: Replace '.' in counter names with ':'
  * bsc-nat: Allocate each ctr group with a different idx
  * bsc-nat: Add more complete VTY command to show BSC related info
  * Init access_lists before passing it as a parameter
  * Rename bsc_msg_acc_lst_vty_init to have more uniform prefix
  * bsc_vty: Write access list entries when storing bsc config
  * filter: vty: Print policy list in cmd show access-list
  * bsc-nat: find_paging: Check return code of tlv_parse
  * bsc-nat: forward paging to all BSC when CELL_IDENT_BSS is received
  * nat: Add VTY cmd paging-bss-forward to nat node
  * nat: ctrl: Use ctrl_cmd_parse2 to obtain detailed error
  * bsc: ctrl: Use ctrl_cmd_parse2 to obtain detailed error
  * nat: ctrl: use strtol instead of atoi as it has explicit error documentation
  * nat: ctrl: Avoid sending back received ERROR msgs
  * bsc: ctrl: Avoid sending back received ERROR msgs
  * vty: Fix typo writing bts-jitter-buffer-delay-{min,max}
  * examples: osmo-bsc_mgcp: Update cfg file
  * mgcp_test: tweak test failure output
  * osmo-bsc-mgcp: Add debian package
  * configure: Find correct libgsm's gsm.h header
  * gsm_data.h: Replace '.' in counter names with ':'
  * abis_nm_ipaccess_rsl_connect: Log bts and trx nr
  * Fix heap-use-after-free due to OML link destruction
  * Add osmo-bsc-nat systemd service and install it with debian
  * debian: Install all service files from contrib/systemd
  * systemd: describe osmo-bsc-sccplite service as legacy
  * mgcp_osmux.c: osmux_enable_endpoint: Fix incorrect return check
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * cosmetic: Remove duplicate semicolon and whitespace
  * nat: Remove misleading comment
  * nat: Remove misleading comment
  * nat: return -EBADF in read wqueue cb on fd closed
  * debian/rules: Don't overwrite .tarball-version
  * mgcp: Fix osmux_cid_bitmap static array size calculation
  * bsc_filter: Move whitelisted info log to debug
  * mgcp: Fix (again) osmux_cid_bitmap static array size calculation
  * mgcp_osmux: Use define to calculate rtp_ssrc_winlen
  * examples: nanobts: openbsc-multitrx.cfg: Set SDCCH in correct TS of TRX1
  * mgcp: Avoid initing output without enabling osmux
  * mgcp: Log endpoint nr consistently as hex
  * nat: Log endpoint nr consistently as hex
  * nat: Log state of pending transaction
  * mgcp: osmux_send_dummy: Avoid logging incorrectly and sending if osmux not enabled
  * mgcp: osmux: Don't process regular osmux frames if disabled by cfg
  * mgcp: osmux: Move parse_cid of legacy dummy frames to own function
  * mgcp: osmux: Make func handling dummy frames independent of endp type
  * mgcp: osmux: allow enabling osmux only on correct activating state
  * mgcp: osmux: Improve checks around activating and using enabled osmux
  * osmux.h: Document enum osmux_state
  * mgcp: osmux_send_dummy: Fix return without value
  * bsc-nat: Enable octet-aligned when ensuring mode set
  * smpp.adoc: describe VTY cmd 'local-tcp-ip' instead of 'local-tcp-port'
  * Allow easily disabling GFDL references

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

  [ Neels Hofmeyr ]
  * cosmetic: make osmo-python-tests dependency more accurate
  * legacy_mgcp: mgcp_test: sanitize: free msgb_ctx
  * Importing history from osmo-gsm-manuals
  * make clean: also remove generated image files
  * add 'make check' target
  * OsmoBSC+NITB/running: fix title levels, one too deep
  * OsmoNITB: include abis.adoc from common/chapters/
  * fix 'make clean': shell glob, ignore failure
  * move mncc.adoc to common chapters
  * tweak common/mncc.adoc: use variable for program name
  * move smpp.adoc to common chapters, generalize
  * OsmoNITB: update vty reference
  * refactor Makefile build rules, don't use the FORCE
  * author info: add "former" to Holger's job title

  [ Philipp Maier ]
  * mgcp: add VTY Option to force-realloc endpoints
  * osmo-nitb: Update VTY command reference

  [ Harald Welte ]
  * Debian: Include the osmo-bsc-mgcp systemd service in Debian package
  * initial checkin of manuals to public repo
  * Add link to Asciidoc source code of manual
  * OsmoNITB HLR: expand on how to create subscribers
  * Add chapter on Cell Broadcast Support in Osmocom (to BSC+NITB manual)
  * SMPP: Document Osmocom extensions
  * vty-ref: Update URI of docbook 5.0 schema

  [ Max ]
  * Fix build with latest libosmocore
  * Add OsmoNITB control interface description
  * Remove ipaccess utils
  * fix build: apply msgb_wrap_with_TL() rename
  * Remove meas_* utils
  * Remove openbsc-dev package
  * Remove osmocom-ipaccess-utils-dbg package

  [ Jonathan Brielmaier ]
  * fix various typos across all manuals

  [ Ivaylo Kostov ]
  * Typo in Chapter 14.2

  [ Philipp ]
  * Describe how to run multiple instances of osmo-nitb and osmo-bts

  [ Oliver Smith ]
  * vty/bsc_vty_additions.xml: copy from osmo-bsc
  * build manuals moved here from osmo-gsm-manuals.git
  * manuals/OsmoNITB: integrate into this repository
  * OsmoMGCP and OsmoNAT manuals moved from osmo-gsm-manuals.git
  * manuals: Osmo{NAT,MGCP} -> OsmoBSC{NAT,MGCP}
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib: fix makedistcheck with disabled systemd
  * contrib/jenkins.sh: build and publish manuals

  [ Keith ]
  * Don't send SMS STATUS REPORT locally if the ESME accepted it.
  * Make alert notifications vty configurable per ESME
  * Cosmetic: Fix spelling in smpp vty

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 30 Jan 2019 16:07:36 +0100

openbsc (1.1.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * debian/rules: show testsuite.log when tests are failing
  * vty: skip installing cmds now always installed by default
  * vty: skip installing cmds now always installed by default
  * sms.db: silence libdbi warnings on out-of-range index
  * fix build: gprs_ra_id_by_bts(): ensure to init all values
  * backport support for 3-digit MNC with leading zeros
  * Migrate from OpenSSL to osmo_get_rand_id()

  [ Harald Welte ]
  * osmo-bsc: Print NOTICE message on unimplemented BSSMAP UDT
  * osmo-bsc-sccplite: Implement incoming RESET procedure
  * mgcp_transcoding_test: Add LIBOSMOABIS_CFLAGS
  * sysinfo: Fix regression causing missing L2 Pseudo-Length in SI5/SI6
    (Closes: #3059)

  [ Pau Espin Pedrol ]
  * Use type bool for boolean fields in gsm48_si_ro_info
  * vty: Add cmd to configure 3g Early Classmark Sending
  * mgcp_protocol: Don't print osmux stats if it is off
  * bsc: Improve handling of paging_request return value
  * bsc: paging: Fix losing paging messages for BTS
  * libbsc: set_net_mcc_mnc_apply: Fix memleak on parsing incorrect mcc mnc
  * bsc_nat: ctrl: fix memleak on reply receival
  * bsc_nat: forward_to_bsc: remove one level of indentation
  * bsc_nat: forward_to_bsc: Fix memleak on send failure
  * bsc_nat: Drop redundant ccon ptr in bsc_cmd_list
  * bsc_nat: ctrl: Fix crash on receveing bsc reply
  * nat: Add jitter buffer on the uplink receiver
  * smpp_smsc_conf: Fix heap-use-after-free
  * chan_alloc.c: Fix log var formatting issues
  * mgcp: switch to new osmux output APIs
  * debian/changelog: change last release for unreleased to unstable

  [ Max ]
  * Fix tests after rate_ctr change

  [ Vadim Yanitskiy ]
  * libmsc: add support for both comp128v2 and comp128v3
  * gsm_04_80.h: use '#pragma once' instead of includes
  * gsm_04_80.h: cosmetic: whitespace fix
  * src/libmsc/ussd.c: drop useless forward declaration

  [ Stefan Sperling ]
  * Make "waiting indicator" of IMMEDIATE ASSIGN REJECT dynamic.
  * bts chan_load: ignore unusable BTS
  * Add stat items for the BTS's channel load average and T3122.
  * Add support for Access Control Class ramping.
  * fix a format string error in bts_update_t3122_chan_load()
  * fix initialization of acc ramping
  * only log actual access control class ramping changes
  * ensure that acc_ramp_init() is only called once
  * trigger acc ramping based on trx rf-locked state
  * rename helper functions in the acc ramp code to avoid confusion
  * trigger acc ramping on state-changed-event reports
  * only trigger acc ramping if trx 0 is usable and unlocked
  * fix handling of state changes in acc ramping

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 04 May 2018 12:45:08 +0200

openbsc (1.0.0) unstable; urgency=medium

  [ Holger Hans Peter Freyther ]
  * Revert "gprs: Use RAND_bytes for p-tmsi"
  * sgsn: Fix pattern for too long msisdn
  * osmux: Allow to listen to a specific address
  * sgsn: Fix up the VTY doc strings
  * stats/mgcp: Initialize the statistics for MGCP as well
  * gbproxy: Count more GSM 04.08 messages
  * gtp: Fix Makefile.am so maybe distcheck is now going to work
  * gtphub: Fix the VTY prompt to make the tests move forward
  * bsc/vty: Provide a hint of available input
  * gtphub: Fix compilation using gcc5
  * dahdi: The driver has moved to libosmo-abis
  * gtphub: Make the two setter static as well
  * db: Avoid undefined behavior when copying cm2/cm3 from the db
  * gtphub: Fix use after free on failure
  * gsm0408: Provide unique strings for the gsm 04.08 message
  * msc: Remove oversimplified todo entry and add a comment
  * meas: Do not retry to close the database
  * mgcp: Fix compiler warnings on size_t on AMD64
  * abis: Send the message without enforcing to wait for a response
  * bsc: Add code to send ip.access reboot command to nanoBTS
  * bsc: Add parameter to restart a bts
  * subscr: Add testcase creating an already created subscriber
  * subscr: Make db_create_subscriber fail on duplicates
  * db: If creating a subscriber in the db fails, return NULL
  * ctrl: Extend ctrl command to optionally handle alg+ki
  * jenkins: Add the build script from jenkins here
  * nat/vty: Don't assume one can magically add IPv4 addresses to lo
  * nat/vty: Use different port for the mock MSC
  * nat/vty: Convert into str for the VTY command
  * nat/vty: And move to a different port..
  * nat/vty: Remove second assumption about lo and binding
  * nat/vty: Fix construct not working with python 2.6
  * nat/vty: Do not print token update statement
  * nat/ussd: Add an example of the USSD gateway side-channel
  * debian: Make upgrading from debian SID easier
  * filter/nat: Fix the context for the imsi assignment
  * bsc: Create minimal SI6 rest octets
  * ci: Attempt to disable doxygen warnings of dependencies
  * lchan: Release channel in case of late activation ack
  * ussd: Add band-aid for interrogationSS
  * debian: Install header and source file to different directory
  * debian: Require libgtp-dev after the SO version bump
  * sgsn: Fix deeply flawed copying logic for PDP context activation
  * sgsn: Fill the cch_pdp with a value coming from the tlv structure
  * sgsn: Convert cch_pdp to host order for libgtp

  [ Jacob Erlbeck ]
  * sgsn/test: Add and call cleanup_test function
  * sgsn/test: Really parse received DL LLC messages
  * stats: Enable stats for sgsn, gbproxy, nitb, bsc, nat
  * stats: Set class_id in rate_ctr group descriptions
  * sgsn: Remove tlli_foreign2local
  * sgsn/test: Add bssgp_raid parameter to send_0408_message
  * sgsn: Make ra_id_equals available as gprs_ra_id_equals
  * sgsn: Only look at TLLIs in sgsn_mm_ctx_by_tlli
  * sgsn: Change handling of missing mmctx in gsm48_rx_gmm_ra_upd_req
  * sgsn/test: Add test case test_gmm_routing_areas
  * sgsn: Re-add searching for MM ctx based on TLLI / P-TMSI matches

  [ Daniel Willmann ]
  * gprs: Use RAND_bytes for p-tmsi
  * gbproxy/test: Add and call cleanup_test function
  * gprs/gb_proxy: Use RAND_bytes for gbproxy TLLI/TMSI allocation
  * rename enum gprs_mm_state to gprs_gmm_state
  * rename enum gprs_mm_state to gprs_gmm_state
  * create_pdp_conf(): factor out PDP context accept dispatch as send_act_pdp_cont_acc()
  * sgsn_mm_ctx_cleanup_free(): clean up LLME iff present (Gb, not Iu)
  * gprs: more conditionals for Gb specific actions
  * configure.ac: add --enable-iu with deps asn1c, ranap, sigtran
  * add DRANAP debug constant
  * add DSUA debug constant
  * osmux: Add negotiation state so race conditions can't disable osmux
  * gprs_gmm: Fix bit mask when determining update/attach type
  * IuPS: track msg->dst aka ue_conn_ctx, comment
  * IuPS: osmo-sgsn: add core IuPS impl, call iu_init()
  * IuPS: redirect Iu in various places, link Iu in sgsn-test
  * IuPS: add Iu response to create_pdp_conf()
  * IuPS: add Iu response to delete_pdp_conf()
  * IuPS: dev hack: init hardcoded Ki on ATT REQ
  * IuPS: send Security Mode Command, track the new_key flag.
  * IuPS: add GMM Service Request rx and tx
  * IuPS: RA UPD: make sure to authorize, for Iu Integrity Protection
  * IuPS: sgsn_mm_ctx: add enum gprs_pmm_state field, track PMM state
  * IuPS: GMM Attach: reset MM ctx pending_req
  * IuPS: Introduce function to change PMM state
  * IuPS: Change GTP-U endpoint to SGSN in PMM_IDLE and page UE when data arrives
  * gbproxy: Check whether gbproxy_update_link_state_after() deletes the link_info
  * test/gbproxy: Test for possible memory corruption when link_info is freed

  [ Harald Welte ]
  * SGSN: Fix typo in VTY license statement.
  * meas_db.c: fix compiler warnings
  * Depend on libgtp >= 0.92, as previous versions don't have gtpie.h installed
  * oap and gtphub tests must only be compiled of LIBGTP is present!
  * Fix TSC/BSIC handling bug and remove bts->tsc
  * vty: Print NCC/BCC and not just integer value of BSIC
  * Fix compilation with no libc-ares present on the system
  * tests/smpp: Fix linking order
  * gsm_data_shared: compute/sprintf the lchan name only once
  * remove old obsolete linux kernel and wireshark patches
  * AUTHORS: Add Jacob and Neels
  * bring the README into the 21st century
  * mncc.c: Convert mncc_names[] to 'struct value_string'
  * mncc: introduce 'struct gsm_mncc_bridge' for MNCC_BRIDGE
  * indicate the GSM 04.08 channel mode in 'show lchan'
  * add DOT graph showing NITB data structures and their references
  * rename ipaccess-find into abisip-find
  * Revert "move to hex TMSI representation"
  * Start to use struct osmo_auth_vector from gsm_auth_tuple
  * move gsm_04_08_gprs.h to libosmocore
  * use new libosmocore gsm_23_003.h for IMEI/IMSI length
  * Rename gprs_gsup_* to osmo_gsup_*
  * rename gprs_shift_*() to osmo_shift_*()
  * move osmo_shift_* / osmo_match_shift_* to libosmogsm
  * gsup_messages: Add UMTS AKA related encoding/decoding support
  * osmo_gsup_messge.[ch] documentation update (doxygen)
  * move utils.h functions to libosmocore
  * Move osmo_gsup_messages.[ch] to libosmocore
  * oap_message.h: Remove dependency to openbsc include
  * OAP: use osmo_oap_ prefix for OAP, rather than plain oap_
  * OAP: Various coding style fixes
  * osmo_oap_decode(): Use common argument ordering
  * sgsn/GSUP: Support MAP-style nested LU/ISD
  * Add human-readable name of  SGSN_AUTH_AUTHENTICATE
  * sgsn_test: Adapt test case to now-existing InsertSubscriberData
  * subscr_name(): Handle case for subscr == NULL
  * rtp_proxy.c: Ensure msgb_alloc is large enough for largest AMR frame
  * prepare sgsn_mm_ctx for Gb and Iu mode (UMTS)
  * rename gsm0408_gprs_rcvmsg() to gsm0408_gprs_rcvmsg_gb()
  * gprs_gmm.c: Make TLLI handling specific to Gb interface
  * gprs_gmm.c: Perform LLME operations only if we have one
  * remove old copy of documentation that now is in osmo-gsm-manuals.git
  * add example config for sysmobts
  * add .mailmap file for mapping git author name/mail in shortlog
  * osmo-nitb: generate backtrace on SIGABRT
  * COSMETIC: 'if' is not a function, so there is space before '('
  * mncc_builtin: Properly reject DTMF
  * WIP: OM2000: Full state machine implementation using osmo_fsm
  * OM2000: Fix state machien for CF/TRXC on START Result
  * SGSN: Use dummy all-zero MSISDN value in PDP Context Act on GTP
  * RBS2000: re-establish any lost signalling links
  * talloc_cxt: Fix compiler warning / missing #include
  * bs11_config: remove compiler waring about unused variable
  * RBS2000: Avoid segfault if ts->lapd instance doesn't exist
  * RBS2000: Ensure the is-connection-list command is only used on RBS2000
  * Support configuration of CON MO Groups/Paths from VTY
  * OM2000: CON MO: Allow larger range for CCP and CI values
  * OM2000: Add three IEs to TCH activation about which we have no clue
  * OM2000: Fix missing dynamic TCH initialization
  * abis_nm: Fix possible not-null-terminated buffer
  * abis_nm: Fix non-null terminated buffer
  * libmsc/db: avoid subscr->name without terminating NULL char
  * Fix possible non-null-terminated buffer
  * ipaccess-config: Handle setsockopt return value
  * ipaccess-proxy: Check setsockopt() return value
  * abis_nm: ceck fseek() return code in is_last_line()
  * bsc_msc.c: Check setsockopt() return value
  * sgsn_test: Fix missing = in == type check
  * abisip-find: check bsc_fd_register() result
  * bsc_ctrl: Ensure we don't pass NULL string into strtok_r()
  * mgcp_protocol: Ensure we don't call strtok_r with NULL data
  * cfg_bts_si2quater_neigh_add(): Don't call strerror() on negative value
  * gsm0408_test.c: Don't pass negative value to strerror()
  * channel_mode_from_lchan(): Add missing break statement
  * add gsup_test_client program
  * move OAP messages implementations to libosmocore
  * bsc_vty: Fix missing break statements in switch()
  * sgsn: Add GTP information to "show pdp-context"
  * remove unused struct members of 'struct sgsn_pdp_ctx'
  * Implement VTY configuration to control Early Classmark Sending
  * OM2000: use assoc_so *only* for TS objects
  * VTY: Print 3G auth tuples, not just 2G auth tuples
  * OM2000: Add FIXME comments for missing resolving of RX/TX MO!
  * OM2000: Change the order of MO initialization
  * OM2000: Send ALTCRQ for SuperChannel after receiving IS Enable Req Ack
  * RBS2000: Add the P-GSL Timer IE to RSL CHAN ACT for PDCH
  * RBS2000 RSL: Support for sending RSL PAGING CMD for GPRS
  * pcu_sock: Don't re-implement core functionality like gsm_bts_trx_num()
  * pcu_sock: get rid of magic numbers and use ARRAY_SIZE() for array iteration
  * pcu_sock: Forward paging request from PCU via RSL to BTS
  * pcu_sock: Send non-NULL hLayer1 to PCU
  * Use new e1inp_signal_names from libosmo-abis to print input signal names
  * costmetic: Document gsm48_multirate_config() + const-ify input
  * bsc_api.c: Documentation for handle_mr_config()
  * bsc_vty: Factor vty_get_ts() out of pdch_act_cmd()
  * bsc_vty.c: Further simplify vty_get_ts()
  * bsc_vty.c: Add command for manual [de]actiovation of logical channels
  * bsc_vty: Add command to manually issue IPAC MDCX
  * libbsc: Create pcu-socket only as specified in config file
  * don't re-implement osmo_talloc_replace_string()
  * Add vty command "radio-link-timeout infinite" for uplink rx testing
  * jenkins.sh: Proper error message if local environment isn't set up
  * Support for TS 04.14 conformance test commands
  * Add VTY commands for experimentation with TS 04.14 commands
  * bsc_api: Fix copy+paste error in printing name of RR STATUS PDU
  * libbsc: Add VTY command to re-send the SYSTEM INFORMATION to BTS
  * check for missing result of rate_ctr_group_alloc()
  * Fix regression causing loss of static system-information messages
    (Closes: #2367)
  * RSL: Allow disabling of BCCH/SACCH filling for given SI type
  * gsm_bts_trx_set_system_infos(): Disable non-existing SI
  * gtphob: check for missing result of rate_ctr_group_alloc()
  * bsc_vty: Add VTY command to test CTRL TRAP feature
  * GSM timers: User reasonable defaults; don't save if equal default
  * bsc_vty: Don't allow timers of zero (0)
  * remove code disabling T3109 if configured to 0
  * SGSN: Fix RAN information exposed on GTP during PDP CTX CREATE
  * Fix gsm_pchan2chan_nr() to use RSL_CHAN_OSMO_PDCH
  * sgsn_vty: Don't assume pdp->lib is always valid
  * Migrate from gprs_apn_to_str() to libosmocore osmo_apn_to_str()
  * increase libsmpp34 version requirement to 1.12
  * NITB: remove 'help' output about '-a' option that is removed for ages
  * Treat SIGTERM just like SIGINT in our programs
  * Use verify_value_string_arrays_are_terminated from osmo-ci
  * libbsc: document arguments of generate_bcch_chan_list()
  * Make sure BA-IND in all SI2xxx is '0' and in all SI5xxx is '1'
  * gsm0408_test: Verify that BA-IND is 0 in SI2xxx and 1 in SI5xxx
  * Fix nanobts_omlattr unit test
  * nanobts_omlattra_test: Initialize logging before executing tests
  * osmo-bsc: Initialize logging before initializing rate_ctr
  * remove sgsn, gbproxy and gtphub from openbsc.git
  * rename osmo-bsc to osmo-bsc-sccplite
  * Bump version: 0.15.1 → 1.0.0

  [ Neels Hofmeyr ]
  * libcommon: soak up three static functions.
  * oap: implement initial OAP API.
  * oap: add oap testsuite skeleton
  * oap: add OAP API test
  * gsup/oap: add OAP to GSUP client.
  * oap: add OAP config to VTY
  * sgsn_vty.c: fix typo
  * Add GTP hub initial code base.
  * gtphub: add first bits of GRX ares
  * gtphub: fix Echo behavior: respond directly.
  * gtphub: add/fix IMSI and APN IE error handling
  * gtphub: make test code reusable for future tests.
  * gtphub: fix User plane decoding, add unit test.
  * gtphub: fix handling of sender from nonstandard port.
  * gtphub: Add logging for ares queries.
  * gtphub: fix numerous segfaults, and other stupidities.
  * gtphub: don't always try to do GGSN resolution.
  * gtphub: add logging labels to bind struct.
  * gtphub: review log levels, add level arg to LOG().
  * gtphub: cosmetic: break long lines.
  * fix build: remove obsolete gtphub EXTRA_DIST.
  * gtphub: fix gtphub_read() semantics.
  * gtphub: fix fatal log msg for SGSN proxy.
  * gtphub: fix three oversights (thanks to coverity).
  * gtphub: fix echo reply to SGSNs: wrong fd. Add test.
  * gtphub: lose obsolete comment.
  * gtphub: fix ares segfault: add missing initialization.
  * gtphub: add enable_gtphub_test to atlocal.in.
  * gtphub: remove another obsolete comment.
  * gtphub_test: build only when c-ares and gtp are present.
  * gtphub: add to debian build
  * gtphub: add to osmoappdesc.py
  * gtphub: fix number map range for TEIs.
  * gtphub: nr_map: add min,max and wrap.
  * gtphub: cosmetic: rename a file.
  * gtphub: review some logging.
  * gtphub: ares vty and init
  * gtphub: ensure cleanup of peer addresses.
  * gtphub: add explicit cleanup handles.
  * gtphub: cosmetic: clarify bind pointer naming.
  * gtphub: add first rate counters
  * gtphub: first vty show commands.
  * gtphub: cosmetic: fix an argument name.
  * gtphub: move timestamp into packet struct.
  * gtphub: cosmetic/prepare: add nr_map_refresh().
  * gtphub: add assertion to ensure expiry ordering.
  * gtphub: cosmetic/prepare: rename expiry queues.
  * gtphub: track tunnels explicitly.
  * gtphub: avoid segfault for incomplete tunnels.
  * gtphub: fix a conditional for log output
  * gtphub: complain about excess cmdline args.
  * gtphub: implement restart counter properly.
  * gtphub: cosmetic: for_each_side,_plane macros.
  * gtphub: use a single TEI pool across planes.
  * gtphub: make sure mapped TEIs aren't occupied (incomplete).
  * gtphub: refactor: use side_idx everywhere.
  * gtphub: vty: add missing SGSN-proxy output.
  * gtphub: add two stubs for Delete PDP msgs
  * gtphub: fix some style complaints from cppcheck
  * gtphub: be more fatal about not finding an unused TEI.
  * gtphub: fix segfault when empty config.
  * gtphub: remove obsolete todo comment
  * gtphub: handle Delete PDP Context.
  * gtphub_test: add some cleanup asserts.
  * gtphub_test: add test for Del PDP from GGSN side.
  * gtphub: cosmetic
  * gtphub: monitor GSNs' restart counters.
  * gtphub: cosmetic: early continue for less indent
  * gtphub: fix: add a missing NULL check
  * gtphub: add test for reused TEI.
  * gtphub: Add a debug log
  * gtphub: add restart counter test
  * gtphub: fix use after free.
  * gtphub: wrap gtphub_write() for test suite.
  * gtphub: fix restart cleanup peer matching.
  * gtphub: cosmetic
  * gtphub: improve logging for invalid packet
  * gtphub: check TEI presence in Create PDP Ctx Response
  * tests: fix condition to run sgsn, oap, gtphub tests
  * gtphub: Del PDP: replace unnecessary lookup with asserts.
  * gtphub: tweak an error log message
  * gtphub: prepare: keep tunnel ref in gtp_packet_desc.
  * gtphub: implement sgsn_use_sender for NAT.
  * gtphub_test: tweak test_user_data(): no seq routing.
  * gtphub: add test for SGSN behind NAT
  * gtphub: tweak startup log for sgsn_use_sender
  * gtphub: add gtphub-example.txt
  * gtphub: enhance gtphub-example.txt
  * gtphub: fix missing newline in log output
  * gtphub: logging: have one newline per log.
  * gtphub: tweak logging.
  * gtphub: be strict about unknown cmdline args
  * gtphub: add more detailed I/O rate counters.
  * gtphub: log: add side str to msg for reused TEI
  * gtphub_test: add test_parallel_context_creation()
  * gtphub: log: add TEI reuse msg, fix another TEI msg.
  * gtphub: fix: when checking TEIs, skip 0.
  * gtphub: simplify/fix: one TEI mapping per tunnel.
  * gtphub: log most common message type names.
  * gtphub: improve handling of restarted peer.
  * gtphub: add VTY show for peers and peer stats.
  * gtphub: log: limit length of hex dumps.
  * osmoappdesc.py: fix wrong index introduced by gtphub.
  * gtphub VTY test: use only 127.0.0.1.
  * gtphub VTY: fix doc strings for show cmds
  * gtphub VTY: add newlines to some VTY docs' final lines
  * fix bsc_vty out: timeslot indented too deeply.
  * remove src/libgb/Makefile.am
  * Add README.vty-tests
  * openbsc/README: some fixes, add CSCN and Iu*
  * gtphub: include ports.h instead of redefining OSMO_VTY_PORT_GTPHUB
  * gtphub: tweak default logging level
  * osmo-bsc: fix checking wrong pointer for ctrl setup success
  * minor fixes in bsc_vty.c and bsc_nat.c
  * bsc_nat: fail if VTY telnet port cannot be bound, clarify comment
  * ipaccess_rcvmsg: fix returncode, add partial write warning
  * gsm340_rx_tpdu: comment-out two unused vars
  * enable telnet VTY bind address config for various programs
  * osmo-nitb: add -M to pass specific MNCC socket path
  * osmo-nitb: cosmetic: rename to rf_ctrl_path, following mncc_sock_path
  * osmo-nitb: be strict about cmdline args
  * enable ctrl bind config for various programs
  * smpp: refactor initialization, add bind address
  * bsc_test.c: fix tz.override val and note a FIXME
  * osmo_bsc_filter.c: add fixme note
  * minor comment
  * use sqlite3_close() instead of sqlite3_close_v2()
  * check return value of sqlite3_close(), retry up to three times.
  * db: evaluate return value of sqlite3_finalize(), tweak log output.
  * channel_test: don't segfault if paging fails
  * 04.08: apply new bitmask functions, fix bitmask use
  * 04.08: apply new transaction id inline functions
  * bsc_scan_msc_msg: check protocol discriminator
  * fix confusing typo in constant (THAN -> THEN)
  * osmo-bsc: fix compiler warning: store struct in vty->index
  * Add MM Auth test; add auth_action_str() function
  * MM Auth test: add two tests for AUTH_THEN_CIPH
  * MM Auth test: add test to re-use existing auth
  * MM Auth: introduce AUTH_ERROR constant.
  * MM Auth: return AUTH_NOT_AVAIL instead of hardcoded zero
  * Fix MM Auth: disallow key_seq mismatch
  * Fix MM Auth: zero-initialize auth tuple before first use
  * gtphub_unmap_header_tei(): don't dereference unmapped_tei arg if not present (CID #57687)
  * bsc_nat: forward_sccp_to_msc(): assert con presence (CID #57872)
  * gbproxy_test: assert msg allocation (CID #57873)
  * drop unneccessary duplicate linking: osmo-bsc
  * drop unneccessary duplicate/unused linking: ipaccess
  * drop unneccessary duplicate linking: osmo-nitb
  * drop unneccessary duplicate linking: tests/gsm0408
  * gsm04_08_clear_request(): release loc with arg release=0
  * tweak db debug log: log TMSI as hex
  * gprs_gmm.c: Don't try to de-reference NULL mmctx
  * comment tweak for bsc_handover_start()
  * debug log: cosmetic fixes
  * gprs_gmm.c: don't transmit NOTEXIST when mmctx is NULL
  * lchan_alloc(): on alloc failure, report original type
  * dyn PDCH: allow allocating TCH/F on TCH/F_PDCH slots
  * dyn PDCH: send PDCH ACT for each TCH/F_PDCH on TS Enable
  * dyn PDCH: TS flags: rename one, add three, as enum
  * dyn PDCH: fix: clear PDCH flags on TS reconnect (e.g. BTS re-connect)
  * dyn PDCH: track pending PDCH de-/activation
  * dyn PDCH: add lchan sanity checks in PDCH DE/ACT ACK
  * dyn PDCH: set lchan->state after PDCH DEACT / before PDCH ACT
  * bsc_version.c: update copyright date, add contributor
  * configure: require libgsm for --enable-mgcp-transcoding
  * rm dup: use channel type names from libosmocore
  * typo in sgsn_test
  * dyn PDCH: enable PDCH only after release due to error
  * vty: show lchan summary: also show lchan->state
  * debug log: log all lchan state transitions
  * dyn PDCH: cosmetic: clarify lchan rel with assertion and comment
  * err log: tweak dyn pdch ack error logging
  * jenkins.sh: remove code dup
  * jenkins.sh: add --enable-iu matrix build
  * cosmetic: dyn_pdch_init(): flatten if-logic, add comments
  * dyn pdch: don't PDCH ACT if gprs mode is none
  * fix ctrl test: dyn TS: use new GSM_PCHAN_TCH_F_TCH_H_PDCH
  * fix: create_pdp_conf(): unset reject_cause after unknown ran_type
  * comments: clarify some dynamic TS comments
  * cosmetic: rsl_rx_rf_chan_rel_ack(): use local ts var for brevity
  * cosmetic: act lchan type: use constant instead of 0x00
  * cosmetic: rsl_rx_chan_act_ack(): use local lchan var in 14 instances
  * dyn TS: add ts->dyn state
  * gsm_data_shared: add gsm_ts_and_pchan_name() for dyn ts logging
  * code dup: join [rsl_]lchan_lookup() from libbsc and osmo-bts
  * error log: abis_rsl.c: log errors in channel_mode_from_lchan()
  * log lchan_alloc() result
  * debug log: fix line endings for abis_rsl_rx_rll logging
  * gsm_ts2chan_nr(): add assertions for lchan_nr
  * cosmetic: dyn_pdch_init(): debug log: use new gsm_ts_and_pchan_name()
  * error log: rsl_chan_activate_lchan: log channel mode error
  * prepare dyn TS: act lchan: fetch the channel mode a bit later
  * dyn TS: rename lchan->dyn_pdch to lchan->dyn
  * dyn TS: gsm_lchan2chan_nr(): decouple from ts->pchan
  * dyn TS: rsl *2chan_nr(): handle TCH/F_TCH/H_PDCH
  * dyn TS: verify_chan_comb(): handle new dyn TS NM_CHANC_*
  * dyn TS: rsl_lchan_lookup(): add dyn PCHAN
  * dyn TS: enhance channel allocator for dynamic TS
  * dyn TS: chan act: set chan_nr according to dyn pchan type
  * dyn TS: implement pchan switchover logic
  * dyn TS: split dyn_pdch_init() for new dyn type and rename
  * dyn TS: Rename bsc_dyn_pdch.c to bsc_dyn_ts.c
  * dyn TS: OS#1778 workaround: disable TCH/F on dyn TS for nitb
  * gsm_pchan2chan_nr: disable a chan_nr assert in BTS, to not break octphy
  * gsm_pchan2chan_nr(): fix uninitialized cbits
  * comment: gsm48_gmm_sendmsg(): add spec reference on encryptable
  * dyn TS: bts_chan_load: use correct nr of subslots for dyn ts
  * chan_alloc.c: use ts_subslots() instead of subslots_per_pchan[]
  * move ts_sublots() to gsm_data_shared.c, it will be used by osmo-bts
  * dyn TS: move check whether to switch to PDCH to separate function
  * dyn TS: fix error recovery: switch to PDCH after lchan error state
  * dyn TS: clearly use lchan[0], fixing minor confusion
  * dyn TS: fix: properly run an lchan activation timeout
  * dyn TS: fix OS#1798: on late RF CHAN REL ACK, activate PDCH
  * dyn TS: debug log 'switchover complete' only when there was a switchover
  * dyn TS: debug log: if still in use, also log lchan type and state
  * log: improve for rsl_lchan_mark_broken()
  * log: rsl notice: tiny tweak for readability
  * add libiu
  * cosmetic: gprs_sgsn.c: move pdp.h include to top
  * IuPS: add VTY config for asn_debug
  * log: abis_rsl: don't log 'error' when there is no error
  * log causing rx event for lchan_lookup errors
  * properly #include <openbsc/gsm_data.h> from gsm_subscriber.h
  * remove unused bsc_copyright from bsc_vty.c
  * vty l3 help: fix typo 'comamnds'; fix english s/his//
  * utils/Makefile.am: remove unused LIBOSMOVTY_CFLAGS
  * cosmetic: various comment, whitespace tweaks
  * Sanity fixes for gsm0408_dispatch(): rc, assertions
  * debug log for sms: fix/add
  * cosmetic: transaction.h: 1 comment typo, 1 whitespace
  * cosmetic fixes in libcommon/talloc_ctx.c
  * mscsplit: bsc_init: don't pass telnet dummy conn
  * mscsplit: move subscriber conns list into struct gsm_network
  * mscsplit: gsm_network_init(): add explicit root talloc ctx
  * mscsplit: talloc_ctx_init(): decouple from global tall_bsc_ctx
  * mscsplit: bsc_vty_init(): decouple from global bsc_gsmnet
  * mscsplit: abis vty: decouple from global bsc_gsmnet variable
  * mscsplit: add gsm_network backpointer to gsm_subscriber_connection
  * mscsplit: directly access gsm_network backpointer from gsm_subscriber_connection
  * cosmetic: vty_test_runner.py: add comment for vim auto settings
  * vty_test_runner.py: raise exception when MSC socket connection fails
  * log VTY telnet bind only once
  * cosmetic: comment typo on e1_config.c
  * channel test: prepare to add another test function
  * channel_test: test nr of subslots for dyn pchan, with error
  * Revert "bts: extend bts_chan_load to allow counting tch only"
  * dyn TS: fix: ts_subslots() for TCH/F_PDCH in PDCH mode
  * dyn TS: fix: abis_om2000: also handle dyn TS as TCH
  * dyn TS: fix: e1_config.c: switch(pchan) for dyn TS
  * cosmetic: bs11: also use ts_is_tch()
  * vty_test_runner.py: fix nat_msc_test(): socket attach: reduce timeout, retry
  * fix: send SNDCP XID only on GERAN Gb contexts
  * log CTRL bind only once
  * vty_test_runner.py: make unittest print all output by default
  * vty_test_runner.py: fix indents to use spaces, fix vim comment
  * build: be robust against install-sh files above the root dir
  * configure: check for pkg-config presence
  * Revert "bsc: count the usage of codec by setting the lchan active"
  * abis_rsl_rx_dchan(): guard against lchan_lookup() returning NULL
  * gsm_trx_name(): don't break if trx is NULL
  * jenkins.sh: use osmo-build-dep.sh, log test failures
  * ipaccess-config: initialize root talloc ctx with name
  * bs11_config: initialize bs11 tall ctx, use instead of bsc ctx
  * meas_pcap2db.c: remove unused include of msgb.h
  * gtphub_test.c: remove unused include of msgb.h
  * msgb talloc ctx: initialize in all main() scopes
  * msgb ctx: use new msgb_talloc_ctx_init(), don't access talloc_msgb_ctx
  * info log: iu: add line break to and tweak rx RAB Ass Resp log
  * log: count_codecs(): drop logging of non-TCH lchan types
  * bsc_vty: include dyn TS info in vty show lchan
  * fix use after free in bsc_config_free
  * OM2000: for TS conf of dyn TS, always send TCH/F chan comb
  * OM2000: disallow ip.access style TCH/F_PDCH pchan type
  * Add empty libcommon-cs
  * define mncc_recv_cb_t to avoid code dup
  * move to libcommon-cs: net init 1: rename to bsc_network_init
  * move to libcommon-cs: net init 2: move bsc_network_init decl to new .h
  * move to libcommon-cs: net init 3: actual move
  * move to libcommon-cs: gsm48_create_mm_serv_rej(), gsm48_create_loc_upd_rej()
  * IuPS: properly update ra_id on GMM Attach Request
  * factor out gen of USSD notify and release complete to libosmocore
  * factor out & introduce struct gsm_encr, in common_cs.h
  * sms_next_rp_msg_ref(): use direct pointer to next_rp_ref counter
  * tests: drop unused libmsc, unneeded duplicate libbsc linking
  * split bsc_bootstrap_network() in alloc and config
  * global gsm_network: move allocation further up
  * move to libcommon-cs: global vty gsm_network pointer
  * move to libcommon-cs: network VTY that isn't BSC-specific
  * bsc vty: rename show_net_cmd to bsc_show_net_cmd
  * reinvent connection_for_subscr() and move to libmsc
  * Move timezone settings up to network level
  * move to libcommon-cs: net timezone VTY config
  * split subscr_con_allocate()/_free() in bsc_ and msc_
  * osmo-nitb: exit when MNCC socket init failed
  * gsm_subscriber_connection: mark BSC specific items
  * abis_om2k: fix typo that declared non-existent struct gsm_bts_trx_s
  * lchan release in error state: SACCH deact only for SACCH pchans
  * cosmetic: chan_alloc: use switch instead of if-cascade
  * Fix TCH/F_PDCH: no need to check ts subslots for PDCH
  * Revert "Support Deactivate PDP Context Request from network"
  * build: bump required libosmocore, libosmogsm to 0.9.4, for GSUP
  * comments: gsup client: rename to Generic, adjust copyright and authors
  * gprs_gsup_client*: remove the gprs_ prefix
  * rename gprs_gsup_client.h to gsup_client.h
  * gsup client, gsup_test_client: move logging to DLGSUP category
  * oap: rename public API from oap_ to oap_client_
  * rename oap.h to oap_client.h
  * move gprs/oap.c to libcommon/oap_client.c
  * move grps_gsup_client.c to libcommon/gsup_client.c
  * oap_test.c: rename to avoid clash with libosmocore oap_test.c
  * oap_client_test: print test descr to stderr, check stderr
  * oap_client: move logging to DLOAP logging category
  * oap_client_test: show bug: disabled state does not reject message
  * oap_client: reject all messages in disabled/uninitialized state
  * oap_client: make use of OAP optional: disable for NULL config
  * fix: missing terminator in two value_string arrays
  * gtphub: fix possible NULL deref: don't print NULL tunnel
  * build: osmo-nitb: fix missing LIBCRYPTO_FLAGS
  * build: remove obsolete $LIBCRYPT in two places
  * gitignore: gsup_test_client binary
  * use new OSMO_VALUE_STRING
  * fix 'osmo-nitb --version' segfault
  * Revert "Turn some warnings into errors"
  * gprs subscr: fix: intended strcmp(), but is strcpy()
  * undup: gtphub_test: use libosmocore's llist_count()
  * fix strncpy() invocation in vty_interface_layer3.c and 3 tests
  * cosmetic: use osmo_strlcpy() everywhere
  * various comment / whitespace tweaks (libmsc, gprs, libcommon-cs)
  * osmo_bsc_grace.h: use '<>' include, not '""'
  * paging.h: use '<>' include, not '""'
  * compiler warning: bsc_vty: remove two unused vars
  * gsm0408_rcv_cc: guard against NULL subscriber
  * vty tests: attempt to get at sporadic 'Broken Pipe' error
  * vty tests: more attempts to resolve sporadic 'Broken Pipe' error
  * vty tests: testBSCreload: ipa_handle_small: ensure rx of 4 bytes
  * gsm48_tx_mm_auth_req(): support UMTS AUTN
  * Revert "vty tests: more attempts to resolve sporadic 'Broken Pipe' error"
  * gsm_04_08: implement parsing of UMTS Auth responses
  * vty tests: more attempts to resolve 'Broken Pipe' error
  * vty tests: more attempts to resolve 'Broken Pipe' error (3)
  * vty tests: more attempts to resolve 'Broken Pipe' error (2)
  * remove compiler warning: unused rc in vty_interface_layer3
  * subscr_update_expire_lu(): fix (obscure) segfault
  * logging: use central filter and ctx consts from libosmocore
  * debug.h/c: remove unused cruft / cosmetic tweaks
  * logging fixup: shorter names for LOGGING_FILTER_* and LOGGING_CTX_*
  * cosmetic: remove unused scall_signal_data.subscr
  * vty_test_runner.py: fix socket leak
  * vty: fix subscr ref count leak in 'subscriber name' cmd
  * cosmetic: gsm_data.h, README: rename CSCN to MSC
  * cosmetic: clarify BSC's remote MSC data vs. OsmoMSC
  * cosmetic: rename osmo_msc_data.h to bsc_msc_data.h
  * cosmetic: rename struct osmo_msc_data to bsc_msc_data
  * add struct gprs_subscr, separating gprs from gsm_subscriber
  * vty_rest_runner.py: remove debug monitoring for TCP sockets
  * python tests: remove process 'Launch' message, now at osmoutil
  * smpp_test_runner.py: fix socket leak
  * SGSN: Integrate support for UMTS AKA
  * SGSN VTY: make missing GSUP server address+port fatal
  * vty test: nat_msc_test: setsockopt REUSE to avoid TIME_WAIT problems
  * ctrl_test_runner: speed up more than 10 fold by sleeping less
  * fix: gprs_gmm, gprs_llc_vty: two unterminated value_string arrays
  * subscriber conn: add indicator for originating RAN
  * vty tests: allow picking specific tests to run by name
  * vty tests: close msc socket after nat_msc_test
  * add struct bsc_subscr, separating libbsc from gsm_subscriber
  * python tests: vty and smpp: speed up >10 times
  * oap tests: fix after SQN scheme changes from libosmocore
  * jenkins: add value_string termination check
  * bsc_/gprs_subscriber: fix: use osmo_strlcpy() to safely copy IMSI
  * python tests: allow running from separate build dir
  * LU counters: count completion and failure, not messages sent
  * jenkins.sh: Iu: use libosmo-sccp,-netif master
  * build: iu: use libosmo-sccp tag 'old_sua'
  * fix VTY parsing: subscriber-create-on-demand random
  * fix subscriber random extension allocation range
  * fix '/include/openbsc ' to have no trailing space
  * ipaccess-config: properly create swload
  * jenkins: fix build of --enable-iu: use osmo-iuh tag 'old_sua'
  * cosmetic: vty for timers: remove obsolete range check
  * vty: add 'default' keyword to timer config
  * timer vty: also print the default value in cmd doc
  * Revert "factor out & introduce struct gsm_encr, in common_cs.h"
  * fix vty tests: vty no longer goes to parent node implicitly
  * jenkins: use osmo-clean-workspace.sh before and after build

  [ Pablo Neira Ayuso ]
  * mgcp_osmux: available circuit IDs from 0 to 255, not from 0 to 128
  * libmsc: use GSM411_RP_CAUSE_MO_NUM_UNASSIGNED as return value
  * libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP
  * src: use osmo_timer_setup()
  * gsm_04_11: get rid of unused parameter in sms_route_mt_sms()
  * libmsc: do not leak pending SMPP command object on error path
  * libmsc: remove dead code in sms_route_mt_sms()
  * libmsc: remove duplicate lines in deliver_to_esme()
  * libmsc: remove 'deferred' parameter in sms_route_mt_sms()
  * libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms()
  * libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM messages
  * libmsc: report status report request flag from SMPP SUBMIT_SM
  * libmsc: missing bit shift in status report flag when stored in sms object
  * utils: smpp_mirror: set registered_delivery field in SMPP SUBMIT_SM
  * utils: smpp_mirror: temporarily munch SMPP delivery receipts
  * utils: smpp_mirror: reflect message reference TLV
  * libmsc: add support for SMPP delivery receipts
  * libmsc: update database to accomodate SMS status-report fields
  * utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments
  * libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03.40 status report
  * libmsc: support GSM 03.40 status report for nitb
  * libmsc: gsm340_gen_oa_sub() may return negative value
  * libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV handling
  * libmsc: use new smpp34 esm_class definitions
  * libmsc: use SMPP34_DELIVERY_RECEIPT_* in libsmpp34
  * libmsc: annotate esme route in the sms object from deliver_to_esme()
  * libmsc: sms_route_mt_sms() may return uninitialized return value

  [ Martin Hauke ]
  * Fix no-return-in-nonvoid-function meas_vis.c
  * Fix Warning: openbsc implicit-pointer-decl meas_udp2db.c:50

  [ Alexander Huemer ]
  * tests/oap: depend on libgtp
  * tests/abis: fix format specifiers
  * gprs: use libgtp cflags
  * Consistenly format variables in */Makefile.am files
  * Build fixes
  * Add missing _CFLAGS and _LIBS

  [ Ruben Undheim ]
  * Patch to make openbsc find libsmpp34
  * Fix some typos in stdout output
  * deb: unbreak nightly builds

  [ Vadim Yanitskiy ]
  * move to hex TMSI representation
  * db.c: implemented incremental migration
  * mncc_sock: use osmo_sock_unix_init() from libosmocore
  * VTY: add the dyn_ts_allow_tch_f option

  [ Max ]
  * Ignore vty test byproducts
  * Fix segfault with broken config
  * NAT: vty command to display number of BSCs
  * NAT: extend debug output for ipaccess errors
  * Remove trivial wrapper function
  * NAT: allow allocating BSC in arbitrary order
  * vty_test_runner: update ipa sending code
  * NAT: move BSC config into separate file
  * NAT: reload BSCs config dynamically
  * Add SI2quater support to SI3
  * Refactor SI-related code
  * Add basic SI2quater support
  * Fix documentation for command parameters
  * Fix earfcn deletion
  * Cleanup shared data structure
  * Add basic UARFCN support
  * Add vty check for max si2quater size
  * Add extra debug output with channel mode and type
  * Add missing include
  * Fix comment typo
  * Adjust si2quater ranges
  * Disconnect calls with incompatible channel types / modes
  * Ignore extended test leftovers
  * Cleanup db test
  * Move DTX settings to BTS
  * Use proper measurement for handover
  * Make extending subscriber creation easier
  * Fix copy-paste error in SI6
  * Make si2q scheduling optional
  * Store last used FN for TCH
  * Add regexp authorization policy for IMSI
  * Add warning for unsupported DTX configurations
  * Add DTXd indicator to gsm_lchan
  * DTX: add data necessary for scheduling
  * Add talkspurt indicator for gsm_lchan
  * Fix SIGABRT on wrong AMR payload
  * Make random extension range configurable
  * Fix vty tests with subscriber deletion
  * SGSN: force GSUP CN domain to PS
  * SGSN: add vty config for choosing GPRS encryption
  * SGSN: move TLLI unassignment into separate function
  * Make random MSISDN assignment optional
  * SGSN: prevent starting with inconsistent config
  * SGSN: use unique AUTH REQ reference
  * SGSN: split GEA key management from TLLI
  * SGSN: add preliminary support for GPRS encryption
  * SGSN: encrypt/decrypt only necessary frames
  * SGSN: move cipher application to separate function
  * Fix default subscriber regexp
  * Improve code re-use
  * Use random operation id
  * Add python functions to get/set ctrl variables
  * Add web proxy for control interface
  * Modify SI 13 field for control_ack_type
  * DTX: extend SID cache
  * DTX: add flag for AMR HR P*
  * DTX DL: use FSM for AMR
  * Log use of incompatible BS-AG-BLKS-RES value
  * Replace magic number with define
  * DTX DL: Add FACCH cache
  * Decrease count_codecs logging verbosity
  * abisip-find: use protocol constant
  * Replace duplicated code with macro call
  * Add IPA multiplex
  * Use IPA module for vty tests
  * Add twisted-based IPA multiplex
  * bsc_control.py: style corrections
  * bsc_control.py: use ipa.py module
  * bsc_control.py: remove unused -i option
  * Improve GPRS logging
  * Integrate Debian packaging changes
  * Cosmetic fixes around SI generation
  * Turn some warnings into errors
  * Log expected SRES on GPRS AUTH REJECT
  * Turn some compiler warnings into errors
  * Print subcriber when skipping auth
  * Improve OML failure report
  * bsc_control.py: fix blocking
  * Prevent segfault in range encoding
  * SI2q: add support for multiple UARFCNs
  * CTRL: remove boilerplate
  * Remove dependency to autoconf-archive
  * Attempt to fix nightly builds
  * vty: remove ignored logging parameters
  * Expand chan allocation logging
  * Remove duplicating define
  * Add support for extended SI2q parameters
  * Handle DSD from HLR
  * Fix potential segfault in sgsn_libgtp.c
  * Add MS time. offset to gsm_lchan
  * examples: remove logging level * everything
  * Don't drop OML links for Get Attributes NACK
  * twisted_ipa.py: bump version properly
  * twisted_ipa.py: make debug logging more robust
  * Add simple CTRL2SOAP proxy
  * Handle PCU version received via OML alert
  * python: fix Null logger
  * abis: log known ACKs and unknown messages
  * gsm_bts: add version and variant details
  * Fix MS TO measurement representation
  * Remove libs from openbsc.pc
  * gbproxy: add example .service
  * deb: install openbsc.pc
  * Save PCU version reported by BTS
  * Prepare for extended SI2quater support
  * Add gsm_bts_type_variant to gsm_bts struct
  * Make pcap dependency optional
  * Fix vty warnings for GEA0
  * ctrl: remove boilerplate code
  * deb: install python scripts from contrib/
  * Gb: use textual representation for parse log
  * Use ipa.py for ctrl tests
  * Use libosmocore for SW Description parsing
  * Make BTS type and variant converters shareable
  * Add forgotten items to .gitignore
  * Use define for limit on number of BTS features
  * Prepare for BTS attribute reporting via OML
  * Restructure SI2quater generation
  * SI2quater: fix EARFCN inclusion check
  * Get basic BTS attributes
  * Remove errorneous include
  * Adjust BTS model feature check
  * Add remote BTS feature storage and helpers
  * Get TRX attributes
  * Request and parse BTS feature list via OML
  * OML: fix potential OOB memory access
  * Move SI-related defines
  * Update SI data structures and generation
  * bsc_init: Forget which SIs are valid for the trx
  * Fix BTS features length check
  * Enable optional static builds
  * Fix BTS attribute requests
  * gbproxy: log unhandled BSSGP PDU as text
  * gbproxy: log signal value as text
  * Remove common_cs.h from .deb
  * Use release helper from libosmocore
  * SI13: drop PBCCH-related bits
  * CTRL: cleanup write-only command functions
  * Show OML link uptime in vty
  * Make TRX rf locking more visible

  [ Alexander Couzens ]
  * add .gitreview
  * gprs: use new uint8_t * for kv in gprs_cipher_run()
  * libbsc: skip channel state LCHAN_S_INACTIVE while handover
  * gprs_gmm: remove duplicated start of T3395
  * bs11_config: add brackets to fix warning in argument parsing
  * sgsn: add statistics counter for GPRS and PDP packets
  * sgsn: add statistics counter for LLC packets
  * libbsc/libmsc: convert old osmo counter into rate_ctrgs
  * libmsc: add missing count of sms no receiver when using smpp_first
  * libmsc/bsc: split rate counters into bsc and msc group
  * bsc/netinit: correct mistyped rate counter
  * gprs/gsm0408_gprs_force_reattach_oldmsg: check llme before use
  * gprs/gprs_llc: fix null pointer deref in gprs_llc_rcvmsg
  * sms: change rp err cause of smpp_try_deliver errors
  * bts: extend bts_chan_load to allow counting tch only
  * bsc: count the usage of codec by setting the lchan active
  * msc: add counters to track call attempts/active/success/failed
  * gprs/gprs_llc: count UI frames over SAPI in the statistics
  * fix mistypes, spaces and tabs
  * bsc: count the usage of codec by setting the lchan active
  * gprs/sgsn: rename gprs->mm_state -> gmm_state
  * gprs/sgsn: rename sgsn_mm_ctx_alloc() -> sgsn_mm_ctx_alloc_gb()
  * gprs/gprs_mm: add value_strings for PMM & MM states
  * gprs/sgsn_mm_ctx_alloc(): initialize MM state to IDLE
  * gprs/sgsn_vty: fix typo in comment
  * libmsc/update_db_revision_3(): free memleaking db result
  * unixsocket: start sabm for UNIXSOCKET
  * gprs_sgsn.c: initialize ptmsi with 0xdeadbeef
  * libbsc: add chreq type for CHREQ_T_PDCH_ONE_PHASE & CHREQ_T_PDCH_TWO_PHASE
  * abis_om2k: protect MO FSMs by NULL check
  * libbsc: add rsl_ericsson_imm_assign_cmd() which reply with a confirmation message
  * pcu_sock: set flag PCU_IF_FLAG_SYSMO by setting pcu_direct = 1
  * pcu_sock: pcu_tx_info_ind allow to use TRX not starting from 0
  * pcu_sock: implement direct tlli on AGCH
  * abis_rsl: fix off-by-one length check when parsing ericson tlli field
  * abis_rsl: use msgb_pull to parse tlli from msg

  [ Andreas Eversberg ]
  * dyn PDCH: Fix free slot search for chan_alloc_reverse == true
  * dyn PDCH: Automatically deactivate/activate PDCH on TCH/F+PDCH channel

  [ Dieter Spaar ]
  * SGSN: fix FCS calculation for encrypted frames

  [ bhargava ]
  * Modify SI 13 field to support 11 bit RACH

  [ Philipp ]
  * Adding LLC-XID encoder / decoder and unit test
  * Moving grs_sndcp.h header file to include
  * Adding LLC-XID related modifications in LLC
  * SNDCP: add SNDCP-XID encoder/decoder and unit test
  * RFC1144: add slhc code from linux kernel
  * RFC1144: integration and unit-test
  * SNDCP: add RFC1144 header compression functionality
  * V.42bis: add sourcecode from IAXmodem (SPANDSP)
  * V.42bis: integration and unit test
  * SNDCP: add V.42bis data compression functionality
  * SLHC: Improving slhc (RFC1144) testcase
  * SGSN: Fixing build config
  * sndcp: Fixups for sndcp layer based on coverity-scan suggestions
  * OML: Improve OML attribute handling
  * gsm0408: Adding log output for 3g specific RR messages
  * Cosmetic: Add missing switch to usage help
  * OM2000: Add fault report parsing
  * om2000: added support for ericssons sabm negotiation
  * OM2000: Throw error when MO can not be enabled
  * SNDCP: Fixup based on Coverity Scan suggestion
  * rbs2000: Add missing bts feature definitions
  * OM2000: Fixup based on Coverity Scan suggestion
  * rsl: support for ericssons propritary SI13 format
  * sndcp: fixup for coverity scan defect CID 149097
  * LLC: Fixup element order in LLC-XID
  * sndcp: Allow empty SNDCP-XID indications
  * cosmetic: Rename phone to ms

  [ root ]
  * om2000: Add support for querying RBS capabilities

  [ Pravin Kumarvel ]
  * Correct Logging macro for pdpctx_timer_start
  * Add support for pdpctx_timer_stop
  * Support Deactivate PDP Context Request from network

  [ Keith ]
  * Pass actual smpp_avail_status through to smpp in alert_all_esme()
  * Add VTY command to immediately expire user (set expire_lu to now)
  * meas_json: fix NEIGH: missing array braces
  * libmsc: Map SMPP command status to GSM 04.11 cause
  * LIBMSC: Place correct dst address in status report
  * LIBMSC: Use sms->text, not sms->user_data to construct report body
  * libmsc: Use actual delivery time in delivery reports.
  * libmsc: Log Rx DELIVER-SM RESP before calling gsm411_send_rp_ack

  [ Philipp Maier ]
  * compression: Fix nullpointer deref
  * gprs: Fix compiler warning about uninitalized cause code
  * om2000: add VTY command to delete CON groups
  * XID: resend xid with pdp-ctx-ack messages
  * silent_call: remove unfinished fuzzer interface
  * sgsn: fix problem with leading-zero-IMSIs
  * cosmetic: add copyright header to bsc_control.py
  * cosmetic: Add commandline option to display version
  * gprs: fix T3186 encoding in Sysinfo 13
  * gsm_data_shared: add value strings for gsm_chreq
  * libbsc: add debug log message to S_L_INP_* callbacks
  * pcu_sock: add basic pcu interface support
  * pcu_sock: Forward imm.ass PCU originated messages
  * pcu_sock: Fix broken paging command

  [ Minh-Quang Nguyen ]
  * rsl: Fix dropping of LAPDm UA message.

  [ Alexander Chemeris ]
  * utils: 'meas_json' utility to convert measurement feed into a JSON feed.
  * libmsc: Fix VTY output for handover counters.
  * libcommon: Fix log output for bts>0.

  [ Pau Espin Pedrol ]
  * nat: Use equal func in bsc_sccp
  * nat: Fix initial buffer size parameter for getline
  * smpp_smsc.c: Log on sending deliver_sm message
  * libmsc: Remove comment not applying anymore
  * mgcp_osmux: Remove unused parameter
  * mgcp: Fix uplink activation of Osmux stream
  * sgsn_test: Fix wrong definition of wrap func
  * smpp: Fix compilation warning
  * libmsc: Fix wrong handling of user_message_reference parameter
  * bsc_api: Fix NULL secondary_lchan access in handle_ass_fail
  * libbsc: Use correct printf formatting for uint64_t

  [ Benoit Bolsee ]
  * smpp: fix return cause
  * 04.08: find a portable way to obtain the timezone offset
  * transaction: reject calls from unidentified subscribers

  [ Ivan Kluchnikov ]
  * handover_logic: set correct link to bts for subscriber_connection in case of moving this connection to another bts
  * handover_decision: Fix condition for power budget handover attempt

  [ André Boddenberg ]
  * Make use of osmo-build.sh to use dependency artifacts for builds.

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

openbsc (0.15.1) UNRELEASED; urgency=medium

  * Move forward toward a new release.
  * Prevent SGSN starting with 'auth-policy remote' when no 'gsup remote-*' are configured.
    Note: such configs are broken without extra workarounds anyway.

  [ Harald Welte ]
  * Rename osmo-bsc to osmo-bsc-sccplite to avoid clashes with new 3GPP AoIP
    osmo-bsc.git code

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Tue, 24 May 2016 23:14:31 +0200

openbsc (0.14.0) unstable; urgency=low

  * New upstream tag and additional patches.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Sat, 14 Mar 2015 20:33:25 +0100

openbsc (0.12.0+git26-7) unstable; urgency=low

  * 64bit fix for the MGCP rewriting

 -- Holger Hans Peter Freyther <holger@freyther.de>  Wed, 07 Nov 2012 11:39:34 +0100

openbsc (0.12.0+git26-6) precise; urgency=low

  * Added init script for osmocom-sgsn. 

 -- Eric Butler <eric@codebutler.com>  Fri, 24 Aug 2012 21:04:32 -0700

openbsc (0.12.0+git26-5) precise; urgency=low

  * Don't enable MNCC sock by default.
  * Automatically create important directories.
  * Fix init script 'stop' command.

 -- Eric Butler <eric@codebutler.com>  Fri, 24 Aug 2012 20:56:33 -0700

openbsc (0.12.0+git26-4) precise; urgency=low

  * Specify HLR path and enable RTP proxy.

 -- Eric Butler <eric@codebutler.com>  Mon, 20 Aug 2012 00:21:07 -0700

openbsc (0.12.0+git26-3) precise; urgency=low

  * Fix init script.

 -- Eric Butler <eric@codebutler.com>  Sun, 19 Aug 2012 16:05:44 -0700

openbsc (0.12.0+git26-2) precise; urgency=low

  * Fix libdbi package dependency.

 -- Eric Butler <eric@codebutler.com>  Wed, 15 Aug 2012 00:35:37 -0700

openbsc (0.12.0+git26-1) precise; urgency=low

  * Fix version issue.

 -- Eric Butler <eric@codebutler.com>  Tue, 14 Aug 2012 21:00:51 -0700

openbsc (0.12.0+git26) precise; urgency=low

  * Updated ubuntu package.

 -- Eric Butler <eric@codebutler.com>  Tue, 14 Aug 2012 17:36:51 -0700

openbsc (0.9.13.115.eb113-1) natty; urgency=low

  * New upstream release

 -- Harald Welte <laforge@gnumonks.org>  Wed, 11 May 2011 18:41:24 +0000

openbsc (0.9.4-1) unstable; urgency=low

  * Initial release

 -- Harald Welte <laforge@gnumonks.org>  Tue, 24 Aug 2010 13:34:24 +0200
