osmo-ggsn (1.6.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * cosmetic: Fix comment typo
  * netns: Improve error checking
  * sgsnemu: cmdline: Drop unused function cmdline_parser_params_create()
  * sgsnemu: Pass array of in64_addr to in46a_from_eua()
  * sgsnemu: Rename sgsnemu's libgtp cb_conf
  * sgsnemu: Set its default loglevel category to INFO
  * Move icmpv6 and checksum files from ggsn/ dir to lib/
  * netdev_addaddr6: Use prefixlen arg
  * sgsnemu: Avoid adding extra autogenerated local link ipv6 addr to tun iface
  * sgsnemu: Fix ping transmitted statistics output
  * cosmetic: icmpv6.c: fix typo in comment
  * icmpv6.c: Mark internal function as static
  * sgsnemu: Get rid of duplicated options.destaddr
  * sgsnemu: Get rid of duplicated options.net
  * sgsnemu: tun_addaddr: Don't set local addr as dstaddr
  * icmpv6.c: Move code generating ipv6 hdr to its own function
  * Rename netdev_*route to end in route4
  * sgsnemu: Fix build/run against linux < 4.11 (no sysctl addr_gen_mode support)
  * sgsnemu: Handle IPv6 SLAAC in tun iface manually
  * sgsnemu: Implement ping on IPv6 APNs
  * sgsnemu: Fix assumption ipv6 Interface-Identifier of public addr == announced Prefix
  * gtp: queue_test: Fix printf gcc warn under ARM

  [ Andreas Schultz ]
  * add Linux network namespace support for TUN device

  [ Vadim Yanitskiy ]
  * lib/netns: fix open_ns(): return fd from open()

  [ Philipp Maier ]
  * doc: do not use random ip address for dns in default conf
  * doc: use 127.0.0.2 instead of 127.0.0.6 as bind ip.
  * debug: use LOGL_NOTICE instead of LOGL_DEBUG

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer

  [ Harald Welte ]
  * lib/netns.c: Add comments to the code, including doxygen API docs
  * lib/netns: OSMO_ASSERT() if user doesn't call init_netns()
  * lib/netns: Fix up error paths
  * example config: use RFC1918 addresses for GGSN pools

  [ Dmitri Kalashnik ]
  * sgsnemu: use real tun device name after the device is up.

  [ Oliver Smith ]
  * osmo-ggsn.spec.in: remove
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in

 -- Harald Welte <laforge@osmocom.org>  Thu, 13 Aug 2020 12:26:20 +0200

osmo-ggsn (1.5.0) unstable; urgency=medium

  [ Jan Engelhardt ]
  * build: switch AC_CANONICAL_TARGET for AC_CANONICAL_HOST

  [ Pau Espin Pedrol ]
  * libgtp: Remove packets in tx queue belonging pdp being freed
  * libgtp: announce pdp ctx deletion upon CreatePdpCtx being rejected
  * Introduce in46a_is_v{4,6}() helpers
  * ggsn: Move PCO handling code into its own file
  * in46_addr: Improve in46a_ntop documentation
  * ggsn_vty.c: Fix wrong use of in46a_from_eua, print IPv6 euas
  * ggsn: Split application lifecycle related code into ggsn_main.c
  * Move pdp_get_peer_ipv() to lib/util.*
  * gtp-kernel.c: Fix wrong use of in46a_from_eua, print IPv6 euas
  * Introduce LOGTUN log helper
  * ggsn_vty.c: Avoid printing duplicates for pdp context with v4v6 EUAs
  * pdp: constify param in pdp_count_secondary()
  * ggsn_vty.c: Improve output of VTY show pdp-context
  * doc: Update vty reference xml file
  * libgtp: Introduce cb_recovery3
  * ggsn: Implement echo req/resp and recovery
  * cosmetic: fix formatting in if line
  * gtp: Log msg retransmits and timeouts
  * cosmetic: gtp: Drop commented out code calling pdp_freepdp()
  * cosmetic: gtp: Improve documentation of gtp_delete_context_req2()
  * ggsn: rx DeletePdpReq confirmation: Improve documentation and use gtp_freepdp()
  * gtp: Manage queue timers internally
  * ggsn, sgsnemu: Drop use of no-op deprecated gtp_retrans* APIs

  [ Vadim Yanitskiy ]
  * gtp_update_pdp_ind(): fix NULL-pointer dereference
  * gtp_error_ind_conf(): fix: guard against an unknown GTP version
  * gtp/gtp.c: cosmetic: use get_tid() where we need TID
  * manuals/configuration.adoc: fix Network Address without prefix length
  * manuals/configuration.adoc: fix IPv4 address mismatch in <<ggsn_no_root>>
  * contrib/systemd: add systemd-networkd examples from manuals

  [ Harald Welte ]
  * sgsnemu: Fix null-pointer format string argument
  * manual: Fix copy+paste error

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 02 Jan 2020 20:39:39 +0100

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
