libosmocore (1.5.2) unstable; urgency=medium

  [ Philipp Maier ]
  * gsm0503_coding: use ahs tables when encoding ahs codec id

 -- Oliver Smith <osmith@sysmocom.de>  Fri, 24 Sep 2021 14:09:53 +0200

libosmocore (1.5.1) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * osmo-release.sh: Fix rc!=0 on TODO-RELEASE file without comment lines

  [ Harald Welte ]
  * attempt to fix RPM spec file after recent soversion bump

 -- Harald Welte <laforge@osmocom.org>  Wed, 24 Feb 2021 09:35:21 +0100

libosmocore (1.5.0) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * debian/control: change maintainer to the Osmocom team / mailing list
  * vty/command: cosmetic: simplify conditions in in config_list_cmd
  * vty/command: cosmetic: fix formatting of config_help_cmd
  * vty/command: cosmetic: drop redundant line break
  * vty/command: fix switch / case coding style in vty_go_parent()
  * vty/command: cosmetic: swap i and j in vty_dump_element()
  * gsm0808: add gsm0808_create_sapi_reject_cause()
  * macaddr: fix osmo_get_macaddr(): return -1 if no device is found
  * macaddr: fix osmo_macaddr_parse(): return meaningful error codes
  * lapdm_pad_msgb(): cosmetic: use GSM_MACBLOCK_PADDING
  * lapd_test: fix wrong comment in lapdm_establish()
  * lapd_test: rename func=UA (RR) CM Service Request: s/ua/ua_cm/
  * lapd_test: fix: print all messages to stdout, not stderr
  * lapd_test: add a test checking SAPI0/SAPI3 prioritization
  * lapdm: fix SAPI-0/SAPI-3 frame prioritization on DCCH
  * logging: refactor and simplify log_target_destroy()
  * logging: fix log_target_destroy(): properly close syslog
  * logging: fix memleak in log_target_create_file()
  * vty: fix 'Unsigned compared against 0' generate_cpu_hex_mask()
  * gsm0808: fix: do not encode invalid encryption algorithm
  * vty: add program specific attributes to VTY commands
  * vty: print program specific attributes in the XML reference
  * vty: cosmetic: drop redundant 'break' statements
  * vty: cosmetic: s/width/cmd_width/g in vty_describe_command()
  * vty: cosmetic: fix missing curly braces in vty_describe_command()
  * vty/command: introduce new attribute CMD_ATTR_IMMEDIATE
  * vty/command: reflect global attributes in the XML reference
  * tests: do not ignore stderr of vty_test, also match it
  * vty: check for duplicate flags in application specific attributes
  * vty: check for reserved flags in application specific attributes
  * vty/command: add global command attribute CMD_ATTR_NODE_EXIT
  * vty/command: add CMD_ATTR_LIB_COMMAND and install() API wrappers
  * vty: use install_lib_element() and install_lib_element_ve()
  * vty/command: introduce API for the library specific attributes
  * vty: introduce and use VTY_CMD_USR_ATTR_NUM
  * vty/command: introduce a command to list attributes
  * vty/command: print attribute flags in the output of 'list'
  * tests/vty: verify 'show vty-attributes' / 'list' commands
  * vty/command: assign flags to CMD_ATTR_{IMMEDIATE,NODE_EXIT}
  * vty/command: restrict the use of '.', '!', and '@' as flags
  * vty: fix vty_dump_element(): do not print empty <attributes>
  * socket: make the arguments of osmo_sockaddr_cmp() const
  * gprs_ns2: make struct osmo_sockaddr pointers const
  * rsl: rsl_chan_nr_str_buf(): use ABIS_RSL_CHAN_NR_CBITS_* macros
  * logging: introduce 'systemd-journal' target
  * vty: introduce the expert mode and a command to enable it
  * vty/command: make some 'struct cmd_element' pointers const
  * vty/command: introduce vty_dump_xml_ref_mode()
  * vty/command: add CMD_ATTR_HIDDEN to CMD_ATTR_PUBLIC_MASK
  * application: do not document unrelated forward-declarations
  * vty/command: fix: restrict the expert mode to the current session
  * fix spelling in 'value_string' arrays: existAnt -> existEnt
  * gsm48: add missing RR cause value definitions
  * vty/command: add 'hidden only' VTY reference generation mode
  * bts_features: add missing description for BTS_FEAT_ACCH_REP
  * core/linuxlist: do not use 'new' as a parameter name
  * protocol/gsm_08_58.h: add ip.access Power Control structures
  * protocol/gsm_08_58.h: add Osmocom specific EWMA AVG algo
  * logging: revert color of LGLOBAL category back to white
  * gsm_08_58: fix wrong field order in 'struct ipac_preproc_pc_thresh'
  * gsm_08_58: add flexible array member to 'struct ipac_preproc_ave_cfg'
  * gsmtap_util: SNR can be negative, use a signed integer
  * gprs_ns2_sns: always check rc of osmo_sockaddr_str_from_sockaddr()
  * gprs_ns2_fr: fix resource leaks due to early return in set_ifupdown()
  * gprs_bssgp: fix uninitialized struct fields in bssgp_create_rim_ri()
  * bts_features: s/Repeation/Repetition/ in osmo_bts_features_descs[]
  * gprs_bssgp: abuse gsm48_encode_ra() to encode TAC
  * fixup: configure.ac: fix: do not define HAVE_NEON unconditionally
  * gsm_7bit_encode_n(): test encoding of more than 250 septets
  * gsm_7bit_encode_n(): fix integer overflow in gsm_septets2octets()
  * gsm0808: use msgb_tv16_put() and osmo_store32be()
  * bssgp_bvc_fsm: check return value of osmo_fsm_register()
  * tlv: add msgb_tv32_put(), similar to msgb_tv16_put()
  * tlv: clarify documentation for msgb_tv{16,32}_put()

  [ Eric ]
  * vty cpu sched: do not assert if sched impossible
  * pkgconfig: link to mnl if available

  [ Pau Espin Pedrol ]
  * vty: Fix cpu-sched VTY node name
  * sock: osmo_sock_init2_multiaddr: decouple addr resolution from socket creation
  * socket: multiaddr: Support IPv4 + IPv6 addresses in SCTP associations
  * socket: Log proper getaddrinfo() error
  * osmo_sock_get_ip_and_port(): Support IPv6 sockets
  * l1sap.h: Fix typo in doxygen documentation
  * osmo_sock_inti2_multiaddr: Fix memleak and free uninitialized mem
  * socker: Remove AI_ADDRCONFIG from getaddrinfo flags
  * tests: Split SCTP tests to its own file and run them conditionally
  * ipa: Fix wrong output log formatting
  * socket: Allow binding to :: (IPv6) and connecting to IPv4-only on the remote
  * socket: Add support for AF_INET6 in osmo_sockaddr_to_str_and_uint()
  * socket: Use AF_UNSPEC instead of PF_UNSPEC calling getaddrinfo
  * socket: Fix stack-buffer-overflow in osmo_sock_local_ip()
  * socket: fix wrong ipv6 dst buf size passed in osmo_sock_local_ip
  * socket: Add some osmo_sockaddr print helpers
  * tests: Add test to showcase osmo_sock_init2 bug with AF_UNSPEC
  * socket: Fix bug in osmo_sock_init2(AF_UNSPEC) matching IP versions
  * logging: Avoid printing OSMO_LOGCOLOR_END if no color was used
  * osmo_strlcpy: Avoid calling memcpy with size=0
  * osmo_strlcpy: Clarify length calculation
  * cosmetic: Fix typo in API doc
  * gprs_ns2_udp: Avoid dangling freed struct in list if binding fails
  * vty: Fix left shifting out of range on signed variable
  * cosmetic: vty: Fix trailing whitespace
  * gsm: Fix make distcheck with parallel make
  * contrib: jenkins: Enable parallel make in make distcheck
  * lapdm: Drop log lines printing fmt=B
  * lapdm: Split lapd_rx_u() spaghetti into one function per message type
  * lapdm: Allow SABM L=0 in Timer Recovery State
  * gb: ns2_sns: Fix missing trailing newline char in log line
  * gb: ns2_sns: Add missing value_string entry for GPRS_SNS_EV_NO_NSVC
  * vty: Mark cpu_sched_vty commands with attr immediate
  * tdef: Introduce OSMO_TDEF_US unit
  * tests: Fix tdef_test on 32bit platforms
  * bitvec: Fix left shifting out of range on signed variable
  * cosmetic: serial: Fix typo in comment
  * serial: Fix typo in debug log line
  * serial: Log error if tcgetattr() or tcsetattr() fail
  * serial: Introduce API osmo_serial_speed_t
  * Revert "tests: Fix tdef_test on 32bit platforms"
  * tests: Fix tdef_test on 32bit platforms
  * statsd report: Fix wrong fmt specificier generating wrong stats
  * gsm: Add enum for Network Feature Support IE
  * Include mnl.h iif --enable-libmnl
  * gb: Import mnl.h iif --enable-libmnl
  * bssgp: Remove newly added log line warning about NOOP
  * rest_octets: add Serving Cell Priority Parameters
  * gsm: si13: Fix encode of EGPRS_PACKET_CHANNEL_REQUEST
  * si2quater: fix budget calculation for multiple EARFCNs
  * gsm: append_eutran_neib_cell: Fix SI2quater EARFCN list
  * GPRS Cell Options (SI13): Add REL-4 CCN_ACTIVE bit
  * Revert "rest_octets: fix encoding of 3G Early Classmark Sending Restriction"
  * rest_octets: Fix decoding of SI3 3G Early Classmark Sending Restriction
  * gitignore: Ignore *~
  * ctrl: Allow handling CTRL get/set replies in user defined code
  * Intoduce Packet Switch CGI
  * ctrl: ports.h: Add OSMO_CTRL_PORT_BSC_NEIGH
  * gsm: Add missing osmo_*_cmp symbols to libosmogsm.map
  * gsm: Introduce osmo_{rai,cgi_ps}_cmp() APIs
  * gprs_bssgp_prim.h: Add missing includes
  * Revert "gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty"
  * ctrl_connection: Initialize write_queue.bfd.fd to -1 during allocation
  * cosmetic: fix typo in comment
  * gsm: Fix wrong length in SI13 GPRS Cell Options IE
  * gsm: bts_features: Introduce BTS_FEAT_CCN
  * Fix struct bitfields on big endian systems
  * cosmetic: Move comment one line below in append_gprs_cell_opt
  * gsm: Fix bitfield order in dtap_header
  * comsetic: gsm0808_test: Fix trailing whitespace
  * gsm: Support converting to cgi-ps in gsm0808_cell_id_from_cgi()
  * gsm0808_utils: Move static function further up in file
  * gsm: Fix encoding of gsm0808_cell_id_list2 with CGI-PS types
  * logging: gsmtap: Fill PID field for each message
  * Introduce osmo_gettid() API
  * logging: gsmtap: Fix fill PID field not stored in network byte order
  * logging: gsmtap: Store TID instead of PID in pkt hdr
  * gsm: Introduce API osmo_gsm48_rest_octets_si13_decode
  * logging: Allow prefixing thread ID to each log line
  * tests: Set print_category values explicitly
  * Drop use of log_set_print_filename() API inside libosmocore
  * logging: Deprecate API log_set_print_filename
  * osmo-release.sh: Omit tab whitespace matching debian/control versions

  [ Harald Welte ]
  * gsmtap: Add definitions for E1/T1 payload (LAPD, TRAU, FR) in GSMTAP
  * Add VTY + CTRL ports for upcoming OsmoSMLC
  * gprs_ns2_sns: Fix compilation on Debian 8
  * ipaccess.h: Add more enum values and 'official' names
  * ns2: Improve/extend doxygen comments for new ns2 implementation
  * ns2: Use NULL and not '0' when returning a NULL-Pointer
  * gprs_ns2: Mark gprs_ns2_validate_* as static
  * write_queue: Add osmo_wqueue_enqueue_quiet()
  * write_queue: use msgb_{en,de}queue_count()
  * write_queue: Re-enqueue msgb if write_cb returns -EAGAIN
  * logging_vty: set osmo_stderr_target to NULL on "no log stderr"
  * logging: Introduce MAX_LOG_SIZE for the magic number 4096
  * bssgp: Don't include RA-ID in BVC-RESET for BVCI=0 (signalling)
  * bssmap_le/bsslap tests: We must use %td for ptrdiff_t printing
  * osmo_float_str_to_int: When using strtoll(), use LLONG_{MAX,MIN}
  * gprs_ns2: Fix parsing of SNS-{ADD,DEL,CHANGE_WEIGHT}
  * gsm48_rest_octets: Add parser for SI4 rest octets
  * [cosmetic] rest_octets: Follow coding style regarding {}
  * ns2: More verbose comments on gprs_ns2_vc_mode
  * select: Introduce osmo_fd_{read,write}_{enable,disable}()
  * select: Migrate over to poll()
  * card_fs_usim.c: Add support for DF.5GS directory
  * Revert "gsm_04_08: add parser for Mobile Station Classmark 3"
  * card_fs_usim: Add definitions of DF.ProSe and DF.ACDC
  * bssgp: Input argument to bssgp_tlv_parse() should be 'const'
  * ns2: permit multiple nsvci in one nse in VTY
  * frame_relay: Fix some spelling/language issues
  * Revert "ns2: permit multiple nsvci in one nse in VTY"
  * gprs_ns2_vty: Fix VTY documentation errors
  * frame_relay: Fix null pointer dereference in DLC/PVC delete
  * frame_relay: Fix error path on ioctl() failure
  * gprs_ns2: Introduce gprs_ns2_lltype_str() for link layer name
  * gprs_ns2_fr: Print Frame Relay 'role' in VTY
  * gprs-ns2: Fix stringification of NS/FR NSVCI
  * gprs_ns2: Don't return an empty string in case of unknown LL
  * cosmetic: frame_relay: Fix typos
  * gprs_ns2: Print link layer and global ALIVE/DEAD state
  * gprs_ns2_vty: Differentiate 'show ns binds' and 'show ns entities'
  * gprs_ns2_vty: Show NSVCI in dump_nsvc()
  * gprs_ns_vty: Unify display of NSVCI on VTY in 'show ns entities'
  * gprs_ns2_vty: Print all relevant data on each NS-VC
  * gprs_ns2_udp.c: Fix typo - it's a DSCP and not a DCSP
  * Integrate libmnl (minimal netlink) library with libosmocore select loop
  * gprs_ns2_fr: Monitor the kernel net-device link state
  * gsm_08_18.h: Update enums for message types and IEs with Release 15
  * gprs_ns2_vty: Re-introduce a 'show ns' command
  * libosmogb: Add missing LIBMNL_CFLAGS
  * mnl: Use mnl_socket_open() insatead of mnl_socket_open2()
  * gprs_ns2_fr: remove include <linux/if.h>
  * bssgp: Use TLVP_PRES_LEN instead of TLVP_PRESENT
  * gprs_ns2: Use TLVP_PRES_LEN instead of TLVP_PRESENT
  * bssgp: Update bssgp_pdu_strings with Release 15
  * bssgp: Fix typo in BSSGP Message Type enum
  * Add hlist and hashtable from Linux kernel
  * Use explicit type-casting in hlist_del() for C++ compatibility
  * gsm_08_18.h: Add some PDU definitions still missing
  * hash/log2: Add generic implementations of fls() and fls64()
  * log2.h: Use uintXX_t instead of kernel specific types
  * log2.h: Avoid redefining __always_inline
  * ns2: Accept NS-UNBLOCK-ACK in UNBLOCKED state
  * Introduce 'osmo_tlv_prot' abstraction for validation of TLV protocols
  * tlv: Introduce enum with error codes for TLV parser functions
  * bssgp: Add osmo_tlv_prot_def for BSSGP
  * gsm_08_18.h: Add #defines for [extended] feature bits
  * tlv.h: Add msgb_tvlv_put_{16,32}be()
  * logging: Introduce DLBSSGP logging constant
  * gb: Add beginnings of a new BSSGP implementation
  * logging: Assing different 8bit colors to built-in subsystems
  * bssgp2: Encoding + Decoding functions for BVC and MS flow control
  * bssgp_bvc_fsm: Add basic BVC flow control rx/tx support
  * gprs_ns2_fr.c: Skip extraneous FIONBIO
  * gprs_ns2_fr: guard against race between socket(AF_PACKET) and bind()
  * gprs_ns2_fr: use ETH_P_HDLC instead of ETH_P_ALL
  * Fix VTY syntax for newly-introduced NS2 timers
  * gors_ns2_vty: Fix saving of new NS2 timers
  * gprs_ns2_fr: Avoid stringop-truncation warning
  * gprs_ns2_fr: Use OSMO_STRLCPY_ARRAY() where possible
  * fsm: Add osmo_fsm_inst_broadcast_children()
  * vty: Fix left shifting out of range on signed variable
  * lapd_core: Don't dereference data link after sending PRIM_DL_REL
  * cbsp: Fix encoding of "ETWS Warning Security Info" IE
  * cbsp: Fix osmo_cbsp_recv_buffered() for KEEP-ALIVE-COMPLETE
  * cbsp: Fix parsing DCS in decode of WRITE-REPLACE
  * Add inter-thread queue
  * tlv_parser: Fix various out-of-bounds accesses
  * gprs_ns2_fr: reduce duplication between gprs_ns2_fr_connect / connect2
  * gprs_ns2: Give NS-VC FSMs a proper name/identifier
  * ns2: delay NS_AFF_CAUSE_RECOVERY until NS-VC for data + sig are unblocked
  * vty/fsm_vty: Add vty_out_fsm2() + vty_out_fsm_inst2() with prefix
  * ns2: Properly indent VTY output
  * ns2: Unify logging context via log macros
  * logging_vty: Fix saving of "logging print file .. last"
  * gprs_ns2_test: Fix compilation on Debian 8
  * Revert "gprs_ns2_vc_fsm: check NSVCI match the NSE"
  * Revert "gprs_ns2_vc_fsm: check NSEI match the NSE"
  * ns2: Use proper return value from write_queue callback function
  * ns2: Log ERROR if we cannot transmit a packet due to ENOBUFS
  * osmo-ns-dummy: Add simple NS traffic generator
  * ns2: Work around AF_PACKET socket ENOBUFS problems
  * ns2: Use named array initializers to avoid mistakes
  * ns2: encapsulate calls to nsvc->bind->send_vc()
  * ns2: Increment Rx and Tx byte / packet counters
  * ns2: Properly report packet drops in FR code
  * ns2: count number of dropped packets / bytes on transmit
  * ns2: Implement more rate counters
  * ns2: Add a rate_ctr for each NS-UNBLOCK
  * ns2: Move to one common/shared ns2_bind_alloc()
  * ns2: Memory allocation failures are ENOMEM, not ENOSPC
  * ns2: Rename nsi->rate_ctr_idx to nsi->nsvc_rate_ctr_idx
  * ns2: Introduce a per-bind stat_item group with backlog length
  * ns2: Fix typos in comments
  * ns2: Print NS-STATUS.ind primitives to the log
  * ns2: cosmetic: fix indent levels
  * frame_relay: Send "Fuil Status" ENQUIRY after link recovers
  * frame_relay: Add status call-backs for link + DLC status changes
  * frame_relay: Discard received messages for DLC not yet active
  * frame_relay: cosmetic: Unify log syntax when discarding Rx packets
  * ns2: Don't automatically re-start FSM at FORCE_UNCONFIGURED
  * ns2: Stop test procedure when going into unconfigured state
  * ns2: Don't start sending NS-RESET until FR DLC is available
  * osmo-ns-dummy: Add "mirror-mode" to mirror back any received packets
  * initial support for static userspace probes via systemtap
  * Enable systemd-journald log target in debian + rpm packaging
  * gb: frame_relay: Factor-out function to set link as dead
  * gb: frame_relay: Detect link outage on "last receive seq nr == 0"
  * frame_relay; Fix Q.933 async STATUS at DLC creation
  * ns2: Name NSVC FSM events consistently
  * ns2: Don't queue Q.933 LMI messages; only store most recent ones
  * ns2: improve backlog handling on interface up/down
  * ns2: Don't try to add packets to the backlog on real errors
  * README.md: Use https everywhere
  * ns2_fr: Fix null pointer deref in error path
  * ns2_fr: Fix heap-use-after-free in error recovery path
  * BVC FSM: Treat overlapping BVC-RESET as implicit ACK
  * support for stats static userspace probes via systemtap
  * CBSP: fix encoding/decoding of keep-alive repetition period
  * CBSP: Fix encoding of warning period

  [ Neels Hofmeyr ]
  * comment: mention spec reference in cbsp.[ch]
  * comment: typo in cbsp.h
  * bitXXgen: ensure not reading/storing past valid size
  * bitXXgen: add bitgen_test.c
  * bitXXgen: add osmo_loadXXbe_ext_2() to get right-adjusted values
  * add osmo_use_count_to_str_c()
  * osmo_use_count_to_str: make robust against unused use_count
  * add osmo_float_str_to_int() and osmo_int_to_float_str_*()
  * add GAD coding for Location Services
  * add BSSLAP coding for Location Services
  * add BSSMAP-LE coding for Location Services
  * add BSSMAP coding for Location Services
  * doc tweaks for osmo_float_str_to_int(), osmo_int_to_float_str*()
  * gad.c: try to workaround warning for "h.type >= 0"
  * gad.c: fix rc for osmo_gad_enc_ell_point_unc_circle()
  * gprs_ns2_fr.c: compiler error: replace strncpy() with OSMO_STRLCPY_ARRAY()
  * fix strncpy bug in gprs_ns2_fr_bind()

  [ Alexander Couzens ]
  * sockaddr_str: add osmo_sockaddr_str_from_str2() which doesn't set the port
  * tests/socket: add testcase test_get_ip_and_port
  * socket: introduce osmo_sock_init_osa & osmo_sock_init_osa_ofd
  * socket: add osmo_sockaddr_cmp()
  * gb/gprs_bssgp: remove superfluous whitespace
  * gb/common_vty: use void *
  * add osmo_sockaddr_local_ip() to determine the local address for a remote.
  * Gb: add a second NS implementation
  * libgb/ns: allow to create NS_ALIVE NSVC
  * gb/gprs_bssgb: check if talloc failed on btsctx->fc
  * gb/gprs_bssgb: ensure the fc timer has been stopped when freeing bssgp_bvc
  * ns2: remove bssgp specific msgb->cb parts
  * ns2: vty: add missing docs for IPv6 address
  * ns2: check the specific bit of NS SDU Control bits
  * ns2: refactor nsvc_by_ functions
  * ns2: ns2_recv_vc: remove unused parameter nsi
  * ns2: vty: fix behavior of vtyvc_by_nsei when vtyvc isn't found
  * ns2: refactor handle_nsip_read/handle_nsfrgre_read
  * ns2: fix a msg leak when receiving REJECTED messages
  * gsm_12_21: add osmo_oml_nsvc_address_type for OML NM_ATT_OSMO_NS_LINK_CFG
  * ns2: parse the return code of gprs_ns2_ip_bind
  * ns2: refactor ns2_prim_status_ind()
  * ns2: status ind: add additional flags (first and persistent)
  * ns2: vty: show all nse
  * ns2: vty: allow the users (pcu/sgsn) to set a default bind
  * ns2: vty: on `show ns` add information of NS binds
  * gprs_ns2_vty_create: remove bind pointer check
  * gprs_ns2: gprs_ns2_free(): add missing talloc_free
  * gprs_ns2: fix SNS_ADD for IPv4
  * gprs_ns2: fix empty prefix in TLV Parse error
  * gprs_ns2: add gprs_ns2_ip_bind_by_sockaddr() to search for binds by sockaddr
  * gprs_ns2: gprs_ns2_ip_bind() check if the bind already exists
  * gprs_ns2: add gprs_ns2_nse_nsei() to get the nsei of a nse
  * gprs_ns2: add gprs_ns2_free_binds() to free all binds
  * gprs_ns2: add gprs_ns2_free_nses() to free all NS-E
  * gprs_ns2: const the return value of gprs_ns2_ip_vc_sockaddr / gprs_ns2_ip_bind_sockaddr
  * gprs_ns2: rename gprs_ns2_ip_vc_sockaddr -> gprs_ns2_ip_vc_remote
  * gprs_ns2: add gprs_ns2_ip_vc_local() return the local sockaddr
  * gprs_ns2: add gprs_ns2_nse_sns_remote() returns the initial SNS address
  * gprs_ns2: gprs_ns2_ip_vc_remote() the nsvc can be also const
  * gprs_ns2: add gprs_ns2_nse_foreach_nsvc()
  * gprs_ns2: Partial revert 48f63867 allow to create NS_ALIVE NSVC
  * gprs_ns2: add gprs_ns2_ip_vc_equal()
  * add osmo_sockaddr_to_str_buf/osmo_sockaddr_to_str
  * gprs_ns2: remove the nsvc fsm timer when cleaning up the fsm
  * ns2: add value strings for ns2_affecting_cause_prim_str & ns2_prim_str
  * gprs_ns2: convert gprs_ns2_cause_str into an static inline
  * libosmocore: change the memory management of NS2
  * ns2: fixup gprs_ns2_prim_strs
  * ns2: check if ns_vc_alloc() fails in bind_connect()
  * ns2: add support for frame relay
  * ns2: implement link sharing selector
  * ns2: move LL into public api
  * ns2: move link layer type into NSE
  * ns2: remove obsolete type GPRS_NS2_LL_E1
  * gprs_ns2_fr: remove include <linux/if.h>
  * gprs_ns2: fix typo in comment
  * gprs_ns2: use switch() case instead of multiple if in ns2_create_vc()
  * gprs_ns2_sns: add missing transistion UNCONFIGURED -> SIZE
  * gprs_ns2_sns: dynamic calculate the maximum NS-VCs
  * gprs_ns2_sns: add missing S() to allow GPRS_SNS_EV_NO_NSVC happen
  * gprs_ns2_sns: fix whitespaces and superflous comment
  * gprs_ns2_sns: correct dynamic calculation
  * gprs_ns2: introduce NS dialects
  * gprs_ns2: move allocation of the SNS fsm into create_nse
  * gprs_ns2: add member name to bind
  * gprs_ns2: rework gprs_ns2_fr_connect*()
  * gprs_ns2: add gprs_ns2_free_nsvcs() to free all NS-VC of a NSE
  * gprs_ns2_sns: rework IP-SNS initial remote
  * gprs_ns2_sns: use different binds for the initial connection
  * gprs_ns2_sns: introduce SNS Size/Config retries
  * gprs_ns2: make nsvc argument const
  * gprs_ns2: add gprs_ns2_fr_bind_role() to retrieve the fr role
  * gprs_ns2: on ns2_create_vc parse the tlv before using it
  * gprs_ns2_vty: udp: fixup dialect changes
  * gprs_ns2: fr: fix crash when frame relay interface doesn't exists
  * gprs_ns2: improve handling of TLV errors on new nsvcs
  * gprs_ns2: don't pass the return code of reject_status_msg
  * gprs_ns2: fr: implement a write queue
  * gprs_ns2: fr: setup the device to correct FR/LMI settings
  * gprs_ns2: add new vty2
  * gprs_ns2: sns: correct log message when no nsvcs available
  * gprs_ns2: sns: don't send duplicated packets on retries
  * gprs_ns2: sns: add log message when size/config retries exhausted
  * gprs_ns2: don't start unconfigured fsm via FORCE_UNCONFIGURED
  * gprs_ns2: fix force-unconfigured for IP-SNS NSE
  * frame_relay: prevent null pointer exception when talloc fails
  * frame_relay: link_alloc: move log message to the end
  * gprs_ns2: rework frame relay load distribution function
  * gprs_ns2_fr: setup_device: allow to setup a new dahdi device
  * gprs_ns2: fr: check the device state before changing state
  * gprs_ns2: use zero initialized memory for vty_binds
  * utils: add osmo-ns-dummy
  * gprs_ns2: call python vty tests
  * gprs_ns2: set transfer cap in NS Status primitive
  * gprs_ns2: check if persistent nsei or nsvc exists when creating dynamic NSE
  * osmo-ns-dummy: allow to create dynamic NSEs
  * gprs_ns2_vc: answer UNBLOCK on unblocked nsvc
  * gprs_ns2: when calling nsvc_force_unconf for a dynamic NSE drop the NSE.
  * gprs_ns2_sns: clear local and remote entries when SNS failed
  * gprs_ns2: flag then NSE as dead in nse_free()
  * gprs_ns2_vc_fsm: fix spaces and remove wrong comment
  * test: gprs_ns2: don't leak the talloc context
  * test: gprs_ns2: replace free_bind() with clear_pdus()
  * test: gprs_ns2: free the nsi after each test
  * gprs_ns2: add assert on most bind calls
  * gprs_ns2: allow to use free_vc() with NULL
  * osmo-ns-dummy: don't leak primitive messages
  * gprs_ns2: implement BLOCK/UNBLOCK of a NSVC by vty
  * gprs_ns2: correct handle BLOCK message on initator
  * gprs_ns2_vc_fsm: rename all event to match RX_ or REQ_
  * gprs_ns2_vc_fsm: ensure all state is resetted via force_unconf
  * gprs_ns2_vc_fsm: in RESET accept RESET as ACK
  * gprs_ns2_vc_fsm: fix transitions for ALIVE state
  * gprs_ns2_message: remove wrong comment
  * gprs_ns2_vc_fsm: check NSEI match the NSE
  * gprs_ns2_vc_fsm: check NSVCI match the NSE
  * tests: gprs_ns2: add unitdata unit test
  * gprs_ns2: always pass a tp to gprs_ns2_vc_rx
  * gprs_ns2_vc_fsm: check NSEI match the NSE
  * gprs_ns2_vc_fsm: check NSVCI match the NSE
  * gprs_ns2: drop GPRS_ prefix of gprs_ns2_cs
  * gprs_ns2: drop prefix of all internal exposed function
  * gprs_ns2: drop the public prefix gprs_ from all static functions/structs/..
  * gprs_ns2: refactor: ensure all enums have GPRS_NS2_
  * gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty
  * gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty
  * gprs_ns2: remove api call gprs_ns2_dynamic_create_nse
  * gprs_ns2: introduce gprs_ns2_vty_init_reduced() for the PCU
  * gprs_ns2: correct vty config write
  * gprs_ns2: prevent division by zero in load_sharing
  * gprs_ns2_vc_fsm: reset ALIVE N counter when restarting the test procedure.
  * gprs_ns2_vc_fsm: rename ST_ALIVE -> ST_RECOVERING
  * gprs_ns2: unify the handling of **result when bind already present.
  * gprs_ns2_fr: free_bind(): first do the NULL check before using members
  * frame_relay: fix NULL pointer deref
  * gprs_ns2_frgre: set a correct gre pointer for ipv6
  * gprs_ns2_frgre: check iph/ip6h before passing them to rx functions
  * gprs_ns2_sns: rework tracking of NS-VC unblocked/alive state
  * gprs_ns2_sns: add timeout to ST_CONFIG_SGSN
  * gprs_ns2_sns: reset the N of timeout when entering a new state
  * gprs_ns2: rename vty-command ip-sns -> ip-sns-remote
  * gprs_ns2_vty: fix memory leak of vty_binds
  * gprs_ns2: add signalling & data weights for UDP binds
  * gprs_ns2_vc_fsm: use CLOCK_MONOTONIC for alive elapsed timer
  * gprs_ns2_vc_fsm: reset the alive elapsed timeout everytime
  * gprs_ns2_vty: use strcmp() instead of strncmp()
  * gprs_ns2_vc_fsm: remove debug line of the alive_timer
  * gprs_ns2: fix comment of alive NS-VC
  * gprs_ns2_sns: fix typo in doxygen comment
  * gprs_ns2: inform the NS user (BSSGP) about the MTU of a NSE
  * gprs_ns2: rework IP-SNS binds
  * gprs_ns2_vty: add optional argument signalling and data weights to `nsvc udp`
  * gprs_ns2: implement a simple load sharing for UDP
  * gprs_ns2: fix typo in function name ns2_load_sharing_modulo
  * gprs_ns2: make gprs_ns2_recv_prim() always take msgb ownership
  * gprs_ns2_sns: rename fsm events to include RX or REQ prefix
  * gprs_ns2_fr: pass MTU changes to the NSE
  * gprs_ns2: truncate the NS_STATUS to the MTU
  * gprs_ns2_message: tx_status: move all cause dependent code into the switch/case
  * gprs_ns2: add value_string for GPRS_NS2_AFF_CAUSE_SNS_NO_ENDPOINTS
  * gprs_ns2: ensure no duplicate UDP NSVC can be created
  * gprs_ns2: free_nse: free the SNS fsm early

  [ Daniel Willmann ]
  * gsm_08_16.h: Add missing header
  * gprs_ns2: Make reason const
  * libosmogb: Add a function to tx BVC RESET by nsei/bvci
  * Add exported function btsctx_alloc to public header
  * ns2: Add gprs_ns2_nsvc_state_name() to get the current state of a VC
  * ns2: Send NSVC representation in NS_AFF_CAUSE_VC_* status indication
  * ns2: Improve NSVC output
  * ns2: Split 'initiater' into initiate_{reset,block}
  * ns2: Add a function to set the NSVC FSM back to unconfigured
  * ns2: Add a VTY command to reset NSVC FSM
  * ns2: Fix docs for some NS2 vty commands
  * logging: Calculate LOG_MAX_{CTX,FILTERS} from the enum
  * ns2: Add log filtering by NSE/NSEI, fix NSVC filter on receive
  * ns2: Fix argv index in logging filter VTY commands
  * Declare osmo_ctx_init() in talloc.h
  * bssgp: Add SUSPEND_NACK to osmo_pdef_bssgp
  * logging: Remove duplicate color for DLSMS
  * ns2_frgre: Fix missing break statement for recv from IPV6
  * bssgp_bvc_fsm: Handle block request from application correctly
  * NS2: Fix bind selection of SNS NSVCs
  * ns2: Add sanity check
  * Refactor ns2_nsvc_create_ip*
  * ns2: Fix memory leak in IP-SNS
  * ns2: Fix assert when removing a bind listen
  * ns2: Fix incompatible VTY configs when writing config
  * tests/gb: Add more complex osmo-ns-dummy.cfg
  * bssgp_bvc_fsm: Set/get maximum BSSGP PDU length
  * bssgp2_enc_status: Truncate STATUS message to maximum PDU length
  * bssgp_bvc_fsm: Consistent naming

  [ Philipp Maier ]
  * command: add library command attribute for libosmo-sccp
  * command: add library command attribute for libosmo-abis
  * gsm_08_58: add proprietary IE to signal Repeated ACCH Capability
  * gsm_04_08: add parser for Mobile Station Classmark 3
  * gsm_04_08: add parser for Mobile Station Classmark 3
  * bts_features: add feature BTS_FEAT_ACCH_REP
  * gsm_08_58: add struct for RSL_IE_OSMO_REP_ACCH_CAP
  * gsm_08_58: add rxqual field to RSL_IE_OSMO_REP_ACCH_CAP
  * gprs_bssgp_util: complete bssgp_pdu_strings
  * gprs_bssgp: add IE parser/generator for RIM Routing Information
  * gprs_bssgp: add handling for BSSGP RIM primitives
  * gsm_08_18: add struct to parse RIM PDU Indications
  * bssgp_rim: add encoder/decoder for NACC related RIM containers
  * bssgp_rim: move bssgp_parse_rim_ri and bssgp_create_rim_ri to gprs_bssgp_rim
  * gprs_bssgp: add utilities to send and parse BSSGP rim PDUs
  * gprs_bssgp_rim: Return with EOPNOTSUPP on unsupported containers
  * gprs_bssgp_rim: fix bug in dub_tlvp_header()
  * gprs_bssgp_rim: add value strings for enum bssgp_nacc_cause
  * gprs_bssgp_rim: add value strings for enum bssgp_ran_inf_app_id
  * gprs_bssgp_rim: add value strings for enum bssgp_rim_routing_info_discr
  * gprs_bssgp_rim: add functions to convert a RIM-RI to a string
  * gprs_bssgp_rim: cosmetic: connect routing identifier strings with "-"
  * gprs_bssgp: log source and destination RIM routing information
  * gprs_bssgp: agregate RIM related code in gprs_bssgp_rim.c
  * gsm48: add compare function for struct gprs_ra_id
  * gsm_08_58, gsm_44_004: add struct for l1 information

  [ laforge ]
  * Revert "pkgconfig: link to mnl if available"

  [ Oliver Smith ]
  * tests/*: fix control reaches end of non-void func
  * configure.ac: set -std=gnu11
  * sim: fix gcc 4.9.2 + -std=gnu11 error

 -- Pau Espin Pedrol <pespin@espeweb.net>  Tue, 23 Feb 2021 14:03:31 +0100

libosmocore (1.4.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * bitvec: Fix return value in doc for bitvec_write_field()
  * gb: Fix typo in bssgp_cause_strings description
  * logging_vty.c: Avoid acquiring log tgt lock in logging level cmd when not needed
  * value_string: Switch val from unsigned to int
  * gsm0503_coding: Fix misleading comment UL vs DL
  * gsm0503_coding: Fix USF encoding in MCS1-4
  * gsm0503_tables: Document USF encoding tables
  * tests/coding: Test decoding of DL EGPRS data packet
  * tests/coding_test: Fix test_pdtch() results
  * gsm_04_06.h: Remove repeated egprs header struct definitions
  * configure.ac: Fix HAVE_CLOCK_GETTIME undef when func in -lrt
  * Drop old BSC references in fd check configure option
  * Revert "gsmtap_makemsg_ex: NULL for unknown chan_type"
  * use_count.h: Fix API doc example
  * tests/fsm_test.c: Disable use color in logging output
  * tests: vty: Extend test to do some numeric range validations
  * vty: Allow 64 bit values in numeric ranges if system supports it
  * vty: Don't match negative values on purely positive ranges
  * vty: Introduce support to set cpu-affinity and scheduler policy

  [ Harald Welte ]
  * usb: Use OSMO_STRLCPY where appropriate
  * usb: Add osmo_libusb_find_matching_dev_{path,serial}
  * osmo_libusb: Check return of libusb_get_string_descriptor_ascii()
  * osmo-sim-test: Recurse through subdirectories
  * osmo-sim-test: Fall-back to classic SIM
  * chantype_rsl2gsmtap(): Add entries for CBCH
  * gsmtap.h: Add definitions for voice inside GSMTAP
  * Add GSMTAP_CHANNEL_VOICE to gsmtap_gsm_channel_names[] value_string
  * Add CTRL port number for osmo-mgw
  * gsmtap: Solve TCH / FACCH confusion once and for all
  * fixup depreciation warning
  * socket: Add osmo_sock_mcast_iface_set() to bind multicast to device
  * libosmosim: Build irrespective of PC/SC support
  * sim: card_fs_usim.c: Fix FID of EF.EXT4
  * card_fs_sim: Avoid '/' in file names
  * osmo-sim-test: Use stderr for error messages
  * osmo-sim-test: don't print SW in successful case of dump_file()
  * osmo-sim-test: Optionally dump card files to host filesystem
  * sim: add osim_file_desc_find_aid()
  * sim: re-structure how we support cards + applications
  * osmo-sim-test: Also [attempt to] dump DF.GSM on USIM cards
  * card_fs_{usim,isim}: Update to 15.7.0 / Release 15
  * sim: Add HPSIM application support
  * osmo-sim-test: Avoid double-close
  * ports.h: Add 4268 for UECUPS VTY
  * exec: Introduce osmo_system_nowait2() to allow specify a user
  * select.c: Introduce support for signalfd
  * timerfd: call osmo_fd_unregister() when closing on read error
  * gsm0503_parity: Fix compilation with gcc-10
  * gsm_29_118.h: Fix compilation with gcc-10
  * sim: When decoding SW, take application specific SW into account
  * README.md: fix typo (coore -> core)
  * README.md: We don't build libosmotrau.  The latter is in libosmo-abis.git
  * usb: Add osmo_libusb_find_open_claim() all-in-one API
  * codec: Add functions for AMR s->d bits and d->s bits
  * libosmogsm: add Doxygen docs for gsm0502_hop_seq_gen()
  * Implement ITU-T I.460 multiplex / demultiplex
  * NS: Optionally disable NS-{RESET,BLOCK,UNBLOCK} when using UDP/IP
  * NS: replace use of gprs_nsvc_create() with gprs_nsvc_crate2()
  * lapd/lapdm: print user-defined string name instead of (dl=%p)
  * lapd_core: Fix log line being about LAPD and not LAPDm
  * Revert "add osmo_mobile_identity API"
  * bts_features.h: Introduce BTS_FEAT_PAGING_COORDINATION
  * gsm0808: Add gsm0808_create_common_id()
  * gprs_bssgp: Add bssgp_tx_bvc_reset2()
  * gprs_ns: Set sockaddr_in.sin_family for persistent NSVCs
  * vty/ports.h: Add VTY port for osmo-e1d
  * lapd_core: Ensure we always have some tailroom
  * lapd_core: After calling into L3, check if the state has changed
  * vty: Avoid ultra-long multi-line strings cluttering talloc reports
  * gsm0411_{smc,smr}.c: Work around newlib bug
  * bits.c: Use faster look-up-table approach for osmo_revbytebits_{buf,u8}
  * i460: Add back-pointer from sub-channel to timeslot
  * i460: pass more context to call-back functions
  * i460: Fix bit- and subslots ordering of I.460 mux + demux

  [ Neels Hofmeyr ]
  * add crcXXgen.c.tpl to EXTRA_DIST
  * jenkins.sh: simpler invocation of verify_value_string_...
  * gsm_04_08.h: fix big endian structs
  * add missing endian.h in gsm_23_041.h
  * struct_endianess.py: also recognise unnamed substructs
  * cosmetic: apply changes to match struct_endianess.py output
  * enable vty xml dumping to stdout
  * api doc: clarify 'returns' of gsm48_mi_to_string()
  * api doc: clarify OSMO_NAME_C_IMPL() required FUNC_BUF signature
  * fix osmo_mi_name_c() to always return talloced strings, via osmo_mi_name_buf()
  * add gsm23236: MSC pooling: TMSI and NRI utility functions
  * tlv.h: add msgb_tvl_put() to add a TvLV without the value part
  * osmo_bcd2str: also validate start_nibble parameter
  * add osmo_mobile_identity API
  * add osmo_mobile_identity API
  * gsm0408_test: allow deprecated API
  * api comment: fix example of osmo_mobile_identity_encode_msgb
  * fixup for gsm0808_create_common_id(): add API doc, use new MI API

  [ Philipp Maier ]
  * l1sap: add measurement related struct members
  * osmo-sim-test: check tlv_parsed struct tp before access
  * parity: add amr crc14 definition
  * conv: add convolutional coder for AMR SID UPDATE frames
  * gsm690: Fix amr speech bit length table
  * dtx: add decoding for AMR-DTX frames
  * exec: osmo_system_nowait2: initalize *pw pointer with NULL
  * logging: use LOGL_NOTICE when no loglevel is set
  * logging: do not allow multiple calls of log_init()
  * gsm0505_amr_dtx: add missing value strings
  * gsm0808: fix endieness of call identifier
  * i460_mux: correctly reset subchannels
  * gsm_08_58: add missing RSL error cause codes
  * i460_mux: add callback to notify empty tx queue

  [ Vadim Yanitskiy ]
  * usb/Makefile.am: fix copy-pasted library name: s/libosmosim/libosmousb/
  * gsm/gsm48049.c: fix use of GNU 'missing =' extension in designator
  * tdef_vty: do not enforce enum 'node_type' in osmo_tdef_vty_groups_init()
  * conv: prevent theoretical NULL pointer dereference in osmo_conv_encode()
  * osmo_libusb: check return value of osmo_fd_register()
  * exec: prevent uninitialized memory access in osmo_system_nowait()
  * exec: propogate errors from osmo_environment_[filter|append]
  * bitvec: make bitvec_free() safe against NULL
  * tests/bitvec: add a unit test for bitvec_read_field()
  * bitvec: fix bitvec_unhex(): do not return 1 on success
  * bitvec: fix misleading description of bitvec_spare_padding()
  * bitvec: cosmetic: init i only once in bitvec_[un]pack()
  * bitvec: avoid redundant zero-initialization in bitvec_alloc()
  * tests/coding: check return value of encoding / decoding functions
  * tests/coding: reduce verbosity of 8-bit / 11-bit RACH coding tests
  * tests/coding: cosmetic: use ARRAY_SIZE() macro from utils.h
  * coding: fix documentation of PDTCH encoding functions
  * tests/coding: add 11-bit Access Burst samples from a real phone
  * coding: fix bit ordering in 11-bit RACH coding functions
  * rest_octets: fix encoding of 3G Early Classmark Sending Restriction
  * libosmogsm: cosmetic: add spaces before and after PRIu32
  * bts_features: fix: properly check the result of bitvec_get_bit_pos()
  * bts_features: introduce osmo_bts_unset_feature()
  * gsm0502: add TDMA frame number constants and modular arithmetic
  * utils/gsmtap_logread.py: make it executable
  * src/Makefile.am: add conv_acc_neon_impl.h to EXTRA_DIST
  * configure.ac: clarify description of --enable-neon
  * configure.ac: fix: do not define HAVE_NEON unconditionally
  * configure.ac: print ARM NEON instructions support status

  [ Eric Wild ]
  * pcsc: don't leak memory

  [ Alexander Chemeris ]
  * gb: Fix typos in gprs_ns.c comments
  * gb: Print signalling and data weights on NS-VC creation.
  * select: Fix typo in a comment Osmcoom->Osmocom
  * stats: Move cfg_stats_interval_cmd() function.
  * stats: Fix documentation for osmo_stats_set_interval()
  * stats: Support regular stats flush
  * stats: Change timer to timerfd to make it a true interval timer.
  * gsm0808: Fix encoding of the SAPI_N_REJECT BSSMAP message.
  * gsm0808: Make a function to extract Cause IE publicly available.
  * gsm0808_utils: Fix gsm0808_cause_class() function
  * gsm0808_utils: Add gsm0808_get_cipher_reject_cause() back with a deprecation notice.
  * gsm0808: Implement helper functions for CONFUSION BSSMAP message decoding.

  [ Maksim Aristov ]
  * debian: Change python3 dependency to native arch

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer
  * timer.c: make timers thread safe
  * pkgconfig/osmocodec/osmocoding: link to talloc
  * libomsocoding: NEON viterbi acceleration

  [ Kirill Zakharenko ]
  * statsd: fix rendering for groups with idx==0

  [ Sylvain Munaut ]
  * libosmogsm: import hopping sequence generation code

  [ Oliver Smith ]
  * contrib: import RPM spec
  * gsmtap_makemsg_ex: NULL for unknown chan_type
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in

  [ Alexander Couzens ]
  * gprs_ns.h: add missing prototype gprs_ns_rcvmsg()
  * gprs_ns: fix typo in comment
  * gprs_ns_frgre.h: add missing declaration of structs
  * bts_features: add feature BTS_FEAT_IPV6_NSVC
  * socket: osmo_sock_local_ip: correct doxygen comment
  * vty: add a define VTY_IPV46_CMD to require a IPv4/6 address
  * Gb/BSSGP: replace hardcoded Tx into NS library by a callback
  * gsm 12.21: add osmocom specific NM_ATT_OSMO_NS_LINK_CFG
  * osmo_sock_init2: improve support for AF_UNSPEC
  * socket.h: introduce osmo_sockaddr to hold v4 and v6 endpoints

  [ Daniel Willmann ]
  * rate_ctr: Add functions to reset rate counter (groups)
  * stat_item: Add function to reset stat items and groups
  * stats: Add stats commands related to testing

 -- Harald Welte <laforge@osmocom.org>  Thu, 13 Aug 2020 11:06:35 +0200

libosmocore (1.3.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * osmo-release.sh: Add DRY_RUN mode
  * osmo-release.sh: Verify debian/rules dh_strip lines match LIBVERSION
  * osmo-release.sh: Verify consistency of dependency versions in configure.ac and debian/control
  * osmo-release.sh: Check patches under debian/patches apply
  * osmo-release.sh: Support releasing openbsc.git
  * vty: Register logp cmd next to logging commands
  * tdef: Introduce API osmo_tdef_set()
  * tdef_vty.h: Add missing header dependencies
  * logging_internal.h: Fix osmo_log_info definition
  * osmo-release.sh: update TODO-RELEASE for non-lib projects too
  * logging: Move extern declaration of osmo_log_target_list from logging.h to logging_internal.h
  * msgb: Allow size==headroom in msgb_alloc_headroom*()
  * tdef: Introduce min_val and max_val fields
  * tdef_test: verify case where osmo_tdef_set returns -EEXIST
  * vty: Optionally Set/replace cfg file during cmd 'write file'
  * logging: Introduce mutex API to manage log_target in multi-thread envs
  * socket.c: Move glibc workarounds to same place in addrinfo_helper()
  * vty: Fix go_parent_cb not called for indented nodes at end of cfg file
  * tdef: Return correct snprintf value for osmo_tdef_range_str_buf()
  * socket: Introduce API osmo_sock_init2_multiaddr()
  * socket: Remove unneeded condition check in osmo_sock_init2_multiaddr()
  * libosmocore.pc.in: Append -lsctp to Libs.private
  * socket.c: build multiaddr socket API helpers only if used by public APIs
  * configure: Introduce --disable-libsctp and error by default if libsctp not found
  * vty: Return error if cmd returns CMD_WARNING while reading cfg file
  * cosmetic: gsm_04_08.h: Fix trailing whitespace
  * gsm_04_08.h: Introduce API osmo_gsm48_rfpowercap2powerclass()
  * gsm: Fix compilation error under some compilers
  * gsm: gsm_utils: Fix return type of API ms_class_gmsk_dbm() and add unit tests
  * gsm: gsm_04_08.h: Allow accessing classmark2 as struct instead of uint32_t
  * Introduce fields related to DTAP DLCI
  * osmo-release.sh: Use set -e before applying changes to prepare release
  * osmo-release.sh: Improve of PKG_CHECK_MODULES from configure.ac
  * Drop empty file debian/patches/series

  [ Harald Welte ]
  * codec/ecu_fr: Mark input TCH frame as 'const' as we only read it
  * context: Add support for [per-thread] global talloc contexts
  * cbsp: Fix endless loop iteration when decoding cell list IEs
  * cbsp: Remove printf() statement from early development/debugging
  * cbsp: Fix decoding of WRITE-REPLACE payload
  * codec/ecu: Introduce new generic Error Concealment Unit abstraction
  * gsm_08_58: Add vendor-specific Message Type for ETWS Primary Warning
  * Introduce BTS_FEAT_ETWS_PN for communicating ETWS PN capability
  * sim/class_tables: Fix typo in comment
  * cosmetic: clarify c_iflag in osmo_serial_init()
  * select: Make file descriptor lists per-thread
  * 04.80: Deprecate gsm0480_create_ussd_resp()
  * Check for osmo_fsm_register() error return value
  * gprs_ns_instantiate(): propagate errors from gprs_sns_init() to caller
  * osmo-arfcn: Fix '-h' option
  * utils: exit(2) on unsupported positional arguments on command line
  * gsup: Introduce OSMO_GSUP_NUM_VECTORS_REQ_IE
  * gprs_bssgp: Work around gcc-9 claiming "error=stringop-overflow"
  * libosmocore libusb integration
  * usb: Import a variety of libusb utility functions from simtrace
  * debian/control: Add missing libusb-1.0-0-dev dependency
  * Introduce helper functions for safe fork+exec of processes

  [ Neels Hofmeyr ]
  * add vty logp command to echo on all log targets
  * osmo_tdef_get(): allow passing -1 as default timeout
  * fix: vty crash by logging during VTY_CLOSED event handling
  * OSMO_SOCKADDR_STR_FMT_ARGS: remove useless condition
  * OSMO_SOCKADDR_STR_FMT_ARGS: guard against NULL pointer
  * tdef: fixup osmo_tdef_set()
  * gsup: add OSMO_GSUP_SUPPORTED_RAT_TYPES_IE and OSMO_GSUP_CURRENT_RAT_TYPE_IE
  * API doc tweaks (mncc.h, gsm_08_08.h)
  * add osmo_fsm_set_dealloc_ctx(), to help with use-after-free
  * fsm: refuse state chg and events after term
  * add osmo_sockaddr_str_is_nonzero()
  * test: add OSMO_SOCKADDR_STR_FMT to sockaddr_str_test.c
  * fix OSMO_SOCKADDR_STR_FMT for IPv6
  * add osmo_sockaddr_str_cmp()
  * utils.c: fix various inaccurate API doc about return values
  * logging.h: define ansi color constants
  * fix DLSMS logging category color: '[1:38m' isn't actually defined
  * cosmetic: logging.h: fix comment s/levels/subsystems
  * osmo_sockaddr_str: API doc: fix 32bit addr mixup of host/network byte order
  * utils.h: add OSMO_NAME_C_IMPL() macro
  * fix osmo_escape_str_c() and osmo_quote_str_c()
  * GSUP: rename E_ROUTING_ERROR to ROUTING_ERROR
  * fsm.h: add missing include of logging.h
  * msgb_put: more elaborate logging of head/tailroom failure
  * utils_test: add osmo_print_n_test()
  * utils: add osmo_strnchr()
  * osmo_sockaddr_str: deprecate osmo_sockaddr_str_*_32n()
  * vty: track parent nodes also for telnet sessions
  * vty_app_info.is_config_node: add OSMO_DEPRECATED
  * add osmo_escape_cstr and osmo_quote_cstr
  * add all missing OSMO_GSUP_TO_MSGT_*() macros

  [ Oliver Smith ]
  * Cosmetic: l1sap.h: change /* !< to /*!<
  * logging.h: add L1 SAPI related context and filter
  * gprs_ns_vty: return success for disabled FR/GRE
  * debian, utils: switch to python 3

  [ Ruben Undheim ]
  * MAXPATHLEN set if not defined
  * No fail if no /proc/cpuinfo

  [ Philipp Maier ]
  * cosmetic: Move comment to the right place
  * cosmetic: Add comment on GSM-FR ECU struct
  * ecu_fr: increase test coverage for FR ECU implementation
  * gsm0508: add functions to calculate beginning of a block

  [ Vadim Yanitskiy ]
  * gsm29205_test: fix error: missing braces around initializer
  * GPRS/BSSGP: introduce bssgp_bvc_ctx_free()
  * logging/vty: do not print deprecated logging commands to stdout
  * logging/vty: use LOG_LEVEL_ARGS in logging_vty_add_deprecated_subsys()
  * logging/vty: fix: actually ignore deprecated logging commands
  * logging/vty: fix vty_read_file(): do not write warnings to stdin
  * logging/vty: fix: do not close stderr in vty_close()
  * libosmovty: properly initialize vty->fd in vty_new()
  * libosmovty: simplify condition checking vty->fd in vty_close()
  * core/defs.h: introduce and use OSMO_DEPRECATED_OUTSIDE

  [ Daniel Willmann ]
  * libosmogsm: add support for XOR authentication

  [ Vasil Velichkov ]
  * Add code coverage support

  [ Eric Wild ]
  * sim: allow opening reader# > 0

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 02 Jan 2020 18:42:29 +0100

libosmocore (1.2.0) unstable; urgency=medium

  [ Harald Welte ]
  * Add VTY and CTRL port numbers for OsmoCBC (Cell Broadcast Centre)
  * deal with rate_ctr_group_alloc() returning NULL
  * Fix osmo_quote_str_c() for strings larger than 32 bytes
  * Print error message if application fails to call rate_ctr_init()
  * gsm0808_utils: Introduce gsm0808_msgb_put_cell_id_u()
  * Revert "Print error message if application fails to call rate_ctr_init()"
  * osmo_sock_get_name_*: Ensure string is returned in error case
  * Revert "Change GSM48_PDISC_* to enum type"
  * pseudotalloc: turn talloc_steal() into #define
  * TLV: Add one-shot TLV encoder
  * lapdm_rslms_recvmsg: Fix memory leak in error path
  * rsl: Add osmocom-specific extensions to RSL channel numbers for CBCH
  * oap_client: Fix license: GPLv2+ instead of AGPLv3+
  * tdef: Fix license: GPLv2+ instead of AGPLv3+
  * gsm48_rest_octets: Fix license: GPLv2+ instead of AGPLv3+
  * rest_octets: Use correct symbols names for range encoder
  * rest_octets: Actually include gsm48_rest_octets.c in Makefile.am
  * rest_octets: Fix export of osmo_gsm48_rest_octets
  * rest_octets: Suffix encoder functiosn with _encode
  * rest_octets: Add function to parse SI3 rest octets
  * rest_octets: Implement actual SI6 rest octets encoding
  * rest_octets: Remove SI2ter + SI2bis encoders that don't do anything
  * lapdm: Don't truncate L3 payload at 200 bytes length
  * make all library-internal static buffers thread-local
  * gsm0808_utils: Add gsm0808_decode_cell_id_u()
  * lapdm: Allow user to specify T200 values; Use correct N200 values
  * lapd_core: Perform N200 retransmissions, not N200-1
  * fsm: Allow millisecond granularity in osmo_fsm built-in timer
  * fsm: Reduce amount of copy+pasted LOGPFSMSRC() statements
  * fsm.c: Print error message for FSM with allstate_action but no events
  * CBSP (Cell Broadcast Service Protocol; 3GPP TS 48.049) support
  * cbsp: Introduce osmo_cbsp_errstr
  * Add Cell Broadcast related definitions from 3GPP TS 23.041
  * cbsp.c: Remove dead code
  * tdef: remove bogus OSMO_ASSERT(unsigned long >= 0)
  * osmo_get_rand_id(): Avoid dead code by proper #if/#else/#endif
  * avoid gcc format error on embedded builds
  * pseudotalloc: Simplistic wrapper of talloc_named()

  [ Keith ]
  * Add expect script: 'vty' for easy access to all vtys

  [ Kévin Redon ]
  * fix typo in FSM description
  * fix isdigit taking unsigned as input
  * minor: don't redefine macros
  * (minor) fix typo in comments

  [ Omar Ramadan ]
  * Add MO-FALLBACK-VALUE SGsAP IE

  [ Max ]
  * NS: log address:port on error
  * Change GSM48_PDISC_* to enum type

  [ Pau Espin Pedrol ]
  * gsm0808: Introduce Osmocom extensions to announce Osmux support
  * vty: command.c: Get rid of huge indentation block
  * vty: command.c: Fix is_cmd_ambiguous() returning always 0
  * cosmetic: vty: command.c: Use upper case for enum match_type value names
  * vty: command.c: Get rid of huge indentation block
  * logging: Check return error from time() call
  * logging: Use reentrant ctime_r instead of ctime
  * command.c: Improve return check condition in cmd_execut_command_real()
  * vty: command.c: Get rid of big indentation block
  * vty: tests: Verify incomplete optional parameters are passed to vty funcs
  * vty: command.c: Fix: multi-choice args are no longer passed incomplete to vty func
  * vty: command.c: Fix: single-choice optional args are no longer passed incomplete to vty func
  * vty: Remove trailing whitespace in output from show asciidoc
  * gsm: lapd_core: Log timeout used upon start of T200
  * vty: Simplify char escaping in asciidoc output
  * gsm0808_test: Fix wrong use of memcp
  * utils: share static buffer in osmo_str_to{lower,upper}()
  * Get rid of osmo_str_tolower() use inside libosmocore code
  * tests: logging: Remove undefined param passed to logging_vty_add_cmds
  * configure: Autodetect TLS bug on ARM with old gcc and apply workaround
  * configure: Allow disabling workaround for TLS bug in old ARM gcc versions
  * osmo-release.sh: Drop whitespace after = when parsing LIBVERSION

  [ Oliver Smith ]
  * gsm_23_003: add GSM23003_MSISDN_{MIN,MAX}_DIGITS
  * Cosmetic: GSUP: fix too long comment line
  * gsm48_decode_bcd_number2: fix ENOSPC edge case
  * gitignore: add doc/*.tag.prep
  * Makefile.am: don't delete example.xml, vtydoc.xsd
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Sylvain Munaut ]
  * codec/ecu: Add a bit of precision about the actual frame format used

  [ Daniel Willmann ]
  * Deprecate usage of osmo_counter_*
  * stats_vty: Add verb to sentence for show asciidoc counters

  [ Vadim Yanitskiy ]
  * protocol/gsm_12_21.h: fix copy-pasted struct description
  * gsm0408/gsm0408_test.c: introduce BCD number encoding / decoding test
  * gsm48_decode_bcd_number2(): fix output truncation
  * gsm48_decode_bcd_number2(): fix: return -ENOSPC on truncation
  * gsm48_decode_bcd_number2(): return -EINVAL if LV has too big length
  * gsm48_encode_bcd_number(): clarify optional LHV header initialization
  * vty/command.c: cosmetic: add missing curly brackets
  * socket.c: fix Doxygen doc for osmo_sock_unix_init_ofd()
  * vty_transcript_test.vty: add choice auto-complete tests
  * core/utils: drop meaningless const from return value of osmo_luhn()
  * protocol/gsm_04_08.h: do not check if unsigned is positive
  * Revert "fsm.c: Print error message for FSM with allstate_action but no events"
  * Revert "utils.h: require a semi colon after OSMO_ASSERT"
  * libosmogsm/l1sap.h: extend ph_rach_ind_param with lqual_cb
  * osmo_gsm48_rest_octets_si3_decode(): fix copy-paste error in comment
  * bitvec/bitval2mask(): cosmetic: get rid of temporary int variable
  * gsm/gsm0480.c: parse_ss(): drop needless debug print
  * gsm/gsm0480.c: use DLGLOBAL and LOGL_ERROR for logging
  * gsm/gsm48.h: drop meaningless 'const' from gsm48_mi_to_string()
  * vty/telnet_interface.c: use DLGLOBAL logging sub-system
  * vty/telnet_interface.c: avoid unneeded initialization
  * vty/logging_vty.c: fix writing of 'print category-hex'
  * vty/telnet_interface.c: log connection accept() / close() events
  * vty/vty.c: fix vty_read(): prevent further heap-buffer overrun
  * vty/vty.c: the command buffer can be accessed directly

  [ Alexander Couzens ]
  * utils: add gsmtap_logread.py a gsmtap log reader
  * bitvec: correct comment in bitvec_alloc
  * utils.h: require a semi colon after OSMO_ASSERT

  [ Eric Wild ]
  * add define for magic tmsi constant
  * tell ubsan to ignore SUN_LEN

  [ Ruben Undheim ]
  * Set HTML_TIMESTAMP to NO to make build reproducible

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 06 Aug 2019 18:02:01 +0200

libosmocore (1.1.0) unstable; urgency=medium

  [ Oliver Smith ]
  * gsm_23_003.h: add GSM23003_IMEI_NUM_DIGITS_NO_CHK
  * GSUP: deprecate osmo_gsup_get_err_msg_type()
  * Revert "signal.c: Make non-exported tall_sigh_ctx static"
  * Revert "ipa_ccm_idtag_parse*: Fix reported length value"
  * GSUP: add inter-MSC handover related msgs and IEs

  [ Harald Welte ]
  * Bump version: 1.0.0 → 1.0.1
  * gsm0408_test: Fix IMEI-SV related tests to use no more than 16 digits
  * constrain gsm48_generate_mid() output array bounds
  * Work around bogus gcc-8.2 array-bounds warning/error
  * Extend gsm_04_08.h with CSFB related definitiosn form 44.018 Rel 15
  * gsm_08_08.h: Add IEI definitions from Release 15
  * bitvec: Add bitvec_bytes_used() function
  * bitvec: Add bitvec_tailroom_bits() function
  * Fix BSSMAP length generated by gsm0808_create_clear_command2()
  * gsm0808: comment about difference of gsm0808_create_clear_command()
  * gsm0808: Add unit tests for test_create_clear_command2()
  * bssgp_tx_bvc_unblock(): Fix log message
  * gprs_ns: Use gprs_ns_tx_alive() instead of gprs_ns_tx_simple()
  * gprs_ns.c: cosmetic whitespace fixes
  * gprs_ns: Declare gprs_ns_tx_alive*() in header file
  * gprs_ns: Add missing NSVCI IE to NS-BLOCK-ACK message
  * select: Call log_reset_context() before calling file descriptor callbacks
  * NS: Don't print information about FR/GRE if not enabled!
  * NS: Add missing NS Cause strings
  * GPRS: Doxygen documentation for 'struct libgb_msgb_cb'
  * gprs_ns: Add code for SNS-SIZE and SNS-CONFIG encoding
  * NS: Factor out gprs_nsvc_start_test() and use it
  * NS: Add support for GPRS NS IP Sub-Network-Service (SNS)
  * gprs_ns.c: Update comment: IP SNS has recently been implemented
  * gprs_ns: Don't use initial IP/port for anything but SNS
  * gprs_ns_sns: Use "correct" remote IP address for local IP endpoint
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * ipa_ccm_idtag_parse*: Fix reported length value
  * socket: osmo_sock_get_name() Use "const void *" as talloc context
  * gprs_ns_sns: Properly initialize sockaddr_in in gprs_nsvc_create_ip4()
  * select: Rename BSC_FD_* constants to OSMO_FD_*
  * signal.c: Fix osmo_signal_talloc_ctx_init()
  * signal.c: Make non-exported tall_sigh_ctx static
  * osmo_escape_str_buf: Always copy, don't return input string pointer
  * Add _buf() functions to bypass static string buffers
  * Add _c versions of functions that otherwise return static buffers
  * Re-introduce declaration of gsm0808_create_handover_request_ack()

  [ Neels Hofmeyr ]
  * gsm0808: add BSSMAP Cell Identifier matching API
  * add osmo_hexdump_buf() and test
  * add osmo_classmark_* API
  * osmo_fsm_state_name: make robust against NULL fi
  * build: add missing logging_vty_test.vty to EXTRA_DIST
  * jenkins distcheck: enable external tests
  * osmo_fsm_inst_state_chg(): set T also for zero timeout
  * osmo_fsm_inst_state_chg(): clamp timeout_secs to <= ~68 years
  * add generic vty_transcript_test.c, vty_transcript_test.vty
  * vty: enable optional-multi-choice syntax: ([one]|[two])
  * vty: enable optional-multi-choice syntax: [(one|two)]
  * vty: enable tab-completion for optional-multi-choice args
  * vty telnet: consistently never change nodes upon CTRL-C
  * vty api: add vty_out_va()
  * doxygen: enable cross referencing everywhere
  * doxygen: add source files as dependencies
  * doxygen: allow manual 'make apidoc' even if --disable-doxygen
  * add osmo_tdef API, originally adopted from osmo-bsc T_def
  * platform independence fix: tdef range tests
  * get_value_string(): guard against NULL
  * fix osmo_gsm48_classmark* libosmogsm.map entries
  * add OSMO_STRBUF_PRINTF()
  * enlarge gsm0808 msgb headroom
  * log: fsm: allow logging the timeout on state change
  * fix api doc typo for osmo_plmn_name2()
  * api doc: tweak gsm0808_cell_id_matches_list() doc
  * represent negative T-timers as Osmocom-specific X-timers
  * tdef_test: tweak output to prepare for a fix
  * fix tdef_test.c: do call the function-to-test in all cases
  * fsm: add osmo_fsm_inst_state_chg_keep_or_start_timer()
  * add gsm0808_cell_id_from_cgi(), gsm0808_cell_id_to_cgi()
  * osmo_gsm48_classmark_a5_name(): fix 'no-cm3' label
  * gsm_utils.h: remove unused include of gsm_08_08.h
  * add osmo_sockaddr_str API
  * add osmo_use_count API
  * add fsm_dealloc_test.c
  * fsm: add flag to ensure osmo_fsm_inst_term() happens only once
  * fsm: support graceful osmo_fsm_inst_term() cascades
  * fsm_dealloc_test: no need for ST_DESTROYING
  * make osmo_sockaddr_str_is_set() NULL-safe
  * add osmo_str_startswith()
  * tweak OSMO_STRBUF_APPEND(), add OSMO_STRBUF_APPEND_NOLEN()
  * add osmo_{escape,quote}_str_buf2() for standard args ordering
  * add identifier sanitation for setting FSM instance ids
  * add OSMO_IMSI_BUF_SIZE
  * GSUP: add Message Class IE
  * BSSMAP: tweaks
  * BSSMAP: add messages for inter-BSC and inter-MSC Handover
  * add gsm48_decode_bcd_number2() from osmo-msc
  * add osmo_bssap_tlv_parse2() for multiple identical T
  * add vty_is_active()
  * add comment to gsm_mncc_bearer_cap.speech_ver
  * gsm48_decode_bcd_number2(): fix input len check
  * gsm48_decode_bcd_number2(): allow avoiding deprecation
  * osmo_gsup_decode(): properly check IMSI, avoid deprecation
  * add gsm0808_create_handover_request_ack2 to add AoIP RTP addr

  [ Max ]
  * socket.h: add missing include
  * Enable remote SIM protocol log level
  * Add multipatch capability to osmo-config-merge
  * LCLS: add string dump helpers
  * coding: check gsm0503_rach_*() results
  * rate_ctr_group_free(): guard against empty or NULL input
  * BSSGP: use variable for NSEI

  [ Philipp Maier ]
  * gsm0808: Add CSFB indication IE to BSSMAP CLEAR COMMAND
  * gsm0808_utils: fix gsm48 multirate configuration generator
  * gsm0808_utils: fix gsm48 multirate to S-bit converter
  * gsm_utils: fix use buf_len instead of sizeof in osmo_dump_gsmtime_buf

  [ Sylvain Munaut ]
  * protocol/gsm_04_14: Fix the OPEN LOOP message type
  * gsm_08_08.h: Add constants for Channel Type in signalling mode

  [ Vadim Yanitskiy ]
  * gsm/gsm0480: introduce gsm0480_create_release_complete()
  * vty/tdef_vty.c: drop redundant comparison
  * src/signal.c: cosmetic: use talloc_zero()
  * Doxygen: fix incorrect / missing parameter description
  * core/linuxlist.h: fix and unify Doxygen documentation
  * core/linuxlist.h: fix white-space and inconsistent alignment
  * src/logging.c: fix syntax errors in Doxygen documentation
  * core/msgb.h: fix dead msgb2 reference in msgb_eq_* helpers
  * core/msgb.h: drop meaningless parameter of msgb_eq_* helpers
  * src/msgb.c: fix Doxygen documentation for msgb_printf()
  * core/msgb.h: fix incorrect Doxygen parameter description
  * Doxygen: fix documentation of rate_ctr_for_each_counter()
  * src/rate_ctr.c: drop some incorrect \ref references
  * Doxygen: fix documentation of osmo_timer_setup()
  * logging_gsmtap.c: document all params of log_target_create_gsmtap()
  * src/gsmtap_util.c: fix possible memleak in gsmtap_source_init()
  * gsm_03_40.h: define max SM-TP-UDL (User-Data-Length) values
  * vty/talloc_ctx_vty.c: allocate walk_cb_params on stack, not heap
  * vty/talloc_ctx_vty.c: use REG_NOSUB flag of regcomp()
  * gsm_utils.c: fix Doxygen description for gsm_get_octet_len()
  * Fix incorrect buffer size calculation
  * gb/gprs_ns_sns.c: fix incorrect sizeof() calculation
  * gsm/gsm_utils.c: indicate intentional fall-through
  * application.c: drop wrong \references of osmo_init_ignore_signals()
  * bitcomp.c: fix missing Doxygen group closing tag
  * gsm/gsm_utils.h: fix argument type of gsm_chan_t_name()

  [ Pau Espin Pedrol ]
  * rsl: Support PDCH in rsl_chan_nr_str
  * ipa: Document ipa_ccm_idtag_parse_off and fix ipa_ccm_idtag_parse
  * ipa: Fix ipa_ccm_id_resp_parse on big endian systems

  [ Karl Koscher ]
  * Fix build on non-glibc systems

  [ Alexander Couzens ]
  * add osmo_stat_item_inc/osmo_stat_item_dec to set it relative

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 07 May 2019 18:36:51 +0200

libosmocore (1.0.1) unstable; urgency=medium

  [ Max ]
  * Rename msgb_wrap_with_TL()

 -- Harald Welte <laforge@gnumonks.org>  Mon, 21 Jan 2019 14:50:42 +0100

libosmocore (1.0.0) unstable; urgency=medium

  [ Kévin Redon ]
  * GSMTAP: add SIM sub_types
  * comp128v23 (minor): update original code site and author

  [ Neels Hofmeyr ]
  * fix strncpy bugs in gsm/ipa.c
  * fix strncpy bugs in socket.c
  * cosmetic: osmo-sim-test.c: use memcpy instead of strncpy
  * use __FILE__, not __BASE_FILE__
  * log: add 'last' option to 'logging print file'
  * gsm0808: inter-bsc HO messages: add missing BSSMAP header, x4
  * api doc: fix osmo_quote_str_*
  * add osmo_str_tolower() and _toupper() with test
  * fix tests linking: don't use system installed libs
  * logging vty: add VTY transcript test
  * gsm0808: implement BSSMAP Classmark Request
  * jenkins: add --enable-external-tests
  * logging vty: rewrite 'logging level' vty cmd generation
  * logging vty: deprecate the 'everything' keyword
  * logging vty: write: check logging levels validity
  * logging vty: deprecate 'all', introduce 'force-all'
  * Revert "gsm0808: add function to convert amr gsm0408 setings to gsm0808"
  * logging vty: add 'logging level set-all <level>'
  * vty reference: fix deprecation bit evaluation
  * vty list: fix deprecation/hidden bit logic
  * vty: omit HIDDEN from vty reference
  * vty logging: fix crash when missing 'logging enable'
  * jenkins: print gcc version in log
  * gsm_44_318.h: remove #if 0 from struct gan_cch_desc_ie
  * add contrib/struct_endianess.py
  * gsm0408_test: test encoding and decoding Mobile Identity
  * api doc: gsm48_mi_to_string(): warn of return value implementation
  * add osmo_bcd2str()
  * gsm48_mi_to_string: use osmo_bcd2str(), fix some corner cases
  * gsm48_generate_mid(): mask out ODD flag from mi_type
  * gsm48_mi_to_string(): guard against zero length output buffer
  * gsm48_mi_to_string(): do not read from zero length input buffer
  * fix api doc for osmo_bcd2str()
  * add to osmo_sock_get_name*() API
  * add/clean big-endian packed structs (struct_endianess.py)
  * define LOGPFSM fmt only once, in LOGPFSMLSRC
  * add API doc for LOGPFSM* macros
  * LOGPFSM*: guard against fi == NULL
  * add LOGPFSMSL(), LOGPFSMSLSRC()
  * gsm_utils: add enum osmo_rat_type, from osmo-msc enum ran_type
  * osmo_rat_type: add OSMO_RAT_EUTRAN_SGS
  * fix typo in enum BSS_MAP_MSG_TYPE: BSS_MAP_MSG_ASSIGMENT*
  * add osmo_mi_name(), for MI-to-string like "IMSI-123456"
  * add osmo_lu_type_names[], osmo_lu_type_name()
  * change GSM48_CMSERV_* to enum type, add names
  * comments: update/fix three 3GPP spec references

  [ Alexander Couzens ]
  * ctrl/vty: fsm: use correct element when iterating over fsm->proc.children
  * bssgp: introduce flush queue functions
  * configure.ac: check clock_gettime for glib < 2.17

  [ Harald Welte ]
  * gsm0480: Factor out msgb allocation helper function
  * USSD: Introduce gsm0480_gen_ussd_resp_7bit()
  * 04.80: New gsm0480_gen_{reject,return_error}() functions
  * import oap_client into libosmogsm
  * oap_client: Rename symbols with osmo_ prefix
  * import oap_client_test from osmo-sgsn
  * cosmetic: More context / naming / comment for test_idtag_parsing()
  * Deprecate ipa_ccm_idtag_parse() with ipa_ccm_id_{get,resp}_parse()
  * jenkins_arm.sh: Use same Werror related options as on other builds
  * re-introduce ipa_ccm_idtag_parse_off()
  * debian/rules: Don't overwrite .tarball-version
  * Add RSPRO support to IPA and logging definitions
  * Add new osmo-config-merge utility
  * logging_vty: Ensure writing well-formed config files
  * osmo-config-merge: Don't use C99 'for' loop initial declarations
  * Revert "osmo-config-merge: Add manual page"
  * osmo-config-merge: fclose() what we fopen()
  * timerfd_create(): Fix error handling of osmo_fd_register()
  * telnet_interface: avoid double-close of fd()
  * vty.c: Set vty->fd to -1 after closing the FD
  * SGsAP protocol definitions (header + C file)
  * gsm23003: Add MME domain name related helper functions
  * Fix VTY documentation error introduced  in "bind" VTY port change

  [ Vadim Yanitskiy ]
  * vty/vty.c: remove dead unused tall_bsc_ctx
  * gsm/gsm0480.c: prevent NULL-pointer dereference
  * gsm/gsm0480.c: use the local msgb allocator
  * libosmogsm: (re)introduce gsm48_push_l3hdr()
  * core/utils.h: drop duplicate '<stdbool.h>' include
  * core/utils.h: move includes to the top
  * vty/command.h: document and prettify CMD_ATTR_* flags
  * utils/osmo-config-merge: explicitly return from main()
  * libosmogsm/gsup.c: fix error code in osmo_gsup_encode()
  * gsm/gsup.h: cosmetic: use tab for comment alignment
  * core/msgb.h: introduce msgb_l4len() helper
  * gsm0480: fix copy-pasted note for gsm0480_gen_return_error()
  * GSUP/SMS: introduce MO-/MT-FORWARD-SM messages
  * GSUP/SMS: introduce READY-FOR-SM message
  * tests/gsm0808: use new msgb comparison API
  * logging/gsmtap: fix buffer overflow in _gsmtap_raw_output()
  * tests/gsup_test.c: drop session IEs from MO-ForwardSM Error

  [ Philipp Maier ]
  * socket: check return code of setsockopt
  * socket: do not set SO_REUSEADDR for IPPROTO_UDP
  * socket: add flag to enforce SO_REUSEADDR on UDP sockets
  * gsmtap_util: make sure SO_REUSEADDR is applied for GSMTAP
  * gsm0808: fix wrong codec defaults for OFR_AMR_WB
  * gsm0808: add function to convert amr gsm0408 setings to gsm0808
  * gsm0808: add function to convert amr gsm0408 setings to gsm0808
  * gsm0808_utils: constify parameter
  * gsm_utils: add function to get value strings for gsm48_chan_mode
  * gsm0808: add function to convert AMR S15-S0 to gsm0408 settings
  * gsm0808: allow decoding of zero length speech codec lists.
  * gsm0808: fix doxygen apidoc
  * gsm0808: cosmetic: rename parameter "reason" to "cause"
  * gsm48: correct apidoc for gsm48_generate_mid()
  * gsm_29_118: add missing include to header file
  * gsm29118: add value strings for SGSAP IEI
  * fsm: fix apidoc of osmo_fsm_state_name()
  * gsm0808: add message generator for BSSMAP HANDOVER PERFORMED
  * gsm_29_118: add missing extern for struct value_string decl.
  * cosmetic apn: correct whitespace error
  * gsm_29_118.h: Add constant for default port
  * gsm29118: add generator functions for GSM29118 messages
  * gsm0808: add encoder for cause codes and use it

  [ Mykola Shchetinin ]
  * vty/vty.c: fix bug in vty_config_write

  [ Pau Espin Pedrol ]
  * signal: Introduce API osmo_signal_talloc_ctx_init
  * msgb: Introduce msgb_{de,en}queue_count APIs
  * vty: Makefile: Fix LIBVERSION typo introduced in 0.12.0 release
  * ipa: Document ipa_msg_recv* functions
  * osmo-release.sh: Add quotes to string to fix shellcheck warning
  * osmo-release.sh: Allow forcing release without LIBVERSION bump
  * osmo-release.sh: Add checks to help avoid libversion debian major mismatch
  * gsm_08_58.h: Introduce struct abis_rsl_link_id
  * gsm_08_58.h: Introduce struct abis_rsl_chan_nr
  * gsm48: gsm48_decode_freq_list: Improve documentation of paramter f
  * gsm: Deprecate buggy gsm_arfcn2band API and introduce gsm_arfcn2band_rc
  * timer: Fix clockid_t undefined on MacOS < 10.12
  * stats.h: Fix build on MacOS

  [ Stefan Sperling ]
  * properly handle mandatory cli param of gsm0808_create_paging2
  * Properly deal with sockaddr_un socket path length limitations.
  * ensure unix socket paths are NUL-terminated for bind/connect
  * fix error handling gprs_ns_nsip_listen()
  * add support for ipaccess messages on the ctrl interface
  * stop printing group description in vty_out_rate_ctr_group_fmt()
  * make 'show rate-counters' show group index
  * send NS_POUT_UNBLOCK_ACK before signalling S_NS_UNBLOCK
  * document unblock-ack vs. signalling in gprs_ns_process_msg()
  * rename CELL_IDENT_LAI_AND_LAC to CELL_IDENT_LAI
  * port arfcn range encode support from osmo-bsc
  * port rest octets encoding code from osmo-bsc

  [ Keith ]
  * Add CC_CAUSE value_string array

  [ Alexander Chemeris ]
  * coding: Correctly count bits when decoding EDGE bursts with MCS >= 7.
  * coding: Always initialize bit counters in gsm0503_pdtch_egprs_decode().

  [ Daniel Willmann ]
  * osmo-config-merge: Fix some small issues
  * osmo-config-merge: Add manual page
  * stats_statsd: Send all stat_items as gauges

  [ Shinjo Park ]
  * GSMTAP: add definitions for new LTE RRC channels
  * GSMTAP: add definitions for LTE NAS subtypes
  * GSMTAP: fix typos in comments

  [ Max ]
  * vty: adjust telnet log
  * Update cipher reject function
  * Fix deprecation warning in gsm0808_test
  * Add helper wrapper for BSSAP TLV parsing
  * Update 3GPP TS 08.08 Cause handling
  * Update GSM0808_LCLS enums
  * Move msgb_push helpers to public header
  * Support cipher mode reject with extended cause
  * Add missing header include
  * LCLS: add 48.008 parameter structure
  * Update gsm0808_create_ass() doxygen
  * ctrl: print textual error on IPA parsing failure
  * Move BSSMAP_MSG_* defines to header file
  * Update msgb Lx helpers
  * ctrl: use #define for TRAP id
  * Add msgb_tl_put() helper
  * LCLS: update osmo_lcls struct
  * Allow log_init() with NULL log_info
  * Add osmo_sockaddr_in_to_str_and_uint()
  * Constify llist_count() parameter
  * msgb: add test helpers
  * LCLS, TS 29.205: add GCR routines
  * LCLS, TS 48.008: add GCR IE encoding/decoding
  * LCLS: add gsm0808_create_ass2()
  * Fix typos in SS opcode names
  * LCLC: fix doc to match type signature
  * Use define for key buffers
  * TLV: fix doc copy-paste error
  * TLV: add convenience function for 1-byte values
  * LCLS: enc/dec entire parameter set instead of GCR
  * Streamline glibc version check
  * Automatically disable GnuTLS fallback
  * LCLS: fix LCLS-CONNECT-CONTROL encoder
  * msgb: fix debug print
  * LCLS: use proper types for value_string wrappers
  * LCLS: expand enc/dec tests
  * LCLS: add GCR comparison helper

  [ Oliver Smith ]
  * cosmetic: fix typo (soocket -> socket)
  * add osmo_sock_get_{local,remote}_ip{,_port}()
  * socket.c: fix IP and port buffer sizes
  * merge_doc.xsl: move to osmo-gsm-manuals.git
  * GSUP: fix missing osmo_gsup_get_err_msg_type()s
  * GSUP: add end marker to enum osmo_gsup_iei
  * GSUP: add CHECK-IMEI message
  * Cosmetic: GSUP: note "on wire" for imei_result
  * gsm23003: add osmo_imei_str_valid()

  [ Martin Hauke ]
  * gsm/protocol/gsm_08_58.h: Fix typo

  [ Holger Hans Peter Freyther ]
  * vty: The telnet interface is TCP only. Fix the comments
  * vty: Make TCP port configurable and introduce telnet_init_default

 -- Harald Welte <laforge@gnumonks.org>  Sat, 19 Jan 2019 21:59:07 +0100

libosmocore (0.12.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * control_if: Avoid heap-use-after-free in osmo_wqueue_bfd_cb
  * configure: Check separately for lib implementing dlopen and dlsym
  * tests: bitrev_test: Fix dynamic-stack-buffer-overflow
  * tests: gea_test: Use correct max size for key in buffer
  * tests: a5_test: Print wrong buffer correctly on error
  * gsm: kasumi: Fix dynamic-stack-buffer-overflow on out buffers not multiple of 64 bits
  * gsm: lapdm.c: Add missing new line char in notice log string
  * ctrl: Log CMD TYPE on invalid ID number
  * ctrl: Fix parsing of ERROR recvd msgs with id=err
  * gsm0808: Add value_string for encryption algorithms
  * ctrl: Introduce ctrl_cmd_parse3 API
  * ctrl: ctrl_handle_msg: Avoid sending back received ERROR msgs
  * tests: ctrl: Test received ERROR messages are handled correctly
  * libosmocoding: clarify return values for TCH decoding functions
  * libosmocodec: FR err concealment: Fix too many silent frames generated
  * tests: codec: ecu_fr: Print XMAXC fields
  * tests: codec: ecu_fr: Add buffer with unequal XMAXC values
  * rate_ctr: Improve logging
  * logging: log_vty_command_string: Fix undercount of buf alloc size
  * logging_vty: Simplify code in config_write_log_single
  * logging.c: Fix whitespace typo

  [ Harald Welte ]
  * lapdm: Fix back-pointer from lapdm_entity to lapdm_channel
  * lapdm: Implement SABM related constraints
  * lapdm: cleanup: send_rslms_rll_l3_ui(): Use msgb_tv_push()
  * lapdm: send_rslms_rll_l3_ui(): Don't include B4/SACCH IE unless needed
  * lapdm: don't enforce contention resolution on SAPI0/DCCH
  * Add osmo_timerfd_* functions for osmo_fd-wrapped timerfd
  * import isdn4linux HDLC code from linux kernel
  * isdnhdlc: Port from kernel to userspace
  * mncc: properly export osmo_mncc_name()
  * cosmetic: Whitespace fixes in control_if.c
  * ctrl: Introduce libosmoctrl.map to avoid unintended exports
  * ctrl: Add doxygen API documentation; generate html from it
  * debian: Add libosmoctrl-doc sub-package
  * gsm_08_08.h: Add enum for LCLS config, control and status
  * gsm0808: Add encoding functions for LCLS BSSMAP messages
  * gsm0808: Add value_string for LCLS related IEs
  * tlv: Add TLVP_VAL_MINLEN() to obtain value _if_ length is >= minimum
  * Add osmo_isqrt32() to compute 32bit integer square root
  * fsm: Change semantics of LOGPFSML() log-level
  * vty: Don't dump deprecated commands in XML export
  * vty: Add logging_vty_add_deprecated_subsys
  * gsup: Add osmo_gsup_get_err_msg_type() function
  * gsup: Add value_string for Session State IE
  * gsm 04.80: Add value_string for component type and op code
  * Fix embedded (arm-none-eabi) builds
  * jenkins_arm.sh: Don't run 'make check' on embedded builds
  * jenkins_arch.sh: Accept "arm-none-eabi" as alias for "arm"
  * jenkins_arch.sh: Exit with error on unknown architecture
  * Don't call abort() directly, always use osmo_panic()
  * osmo_panic(): Annotate as __attribute__ ((noreturn))
  * gprs_ns.h: Declare gprs_ns_cause_str() which already existed in c file

  [ Stefan Sperling ]
  * define a constant for the max length of called party BCD IE
  * introduce vty_out_rate_ctr_group_fmt() function
  * Add a 'show rate-counters' VTY command.
  * remove unused argument from pad_append_ctr() helper function
  * check bssgp_tlv_parse() return code in bssgp_rcvmsg()
  * return error to sender upon bssgp_tlv_parse() failure

  [ Neels Hofmeyr ]
  * add gsm0808 channel enum to IE val conversion functions
  * add gsm0808_cell_id_to_list()
  * add support for gsm0808 HANDOVER REQUIRED message
  * add gsm0808_create_handover_request_ack()
  * add osmo_fsm_inst_state_chg_keep_timer()
  * fix gsm0808_permitted_speech(): don't return HR3 for TCH_F + AMR
  * add and tweak inter-BSC HO API
  * vty/command.c: talloc from tall_vty_cmd_ctx, not NULL
  * vty: cosmetic: cmd_deopt(): use talloc_strndup(), not memcpy()
  * vty: fix use-after-free and memleaks in is_cmd_ambiguous()
  * utils_test: fix isqrt_test calculation range
  * utils_test: check stderr to catch sanitizer issues
  * add osmo_sockaddr_to_str_and_uint()

  [ Philipp Maier ]
  * fsm: guard action callback
  * gsm_04_08: add function to get value string
  * gsm_08_08: gsm0808_permitted_speech does not have value strings

  [ Thorsten Alteholz ]
  * fix spelling

  [ Keith ]
  * Add enum gsm48_cause_coding from GSM 04.08 Section 10.5.4.11
  * Add enum gsm48_progress_desc

  [ Daniel Willmann ]
  * ports.h: Add ctrl port for osmo-gbproxy
  * Add function gprs_nsvc_state_append
  * stats_vty: Add asciidoc sections between the different counters

  [ Vadim Yanitskiy ]
  * gsm0480: fix: don't overwrite the data of RELEASE_COMPLETE
  * GSUP: implement TCAP-like session management
  * GSUP: introduce new messages for SS/USSD payloads
  * Doxygen: gitignore generated files for libosmoctrl
  * gsm/gsm0480.c: introduce gsm0480_extract_ie_by_tag()
  * gsm/gsm0480: refactor and expose gsm0480_parse_facility_ie()
  * Don't enforce Python 2 for utilities

  [ Alexander Chemeris ]
  * coding: Fix (E)GPRS BER calculation to correctly account for puncturing.
  * coding: Documentation typo fix.

  [ Alexander Couzens ]
  * vty: initialize termios before using it
  * stats_statsd: sanitize statsd name

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 17:31:46 +0200

libosmocore (0.11.0) unstable; urgency=medium

  [ Max ]
  * Enable GnuTLS fallback
  * Ctrl: add rate counter group introspection
  * ctrl: log incorrect interval values
  * Improve get_rate_ctr() error handling
  * ctrl: make response easier to parse
  * coding test: cosmetic cleanup
  * coding test: enable debug output
  * coding test: move bit dump into functions
  * coding test: use OSMO_ASSERT
  * Fix embedded build
  * embedded: fix tests
  * Embedded: fix sercomm test
  * Add functions for extended RACH coding
  * Do not allocate already existing counter group
  * Fix incorrect spec reference
  * Use 127.0.0.1 for GSMTAP logging by default
  * coding: move eB adjustement to appropriate place
  * Add function to properly encode RAI
  * Use existing function for TLLI encoding
  * log: print loginfo assertions source
  * Allow multiple 'log gsmtap' sinks
  * Deprecate gsm48_construct_ra()
  * Log lapd_datalink state on errors
  * jenkins: add dispatcher script
  * Embedded: disable stats test
  * Embedded: add sercomm stubs
  * GSUP: don't fail test on first error
  * jenkins: remove obsolete scripts
  * jenkins: move make invocation into shared function
  * utils: add helper wrapper for osmo_strlcpy()
  * GSUP: change osmo_gsup_encode() return type
  * Use python 3 for utilities
  * Add test for gsm48_generate_mid_from_imsi()
  * Add generic Mobile Identity encoder
  * Add function to encode classmark

  [ Niro Mahasinghe ]
  * gsm0503_coding.c: Fix tch_efr_unreorder() of one bit
  * gsm0503_coding.c: Use majority vote in tch_efr_unreorder()

  [ Harald Welte ]
  * debian: build now depends on libgnutls
  * Fix/Update copyright notices; Add SPDX annotation
  * Print /proc/cpuinfo before executing testsuite
  * conv_acc: Our code requires SSSE3, not just SSE3
  * ports.h: Use same VTY port number for osmo-mgw and osmo-bsc_mgcp
  * gsmtap.h: Introduce new GSMTAP type for LTE NAS messages
  * gsm0808_create_cipher_reject: Fix encoding of Cause IE
  * rate_ctr: print proper error message if rate_ctr already exists
  * timer: fixup whitespace issues
  * control_if: Close control connection socket/fd on read/write == 0
  * control_if: Log the disconnect of a CTRL client
  * CTRL: Ensure peer/connection info is always printed the same way
  * MNCC: Add MNCC to string dumper
  * gsm48_pdisc_names: Use conscise, short names
  * SMS: Add value_string for TS 04.11 CP and RP state
  * gsm_04_08.h: Clearly annotate timers that don't have a 3GPP Default value
  * gsm_04_08.h: Reduce T310 default to 30s.
  * gsm48_hdr_msg_type[_r99]: Fix bit-masks
  * gsm48_hdr_msg_type(): SS is in the same group as MM/CC
  * tlv_parser: Report *first* occurrence of repeated IEs
  * msgb: Add msgb_hexdump_{l2,l3}() to dump l2 or l3 part of message buffer
  * Revert "Use python 3 for utilities"
  * Revert "fsm: do not terminate child FSMs early"
  * osmo_msgbdump_{l2,l3}(): Proper typecast
  * debian/control: Fix Vcs-Browser URL
  * Add GSM 04.08 type-of-number / numbering-plan-id definitions
  * talloc_ctx_vty: Fix help strings (missing \n at end of line)
  * Revert "Add function to encode classmark"
  * rate_ctr: Add rate_ctr_inc2() as convenience wrapper
  * coding: Add BER-reporting RACH decode functions
  * l1sap: Add RSSI, BER and quarter-bit accurate timing to PH-RACH.ind
  * l1sap: Add fields for higher-precision timing offset values
  * abis_nm: Introduce abis_nm_dump_foh()
  * VTY: Don't welcome the user to the "control" interface, if it's VTY
  * prevent integer underflow in ipa_ccm_make_id_resp_from_req()
  * RSL/LAPDm: Not all RLL message are "transparent"

  [ Neels Hofmeyr ]
  * vty: deprecate now empty node commands
  * memleak: osmo_config_list_parse: getline() needs free also on error
  * abis_test: sanitize: fix msgb memleak
  * lapd_test: sanitize: fix msgb memleaks
  * gsm0408_test: sanitize: cleanup msgb
  * gsm0808_test: sanitize: fix msgb memleak
  * msgb: add inline msgb_queue_free()
  * rate_ctr: fix mem leak for mangled desc
  * bssgp_fc_test: remove rounding to deciseconds
  * bssgp_fc_test: clarify by outputting ok / failure messages
  * bssgp_fc_test: sanitizer: free msgb context when done
  * gprs_bssgp: bssgp_fc_in(): fix mem leak on queue overflow
  * bssgp_fc_test: sanitize: free fc struct when done
  * tlv_put: guard against NULL val and 0 len
  * sercomm_test: sanitize: fix msgb mem leak
  * osmo_strlcpy: sanitize: don't memcpy from NULL src even if len is 0
  * fsm_tmr_cb: don't set T=0, the fi may no longer exist
  * vty XML export: avoid repeating common node commands for each node
  * VTY reference: do not list empty nodes
  * VTY reference: use node names as section names
  * vty: set name for VIEW+ENABLE nodes, for VTY reference
  * vty reference: merge_doc.xsl: do not omit description tag
  * comment: utils: more accurately describe OSMO_STRINGIFY macro
  * logging vty: describe 'logging set-log-mask' command, add OSMO_STRINGIFY_VAL()
  * fix osmo_identifier_valid(): only allow printable characters
  * utils: add osmo_separated_identifiers_valid()
  * add osmo_auth_c3() (separate from gsm_milenage())
  * utils: add osmo_escape_str()
  * ctrl_test.c: replace print_escaped() with new osmo_escape_str()
  * ctrl: prep test: separate new ctrl_handle_msg() from handle_control_read()
  * ctrl_test: expand to test message handling and detect mem leaks
  * ctrl_test: show memleak when receiving GET_REPLY and SET_REPLY commands
  * ctrl: fix mem leak when handling GET_REPLY and SET_REPLY
  * ctrl_test: add two more current parsing bugs to prep for fix
  * add ctrl_cmd_parse2() to return parsing errors
  * ctrl: on parse errors, return a detailed message to sender
  * rate_ctr: fix osmo-sgsn DoS: don't return NULL on already used index
  * ports: define proper VTY and CTRL ports for OsmoHNBGW
  * ctrl: tighten CTRL input parsing
  * ctrl: separate handling of GET_REPLY, SET_REPLY and TRAP
  * jenkins: add 'make V=1' for more verbose build logs
  * logging vty: tweak general 'logging' command doc
  * gsm: add gsm0808_speech_codec_type_names
  * logging-gsmtap: send only basename of source file
  * logging: add ability to log the log-level with API and vty
  * logging: color the log level
  * logging: color the log category according to level
  * fix -Werror build: logging.c: always use literal with snprintf
  * cosmetic: logging: if color is disabled, don't print ""
  * logging: separate the '<000b>' subsys from filename logging
  * logging: allow to log only the basename of each source
  * logging vty: add 'logging print file (0|1|basename)' cmd
  * vty: fix 'logging print file' output
  * gsmtap_sendmsg(): clarify API doc concerning msgb ownership
  * memleak: gsmtap_sendmsg(): don't return 0 when no data was written
  * memleak: fix all libosmocore callers of gsmtap_sendmsg() to free on failure
  * memleak: _gsmtap_raw_output(): free msg in case of vsnprintf failure
  * cosmetic: gsm0408_test: RA test cases as array-of-struct
  * gsm0408_test: cosmetically re-order MCC to come before MNC
  * gsm0408_test: include BCD and leading zeros in test output
  * gsm0408_test: RA test: include min/max value cases
  * gsm0408_test: also test gsm48_generate_lai() and gsm48_decode_lai()
  * implement support for 3-digit MNC with leading zeros
  * gsm0408_test: check for new mnc_3_digits flag
  * gsm0408_test: test new gsm48_{decode,generate}_lai2() functions
  * gsm0408_test: add test cases for MNC with leading zeros
  * gsm: add osmo_mnc_from_str(), osmo_mnc_cmp(), osmo_plmn_cmp() for 3-digit MNC
  * introduce GSM_MCC_MNC_INVALID
  * gsm23003_test: fix: compare members instead of bcmp
  * fix osmo_mnc_from_str(): don't try to parse NULL
  * gsm23003: add osmo_mcc_from_str()
  * configure: add --enable-werror
  * jenkins_amd64.sh: use --enable-werror configure flag, not CFLAGS
  * gsm0808_test: cosmetic: re-arrange struct init; print hexdump on failure
  * gsm0808_test: cosmetic: test non-hex MCC
  * show failure in gsm0808_enc_cell_id_list2() in gsm0808_test
  * fix gsm0808_enc_cell_id_list2 for leading-zero MNC
  * cosmetic: gsm0808_test: drop extraneous assertion
  * contrib/fsm-to-dot: add -h option to print basic instructions
  * contrib/fsm-to-dot: allow transition from and to the same state
  * contrib/fsm-to-dot: don't match on event names in comments
  * contrib/fsm-to-dot: warn and draw unallowed state transitions
  * contrib/fsm-to-dot: add default edge label '-'
  * contrib/fsm-to-dot: mark arrows that feed events
  * contrib/fsm-to-dot: less false positives on event parsing
  * contrib/fsm-to-dot: mark illegal states in red
  * contrib/fsm-to-dot: warn about identically named FSMs
  * vty/command.c: write_config_file(): sanely compose temp path
  * fix logging talloc ctx: add osmo_init_logging2()
  * ctrl: test deferred cmd, show current failure
  * ctrl: fix deferred commands (and hence fix osmo-bts-sysmo 'clock-info' cmd)
  * cosmetic: flatten ctrl_handle_msg()
  * fix ctrl_test sanitizer issues
  * use osmo_init_logging2() with proper talloc ctx
  * add osmo_quote_str(),osmo_quote_str_buf() and test
  * fsm_test: terminate the main loop instead of exit on timeout
  * osmo_fsm_inst_find_by_name(): guard against strcmp(NULL)
  * fsm_test: more thoroughly test FSM inst ids and names
  * fsm: id: properly set name in case of NULL id
  * cosmetic: osmo_fsm_inst_update_id(): don't log "allocate"
  * add osmo_fsm_inst_update_id_f()
  * add gsm48_reject_value_names
  * deprecate PLMN de-/coding functions incapable of 3-digit MNC with leading zeros
  * avoid warning in gsm0808_create_layer3
  * add osmo_cgi_name()
  * add gsm0808_cell_id_list_add() to combine two cell identifier lists
  * add tlv_parse2(), capable of multiple instances of the same IE
  * add gsm0808_{enc,dec}_cell_id
  * test_gsm0808_enc_dec_cell_id_list_lac(): validate encoded bytes
  * test_gsm0808_enc_dec_cell_id_list_lac(): populate all LACs
  * test_gsm0808_enc_dec_speech_codec_with_cfg: initialize properly
  * cosmetic: log: fix typo, clarify msg for rate_ctr name mangling
  * tlv: add TLV_GET() and TLV_GET_MINLEN()
  * add gsm0808_cell_{id,id_list}_name() and friends
  * gsm0808_test: fix more missing inits (address sanitizer issues)
  * gsm0808_test: silence deprecation: use gsm0808_create_layer3_2()

  [ Philipp Maier ]
  * vty: add port number for osmo-mgw
  * libosmocodec: add FR bit offset definitions
  * libosmocodec: implement ECU (Error Concealment Unit) for FR
  * fsm: fix double llist_del in osmo_fsm_inst_term()
  * socket: fix socket leak in osmo_sock_local_ip()
  * socket: use inet_ntop() instead of inet_ntoa() in osmo_sock_local_ip()
  * fsm: add functions for unlinking and changing parents
  * fsm: do not terminate child FSMs early
  * fsm: allow graceful exit on FSM termination
  * features: move bts feature related functionality to libosmocore
  * features: define osmo_bts_*_feature() as static inline
  * gsm_08_08: correct speech codec defaults
  * gsm0808: Add value strings for BSSMAP cause codes

  [ Pau Espin Pedrol ]
  * vty: Fix bad use of vector_slot()
  * gsm: Use correct include for getrandom
  * utils: Fix false positive in compiler warning
  * cosmetic: Fix trailing whitespace
  * Fix malformed Abis/RSL messages with extra L3 Information field
  * tests: coding_test: Fix compilation with -O0
  * tests: utils_test: Fix test failure when compiling with -O0
  * ports.h: Add VTY and CTRL ports for osmo-trx
  * core: Add timespec helper macros and make timer_compat.h public
  * core/logging.h: Add logging category for jitter buffer
  * timer: Introduce osmo_clock_gettime to override clock_gettime
  * timer: Document osmo_gettimeofday API
  * osmo-release.sh: Set correct version when generating the changelog
  * socket.c: osmo_sock_init2: bind: Several logic fixes and log improvements
  * socket.c: osmo_sock_init2: connect: Several logic fixes and log improvements
  * socket.c: osmo_sock_init: Several logic fixes and log improvements
  * msgb: msgb_get: Drop unneeded tmp var
  * msgb: msgb_pull: Abort when pulling more than avail size
  * osmo_get_macaddr: Fix buffer read out of bounds
  * osmo_sockaddr_is_local: Fix memleak
  * gsm_08_58.h: Add Ericsson vendor-specific RSL message types
  * osmo-release.sh: Remove temporary file TODO-RELEASE.entries after use
  * osmo-release.sh: Exit with error if no description for new changelog entry provided
  * osmo-release.sh: Fix error condition no LIBVERSION modified
  * osmo-release.sh: Always generate entire commit changelog
  * osmo-release.sh: Allow user to add extra information to the release commit
  * debian: libosmoctrl: Use correct library version in pkg name
  * debian/changelog: Fix typo in maintainer e-mail

  [ Holger Hans Peter Freyther ]
  * logging: Extend the LOGPSRC macro to put cont in it as well
  * license: Fix the license to GPL

  [ Alexander Couzens ]
  * counters: add osmo_counters_count() returns the amount of counters
  * vty: show asciidoc counters: don't create an empty table for osmo_counters
  * gsm_08_58.h: introduce RSL_IE_ERIC_PAGING_GROUP
  * gsm_utils: call gnutls_global_init() as constructor

  [ Jean-Francois Dionne ]
  * Fix LAPD UA msgb memory leak.

  [ Vadim Yanitskiy ]
  * libosmocodec: add FR/HR/EFR frame length definitions
  * ussd_test.c: fix rc / len debug output confusion
  * gsm0480: fix USSD OCTET STRING length confusion
  * gsm0480: clean up the parse_process_uss_req() code
  * gsm0480: handle UnstructuredSS Request with DSC != 0x0F
  * gsm0480: parse GSM0480_MTYPE_FACILITY separately
  * gsm0480: handle GSM0480_CTYPE_RETURN_RESULT
  * gsm0480: handle USS_NOTIFY and USS_REQUEST with PROCESS_USS_REQ
  * gsm0480: handle GSM0480_OP_CODE_PROCESS_USS_DATA
  * gsm0480: add specification reference to SS message type
  * gsm0480: pass exact GSM 04.80 payload length to parse_ss()
  * gsm0480: move SS request length check to parse_ss()
  * gsm0480: refactor gsm0480_decode_ss_request
  * gsm0480: correct parse_ss_info_elements() declaration
  * tests/ussd: fix wrong GSM 04.80 payload length
  * gsm0480: parse all SS info elements in a message
  * gsm0480: parse optional IEs for RELEASE COMPLETE message
  * tests/ussd: prevent uninitialized memory access
  * libosmocoding: fix typo in library documentation
  * libosmocoding: use frame length definitions from codec.h
  * src/msgb.c: cosmetic: fix spelling mistakes
  * src/msgb.c: remove dead includes from OpenBSC
  * src/msgb.c: print an error if msgb allocation failed
  * src/msgb.c: avoid using internal talloc API
  * gsm0480: document the 'ss_request' structure
  * gsm0480: copy the raw USSD data, its DCS and length
  * gsm0480: drop messages with incorrect data length
  * protocol/gsm_04_08.h: drop incorrect GSM48_PDISC_USSD
  * gsm/gsm48.c: add call independent SS message names

  [ Stefan Sperling ]
  * TLVP_PRESENT() should not return TRUE after tlv_parse() fails.
  * Add helper functions for ACC bit flags in rach control IE.
  * ensure that osmo_fsm vty commands are only installed once
  * print BIG FAT ERROR message if osmo_fsm lacks event names
  * ensure VTY commands don't segfault if an FSM has no event names
  * support for more cell ID list types in libosmocore
  * fix a cell identifier parsing bug in libosmocore
  * fix cell identifier decoding in libosmocore
  * use gsm48_decode_lai2() in gsm0808_dec_cell_id_list()
  * fix bug in parse_cell_id_ci_list()
  * fix parse_cell_id_lac_and_ci_list()
  * add a test for CELL_IDENT_WHOLE_GLOBAL cell identifier lists
  * add a regression test for TLV parsing with repeated IEs

  [ Sergey Kostanbaev ]
  * gsm0480: skip length check for 'RELEASE COMPLETE' message

  [ allesklar2 ]
  * gsmtap.h: define TETRA DMO mode channels

  [ Martin Hauke ]
  * build: Ensure all .pc files are installed

  [ Daniel Willmann ]
  * fsm: Add a function to change the FSM instance ID later
  * contrib/jenkins_arch.sh: Fix script comparison and arm support
  * fsm: Update the name as well if the id is updated and accept NULL

  [ Thorsten Alteholz ]
  * fix spelling
  * fix issue on big endian architecture

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 15:47:11 +0200

libosmocore (0.10.2) unstable; urgency=medium

  * Revert "vty: Fix bad use of vector_slot()"
  * New upstream release of libosmocore

 -- Harald Welte <laforge@gnumonks.org>  Thu, 02 Nov 2017 18:51:02 +0100

libosmocore (0.10.1) unstable; urgency=medium

  * New upstream release of libosmocore

 -- Harald Welte <laforge@gnumonks.org>  Sun, 29 Oct 2017 10:46:47 +0100

libosmocore (0.10.0+nmu1) UNRELEASED; urgency=medium

  * Non-maintainer upload.
  * New upstream release of libosmocore

 -- Harald Welte <laforge@gnumonks.org>  Fri, 27 Oct 2017 19:45:00 +0200

libosmocore (0.9.6) unstable; urgency=medium

  * doc: osmocom-authn-protocol.txt: fix numbering, mark unused sync msgs
  * New upstream release of libosmocore.

 -- Max <msuraev@sysmocom.de>  Tue, 13 Dec 2016 18:23:56 +0100

libosmocore (0.9.5) unstable; urgency=medium

  * fix: DLGSUP logging category "unusable"
  * New upstream release of libosmocore.
  * ph_data_param struct changed / Extend L1SAP PH-DATA with measurement information
  * size of ph_tch_param struct changed / Extend with RTP Marker
  * size of struct log_target changed / Extend with GSMTAP

 -- Max <msuraev@sysmocom.de>  Tue, 13 Dec 2016 18:22:56 +0100

libosmocore (0.9.4) unstable; urgency=medium

  * New upstream release of libosmocore.
  * Internal API for GPRS cipher implementors updated to accommodate for arbitrary key lengths
  * external talloc dependency / internal talloc removal
  * size of ph_data_param struct changed / Extend L1SAP PH-DATA with presence information

 -- Max <msuraev@sysmocom.de>  Tue, 13 Dec 2016 18:21:56 +0100

libosmocore (0.9.3) unstable; urgency=medium

  * Send all stats values after re-configuration.
  * Fix using an empty prefix.
  * Fix sending timing values.

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Mon, 09 Nov 2015 21:34:37 +0100

libosmocore (0.9.2) unstable; urgency=medium

  * Fix the counter index after the NS reset.

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Wed, 04 Nov 2015 14:47:48 +0100

libosmocore (0.9.1) unstable; urgency=medium

  * Fix rate_ctr attribute for GPRS NS counters.

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Wed, 04 Nov 2015 10:23:39 +0100

libosmocore (0.9.0) unstable; urgency=medium

  * StatsD support
  * Disable building of static libraries
  * GTP Hub and OAP ports/identifiers assigned

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Tue, 03 Nov 2015 09:31:41 +0100

libosmocore (0.8.3) unstable; urgency=medium

  * Prepare new release

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Sun, 23 Aug 2015 17:38:55 +0200

libosmocore (0.8.2) unstable; urgency=medium

  * Add endian header
  * GPRS flow control changes
  * Add APN format routines to libosmocore.

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Sat, 01 Aug 2015 20:18:45 +0200

libosmocore (0.8.0) unstable; urgency=medium

  * New upstream release of libosmocore.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Sun, 18 Jan 2015 19:04:10 +0100

libosmocore (0.7.0) unstable; urgency=medium

  * New upstream release of libosmocore.

 -- Harald Welte <laforge@gnumonks.org>  Thu, 21 Aug 2014 15:52:00 +0200

libosmocore (0.6.6) UNRELEASED; urgency=medium

  * New upstream release of libosmocore.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 31 Mar 2014 15:37:33 +0200

libosmocore (0.6.5) unstable; urgency=medium

  * New upstream release of libosmocore

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 20 Jan 2014 10:37:23 +0100

libosmocore (0.6.4+git3) unstable; urgency=low

  * GPRS fix NS connections to a SGSN when configured via VTY

 -- Jacob Erlbeck <jerlbeck@sysmocom.de>  Thu, 07 Nov 2013 16:07:20 +0100

libosmocore (0.6.4+git2) unstable; urgency=low

  * GPRS related changes, some GSM encoding/decoding changes
  * GPRS correctly determine routable NSVC.
  * Update with GPRS changes

 -- Holger Hans Peter Freyther <holger@freyther.de>  Thu, 10 Oct 2013 14:16:37 +0200

libosmocore (0.6.3+git1-1) unstable; urgency=low

  * New upstream release with new primitives, USSD fixes.
  * Split libosmocore into several package. One lib per package.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Fri, 09 Aug 2013 17:47:30 +0200

libosmocore (0.6.2) unstable; urgency=low

  * New upstream release with NS UDP DSCP ABI changes

 -- Holger Hans Peter Freyther <holger@freyther.de>  Wed, 26 Jun 2013 08:01:55 +0200

libosmocore (0.5.3+git1-6) unstable; urgency=low

  * Build new package with the new API required for osmo-bts/openbsc
  * Package the arfcn utility.
  * Add the SOCK_RAW work-around for glibc.
  * Re-enable the debug packages thanks to Jan.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Fri, 04 Jan 2013 09:54:55 +0100

libosmocore (0.5.3+git1-2) unstable; urgency=low

  * New upstream version

 -- Holger Hans Peter Freyther <holger@freyther.de>  Mon, 05 Nov 2012 21:35:57 +0100

libosmocore (0.5.3+git1-1) precise; urgency=low

  * Fix issue with package version.

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

libosmocore (0.5.3+git1) precise; urgency=low

  * Updated debian package.

 -- Eric Butler <eric@codebutler.com>  Tue, 14 Aug 2012 16:53:56 -0700

libosmocore (0.3.0) natty; urgency=low

  * New upstream version of libosmocore

 -- Harald Welte <laforge@gnumonks.org>  Tue, 10 May 2011 17:28:24 +0200

libosmocore (0.1.27) natty; urgency=low

  * New upstream version of libosmocore.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Thu, 13 Jan 2011 18:07:36 +0800

libosmocore (0.1.17-1) unstable; urgency=low

  * Initial release

 -- Harald Welte <laforge@gnumonks.org>  Tue, 24 Aug 2010 10:55:04 +0200
