osmo-ggsn (1.4.0) unstable; urgency=medium

  [ Max ]
  * Don't return error on normal shutdown

  [ Harald Welte ]
  * process_pco() const-ify 'apn' argument
  * ggsn: Remove magic numbers from pco_contains_proto()
  * ggsn: const-ify input / read-only arguments of PCO related functions
  * ggsn: Remove magic numbers from ipcp_contains_option()
  * ggsn: Fix build_ipcp_pco() in presence of invalid IPCP content
  * ggsn.c: Refactor PCO processing during PDP activation
  * ggsn: Add minimalistic PAP support
  * ggsn: More logging from PCO handling (e.g. in case of malconfiguration)
  * sgsnemu: Fix format string argument count

  [ Vadim Yanitskiy ]
  * osmo-ggsn: fix VTY command for getting PDP contexts by APN
  * osmo-ggsn: add VTY command to show PDP context by IPv4
  * osmo-ggsn: check result of osmo_apn_to_str()
  * osmo-ggsn: print requested / actual APN in PDP info
  * osmo-ggsn: properly show subscriber's MSISDN in the VTY

  [ Pau Espin Pedrol ]
  * ggsn: Drop unused param force in apn_stop()
  * gtp: Document spec reasoning drop of Rx DeleteCtxReq
  * ggsn: Start gtp retrans timer during startup
  * gtp: Take queue_resp into account to schedule retrans timer
  * gtp: Fix typo dublicate->duplicate
  * pdp: Introduce new API pdp_count_secondary
  * gtp_create_pdp_ind: simplify code by reordering and compacting parsing
  * gtp: Refactor code to use gtp_freepdp(_teardown) APIs
  * cosmetic: gtp: Document free pdp ctx in non-teardown scenario
  * gtp: Re-arrange free pdp ctx code in non-teardown scenario
  * pdp: Drop unused code for haship
  * cosmetic: gtp.h: Remove trailing whitespaces
  * ggsn: Fix undefined behaviour shifting beyond sign bit
  * gtp: Introduce new pdp APIs (and deprecate old ones) to support multiple GSN
  * gtp: Make use of new libgtp APIs with multi-gsn support
  * ggsn_vty_reference.xml: Update from last code changes
  * ggsn: vty: Require ggsn param in <show pdp-context> cmd
  * sgsnemu: Replace use of deprecated libgtp API pdp_newpdp with new one
  * cosmetic: gtp: queue: remove trailing whitespace
  * gtp: Add missing headers
  * gtp: queue.c: Document queue APIs
  * gtp: queue: Add unit test queue_test
  * ggsn: Avoid unaligned mem access reading PCO proto id
  * ggsn: Use structures instead of raw arrays when parsing ipcp_hdr
  * configure.ac: Replace obosolete macro AC_CANONICAL_SYSTEM
  * configure.ac: Use brackets in AC_INIT params
  * configure.ac: Use prefered AC_CONFIG_HEADERS over AM_CONFIG_HEADER
  * configure.ac: some versions of linux/if.h require including sys/socket.h
  * sgsnemu: Fix unaligned pointer access during ip/icmp checksum
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * Require libosmocore 1.1.0

  [ Oliver Smith ]
  * debian: create -doc subpackage with pdf manuals
  * ggsn: Use gtp_delete_context_req2() everywhere
  * contrib/jenkins.sh: run "make maintainer-clean"

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

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 21:28:30 +0200

