osmo-mgw (1.12.2) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * client: safely handle dealloc on event dispatch

 -- Oliver Smith <osmith@sysmocom.de>  Tue, 19 Dec 2023 12:49:41 +0100

osmo-mgw (1.12.1) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * mgcp-client: Fix missing include in mgcp_client_pool.h
  * mgcp-client: Introduce API osmo_mgcpc_ep_local_name()
  * mgw: Configure IuUP if codec set during MDCX

 -- Oliver Smith <osmith@sysmocom.de>  Thu, 28 Sep 2023 15:58:17 +0200

osmo-mgw (1.12.0) unstable; urgency=medium

  [ Philipp Maier ]
  * mgcp_sdp: add spec reference
  * mgcp_sdp: cosmetic: remove newline
  * mgcp_endp: cosmetic move mgcp_endp_release to the end
  * mgcp_endp: cosmetic: remove unnecessary new line
  * mgcp_e1: fix log output
  * mgcp_e1: be more frugal withe E1 line resources
  * mgcp_client: fix sourcecode formatting
  * mgcp_e1: fix typo
  * mgcp_e1: rewrite comment
  * mgcp_e1: rename e1_send to e1_send_ts_frame
  * mgcp_e1: cosmetic: rewrite comment
  * Revert "mgcp_codec: do not differentiate between oa and bwe when comparing codec"
  * mgcp_codec: fix oa/bwe comparison in mgcp_codec_pt_translate()
  * mgcp_codec: refactor payload type converstion
  * mgcp_codec: cosmetic: remove line break in api-doc
  * mgcp_network: fix apidoc
  * mgcp_vty: add warnings for deprecated config options
  * mgcp_codec: move mgcp_codec_decide down
  * mgcp_codec: fix codec decision
  * mgcp_network: do not deliver RTP packets with unpatched PT
  * mgcp_codec: be sensitive about IuFP when checking codecs
  * mgcp_client.h: also add spec ref to the other 3gpp defined payload types

  [ Harald Welte ]
  * cosmetic: Fix grammar suggesting reading _the_ user manual

  [ arehbein ]
  * Transition to use of 'telnet_init_default'

  [ Oliver Smith ]
  * mgcp_client: mgcp_msg_gen: add more error logs
  * mgcp_client_pool: add mgcp_client_pool_empty()
  * Cosmetic: mgcp_client: fix typo
  * debian: set compat level to 10
  * systemd: depend on networking-online.target
  * Cosmetic: fix a typo
  * mgcp_client: check rc of map_str_to_codec

  [ Pau Espin Pedrol ]
  * mgcp_network: Unregister osmo_fd before closing fd
  * mgcp-client: Call osmo_fd_unregister() before closing and changing bfd->fd
  * mgcp-client: Drop unused struct mgcp_client field
  * mgcp_client: Introduce mgcp_client_conf_alloc(), deprecate mgcp_client_conf_init()
  * mgcp-client: Move some static functions further above
  * mgw: Allow auditing speciall 'null' endpoint
  * mgcp-client: Add keepalive feature
  * mgcp_client: pool: Only pick clients with an MGCP link considered to be UP
  * mgcp-client: Always mark client as UP if keepalive request-interval disabled
  * mgcp-client: Mark client as UP when keepalive request-interval/timeout is disabled through VTY

  [ Vadim Yanitskiy ]
  * */Makefile.am: libraries shall not be in AM_LDFLAGS
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * tests: $(BUILT_SOURCES) is not defined, depend on osmo-mgw
  * copyright: fix typo: sysmocom s/s.m.f.c./s.f.m.c./ GmbH

  [ Neels Hofmeyr ]
  * mgcp_find_section_end(): skip spaces at start of SDP
  * mgcp_client: simpler error handling
  * mgcp: fix "L: a:" header parsing: heed ";" separator
  * mgcp_client: tweak extract_codec_name() implementation

  [ Andreas Eversberg ]
  * ASCI: Add new mode for voice group/broadcast call
  * ASCI: Support conference briding with 1..n connections

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 12 Sep 2023 14:48:51 +0200

