osmo-pcap (0.1.1) unstable; urgency=medium

  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * Require libosmocore 0.11.0

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 13:12:47 +0200

osmo-pcap (0.1.0) unstable; urgency=medium

  [ Harald Welte ]
  * sock_src_init(): Don't freeaddrinfo() undefined src_result
  * Use TCP port numbers for VTY that don't overlap with other Osmocom Software
  * Rename osmo_pcap_{client_server} executables to osmo-pcap-{client,server}
  * Use libosmocore osmo_sock_init2() instead of local implementation
  * client: Move to osmo_sock_init2_ofd()
  * Add support for generating IPIP to osmo-pcap-client
  * debian/control: Fix URLs for homepage, git, gitweb
  * change binary builds URL to network:osmocom as that's more maintained
  * Fix compiler warning about deprecated _BSD_SOURCE

  [ Max ]
  * Add gitreview config
  * Use release helper from libosmocore

  [ Pau Espin Pedrol ]
  * cosmetic: client: rename forward_packet function
  * vty: skip installing cmds now always installed by default
  * client: Properly name main talloc ctx
  * server: Properly name main talloc ctx
  * Drop osmo_init_logging and use osmo_init_logging2
  * osmo_client_send_data: Fix wrong log format
  * configure.ac: Add --enable-werror flag
  * configure.ac: Add --enable-sanitize flag
  * jenkins.sh: enable werror and sanitize configure flags
  * Replace '.' in counter names with ':'
  * Use enum for PKT_LINK_*
  * client: Set snaplen to MAXIMUM_SNAPLEN
  * client: Add pcap snaplen VTY cmd
  * client_send_link: snaplen not needed during allocation
  * server: Improve verification of messages from client
  * server: Add pcap snaplen VTY cmd
  * contrib/jenkins.sh: Update to current osmocom infra
  * debian: Clean up to look like other osmocom projects
  * Install systemd services with autotools
  * Install cfg files with autotools
  * gitignore: Add compile
  * debian: Install osmo_pcap_clean_old in osmo-pcap-server pkg
  * tests/Makefile.am: Fix "./configure && make clean && make"
  * debian/changelog: Mark 0.0.11 as released

  [ Oliver Smith ]
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib: fix makedistcheck with disabled systemd
  * gitignore: fix application names
  * contrib/jenkins.sh: run "make maintainer-clean"

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Jul 2019 19:01:15 +0200

osmo-pcap (0.0.11) unstable; urgency=medium

  * Add "source ip A.B.C.D" option to use specific address.
  * Add osmo-pcap-client-dbg/osmo-pcap-server-dbg package

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Tue, 17 Jan 2017 09:12:52 +0100

osmo-pcap (0.0.10) unstable; urgency=medium

  * New release with new features
  * Allow unauthenticated TLS between client and server
  * Allow a client to connect to multiple servers at the
    same time.
  * Allow the server to forward data through ZeroMQ

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Wed, 09 Nov 2016 02:09:52 +0100

osmo-pcap (0.0.9) unstable; urgency=medium

  * Fix pcap packet format for 64bit clients. 

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Thu, 03 Dec 2015 22:17:19 +0100

osmo-pcap (0.0.8) unstable; urgency=medium

  * Attempt to work with Jumbo frames up to 9000 bytes
  * Fix wording in the server error message
  * Install cron.daily job that can be changed by the user (e.g. max age of the files) 

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Thu, 03 Dec 2015 20:41:24 +0100

osmo-pcap (0.0.7) unstable; urgency=medium

  * gprs: Do not collect BVC FLOW CONTROL / ACK messages

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Thu, 19 Nov 2015 11:13:55 +0100

osmo-pcap (0.0.6) unstable; urgency=medium

  [ Holger Hans Peter Freyther ]
  * debian: Add changelog entry for 0.0.4
  * debian: Add a osmo-pcap-client init script

  [ Sylvain Munaut ]
  * build: Replace deprecated INCLUDES with AM_CPPFLAGS

  [ Holger Hans Peter Freyther ]
  * gprs: Add a custom GPRS filter
  * gprs: Remove left over for counting llc frames

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Thu, 10 Sep 2015 17:11:32 +0200

osmo-pcap (0.0.5) unstable; urgency=low

  * Add init script for the osmo-pcap tool 

 -- Holger Hans Peter Freyther <holger@moiji-mobile.com>  Thu, 10 Sep 2015 17:10:42 +0200

osmo-pcap (0.0.4) unstable; urgency=low

  * New upstream version.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Wed, 07 Nov 2012 10:11:21 +0100

osmo-pcap (0.0.3) unstable; urgency=low

  * New upstream version.

 -- Holger Hans Peter Freyther <holger@freyther.de>  Tue, 06 Nov 2012 23:41:36 +0100

osmo-pcap (0.0.1) unstable; urgency=low

  * Initial Release.

 -- Holger Hans Peter Freyther <zecke@selfish.org>  Wed, 01 Jun 2011 14:51:32 +0200
