# ChangeLog for net-misc/lldpd
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/net-misc/lldpd/ChangeLog,v 1.28 2015/02/28 21:54:26 bircoph Exp $

  28 Feb 2015; Andrew Savchenko <bircoph@gentoo.org> metadata.xml:
  seccomp USE flag is now global, removing from metadata

*lldpd-0.7.13 (31 Jan 2015)

  31 Jan 2015; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.13.ebuild,
  -files/lldpd-0.7.9-dont-fork-after-making-pidfile.patch,
  -files/lldpd-0.7.9-seccomp-add-syscalls.patch, -files/lldpd-initd-3,
  -lldpd-0.7.9-r3.ebuild, metadata.xml:
  Version bump, clean out old version.

  26 Jan 2015; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.11-r3.ebuild:
  Stable for x86, wrt bug #535606

  09 Jan 2015; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.11-r3.ebuild:
  Stable for amd64, wrt bug #535606

*lldpd-0.7.11-r3 (29 Oct 2014)

  29 Oct 2014; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.7.11-r1.ebuild,
  -lldpd-0.7.11-r2.ebuild, +lldpd-0.7.11-r3.ebuild,
  files/lldpd-0.7.11-bash-completion-dir.patch:
  Revision bump, don't install extra bash-completion file (bug #526308). Remove
  old.

*lldpd-0.7.11-r2 (14 Oct 2014)

  14 Oct 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.11-r2.ebuild,
  +files/lldpd-0.7.11-bash-completion-dir.patch:
  Revision bump, make sure the bash-completion script installs to the right
  place.

*lldpd-0.7.11-r1 (13 Oct 2014)

  13 Oct 2014; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.7.1.ebuild,
  -lldpd-0.7.6.ebuild, -lldpd-0.7.7.ebuild, -lldpd-0.7.10.ebuild,
  -lldpd-0.7.11.ebuild, +lldpd-0.7.11-r1.ebuild,
  -files/lldpd-0.7.6-include-unistd.patch,
  -files/lldpd-0.7.7-fix-readline-wrapper.patch,
  -files/lldpd-0.7.10-completions.patch,
  -files/lldpd-0.7.10-handle-read-errors.patch,
  -files/lldpd-0.7.10-only-use-physical-for-chassis-id.patch,
  -files/lldpd-0.7.10-zsh-completion-dir.patch, -files/lldpd-initd-1,
  +files/lldpd-initd-4:
  Revision bump, make sure to pass LLDPD_OPTS to the command line (bug
  #525190). Remove old.

  10 Oct 2014; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.9-r3.ebuild:
  Stable for x86, wrt bug #522704

*lldpd-0.7.11 (09 Oct 2014)

  09 Oct 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.11.ebuild,
  +files/lldpd-0.7.11-zsh-completion-dir.patch:
  Version bump.

  09 Oct 2014; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.9-r3.ebuild:
  Stable for amd64, wrt bug #522704

*lldpd-0.7.10 (22 Sep 2014)

  22 Sep 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.10.ebuild,
  +files/lldpd-0.7.10-completions.patch,
  +files/lldpd-0.7.10-handle-read-errors.patch,
  +files/lldpd-0.7.10-only-use-physical-for-chassis-id.patch,
  +files/lldpd-0.7.10-zsh-completion-dir.patch, metadata.xml:
  Version bump, add json-c USE flag and rename json to jansson. Import bash and
  zsh completions from upstream git. Import some bugfix patches from upstream.

*lldpd-0.7.9-r3 (08 Jul 2014)

  08 Jul 2014; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.7.9-r2.ebuild,
  +lldpd-0.7.9-r3.ebuild, -files/lldpd-initd-2, +files/lldpd-initd-3:
  Another revision bump, this one to fix the init script so the rundir gets
  created properly.

*lldpd-0.7.9-r2 (08 Jul 2014)

  08 Jul 2014; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.7.9.ebuild,
  -lldpd-0.7.9-r1.ebuild, +lldpd-0.7.9-r2.ebuild,
  +files/lldpd-0.7.9-seccomp-add-syscalls.patch:
  Revision bump, add a patch to whitelist some more syscalls in seccomp and
  remove the pidfile patch.

*lldpd-0.7.9-r1 (07 Jul 2014)

  07 Jul 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.9-r1.ebuild,
  +files/lldpd-0.7.9-dont-fork-after-making-pidfile.patch,
  +files/lldpd-initd-2:
  Revision bump, add patch to make pidfile creation work properly with
  privilege separation. Rework init script to be much more robust.

*lldpd-0.7.9 (01 Jul 2014)

  01 Jul 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.9.ebuild,
  +files/lldpd.service:
  Version bump. Add systemd unit (bug #515644).

  03 Mar 2014; Pacho Ramos <pacho@gentoo.org> lldpd-0.7.6.ebuild:
  amd64 stable, bug #495876

  24 Feb 2014; Pawel Hajdan jr <phajdan.jr@gentoo.org> lldpd-0.7.6.ebuild:
  x86 stable wrt bug #495876

*lldpd-0.7.7 (21 Feb 2014)

  21 Feb 2014; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.7.ebuild,
  +files/lldpd-0.7.7-fix-readline-wrapper.patch, metadata.xml:
  Version bump (bug #501994), add seccomp USE flag.

*lldpd-0.7.6 (05 Aug 2013)

  05 Aug 2013; Patrick McLean <chutz@gentoo.org> +lldpd-0.7.6.ebuild,
  +files/lldpd-0.7.6-include-unistd.patch:
  Version bump. Add static-libs USE flag (bug #461724), remove unnecessary .la
  files.

  28 Mar 2013; Patrick McLean <chutzpah@gentoo.org> -lldpd-0.5.6.ebuild,
  -lldpd-0.5.7.ebuild, lldpd-0.7.1.ebuild:
  HOMEPAGE update (bug #463634). Clean out old versions.

  14 Mar 2013; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.1.ebuild:
  Stable for x86, wrt bug #461672

  14 Mar 2013; Agostino Sarubbo <ago@gentoo.org> lldpd-0.7.1.ebuild:
  Stable for amd64, wrt bug #461672

  16 Jan 2013; Patrick McLean <chutzpah@gentoo.org> lldpd-0.7.1.ebuild:
  Don't try to build docs unless the doc USE flag is enabled

*lldpd-0.7.1 (15 Jan 2013)

  15 Jan 2013; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.7.1.ebuild,
  metadata.xml:
  Version bump (bug #452024). Add USE flags for building doxygen docs, and new
  USE flags for JSON and readline support.

*lldpd-0.5.7 (16 Oct 2012)

  16 Oct 2012; Patrick McLean <chutzpah@gentoo.org> +lldpd-0.5.7.ebuild,
  metadata.xml:
  Version bump (bug #407867). Add USE flags for extra protocols supported by
  lldpd.

  08 Oct 2012; Diego E. Pettenò <flameeyes@gentoo.org> lldpd-0.5.6.ebuild:
  Fix dependency on net-snmp as the new ebuilds don't have an extensible USE
  flag any longer; also inherit user eclass for enewuser/enewgroup.

  26 Feb 2012; Ulrich Müller <ulm@gentoo.org> lldpd-0.5.6.ebuild:
  Fix LICENSE, lldpd is the same as ISC, bug 403973.

*lldpd-0.5.6 (09 Feb 2012)

  09 Feb 2012; Patrick McLean <chutzpah@gentoo.org> +files/lldpd-confd-1,
  +files/lldpd-initd-1, +lldpd-0.5.6.ebuild, +metadata.xml:
  added new package net-misc/lldpd