osmo-ggsn (1.3.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * ggsn: ctrl iface: listen on IP configured by VTY
  * gtp: Log type name of unexpected signalling message
  * gtp: Allow recv DEL CTX REQ in sgsn and DEL CTX RSP in ggsn
  * gtp: Log ignore CTX DEL REQ due to no teardown and only 1 ctx active
  * gtp: Add new API to avoid freeing pdp contexts during DEL CTX REQ
  * gtp: Add new replacement cb_recovery2 for cb_recovery
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom

  [ Stefan Sperling ]
  * fix unaligned access in build_ipcp_pco()
  * fix support for multiple IPCP in PDP protocol configuration options
  * check ioctl() call return value in tun_new()
  * fix allocation of ippool's hash table
  * replace bogus memcpy() call in ippool_newip()
  * initialize local variable addr in ippool_new()
  * fix format string error in ippool_printaddr()
  * fix a format string directives in queue_seqset()
  * properly store IPv6 addresses in struct tun_t

  [ Harald Welte ]
  * debian/rules: Don't overwrite .tarball-version
  * osmo-ggsn.cfg: Ensure well-formed config file example
  * sgsnemu: Fix printing of tun device name
  * ippool.c: Use "%td" format string for ptrdiff_t
  * initial version of OsmoGGSN user manual
  * OsmoGGSN: Add VTY reference manual
  * GGSN: Document how 'ip tuntap' is used for non-root; call netdev 'apn0'
  * vty-ref: Update URI of docbook 5.0 schema

  [ Alexander Couzens ]
  * libgtp: implement gtp_clear_queues to clear req/resp queue

  [ Neels Hofmeyr ]
  * Importing history from osmo-gsm-manuals.git
  * refactor Makefile build rules, don't use the FORCE
  * GGSN: don't say 'NITB'
  * OsmoGGSN: more info on non-root operation / tun creation
  * OsmoGGSN: multiple instances: mention GTP port
  * OsmoGGSN: add Routing section for IP forward and masquerading
  * OsmoGGSN: typo: priveleges
  * OsmoGGSN VTY ref: prep: convert newlines to unix
  * OsmoGGSN vty: update VTY reference
  * OsmoGGSN: fix VTY additions' node IDs
  * OsmoGGSN: update vty reference
  * ggsn: update vty reference

  [ Max ]
  * Expand OsmoGGSN manual

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

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 21:34:22 +0100

osmo-ggsn (1.2.2) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * ggsn_vty.c: fix: use CONFIG_NODE as parent by default

  [ Philipp Maier ]
  * ggsn: fix misinterpreted length field in ipcp_contains_option()
  * ggsn: make sure ipcp_option_hdr and and ipcp_hdr are packed

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 31 May 2018 12:44:54 +0200

osmo-ggsn (1.2.1) unstable; urgency=medium

  * debian/rules: Fix debian packaging after 1.2.0 release

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

osmo-ggsn (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix compiler warnings: return 0 in main(), in 3 tests
  * add --enable-sanitize config option
  * sanitize build: ensure uint16/32 alignment in gtpie_test and in46a_test
  * configure: add --enable-werror
  * jenkins.sh: use --enable-werror configure flag, not CFLAGS

  [ Harald Welte ]
  * sgsnemu: Don't leak FILE handle in proc_read()
  * sgsnemu: Fix format string in printing tun-device name
  * sgsnemu: Make sure buffer has space for terminating-NUL
  * sgsnemu: Free strings in error path
  * gtp: Fix buffer overflow in imsi_gtp2str()
  * gtp: Explicit OSMO_ASSERT to ensure pdp variable is set
  * tun: Don't copy 16byte IPv6 address to 'struct in_addr'
  * ippool: Correctly compute size of static pool
  * remove unused argument to alloc_ippool_blacklist()
  * factor out netdev_ip_local_get() from tun_ip_local_get()
  * Properly NULL-out blacklist in alloc_ippool_blacklist()
  * gtp_kernel: Change gtp_kernel_init() function signature
  * gtp-kernel: Re-add support for kernel GTP-U acceleration
  * gtp-kernel: Get rid of hard-coded kernel GTP device name
  * gtp-kernel: shut down kernel GTP device in apn_down()
  * gtp-kernel: Align logging for APN start in kernel-gtp case with that of TUN
  * gtp-kernel: Avoid global state variable
  * gtp-kernel: Make sure repeated calls to gtp_kernel_init() are safe
  * gtp-kernel: proper cleanup in error path
  * gtp-kernel: Get rid of SYS_ERR where not applicable
  * gtp-kernel: Add function name to pdp_debug() function calls
  * gtp-kernel: Add device nime in pdp_debug() log statements
  * contrib/jenkins.sh: Allow jenkins job to specify if kernel GTP is used
  * ggsn.c: Fix byte order of IPCP IPv4 DNS servers
  * ggsn: Ignore PCO with length 0, don't abort processing
  * README.md: Remove misleading sentence on sgsnemu
  * Add talloc context introspection via VTY
  * fix segfault in case of kernel gtp-u
  * lib/tun.c: Generalize tun_sifflags() to netdev_sifflags
  * lib/tun.c: generalize tun_*route() to netdev_*route()
  * lib/tun.c: Generalize tun_{set,add}addr*() functions
  * lib/tun: split generic network device related stuff to lib/netdev
  * lib/netdev.c: Cosmetic changes (coding style / cleanups)
  * ggsn: Don't explicitly use tun_setaddr() API anymore
  * sgsnemu: Convert from tun_setaddr() to tun_addaddr()
  * lib/tun: Remove tun_setaddr() API, as everyone is using tun_addaddr() now
  * Move kernel GTP support from ggsn/ to lib/
  * ggsn: don't use gtp_kernel_tunnel_{add,del}() for userspace tun

  [ Pau Espin Pedrol ]
  * ggsn_vty: Stop using deprecated API vty_install_default
  * contrib/jenkins.sh: Enable Werror in C(PP)FLAGS
  * examples: Add secondary ipv6 google DNS to osmo-ggsn.cfg
  * tun_setaddr6: Fix log typo
  * cosmetic: Reorder tun_addaddr to get rid of decl of tun_setaddr4
  * ggsn.c: Print version of unhandled ip packet
  * Remove unused empty src/Makefile.in
  * tests: Split ipv6 specific tests into a new test group
  * Add support for IPv4v6 End User Addresses
  * contrib: jenkins.sh: Build libgtpnl as dep when building with gtp kernel support
  * cosmetic: sgsnemu.c: Fix trailing whitespace
  * ggsn.c: Improve logging info on link-local ipv6 addr not found
  * tun.c: tun_addaddr: Fix segfault and wrong usage of tun_nlattr
  * Set tun_addaddr ipv agnostic and add support for ipv6
  * ggsn: Add 'ipv6 link-local' vty cmd
  * ggsn_vty.c: Print ipv6 link-local cmd when writing config to file
  * gtp.c: Fix trailing whitespace
  * gtp.c: Determine GTP version from header
  * gtp.c: Log unsupported GTP version number
  * gtp/pdp: Fix trailing whitespace
  * gtp/pdp: Remove unused APIs pdp_ntoeua pdp_euaton
  * gtp.c: gtp_gpdu_ind: Convert ifelse to switch statement
  * gtp.c: gtp_gpdu_ind: Early return to avoid use of uninitialized var
  * gtp/gtp.c: Remove unused function char2ul_t
  * gtp/gtp.c: Mark non exported functions as static
  * gtp/gtp.c: Use uint8_t for version param in static functions
  * ggsn: encaps_tun: Avoid forwarding packet if EUA is unassigned, fix crash
  * ggsn: Validate packet src addr from MS
  * ggsn: Parse PCO_IPCP
  * ggsn: Parse PCO_IPCP for IPv4v6 pdp ctx
  * ggsn: Print all addresses on successful pdp ctx creation
  * ggsn.c: cb_tun_ind: Convert ifelse to switch statement
  * ggsn.c: cb_tun_ind: log dst addr of packet without pdp ctx
  * ggsn.c: cb_tun_ind: Don't drop packets targeting pdp ctx ll addr
  * sgsnemu: Fix bad ptr during context deallocation
  * sgsnemu: listen param is a host, not an interface
  * use osmo_init_logging2

  [ Max ]
  * Log APN and tun names for packets
  * Enable sanitize for CI tests
  * Fix stow-enabled jenkins build failure
  * Add GTP message names

  [ Viktor Tsymbalyuk ]
  * sgsnemu: sgsnemu stopped after recieving "Request accepted" from ggsn
  * sgsnemu: created "pinghost" and "createif" modes for mutual exclusion
  * sgsnemu: fix: no outgoing GTP-U in "createif" mode

  [ Martin Hauke ]
  * build: Remove AC_PROG_CXX, C++ is never used

  [ Stefan Sperling ]
  * remove the -f option from osmo-ggsn.service

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 16:05:27 +0200

osmo-ggsn (1.1.0) unstable; urgency=medium

  * libgtp: pdp.h: Addition of new tx_gpdu_seq struct member member
  * libgtp: pdp.h: add LOGPDPX() helper to public API

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 19:00:23 +0200

osmo-ggsn (1.0.0) unstable; urgency=medium

  * Transition to OsmoGGSN

 -- Harald Welte <laforge@gnumonks.org>  Wed, 06 Sep 2017 12:19:48 +0200

openggsn (0.94.0) UNRELEASED; urgency=medium

  [ Holger Hans Peter Freyther ]
  * Bump version to ease upgrading from Debian SID.
  * Bump libgtp SO version after ABI change.

  [ Harald Welte ]
  * various documentation / README updates
  * improve error logging and propagation
  * endian-safe definition of IP header
  * IPv6 user plane support

 -- Harald Welte <laforge@gnumonks.org>  Sun, 13 Aug 2017 09:34:20 +0200

openggsn (0.92) precise; urgency=medium

  * Release 0.92

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Mon, 30 Nov 2015 14:05:59 +0100

openggsn (0.91+git34) precise; urgency=medium

  * Non-maintainer upload.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Tue, 23 Sep 2014 16:38:32 +0200

openggsn (0.91+git33) precise; urgency=low

  * Fix init script.

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

openggsn (0.91+git33) precise; urgency=low

  * Update package for Ubuntu Precise.

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

openggsn (0.91-2) unstable; urgency=low

  * Switch to source/format (git)

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

openggsn (0.91-1) unstable; urgency=low

  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>

 -- Harald Welte <laforge@gnumonks.org>  Tue, 24 Aug 2010 11:23:40 +0200