osmo-mgw (1.11.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * mgcp-client: Remove impossible code path
  * mgcp_osmux: Drop duplicated conn_osmux_release_cid() in code path
  * Use Osmux default port define from libosmo-netif
  * osmux: Use new osmux APIs to let libosmo-netif alloc struct osmux_out_handle
  * mgw: Fix osmux conn local IP selection
  * cosmetic: osmux: Fix wrong indentation
  * mgw: Use X-Osmux string define
  * Add Osmux log category
  * cosmetic: main: Properly format log_info_cat
  * osmux: Use better name for function which may allocate a new struct
  * osmux: Use osmo_sockaddr wherever possible
  * osmux: Log refcounting of osmux_handle_list
  * osmux: Fix memleak on error code path
  * osmux: don't store conn ptr inside shared osmux_handle
  * osmux: set log level of expected code path to INFO
  * cosmetic: vty: Fix indentation whitespace
  * osmux: Log sendto() error
  * cosmetic: mgcp_conn.h: fix indentation whitespace
  * osmux: Attach osmux to virtual trunk
  * osmux: Clean up helper macro osmux_chunk_length()
  * osmux: Get rid of static NULL talloc context
  * Fix typo in ratectr description
  * mgcp_conn: rename field s/rate_ctr_group/ctrg/g
  * Use 'static const' instead of 'const static' everywhere
  * osmux: Add connection and global rate counters
  * cosmetic: osmux: Fix formatting of if-else brackets
  * osmux: Rename field osmux usage policy and define it with proper type
  * Use bool type instead of int in config field
  * osmux: Support local CID != remote CID
  * osmux: Fix incorrect rate_ctr_group used in mgcp_osmux.c
  * osmux: Improve per-conn tx rate counters
  * vty: show per-connection Osmux VTY stats
  * osmux: Rename field s/init/initialized
  * osmux: Allocate rate counters during initialization of osmux conn
  * cosmetic: osmux: Drop extra empty line
  * osmux: Drop unneeded comment block
  * osmux: Lower log level when osmux batch received for unknown CID
  * osmux: Keep decoding osmux pkt if a batch contains an unknown CID
  * Allocate struct osmux_in_handle through new libosmo-netif APIs
  * osmux: Drop logging of osmux internal counters
  * osmux: cleanup misleading code calling rtp_bridge_cb
  * osmux: Unify rtp_conn osmux type into a single type
  * osmux: Match remote address in osmux_conn_lookup()
  * osmux: Fill in from_addr in struct osmo_rtp_msg_ctx
  * osmux: Log remote address upon rx of osmux pkt
  * send_dummy: Use proper condition to test if conn is osmux
  * Fix regression in detection of legacy dummy packets
  * Use new libosmocore API osmo_sockaddr_is_any()
  * Get rid of separate rtp_port field
  * osmux: Use available API to check if remote end is known
  * Add Osmux IPv6 support
  * Clean up local var pointers in mgcp_get_local_addr()
  * osmux: Change couple log lines to OSMUX category
  * osmux: Add square brackets around IPv6 address to distinguish port in log line
  * osmux: Drop unused role parameter
  * osmux: cosmetic: Fix indentation
  * Check once if remote addr is available when sending dummy packet
  * osmux: Simplify and constify param passing
  * osmux: Set conn->type during osmux_init_conn()
  * osmux: Make conn_osmux_{allocate,release}_local_cid() APIs static
  * osmux: Define osmux_dummy cfg as boolean
  * osmux: Move setting OSMUX_STATE_DISABLED to initializer function
  * osmux: Erase references to bsc-nat
  * mgcp_conn_dump(): Separate dump for osmux and iuup connections
  * osmux: Introduce osmux peer-behind-nat (on|off) and rework conn activation
  * osmux: Clean up mgcp_config osmux fields
  * cosmetic: Fix typo in comment
  * mgcp-client: pool: Improve documentation of some internal fields
  * mgcp-client: Avoid double iteration picking client from pool
  * mgcp-client: Fix typo in internal function name
  * mgcp-client: Rename internal field in mgcp_client_pool
  * mgcp-client: Move & rename helper function outside of vty code
  * mgcp-client: Create alloc() and free() internal APIs for mgcp_client_pool_member
  * mgcp-client: Move internal API acting on mgcp_client_pool to the correct file section
  * mgcp-client: Refactor reinit of mgcp clients
  * mgcp-client: Rearrange order of structs and APIs in header
  * mgcp-client: Rearrange internal backpointers
  * mgcp-client: Introduce APIs to manually select mgcp_client from pool
  * mgcp-client: vty: Write deprecation warning using non-mgw nodes
  * mgcp-client: Use random free local port by default
  * mgcp-client: Convert users supporting new MGW Pool VTY node during write-config
  * mgcp-client: Introduce API mgcp_client_pool_config_write
  * mgcp-client: Add new VTY commands under mgw node without mgw prefix
  * mgcp-client: Fix 'mgw endpoint-range' command dropped from old VTY node
  * mgcp-client: Refactor system keeping old users not calling mgcp_client_pool_config_write() working
  * mgcp-client: Fix no 'mgw ' prefix written in old VTY node
  * Fix misleading error log
  * mgcp_send: Use mgcp_conn_rtp_is_iuup() helper
  * cosmetic: Clarify and fix typos in comment
  * mgw: Log unexpected RTP AMR OA-vs-BE payload
  * Rename and move func checking if amr mode is explicitly configured
  * mgw: rx_rtp(): reorder checks and handlings
  * mgw: Rename s/mgcp_send_rtp/mgcp_conn_rtp_dispatch_rtp/
  * osmux: Rename function and pass msgb directly to it
  * osmux: Make sure RTP AMR feed to osmux is in octet-aligned mode
  * Improve logging on AMR OA<->BWE conversion failure
  * osmux: Rotate over available Osmux CID when allocating a new one
  * osmux: Use new osmux_xfrm_input API to set name on each link
  * iuup: Use osmo_amr_ft_valid() API

  [ Vadim Yanitskiy ]
  * libosmo-mgcp-client: add -no-undefined to *_la_LDFLAGS

  [ Philipp Maier ]
  * mgcp_e1: fix apidoc
  * mgcp_network: improve coment

  [ Max ]
  * Set working directory in systemd service file
  * Add realtime scheduling and set priority in service file
  * ctrl: take both address and port from vty config

  [ Harald Welte ]
  * Make osmo_mgcpc_ep_fsm_pre_term() static
  * Support building with -Werror=strict-prototypes / -Werror=old-style-definition
  * Add -Werror=implicit-int -Werror=int-conversion -Werror=old-style-definition
  * update outdated vty copyright statement

  [ Oliver Smith ]
  * mgcp_client_pool.h: add missing stdbool include
  * Fix various typos
  * mgcp_client: add new clearmode codec

  [ Neels Hofmeyr ]
  * AMR->IuUP: do not crash on AMR data before IuUP Init
  * AMR->IuUP: properly translate Q -> FQC
  * IuUP->AMR: do not patch payload type a second time
  * IuUP->AMR: log whether converting to AMR OA or BE
  * AMR->IuUP: log conversion, like for the flipside

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

osmo-mgw (1.10.0) unstable; urgency=medium

  [ Eric ]
  * adjust mgcp response context
  * rework message handling
  * add a lock-free bounded spsc interthread queue
  * clang-format: remove foreach macros
  * fix mgcp_conn_free_all ubsan complaints

  [ Philipp Maier ]
  * configuration: point out difference between trunk-nr and e1 line nr
  * mgcp_client: add new codec IUFP as VND.3GPP.IUFP
  * mgcp_codec: do not differentiate between oa and bwe when comparing codec
  * mgcp_network: do not try to convert RTCP packets
  * mgcp_network: fix typo RTPC -> RTCP

  [ Oliver Smith ]
  * treewide: remove FSF address

  [ Pau Espin Pedrol ]
  * mgcp_network.c: Set proper CRC Header for ACK Initialization
  * cosmetic: Rename variable payload=>payload_type
  * mgcp_network.c: Fix byte alignment of CRC Header for ACK Initialization
  * Define mgcp_rtp_end.output_enabled as bool
  * cosmetic: mgcp_codec.c: Fix typo in comment
  * Drop unneeded ax_check_compile_flag.m4
  * Make function amr_is_octet_aligned publicly available
  * Initial IuUP support using proper FSMs
  * IuUP: Support RFCI ID != RFCI Index
  * iuup: Fix caps in logging message
  * iuup: Check for IuUP Initialization retrans

  [ Alexander Couzens ]
  * doc/overview: fix wrong project page link

  [ Vadim Yanitskiy ]
  * tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'
  * libosmo-mgcp: e1: fix memleaks in e1_recv_cb()

  [ Harald Welte ]
  * update git URLs (git -> https; gitea)

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 28 Jun 2022 18:50:25 +0200

osmo-mgw (1.9.0) unstable; urgency=medium

  [ Harald Welte ]
  * TOS bits != DSCP
  * manual: don't define fig-bsc twice
  * switch from osmo_sock_set_dscp() to OSMO_SOCK_F_DSCP()
  * mgw: Add support for setting socket priority from VTY
  * manual: Include QoS chapter and add osmo-mgw specific example

  [ Keith ]
  * Add vty command 'show mgcp active'
  * Log some useful messages at ERROR/INFO instead of DEBUG

  [ Neels Hofmeyr ]
  * send DLCX only once
  * tweak termination DLCX log msg
  * add osmo_mgcpc_ep_ci_get_remote_rtp_info()
  * check_rtp_destin(): clarify log msg
  * mgcp_client_fsm delete: set mgcp_client as ctx, not NULL
  * mgcp_client_endpoint_fsm: on term, still let conns wait for DLCX OK
  * mgcp_client_fsm: add missing log_subsys
  * mgcp_client: add logging on received MGCP messages

  [ Philipp Maier ]
  * mgcp_network: fix implicit address loopback
  * mgcp_common, mgcp_udp_send: make parameter buf const
  * mgcp_network: refactor MGCP_DUMMY_LOAD
  * mgcp_client: drop nunnecessary else statement
  * mgcp_client: fix error handling in mgcp message generation
  * mgcp_protocol: fix loop that sends dummy RTP packets
  * mgw_main: fix loop that resets all endpoints
  * mgcp_trunk: drop ws line
  * mgcp_ratectr: drop ws line
  * mgcp_ratectr: fix sourcecode formatting
  * mgcp_trunk: add value string for trunk type.
  * mgcp_ratectr: refactor rate counter and set group name
  * mgcp_protocol: forward declare mgcp_endpoint
  * mgcp_endp: make wildcarded detection separate
  * mgcp_protocol: refactor request handler array
  * mgcp_trunk: use unsigned int instead of int as trunk_nr
  * mgcp_protocol: refactor MGCP request handling
  * mgcp_ratectr: add stats items to monitor trunk usage
  * mgcp_msg: add trunk parameter to mgcp_check_param for logging
  * mgcp_protocol: refactor function create_response_with_sdp
  * mgcp_protocol: add support for wildcarded DLCX
  * remove struct member wildcarded_req from struct mgcp_endpoint
  * mgcp_lient: remove unsubstantial FIXME note
  * mgcp_protocol: assert endp when it becomes mandatory
  * mgcp_trunk: check MGW domain name earlier
  * mgcp_ratectr: add stats items to monitor trunk usage
  * mgcp_client: fix typo Initalize -> Initialize
  * mgcp_protocol: get rid of policy_cb and change_cb
  * mgcp_ratectr: do not set talloc destructor on library allocated item
  * mgcp_client: allow to reset endpoints on startup
  * mgcp_client_vty: remove unnecessary checks
  * mgcp_client: do not print (null) when address is ANY
  * mgcp_client: refactor function init_socket
  * libosmo-mgcp-client: extend the mgcp_client for MGW pooling
  * mgcp_client_vty: add missing docstrings
  * mgcp_client_vty: add OSMO_ASSERT on pool parameter
  * mgcp_client_vty: fix docstrings for mgw-pool
  * mgcp_client_vty: cosmetic: doc string should terminated with \n
  * mgcp_client_vty: fixing docstring
  * mgcp_ratectr: remove unusued rate counters
  * mgcp_client: fix typo in doxygen comment
  * mgcp_client: add MGW name as logging context

  [ Pau Espin Pedrol ]
  * Use new stat item/ctr getter APIs
  * constify arg in addr_is_any()
  * Define patch_ssrc as bool type
  * constify some function arg pointers
  * mgcp_network.c: Reorder some functions in file
  * mgcp_send_dummy: Check RTP destination is available before attempt tx
  * mgw: rx CRCX: Avoid sending dummy rtp if remote address not provided
  * Fail rx MDCX sendrecv with invalid remote addr
  * Take into account Marker bit when patching RTP stream
  * Use DLMGCP instead of DLGLOBAL in log lines
  * Fix attribute parsing on gcc 11.1.0

  [ neels ]
  * Revert "mgcp_ratectr: add stats items to monitor trunk usage"

  [ Daniel Willmann ]
  * contrib/jenkins: Use ASAN for osmo-mgw

  [ Oliver Smith ]
  * mgcp_client_vty: add missing NO_STR
  * Revert "Turn some compiler warnings into errors"

  [ Eric ]
  * add vscode stuff to gitignore
  * configure.ac: fix maybe-uninitialized for clang
  * fix missing includes and forward declarations
  * rename do_retransmission
  * mgcp_sdp: fix potential leak
  * stats: make sanitizers happy
  * libosmo-mgcp: cleanup audio codex alloc
  * libosmo-mgcp: atomic rate counter group indexes
  * libosmo-mgcp: do not use the default msgb talloc context
  * globally lock the portrange when trying to grab a port to prep for multithreading
  * embed strings into structs
  * adjust talloc context
  * endp: do not cache cfg pointer
  * add modified .clang-format
  * rename strip_epname and find_specific_endpoint and make them available
  * fix mgcp_conn_free_all
  * fix up some docstrings that lost their dot

  [ Vadim Yanitskiy ]
  * libosmo-mgcp: use OSMO_STRLCPY_ARRAY in mgcp_codec_add()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 16:59:21 +0100

osmo-mgw (1.8.1) unstable; urgency=medium

  * attempt to fix RPM spec file after recent soversion bump

 -- Harald Welte <laforge@osmocom.org>  Wed, 24 Feb 2021 10:56:17 +0100

osmo-mgw (1.8.0) unstable; urgency=medium

  [ Harald Welte ]
  * Fix number of endpoints of default trunk
  * Add CTRL interface to osmo-mgw
  * Update per-trunk global packet/byte counters in real-time
  * remove accidential TODO-RELEASE entry
  * mgcp_protocol: Avoid code duplication between virtual + other trunks
  * osmo-mgw.spec.in: Use %config(noreplace) to retain current config file
  * mgcp_client_init(): consider "talloc returns NULL" case
  * mgcp_client_pending_add(): Consider "talloc returns NULL" case
  * libosmo-mgcp-client: fix memleak in case if no response is received
  * debian/control + SPEC: Add missing build dependency to libosmo-abis
  * osmo-mgw.spec.in: Fix dependency to libosmoabis
  * osmo-mgw.spec.in: Add missing dependency to libosmotrau
  * Add example osmo-mgw configuration file for Abis/E1
  * use osmo_fd_setup() whenever applicable

  [ Neels Hofmeyr ]
  * fix vty dump_trunk: start from zero, do not omit first CONN
  * allow larger MGCP client wqueue: 10 -> 1024
  * add osmo-mgw --vty-ref-xml: dump VTY ref XML to stdout
  * manuals: generate vty reference xml at build time
  * refactor: use msgb to receive, pass and send RTP packets
  * change timer T2427001 to X2427

  [ Philipp Maier ]
  * doc: do not bind osmo-mgw to random ip-address
  * cosmetic: remove excess newlines
  * mgcp: remove unused callback pointer
  * mgcp: find better locations for LOGPCONN and LOGPENDP
  * vty: fix unreachable code (error msg on trunk alloc fail)
  * mgcp_vty: fix indentation
  * osmo-mgw: rename struct mgcp_trunk_config and symbol tcfg
  * mgcp_vty: fix indentation in VTY config write
  * osmo-mgw: refactor endpoint and trunk handling
  * mgcp_trunk: remove audio_name and audio_payload
  * ratectr: move rate counter definitions into mgcp_ratectr.h
  * cosmetic: fix doxygen
  * cosmetic: fix doxygen
  * cosmetic: fix doxygen for mgcp_cleanup_rtp_bridge_cb()
  * trunk: get rid of virt_trunk pointer
  * cosmetic: remove excess space
  * endp: move endpoint name generation into mgcp_endp.c
  * endp: add name generator function for E1 endpoints
  * mgcp_client: add docstring for mgcp_client_rtpbridge_wildcard()
  * mgcp_trunk: fix docstring for mgcp_trunk_alloc()
  * mgcp_osmux: remove unused define constants
  * mgcp_trunk: move enum mgcp_trunk_type to mgcp_trunk.h
  * mgcp_trunk: use enum type for trunk type variable
  * trunk: parse E1 trunk number
  * endp: add typeset for e1-endpoints
  * mgcp_conn: move struct mgcp_conn mgcp_conn.h
  * mgcp_internal: remove forward declaration struct mgcp_endpoint_type
  * endp: add E1 endpoint interlocking
  * endp: require domain name also for E1 endpoints
  * mgcp_trunk: pick trunk by number and type
  * mgcp_client: add function to generate e1-endpoint names
  * mgcp_endp: use define constant to define max number of E1 subslots
  * mgcp_endp.c: cosmetic: fix sourcecode formatting
  * mgcp_trunk: remove double check
  * mgcp_test: do not access endpoint array elements directly
  * mgcp_vty: fix endpoint number configuration
  * mgcp_test: remove trunk2 from unit-test
  * mgcp_trunk: use talloc_zero_array instead of _talloc_zero_array
  * mgcp_protocol: remove unused variable
  * mgcp_e1: finish E1 support, add E1 support from libosmoabis
  * get rid of mgcp_internal.h
  * mgcp_ratectr: fix comments in header file
  * mgcp_e1: use return value of e1inp_line_update()
  * mgcp_protocol: log when endpoint is unavailable
  * cosmetic: add missing new-line
  * mgcp_trunk: drop "trunk 0" limitation
  * mgcp_e1: make E1 ts initalization more debugable
  * mgcp_e1: remove unused struct member trunk->e1.line
  * mgcp_endp: use NUM_E1_TS from e1_input.h
  * mgcp_trunk: increase default number of virtual endpoints
  * cosmetic: mgcp_client_fsm: change error message.
  * mgcp_vty: remove remains of loopback functionality
  * mgcp_vty: deprecate bind early command
  * mgcp_e1: do not expose function  mgcp_e1_init()
  * mgcp_vty: add user attributes to configuration commands
  * overview: update section limitations.
  * overview: fix graph "OsmoMGW used with OsmoBSC"
  * overview: fix graph "OsmoMGW used with OsmoMSC"
  * overview: add graph to show E1 integration
  * configuration: remove hint towards trunk 0 limit
  * configuration: drop note about lackin E1 support
  * configuration: add note that changes to trunks need a restart
  * mgcp_vty: fix config write for trunk 0
  * mgcp_vty: add missing VTY commands for E1 trunks
  * mgcp_trunk: get rid of magic numbers for E1 slots
  * configuration: add section about E1 trunks
  * usermanual: add chapter about mgcp endpoints
  * mgcp_client: get rid of magic numbers for E1 slots

  [ Eric ]
  * tests: dlopen does not imply availability of dlsym..
  * configure.ac: fix libtool issue with clang and sanitizer

  [ Alexander Chemeris ]
  * vty: Prepend VTY output of counters for better visual separation.
  * counters: Implement more useful counters.
  * mgcp_network: Fix a typo in the comment bahviour -> behaviour
  * rtp_bridge: Demote a chatty ERROR log message to DEBUG level.

  [ Pau Espin Pedrol ]
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * Support setting rt-prio and cpu-affinity mask through VTY
  * cosmetic: Rename main talloc ctx
  * mgcp-client: Support IPv6 in osmo_mgcpc_ep_ci_get_crcx_info_to_sockaddr() implementation
  * mgcp-client: Fix trailing whitespace in mgcp_client_fsm.h
  * mgcp_client: Use INET6_ADDRSTRLEN to store addresses in str format
  * mgcp_client: Allow submitting and parsing IPv6 addr in SDP
  * mgcp_client: Allow setting IPv6 addresses
  * mgcp_client: Make MGCP_CLIENT_LOCAL_ADDR_DEFAULT IPv6 compatible
  * mgcp_client: Support validating IPv6 addresses in CRCX and MDCX commands
  * mgcp_client: Deprecate unused IPv4-only API
  * mgcp_client: copy back Connection Information from MDCX ACK
  * mgw: Fix mgcp_rtp_end field description comment
  * mgw: Initial IPv6 support
  * mgw: Introduce VTY cmd 'rtp bind-ip-v6' command
  * mgw: Find and store RTP conn local_addr once during CRCX handling
  * mgw: Announce and rebind new local address if change required during MDCX
  * mgw: osmux: Avoid sending packets on recvonly connection
  * mgw: Release endpoint after last conn times out
  * mgw: osmux: Fix conn watchdog timeout not updated
  * mgw: Don't be case-sensitive when parsing X-Osmo-IGN param
  * cosmetic: Fix typo in comment
  * mgw: Avoid logging notice message each time we receive nt param in LCO
  * mgw: Fix return value documentation for API mgcp_verify_call_id
  * cosmetic: Fix typo in comment
  * contrib/jenkins: Enable parallel make in make distcheck
  * .gitignore: Ignore new autofoo tmp files
  * tests: Replace deprecated API log_set_print_filename

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

  [ Vadim Yanitskiy ]
  * libosmo-mgcp-client: fix use-after-free in mgcp_client_tx()
  * libosmo-mgcp-client: fix use-after-free in mgcp_msg_gen()
  * libosmo-mgcp: fix unsigned compared against 0 in mgcp_trunk_by_name()
  * libosmo-mgcp: fix unused extra argument to printf() in add_fmtp()
  * libosmo-mgcp: always check result of msgb_printf() in add_fmtp()
  * libosmo-mgcp-client: mgcp_client_tx(): return rc on error
  * debian/control: change maintainer to the Osmocom team / mailing list
  * vty: use install_lib_element() and install_lib_element_ve()
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * fixup mgcp_trunk: increase default number of virtual endpoints

  [ Alexander Couzens ]
  * configure.ac: require libosmoabis + libosmotrau >= 1.0.0

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 18:28:45 +0100

osmo-mgw (1.7.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * rename codecs_cmp() to codecs_same()
  * mgcp_codec: constify 'param' arg
  * fix crashes: don't assert on incoming RTP packet size
  * mgcp_send(): stop looping on conversion error
  * mgcp_codec: split codec_free() off of codec_init()
  * fix memleak: actually free strings in mgcp_codec_reset_all()
  * mgcp_test: extend / rewrite test_mgcp_codec_pt_translate()
  * test_mgcp_codec_pt_translate(): more tests
  * differentiate AMR octet-aligned=0 vs =1
  * ptmap: implicitly match  '/8000' and '/8000/1'
  * mgcp_codec: codec_set(): log about all possible errors
  * mgcp_codec_add: fix audio_name size check
  * explicitly free codecs in mgcp_rtp_conn_cleanup()
  * tweak mgcp_parse_audio_ptime_rtpmap()
  * SDP: store all ptmap entries
  * mgcp_client_fsm cleanup: Do not assert on DLCX failure
  * clear pending requests on MGCP failure
  * client: endp fsm: add notify struct, prep for cancel-notify
  * client: endp fsm: clear ci[] before dispatching DLCX success
  * client: endp fsm: allow cancelling a notify event
  * client: endp fsm: add osmo_mgcpc_ep_ci_ep()
  * accept MGCP without SDP
  * fix use-after-free: require new fsm deferred dealloc, check for term

  [ Pau Espin Pedrol ]
  * mgcp_test: Correctly release all endpoints allocated
  * mgw: Allocate mgcp_conn instance under tcfg->endpoints

  [ Harald Welte ]
  * manual: Fix copy+paste error
  * mgcp_client: Check for osmo_fsm_register() error return value
  * Move fsm_mgcp_client regstration to __attribute__((contructor))
  * exit(2) on unsupported positional arguments on command line

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

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 13:35:09 +0100

osmo-mgw (1.6.0) unstable; urgency=medium

  [ Oliver Smith ]
  * Cosmetic: fix spaces/tabs in mgcp_requests[]
  * Inactive connection cleanup (disabled by default)
  * debian: create -doc subpackage with pdf manuals
  * vty: allow 0 as conn-timeout to disable it
  * vty: update desc of conn-timeout
  * manuals: update VTY documentation
  * "make dist" fix for: no rule to make mgcp_common.h
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Philipp Maier ]
  * Add option to GSM HR frames to RFC5593 representation
  * mgcp_sdp: cosmetic: correct typo in comment
  * mgco_client: cosmetic: remove excess whitespace
  * mgcp_sdp: mgcp_sdp.c does not include own header file
  * mgcp_sdp: untangle parsing of a= parameters
  * mgcp_network: use mgcp_rtp_codec in downlink format callback
  * AMR: Add function to convert between bw-effient and octet aligned mode

  [ Neels Hofmeyr ]
  * log: don't spam with "can not patch PT" messages
  * mgcp client: allow setting conn mode for CRCX and MDCX
  * make codec_table public as osmo_mgcpc_codec_names
  * move MGW endpoint FSM from osmo-bsc to here
  * fix: multiple initial CRCX
  * constify map_codec_to_pt() ptmap arg

  [ Pau Espin Pedrol ]
  * mgcp-client: whitespace cleanup in mgcp_client.c
  * mgcp-client: Sanitize implementation of mgcp_client_rtpbridge_wildcard
  * libosmo-mgcp: Use trunk type during endpoint allocation
  * cosmetic: Fix typos in comment
  * cosmetic: tests: mgcp_client_test: clean trailing whitespace
  * mgcp_msg: Log faulty line on Osmux parsing error
  * cosmetic: handle_modify_con: Fix indentation level
  * Introduce log fmt helpers LOGPENDP and LOGPCONN
  * create_response_with_sdp: Fix inclusion of X-Osmux
  * osmux: Cleanup of CID alloc pool APIs
  * mgcp_osmux.c: osmux_enable_endpoint: Fix incorrect return check
  * osmux: Log osmux socket during osmux_init
  * mgcp-cli: Change osmo_mgcpc_ep_fsm name to avoid collision with old osmo-bsc
  * osmux: Document func and return different rc upon osmux init failure
  * osmux: Fix reception of legacy dummy payloads
  * osmux: Use LOGPCONN in several log calls
  * cosmetic: mgcp_udp_send: Document port param is in network byte order
  * cosmetic: osmux: Document network byte order in port variable
  * vty: Allow enabling Osmux
  * osmux: Allocate CID during CRCX
  * osmux: Introduce mgcp_conn_rtp_is_osmux() helper
  * osmux: Mark conn_rtp->type as osmux during CRCX
  * mgcp-cli: Allow submitting X-Osmux on CRCX request
  * mgcp-cli: Parse X-Osmux on CRCX response
  * osmux: Handle Osmux MGCP extension in MDCX messages
  * mgcp-cli: Allow submitting X-Osmux on MDCX request
  * mgcp-cli: Parse X-Osmux on MDCX response
  * osmux: Drop unneeded OSMUX_STATE_NEGOTIATING
  * mgcp-cli: endpoint_fsm: Add API to retrieve Osmux CID from MGW
  * osmux: Provide correct local port during mgcp resp
  * osmux: Use remote port to send osmux frames
  * osmux: Improve logging around osmux enabling events
  * osmux: Delay osmux enable of conn until remote addr is configured by MDCX
  * osmux: Redo read/write osmux glue code to have data routed correctly
  * mgw, mgcp-li: Handle X-Osmux param name as case insensitive
  * osmux: Use DUMMY ft msg as per Osmux spec
  * osmux: Fix loopback for Osmux connections
  * osmux: Fix CID release for non-enabled connections
  * osmux: Fix hardcoded rtp payload_type 98 in osmux conn
  * mgcp-cli: Validate osmux cid value during mgcp_msg_gen
  * mgw: Support uppercase LCO options
  * mgw: Support lowercase header parameters
  * mgcp-cli: Support lowercase header parameters
  * mgw: Support receiving uppercase connection mode
  * mgw: Support receiving lowercase LCO codec
  * mgw: Make check of duplicated LCO fields case insensitive
  * mgw: Allow receiving lowercase MGCP header keyword
  * mgw: Allow receiving lowercase X-Osmo-Ign Callid field
  * mgw: Allow receiving uppercase noanswer keyword
  * doc: X-Osmo-IGN: small formatting and typo fixes
  * doc: Add Osmux documentation to OsmoMGW User Manual
  * Catch unsigned integer MGCP parsing errors with strtoul
  * Fix return variable of strtoul()
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * configure.ac: Require libosmo-netif 0.6.0

  [ Alexander Couzens ]
  * mgcp_internal: LOGPENDP: ensure *endp is not NULL

  [ Harald Welte ]
  * handle NULL return of rate_ctr_group_alloc()
  * update .gitignore
  * mgcp_sdp: Don't check if an unsigned int is below 0

  [ Vadim Yanitskiy ]
  * configure.ac: drop useless check for -fvisibility=hidden

  [ Daniel Willmann ]
  * manuals: Add script to regenerate vty/counter documentation
  * manuals: Update vty/counter documentation

  [ Hoernchen ]
  * turn -Werror=null-dereference into a warning

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 16:52:58 +0200

osmo-mgw (1.5.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * gitignore: Filter *.pc
  * configure: Find correct libgsm's gsm.h header
  * vty: Fix typo writing bts-jitter-buffer-delay-{min,max}
  * Remove libosmo-legacy-mgcp and osmo-bsc-mgcp
  * debian: Remove dangling symlink to osmo-bsc-mgcp.service
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * mgcp: Fix osmux_cid_bitmap static array size calculation
  * mgcp_osmux: Use define to calculate rtp_ssrc_winlen
  * osmux: Avoid initing output without enabling osmux
  * mgcp: Log endpoint nr consistently as hex
  * osmux_send_dummy: Avoid logging incorrectly and sending if osmux not enabled
  * osmux: Don't process regular osmux frames if disabled by cfg
  * osmux: Move parse_cid of legacy dummy frames to own function
  * osmux: Make func handling dummy frames independent of endp type
  * osmux: allow enabling osmux only on correct activating state
  * osmux: Improve checks around activating and using enabled osmux
  * osmux.h: Document enum osmux_state
  * osmux: Avoid processing further frames if conn not found

  [ Philipp Maier ]
  * mgcp_client_fsm: allow ptmap in mgcp_client_fsm as well
  * mgcp_network: translate payload type numbers in RTP packets
  * mgcp_client: use IETF source port as for MGCP
  * mgcp_client: increment local port number when port is in use
  * mgcp_test: release endpoints after use
  * network: do not patch PT of RTCP packets
  * network: check packets before further processing
  * Cosmetic: remove misplaced line break
  * mgcp_sdp: restructure mgcp_write_response_sdp() (rtpmap)
  * mgcp_sdp: restructure mgcp_write_response_sdp() (audio)
  * mgcp_client: check local port only once
  * mgcp_client_fsm: switch to MGCP_CONN_RECV_SEND in add_audio()
  * mgcp_protocol: increase buffer space for codec name in LCO
  * osmo-mgw: Add vty reference manual

  [ Neels Hofmeyr ]
  * fix handling of "Wrong domain name" error
  * interpret domain '*' as 'allow any domain'
  * cosmetic: log: fix "CallIDs does not match"
  * fix 3G hack: allow any IP for loopback and 0.0.0.0
  * cosmetic: drop code dup in mgcp_client_fsm.c CRCX
  * add X-Osmo-IGN MGCP header to ignore CallID
  * X-Osmo-IGN: rather parse items by token, not char
  * mgcp_test: fix log of conn_id presence
  * mgcp_test: fix get_conn_id_from_response() CI length
  * mgcp_client_test: cosmetically re-arrange reply_to() args
  * mgcp_client_test: use "\r\n\r\n" instead of "\n\n"
  * mgcp_client_test: also verify received conn_id
  * mgcp_client_test: test long conn_id
  * mgcp_client: error on too long conn id
  * mgcp_common: rename to MGCP_CONN_ID_MAXLEN
  * doc: fix mgcp_verify_ci() return val doc
  * mgcp_verify_ci(): return meaningful error codes
  * fix mgcp_verify_ci(): off-by-one in max len check
  * generate shorter 'I:' conn IDs
  * mgcp_conn_get(): compare conn Id ('I:') case insensitively
  * mgcp_conn_get(): match conn Id ('I:') despite leading zeros
  * cosmetic: mgcp_test: fix get_conn_id_from_response()
  * comment: indicate struct type for mgcp_endpoint.conns
  * log: avoid logging early media as error
  * fix osmo-mgw -s; fixes osmo-mgw.service using -s
  * Importing history from osmo-gsm-manuals.git
  * OsmoMGW: update VTY reference
  * OsmoMGW: document the 'X-Osmo-IGN' MGCP extension
  * mgw: update vty reference
  * drop/replace very weird logging in mgcp_client.c
  * check_rtp: on IP:port errors, log the IP and port
  * osmo-mgw: err-log: include expected domain name
  * mgcp_client_vty: fix missing talloc_free
  * mgcp_client: drop a bunch of dead code
  * mgcp_client: logging tweaks
  * mgcp_client: make domain part of endpoint configurable
  * mgcp_client: tweak some log levels INFO -> {DEBUG,ERROR}

  [ Stefan Sperling ]
  * add VTY commands which show specific mgcp endpoints
  * add MGCP CRCX command statistics to osmo-mgw
  * show RTP TX/RX stats in 'mgcp show stats' output
  * use local variable for rate counters in handle_create_con()
  * add more mgcp crxc error counters
  * add MDCX command statistics to osmo-mgw
  * add aggregated rtp connection stats to osmo-mgw
  * add DLCX command statistics to osmo-mgw

  [ Harald Welte ]
  * debian/rules: Don't overwrite .tarball-version
  * check_rtp_origin(): Don't memcmp sockadd_in and in_addr
  * check_rtp_origin(): Avoid using memcmp for comparing integer types
  * vty-ref: Update URI of docbook 5.0 schema

  [ Daniel Willmann ]
  * mgw: Add new VTY reference
  * Add initial OsmoMGW manual

  [ Oliver Smith ]
  * build manuals moved here from osmo-gsm-manuals.git
  * jenkins.sh: remove leftover MGCP env variable
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 15:02:18 +0100

osmo-mgw (1.4.0) unstable; urgency=medium

  [ Philipp Maier ]
  * network: independently initalize state->out_stream
  * stats: use libosmocore rate counter for in/out_stream.err_ts_counter
  * mgcp_sdp: correct apidoc of mgcp_parse_sdp_data
  * vty: clean up rtp port-range command
  * sdp: remove unused alt_codec field from struct mgcp_rtp_end
  * sdp: remove circular inclusion
  * protocol: Try whole port range on port allocation
  * client: do not start connections in loopback mode
  * mgcp_network: do not log destination invalid ip/port as error
  * cosmetic: fix log output
  * conn: call talloc_free before setting the pointer to NULL
  * protocol: do not change LCO, when no LCO are present
  * protocol: reject illegal lco options
  * cosmetic: fix typo
  * mgw: clean up codec negotiation (sdp)
  * client: add features to generate and parse codec information
  * mgcp_internal: remove unused struct member
  * stats: replace packet statistic counters with libosmocore rate counters
  * stat+vty: fix printing of rate counter values
  * protocol: prevent unnecessary null pointer deref

  [ Pau Espin Pedrol ]
  * legacy-mgcp: Add jitter buffer on the uplink receiver
  * legacy-mgcp: switch to new osmux output APIs
  * mgcp: mgcp_osmux: use conn_bts when forwarding pkts from bsc_nat
  * mgcp: switch to new osmux output APIs
  * debian: Package installed example doc files
  * gitignore: Add m4 scripts from m4 subdir

  [ Neels Hofmeyr ]
  * api doc: fix parameter name for mgcp_conn_create()
  * mgcp-client: add mgcp_conn_get_ci()
  * mgcp_client_fsm: improve error logging
  * cosmetic: fix doxygen comment markers
  * cosmetic: mgcp_network.c: merge one LOGPC to its preceding LOGP
  * IuUP hack: make RTP patching less general

  [ Harald Welte ]
  * cosmetic: fix typo in log message: 'abrupt' instead of 'aprupt'

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

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 19:05:22 +0200

osmo-mgw (1.3.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * contrib: Add osmo-mgw systemd service
  * legacy: mgcp_protocol: Don't print osmux stats if it is off
  * mgcp_stat: Don't print osmux stats if it is off

  [ Neels Hofmeyr ]
  * fix segfault: DLCX for unknown endpoint: dont try to log NULL endpoint
  * MGCP endpoints: parse as decimal, not hex
  * add --enable-sanitize config option
  * legacy_mgcp: mgcp_test: sanitize: free msgb_ctx
  * mgcp_test: test_packet_error_detection: sanitize: free all conns
  * mgcp_test: test_no_cycle: sanitize: free endp
  * mgcp_test: sanitize: free msgb_ctx
  * mgcp_client: don't configure "bts base"
  * Revert "mgcp_client: don't configure "bts base"" until osmo-msc is ready
  * mgcp_client: add transaction cleanup
  * mgcp_client_test makefile: add update_exp target
  * cosmetic: mgcp_network: typo in log
  * osmo-mgw: Add talloc context introspection via VTY
  * mgcp_client: show failure by MGCP SDP section parsing test
  * mgcp_client: cosmetic: clean up SDP params parsing
  * mgcp_client: detect SDP section-start parsing errors
  * compiler warning: ignore deprecated in mgcp_client_test.c
  * configure: add --enable-werror
  * jenkins.sh: add --enable-werror to configure flags
  * cosmetic: mgcp, legacy_mgcp: drop unused vty.h definitions
  * use osmo_init_logging2() with proper talloc ctx

  [ Philipp Maier ]
  * osmux: fix nullpointer dereference
  * cosmetic: guard dead osmux vty code with ifdef
  * cosmetic: remove prefix "net" from rtp related vty commands
  * doc: update sample config file
  * cosmetic: use correct VTY port number constant
  * vty: simplify endpoint allocation
  * vty: do not change number_endpoints at runtime
  * MGCP: Connection Identifiers are hex strings
  * libosmo-mgcp: Connection Identifiers are allocated by MGW, not CA
  * client: use osmo_strlcpy instead of strncpy
  * cosmetic: fix sourcecode formatting
  * cosmetic: clearly mark endpoint numbers as hex
  * client: use string as connection identifier
  * conn: remove assertions
  * mgcp_test: fix wrong strcmp() parameters
  * mgcp_test: fix nullpointer dereference
  * mgcp_test: add returncode check
  * mgcp_test: fix possible double free
  * mcgp_client: mgcp_msg_gen(): add checks to verify params
  * network: use originating RTP packet address for loopback
  * client: mgcp_response_parse_params: check rtp port
  * mgcp: allow endpoints beginning from zero
  * client/common: move constant MGCP_ENDPOINT_MAXLEN
  * mgcp: make domain name configurable
  * cosmetic: protocol: remove unnecessary nul termination
  * client: do not insist on \n\n when parsing MGCP messages
  * main: display mgcp ip/port
  * client: make callid in MDCX mandatory
  * client: add missing mandatory SDP fields
  * mgcp: permit wildcarded endpoint assignment (CRCX)
  * mgcp: add prefix to virtual trunk
  * client: eliminate destructive parameter parsing
  * client: eliminate destructive head parsing
  * cosmetic: client: add doxygen comments
  * protocol: fix problem with line break and OSMUX
  * protocol: fix missing carriage return
  * client: fix sdp parameter ordering
  * protocol: check the packetization in local cx options
  * cosmetic: remove spaces from pointer symbol
  * client: Do not accept endpoint ids with wildcards in responses
  * client: do not accept endpoint ids without @ character in responses
  * client: prohibit endpoint ids without @ character
  * protocol: on wildcarded CRCX return endpoint number as hex
  * msg: fix response code on exhausted endp resources
  * cosmetic: move mgcp_release_endp() to mgcp_ep.c
  * client: use heap to store mgcp_response
  * ep: move endpoint struct and define to mgcp_ep.h
  * cosmetic: rename mgcp_release_endp to mgcp_endp_release
  * cosmetic: rename mgcp_ep.c/h to mgcp_endp.c/h
  * protocol: reject DLCX/CRCX/MDCX on unsupported parameters
  * protocol: exit cleanly when local cx options check fails
  * cosmetic: Add missing \n on log line
  * protocol: check requested connection mode
  * protocol: fix tagging of wildcarded requests
  * protocol: prohibit wildcarded requests for MDCX and DLCX
  * mgcp: fix use-after-free and add callback for endpoint cleanup
  * client: add an optional FSM interface
  * mgcp_client_fsm: Add FSM event names
  * cosmetic: mgcp_client_fsm: rename enums
  * cosmetic: rename function .._conn_reset() to .._conn_init()
  * mgcp_conn: do not touch u.rtp in mgcp_conn_alloc()
  * cosmetic: rename .._codec_reset() to .._codec_init()
  * mgcp_conn: add function mgcp_rtp_conn_cleanup()
  * stats: use libosmocore rate counter for in/out_stream.err_ts_counter

  [ Alexander Couzens ]
  * debian/control: correct library dependency of osmo-mgw against libosmo-mgcp1
  * debian: include systemd service osmo-mgw.service
  * Revert "stats: use libosmocore rate counter for in/out_stream.err_ts_counter"

  [ Harald Welte ]
  * cosmetic: fix whitespaces; we use tabs for indentation
  * Fix possible buffer overflow in mgcp_conn_dump()
  * osmo-mgw: Update copyright statement
  * osmo-mgw: Config file is osmo-mgw.cfg, and not mgcp.cfg
  * osmo-mgw: Fix copyright notice
  * strct mgcp_rtp_state: Group + document struct members related to patching
  * mgcp_rtp_state: grup 'stats' members into sub-structure
  * mgcp_rtp_end: Group statistics members into 'stats' sub-struct
  * libosmo-mgcp: Cosmetic spelling fixes in comments
  * mgcp_msg: We must parse endpoint numbers as hex, not decimal!
  * mgcp_internal.h: document more struct members with comments
  * centralize handling of common errors like "endpoint not found"
  * Return proper MGCP Error codes, as per spec
  * osmo-mgw: Use libosmocore socket abstraction
  * osmo-bsc_mgcp: Add LIBOSMONETIF_{CFLAGS,LIBS}
  * libosmo-mgcp-client is GPLv2+, not AGPLv3+
  * Turn libosmo-mgcp into local, non-installed library

  [ Stefan Sperling ]
  * enable osmo_fsm vty commands in libosmo-mgcp-client vty

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 17:40:35 +0200

osmo-mgw (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: use osmo-clean-workspace.sh before and after build
  * vty: skip installing cmds now always installed by default
  * mgcp-client vty: use name 'mgw' instead of 'mgcpgw'
  * mgcp client: vty: tweak doc strings

  [ Philipp Maier ]
  * sdp: refactoring sdp parser/generator
  * cosmetic: rename bts_codec to codec_str
  * cosmetic: fix coding style for mgcp_parse_sdp_data()
  * cosmetic: fix commenting style
  * cosmetic: correct whitespaces
  * client: fix stderror logging in unit-test
  * client: add unified function to generate MGCP messages
  * client: add ip address parsing to the client
  * protocol: allow wildcarded DLCX
  * mgcp: remove port/timeslot calculator functions from  mgcp.h
  * network: add separate log category
  * cosmetic: make dummy packet handling more explicit
  * network: autdetect rtp bind ip-address
  * network: fix rtp packet length
  * network: remove unused return code

  [ Pau Espin Pedrol ]
  * mgcp_client_vty.c: Fix VTY compatibility with 'mgcpgw bts-base'

 -- Harald Welte <laforge@gnumonks.org>  Fri, 10 Nov 2017 11:10:23 +0900

osmo-mgw (1.1.0) unstable; urgency=medium

  * New upstream release

 -- Harald Welte <lafore@gnumonks.org>  Sat, 28 Oct 2017 12:48:41 +0200

osmo-mgw (1.0.2) unstable; urgency=low

  * First release after major rename.

 -- Max Suraev <msuraev@sysmocom.de>  Thu, 14 Sep 2017 18:41:05 +0200


osmo-mgw (0.1.0) unstable; urgency=low

  * Initial release.

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