osmo-ggsn (1.10.1) unstable; urgency=medium

  [ Oliver Smith ]
  * debian/libgtp6.shlibs: new file

  [ Vadim Yanitskiy ]
  * lib/icmpv6.h: fix struct icmpv6_{radv_hdr,opt_prefix}
  * gtp/gsn.c: fix 'No newline at end of file'
  * gtp: use OSMO_ASSERT() in gtp_new()

 -- Vadim Yanitskiy <vyanitskiy@sysmocom.de>  Mon, 27 Feb 2023 22:35:47 +0700

osmo-ggsn (1.10.0) unstable; urgency=medium

  [ Max ]
  * Set working directory in systemd service file
  * Ignore .deb build byproducts
  * ctrl: take both address and port from vty config

  [ Pau Espin Pedrol ]
  * cosmetic: gtp: Fix typo in comment
  * Split gsn_t related APIs out of gtp.{c,h}
  * Use rate_ctr for gsn_t available_counters
  * ggsn: Introduce tdef and make it configurable over VTY
  * gtp: Introduce VTY configurable GTP timer X3
  * Fix typos in comments and VTY descriptions

  [ arehbein ]
  * osmo-ggsn: Transition to use of 'telnet_init_default'

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 07 Feb 2023 14:29:48 +0100

osmo-ggsn (1.9.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * tests: in46a_test: Make coverity happy when calling in46a_from_eua
  * vty: Fix cmd 'no echo-interval' doing nothing
  * libgtp: Fix ggsn crash if pdp alloc array is full (PDP_MAX)
  * libgtp: Define retransmit QUEUE_SIZE relative to PDP_MAX (increase)
  * gtp: Use switch statement in gtp_create_pdp_ind()
  * gtp: Log detection of rx duplicate
  * gtp: Small log improvements in gtp_create_pdp_ind()
  * gtp: Specify retrans queue name & seqnum in log lines
  * gtp: Log retrans queue register&free entries
  * gtp: Fix typo in comment
  * pco.h: Fix typo in reference to spec

  [ Vadim Yanitskiy ]
  * tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'

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

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 28 Jun 2022 17:48:22 +0200

osmo-ggsn (1.8.0) unstable; urgency=medium

  [ Oliver Smith ]
  * doc/examples/Makefile.am: add sgsnemu.conf
  * doc/examples/osmo-ggsn-kernel-gtp.cfg: new file
  * doc/manuals: describe GTP-U kernel module
  * gitignore: add ggsn_vty_reference.xml

  [ Harald Welte ]
  * Don't install osmo-ggsn-kernel-gtp.cfg to /etc/osmocom/
  * Don't install sgsnemu.conf to /etc/osmocom/
  * ggsn: Reject PDP CTX ACT for static IP addresses
  * vty: Inform user that static IP addresses are not supported

  [ Pau Espin Pedrol ]
  * gtp: Update teic_confirmed only on resp success
  * gtp: Rework parsing logic of UpdatePdpCtxResponse
  * ggsn: Improve logging on incoming DL data packets
  * gtp: Improve logging of failing pdp ctx resolution from TEI/TID
  * cosmetic: gtpie.c: Fix trailing whitespace
  * gtp: constify pointer arg
  * gtp: Support tx/rx RAN Information Relay message
  * ggsn: Log tun fd write errors
  * ggsn: Fix heap-use-after-free during Recovery without associated PDP
  * cosmetic: configure.ac: Fix tabulation in line
  * Introduce program gtp-echo-responder
  * gtp_echo_responder: report invalid chars present in node-feautres cmdline arg as error

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

osmo-ggsn (1.7.1) unstable; urgency=medium

  [ Harald Welte ]
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * manuals: generate vty reference xml at build time

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 17:31:24 +0100

osmo-ggsn (1.7.0) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * debian/control: change maintainer to the Osmocom team / mailing list

  [ Pau Espin Pedrol ]
  * configure.ac: Fix trailing whitespace
  * doc: Update VTY reference xml file
  * Support setting rt-prio and cpu-affinity mask through VTY
  * contrib/jenkins: Enable parallel make in make distcheck
  * ggsn: generate coredump and exit upon SIGABRT received
  * tests: Explicitly drop category from log
  * tests: Replace deprecated API log_set_print_filename

  [ Keith ]
  * Fix vty PDP lookups by IMSI
  * Prevent Crash in show pdp-context from vty
  * Minor: remove code duplication
  * Use imsi_str2gtp() in sgsnemu
  * sgsnemu: relax check on length of IMSI cmdline arg.
  * GTP: Replace recently introduced imsi_str2gtp()

  [ Harald Welte ]
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * gtp-kernel: Remove duplicate #include section
  * gtp-kernel: don't #include libmnl headers

  [ Oliver Smith ]
  * contrib/jenkins: don't build osmo-gsm-manuals
  * configure.ac: set -std=gnu11
  * apn_start: avoid segfault if missing tun-device
  * .gitignore: ignore debian/libgtp*
  * deb/rpm: build with --enable-gtp-linux

 -- Pau Espin Pedrol <pespin@espeweb.net>  Tue, 23 Feb 2021 13:34:39 +0100

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
