Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock the bird package because the version in testing has some 
serious bugs about routes propagation, better explained in the attached 
diff.

This was discussed in #928141, where one of the upstream maintainers 
recommended that 1.6.6 should get into testing.

The version currently in unstable has been in unstable for three months 
without any issues, and is the one that I am using in production (while 
the one currently in testing was toxic in my environment).

I am not the bird maintainer, but Ondřej looks busy and I am sure that 
he will not mind me requesting this.

I am attaching a debdiff from which I removed the generated files and 
some documentation/example changes not relevant for the Debian package.

unblock bird/1.6.6-1

-- 
ciao,
Marco
diff -Nru bird-1.6.5/ChangeLog bird-1.6.6/ChangeLog
--- bird-1.6.5/ChangeLog	2019-01-07 16:29:04.000000000 +0100
+++ bird-1.6.6/ChangeLog	2019-03-01 00:13:32.000000000 +0100
@@ -1,3 +1,86 @@
+commit b5d1903bf6ce454716e97828e6e4062bf17ac000
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Tue Feb 26 18:10:04 2019 +0100
+
+    NEWS and version update
+
+commit 2e7ee1c9d3158603c3b01bbef8559092ae46ae84
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Fri Feb 22 02:33:01 2019 +0100
+
+    Nest: Do not compare rte.flags during rte_update()
+    
+    Route flags are mosty internal state of rtable, they are not significant
+    to whether a route has changed. With the old code, all routes received as
+    a part of enhanced route refresh are always re-announced to other peers
+    due to change in REF_STALE.
+
+commit 797969983d38149f4a0ea1f960becfac88fc2b8e
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Tue Feb 19 18:32:45 2019 +0100
+
+    Doc: Detect SP/OpenSP automatically
+
+commit b3fceeba30bd6a685de0aa17dbe6bcfd77d1ca29
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Tue Feb 19 16:21:52 2019 +0100
+
+    Nest: Prevent withdraws from propagation back to source protocol (for accepted mode)
+    
+    Update for one of previous patches, handles the the issue for
+    first-accepted mode of route propagation.
+
+commit 2dd9800ab51a309add1c56aa9659c41f30481299
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Tue Feb 19 16:00:30 2019 +0100
+
+    Nest: Improve export counter handling
+    
+    One of previous workarounds for phantom route avoidance breaks export
+    counters by expanding sending of spurious withdraws, which are send when
+    we are not sure whether we have advertised that routes in the past.
+    If not, then export counter is decreased, but it was not increased
+    before, so it overflows under zero.
+    
+    The patch fixes that by sending spurious withdraws, but not counting them
+    on export counter. That may lead to error in the other direction, but
+    that happens only as a race condition (i.e., in normal operation filters
+    return proper values about old route export state).
+
+commit b4438e40efa498325f38f0bf4681ecb2bbba4da7
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Wed Jan 30 17:03:30 2019 +0100
+
+    Nest: Prevent withdraws from propagation back to source protocol
+    
+    The earlier fix loosen conditions for not running filters on old
+    route when deciding about route propagation to a protocol to avoid
+    issues with ghost routes in some race conditions.
+    
+    Unfortunately, the fix also caused back-propagation of withdraws. For
+    regular updates, back-propagation is prevented in import_control hooks,
+    but these are not called on withdraws. For them, import_control hooks
+    are called on old routes instead, changing (old, NULL) notification
+    to (NULL, NULL), which is ignored. By not calling export processing
+    in some cases, the withdraw is not ignored and is back-propagated.
+    
+    This patch fixes that by contract conditions so the earlier fix is not
+    applied to back-propagated updates.
+
+commit ccb37330d062712935b3f3b9c236322d20c177f6
+Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
+Date:   Sat Jan 26 21:03:36 2019 +0100
+
+    Doc: Add documentation for OSPF retransmit delay option
+    
+    Thanks to Igor Podlesny for notification.
+
+commit e99e7d1c2de3a9b1a737735be2936dadf6ed1ab4
+Author: Ondrej Filip <fe...@network.cz>
+Date:   Mon Jan 7 12:26:21 2019 +0100
+
+    Added documentation for 'disable after cease'
+
 commit ef8974b7ca7595bc2685b222aa4822c13349a2e1
 Author: Ondrej Zajicek (work) <santi...@crfreenet.org>
 Date:   Sat Jan 5 00:37:31 2019 +0100
diff -Nru bird-1.6.5/debian/changelog bird-1.6.6/debian/changelog
--- bird-1.6.5/debian/changelog	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/changelog	2019-03-03 08:56:10.000000000 +0100
@@ -1,3 +1,9 @@
+bird (1.6.6-1) unstable; urgency=medium
+
+  * New upstream version 1.6.6
+
+ -- Ondřej Surý <ond...@debian.org>  Sun, 03 Mar 2019 07:56:10 +0000
+
 bird (1.6.5-1) unstable; urgency=medium
 
   * New upstream version 1.6.5
@@ -187,7 +193,7 @@
 bird (1.4.2-1) unstable; urgency=medium
 
   * New upstream version 1.4.2
-   o Important bugfix in BFD.  
+   o Important bugfix in BFD.
   * Build documentation and install it into bird-doc package (Closes: #664464)
 
  -- Ondřej Surý <ond...@debian.org>  Thu, 03 Apr 2014 08:40:29 +0200
@@ -668,7 +674,7 @@
 
 bird (1.0.4-5) unstable; urgency=low
 
-  * Fix changed option parsing with flex 
+  * Fix changed option parsing with flex
     Closes: Bug#191186
 
  -- Florian Lohoff <f...@rfc822.org>  Tue, 29 Apr 2003 05:39:53 +0000
@@ -728,7 +734,7 @@
 
 bird (1.0.4-1) unstable; urgency=low
 
-  * New upstream release 
+  * New upstream release
 
  -- Florian Lohoff <f...@rfc822.org>  Wed,  6 Sep 2000 18:14:01 +0200
 
diff -Nru bird-1.6.5/debian/control bird-1.6.6/debian/control
--- bird-1.6.5/debian/control	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/control	2019-03-03 08:56:10.000000000 +0100
@@ -1,6 +1,6 @@
 Source: bird
 Section: net
-Priority: extra
+Priority: optional
 Build-Depends: autotools-dev,
                bison,
                debhelper (>= 9~),
@@ -45,7 +45,6 @@
 Package: bird-doc
 Architecture: all
 Section: doc
-Priority: optional
 Depends: ${misc:Depends}
 Description: Internet Routing Daemon - documentation
  BIRD is an Internet routing daemon with full support for all the major
diff -Nru bird-1.6.5/debian/copyright bird-1.6.6/debian/copyright
--- bird-1.6.5/debian/copyright	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/copyright	2019-03-03 08:56:10.000000000 +0100
@@ -1,4 +1,4 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: bird
 Upstream-Contact: bird-us...@bird.network.cz
 Source: http://bird.network.cz
diff -Nru bird-1.6.5/debian/patches/0001-Link-using-ld.patch bird-1.6.6/debian/patches/0001-Link-using-ld.patch
--- bird-1.6.5/debian/patches/0001-Link-using-ld.patch	1970-01-01 01:00:00.000000000 +0100
+++ bird-1.6.6/debian/patches/0001-Link-using-ld.patch	2019-03-03 08:56:10.000000000 +0100
@@ -0,0 +1,23 @@
+From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= <ond...@debian.org>
+Date: Sun, 18 Sep 2016 11:26:45 +0200
+Subject: Link using ld
+
+---
+ tools/Rules.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/Rules.in b/tools/Rules.in
+index d177ed1..bf5a404 100644
+--- a/tools/Rules.in
++++ b/tools/Rules.in
+@@ -69,8 +69,8 @@ subdir: all.o
+ all.o: $(objs)
+ #       $(LD) -r -o $@ $^
+ #	Changed to $(CC) because $(LD) has problems with crosscompiling
+-	@echo LD -r -o $@ $^
+-	@$(CC) -nostdlib -r -o $@ $^
++	@echo LD $(CFLAGS) -r -o $@ $^
++	@$(CC) $(CFLAGS) -nostdlib -r -o $@ $^
+ 
+ endif
+ 
diff -Nru bird-1.6.5/debian/patches/0002-Link-using-ld.patch bird-1.6.6/debian/patches/0002-Link-using-ld.patch
--- bird-1.6.5/debian/patches/0002-Link-using-ld.patch	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/patches/0002-Link-using-ld.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= <ond...@debian.org>
-Date: Sun, 18 Sep 2016 11:26:45 +0200
-Subject: Link using ld
-
----
- tools/Rules.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tools/Rules.in b/tools/Rules.in
-index d177ed1..bf5a404 100644
---- a/tools/Rules.in
-+++ b/tools/Rules.in
-@@ -69,8 +69,8 @@ subdir: all.o
- all.o: $(objs)
- #       $(LD) -r -o $@ $^
- #	Changed to $(CC) because $(LD) has problems with crosscompiling
--	@echo LD -r -o $@ $^
--	@$(CC) -nostdlib -r -o $@ $^
-+	@echo LD $(CFLAGS) -r -o $@ $^
-+	@$(CC) $(CFLAGS) -nostdlib -r -o $@ $^
- 
- endif
- 
diff -Nru bird-1.6.5/debian/patches/0002-Split-example-config-files.patch bird-1.6.6/debian/patches/0002-Split-example-config-files.patch
--- bird-1.6.5/debian/patches/0002-Split-example-config-files.patch	1970-01-01 01:00:00.000000000 +0100
+++ bird-1.6.6/debian/patches/0002-Split-example-config-files.patch	2019-03-03 08:56:10.000000000 +0100
@@ -0,0 +1,21 @@
+From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= <ond...@debian.org>
+Date: Sun, 18 Sep 2016 11:26:45 +0200
+Subject: Split example config files
+
+---
+ doc/bird.conf.example | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/bird.conf.example b/doc/bird.conf.example
+index bbfe002..44dfc53 100644
+--- a/doc/bird.conf.example
++++ b/doc/bird.conf.example
+@@ -10,7 +10,7 @@
+ #log "tmp" all;
+ 
+ # Override router ID
+-#router id 198.51.100.1;
++router id 198.51.100.1;
+ 
+ # You can define your own symbols...
+ #define xyzzy = (120+10);
diff -Nru bird-1.6.5/debian/patches/0003-Split-example-config-files.patch bird-1.6.6/debian/patches/0003-Split-example-config-files.patch
--- bird-1.6.5/debian/patches/0003-Split-example-config-files.patch	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/patches/0003-Split-example-config-files.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= <ond...@debian.org>
-Date: Sun, 18 Sep 2016 11:26:45 +0200
-Subject: Split example config files
-
----
- doc/bird.conf.example | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/bird.conf.example b/doc/bird.conf.example
-index bbfe002..44dfc53 100644
---- a/doc/bird.conf.example
-+++ b/doc/bird.conf.example
-@@ -10,7 +10,7 @@
- #log "tmp" all;
- 
- # Override router ID
--#router id 198.51.100.1;
-+router id 198.51.100.1;
- 
- # You can define your own symbols...
- #define xyzzy = (120+10);
diff -Nru bird-1.6.5/debian/patches/series bird-1.6.6/debian/patches/series
--- bird-1.6.5/debian/patches/series	2019-01-15 09:56:09.000000000 +0100
+++ bird-1.6.6/debian/patches/series	2019-03-03 08:56:10.000000000 +0100
@@ -1,2 +1,2 @@
-0002-Link-using-ld.patch
-0003-Split-example-config-files.patch
+0001-Link-using-ld.patch
+0002-Split-example-config-files.patch
diff -Nru bird-1.6.5/doc/bird.sgml bird-1.6.6/doc/bird.sgml
--- bird-1.6.5/doc/bird.sgml	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/doc/bird.sgml	2019-03-01 00:13:15.000000000 +0100
@@ -2186,6 +2186,19 @@
 	disable the instance automatically and wait for an administrator to fix
 	the problem manually. Default: off.
 
+        <tag><label id="bgp-disable-after-cease">disable after cease <m/switch/|<m/set-of-flags/</tag>
+        When a Cease notification is received, disable the instance
+        automatically and wait for an administrator to fix the problem manually.
+        When used with <m/switch/ argument, it means handle every Cease subtype
+        with the exception of <cf/connection collision/. Default: off.
+
+        The <m/set-of-flags/ allows to narrow down relevant Cease subtypes. The
+        syntax is <cf>{<m/flag/ [, <m/.../] }</cf>, where flags are: <cf/cease/,
+        <cf/prefix limit hit/, <cf/administrative shutdown/,
+        <cf/peer deconfigured/, <cf/administrative reset/,
+        <cf/connection rejected/, <cf/configuration change/,
+        <cf/connection collision/, <cf/out of resources/.
+
 	<tag><label id="bgp-hold-time">hold time <m/number/</tag>
 	Time in seconds to wait for a Keepalive message from the other side
 	before considering the connection stale. Default: depends on agreement
@@ -3038,6 +3051,11 @@
 	Specifies interval in seconds between retransmissions of unacknowledged
 	updates. Default value is 5.
 
+	<tag><label id="ospf-transmit-delay">transmit delay <M>num</M></tag>
+	Specifies estimated transmission delay of link state updates send over
+	the interface. The value is added to LSA age of LSAs propagated through
+	it. Default value is 1.
+
 	<tag><label id="ospf-priority">priority <M>num</M></tag>
 	On every multiple access network (e.g., the Ethernet) Designated Router
 	and Backup Designated router are elected. These routers have some special
diff -Nru bird-1.6.5/doc/sgml2html bird-1.6.6/doc/sgml2html
--- bird-1.6.5/doc/sgml2html	2019-01-07 16:15:00.000000000 +0100
+++ bird-1.6.6/doc/sgml2html	2019-03-01 00:10:05.000000000 +0100
@@ -28,12 +28,16 @@
 use lib "/usr/lib/perl5";
 use lib "/usr/share/perl5";
 $progs = {
-  "NSGMLS" => "/usr/bin/onsgmls",
+  "NSGMLS" => "/usr/bin/nsgmls",
   "SGMLSASP" => "/usr/bin/sgmlsasp",
   "GROFF" => "/usr/bin/groff",
   "GROFFMACRO" => "-ms",
   "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
 };
+
+if (! -x $progs->{"NSGMLS"})
+  { $progs->{"NSGMLS"} = "/usr/bin/onsgmls"; }
+
 $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog" .
   (defined $ENV{SGML_CATALOG_FILES} ? ":$ENV{SGML_CATALOG_FILES}" : "");
 
diff -Nru bird-1.6.5/doc/sgml2latex bird-1.6.6/doc/sgml2latex
--- bird-1.6.5/doc/sgml2latex	2019-01-07 16:15:12.000000000 +0100
+++ bird-1.6.6/doc/sgml2latex	2019-03-01 00:10:05.000000000 +0100
@@ -28,12 +28,16 @@
 use lib "/usr/lib/perl5";
 use lib "/usr/share/perl5";
 $progs = {
-  "NSGMLS" => "/usr/bin/onsgmls",
+  "NSGMLS" => "/usr/bin/nsgmls",
   "SGMLSASP" => "/usr/bin/sgmlsasp",
   "GROFF" => "/usr/bin/groff",
   "GROFFMACRO" => "-ms",
   "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
 };
+
+if (! -x $progs->{"NSGMLS"})
+  { $progs->{"NSGMLS"} = "/usr/bin/onsgmls"; }
+
 $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog" .
   (defined $ENV{SGML_CATALOG_FILES} ? ":$ENV{SGML_CATALOG_FILES}" : "");
 
diff -Nru bird-1.6.5/doc/sgml2txt bird-1.6.6/doc/sgml2txt
--- bird-1.6.5/doc/sgml2txt	2019-01-07 16:15:29.000000000 +0100
+++ bird-1.6.6/doc/sgml2txt	2019-03-01 00:10:05.000000000 +0100
@@ -28,12 +28,16 @@
 use lib "/usr/lib/perl5";
 use lib "/usr/share/perl5";
 $progs = {
-  "NSGMLS" => "/usr/bin/onsgmls",
+  "NSGMLS" => "/usr/bin/nsgmls",
   "SGMLSASP" => "/usr/bin/sgmlsasp",
   "GROFF" => "/usr/bin/groff",
   "GROFFMACRO" => "-ms",
   "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
 };
+
+if (! -x $progs->{"NSGMLS"})
+  { $progs->{"NSGMLS"} = "/usr/bin/onsgmls"; }
+
 $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog" .
   (defined $ENV{SGML_CATALOG_FILES} ? ":$ENV{SGML_CATALOG_FILES}" : "");
 
diff -Nru bird-1.6.5/INSTALL bird-1.6.6/INSTALL
--- bird-1.6.5/INSTALL	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/INSTALL	2019-03-01 00:13:15.000000000 +0100
@@ -40,8 +40,3 @@
 
  - Linuxdoc-Tools
  - LaTeX
-
-Note that build scripts for BIRD documentation expects 'nsgmls' from
-James Clark's SP suite, while modern distributions use 'onsgmls' from
-OpenSP suite. It is possible to build BIRD documentation with OpenSP
-tools, but it requires manually tweaking paths in doc/sgml2* scripts.
diff -Nru bird-1.6.5/misc/bird.init bird-1.6.6/misc/bird.init
--- bird-1.6.5/misc/bird.init	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/misc/bird.init	1970-01-01 01:00:00.000000000 +0100
@@ -1,97 +0,0 @@
-#! /bin/sh
-#
-# bird         Starts the Internet Routing Daemon.
-#
-# Author:      Ondrej Feela Filip, <fe...@network.cz>
-#
-# chkconfig: - 32 75
-# description: Internet routing daemon supporting IPv4 routing protocols:
-#              BGP4, RIPv2 and OSPFv2.
-#
-# processname: bird
-# config: /etc/bird.conf
-
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-[ -f /etc/sysconfig/network ] || exit 0
-
-. /etc/sysconfig/network
-
-BIRD4="yes"
-BIRD6="yes"
-
-BIRD4ARGS=
-BIRD6ARGS=
-
-[ -f /etc/bird.conf ] || BIRD4="no"
-[ -f /usr/sbin/bird ] || BIRD4="no"
-[ "${NETWORKING}" = "yes" ] || BIRD4="no"
-
-[ -f /etc/bird6.conf ] || BIRD6="no"
-[ -f /usr/sbin/bird6 ] || BIRD6="no"
-[ "${NETWORKING_IPV6}" = "yes" ] || BIRD6="no"
-
-[ -e /etc/sysconfig/bird ] && . /etc/sysconfig/bird
-
-RETVAL=0
-
-# See how we were called.
-case "$1" in
-  start)
-	if [ "$BIRD4" = "yes" ]
-	then
-		echo -n "Starting BIRD for IPv4: "
-		daemon bird ${BIRD4ARGS}
-		RETVAL=$?
-		echo
-		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/bird
-	fi
-	if [ "$BIRD6" = "yes" ]
-	then
-		echo -n "Starting BIRD for IPv6: "
-		daemon bird6 ${BIRD6ARGS}
-		RETVAL=$?
-		echo
-		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/bird6
-	fi
-	;;
-  stop)
-	echo -n "Stopping BIRD for IPv4: "
-	killproc bird
-	RETVAL=$?
-	echo
-	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/bird
-
-	echo -n "Stopping BIRD for IPv6: "
-	killproc bird6
-	RETVAL=$?
-	echo
-	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/bird6
-	;;
-  status)
-	status bird
-	status bird6
-	RETVAL=$?
-	;;
-  restart)
-  	$0 stop
-	$0 start
-	RETVAL=$?
-	;;
-  reload)
-	killproc bird -HUP
- 	RETVAL=$?
-	echo
-	echo -n "Reloading BIRD for IPv6: "
-	killproc bird6 -HUP
-	RETVAL=$?
-	echo
-	;;
-  *)
-	echo "Usage: bird.init {start|stop|status|restart|reload}"
-	exit 1
-esac
-
-exit $RETVAL
diff -Nru bird-1.6.5/misc/bird.spec bird-1.6.6/misc/bird.spec
--- bird-1.6.5/misc/bird.spec	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/misc/bird.spec	1970-01-01 01:00:00.000000000 +0100
@@ -1,55 +0,0 @@
-Summary: BIRD Internet Routing Daemon
-Name: bird
-Version: 1.6.5
-Release: 1
-Copyright: GPL
-Group: Networking/Daemons
-Source: ftp://bird.network.cz/pub/bird/bird-%{version}.tar.gz
-Source1: bird.init
-Source2: birdc6
-Buildroot: /var/tmp/bird-root
-Url: http://bird.network.cz
-Prereq: /sbin/chkconfig
-BuildRequires: flex bison readline-devel ncurses-devel
-
-%description
-BIRD is dynamic routing daemon supporting IPv4 and IPv6 versions of routing
-protocols BGP, RIP and OSPF.
-
-%prep
-%setup -n bird-%{version}
-
-%build
-./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-ipv6
-make
-mv bird bird6
-make clean
-./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
-make
-
-
-%install
-rm -rf $RPM_BUILD_ROOT/*
-make install prefix=$RPM_BUILD_ROOT/usr sysconfdir=$RPM_BUILD_ROOT/etc localstatedir=$RPM_BUILD_ROOT/var
-install bird6 $RPM_BUILD_ROOT/usr/sbin
-
-cd $RPM_BUILD_ROOT
-install -d etc/rc.d/init.d
-install $RPM_SOURCE_DIR/bird.init etc/rc.d/init.d/bird
-install $RPM_SOURCE_DIR/birdc6 usr/sbin/birdc6
-
-%post
-/sbin/ldconfig
-/sbin/chkconfig --add bird
-
-%preun
-if [ $1 = 0 ] ; then
-        /sbin/chkconfig --del bird
-fi
-
-%files
-%attr(755,root,root) /usr/sbin/bird
-%attr(755,root,root) /usr/sbin/bird6
-%attr(755,root,root) /usr/sbin/birdc
-%attr(755,root,root) /usr/sbin/birdc6
-%attr(755,root,root) /etc/rc.d/init.d/bird
diff -Nru bird-1.6.5/misc/cisco2list bird-1.6.6/misc/cisco2list
--- bird-1.6.5/misc/cisco2list	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/misc/cisco2list	1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-#!/usr/bin/perl
-#
-#  Convert Cisco routing table listing to list of prefixes
-#
-
-$loc = ($ARGV[0] eq "-l");	# Print only local prefixes
-
-while (<STDIN>) {
-	($loc ? /^[OR]\s/ : /^B\s/) || next;
-	/^[ORB]( E[12])?\s+(\d+\.\d+\.\d+\.\d+)(\s|\/\d+\s)/ || die "Cannot parse $_";
-	$net = $2;
-	$len = $3;
-	if ($len =~ /^\s*$/) {
-		# Magic rule :)
-		$len = ($net =~ /\.0$/) ? 24 : 32;
-	}
-	$len =~ s/^\///;
-	$net =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
-	printf "%02x%02x%02x%02x/%d\n", $1, $2, $3, $4, $len;
-}
diff -Nru bird-1.6.5/nest/rt-table.c bird-1.6.6/nest/rt-table.c
--- bird-1.6.5/nest/rt-table.c	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/nest/rt-table.c	2019-03-01 00:13:15.000000000 +0100
@@ -426,34 +426,48 @@
    * reconfiguration and the end of refeed - if a newly filtered
    * route disappears during this period, proper withdraw is not
    * sent (because old would be also filtered) and the route is
-   * not refeeded (because it disappeared before that). Therefore,
-   * we also do not try to run the filter on old routes that are
-   * older than the last filter change.
+   * not refeeded (because it disappeared before that). This is
+   * handled below as a special case.
    */
 
   if (new)
     new = export_filter(ah, new, &new_free, &tmpa, 0);
 
-  if (old && !(refeed || (old->lastmod <= ah->last_out_filter_change)))
+  if (old && !refeed)
     old = export_filter(ah, old, &old_free, NULL, 1);
 
   if (!new && !old)
   {
     /*
      * As mentioned above, 'old' value may be incorrect in some race conditions.
-     * We generally ignore it with the exception of withdraw to pipe protocol.
-     * In that case we rather propagate unfiltered withdraws regardless of
-     * export filters to ensure that when a protocol is flushed, its routes are
-     * removed from all tables. Possible spurious unfiltered withdraws are not
-     * problem here as they are ignored if there is no corresponding route at
-     * the other end of the pipe. We directly call rt_notify() hook instead of
+     * We generally ignore it with two exceptions:
+     *
+     * First, withdraw to pipe protocol. In that case we rather propagate
+     * unfiltered withdraws regardless of export filters to ensure that when a
+     * protocol is flushed, its routes are removed from all tables. Possible
+     * spurious unfiltered withdraws are not problem here as they are ignored if
+     * there is no corresponding route at the other end of the pipe.
+     *
+     * Second, recent filter change. If old route is older than filter change,
+     * then it was previously evaluated by a different filter and we do not know
+     * whether it was really propagated. In that case we rather send spurious
+     * withdraw than do nothing and possibly cause phantom routes.
+     *
+     * In both cases wqe directly call rt_notify() hook instead of
      * do_rt_notify() to avoid logging and stat counters.
      */
 
+    int pipe_withdraw = 0, filter_change = 0;
 #ifdef CONFIG_PIPE
-    if ((p->proto == &proto_pipe) && !new0 && (p != old0->sender->proto))
-      p->rt_notify(p, ah->table, net, NULL, old0, NULL);
+    pipe_withdraw = (p->proto == &proto_pipe) && !new0;
 #endif
+    filter_change = old0 && (old0->lastmod <= ah->last_out_filter_change);
+
+    if ((pipe_withdraw || filter_change) && (p != old0->sender->proto))
+    {
+      stats->exp_withdraws_accepted++;
+      p->rt_notify(p, ah->table, net, NULL, old0, NULL);
+    }
 
     return;
   }
@@ -470,7 +484,7 @@
 static void
 rt_notify_accepted(struct announce_hook *ah, net *net, rte *new_changed, rte *old_changed, rte *before_old, int feed)
 {
-  // struct proto *p = ah->proto;
+  struct proto *p = ah->proto;
   struct proto_stats *stats = ah->stats;
 
   rte *r;
@@ -549,7 +563,9 @@
    */
 
   /* Hack for changed filters */
-  if (old_changed && (old_changed->lastmod <= ah->last_out_filter_change))
+  if (old_changed &&
+      (p != old_changed->sender->proto) &&
+      (old_changed->lastmod <= ah->last_out_filter_change))
     {
       old_best = old_changed;
       goto found;
@@ -849,12 +865,13 @@
 static int
 rte_same(rte *x, rte *y)
 {
+  /* rte.flags are not checked, as they are mostly internal to rtable */
   return
     x->attrs == y->attrs &&
-    x->flags == y->flags &&
     x->pflags == y->pflags &&
     x->pref == y->pref &&
-    (!x->attrs->src->proto->rte_same || x->attrs->src->proto->rte_same(x, y));
+    (!x->attrs->src->proto->rte_same || x->attrs->src->proto->rte_same(x, y)) &&
+    rte_is_filtered(x) == rte_is_filtered(y);
 }
 
 static inline int rte_is_ok(rte *e) { return e && !rte_is_filtered(e); }
@@ -898,7 +915,9 @@
 
 	  if (new && rte_same(old, new))
 	    {
-	      /* No changes, ignore the new route */
+	      /* No changes, ignore the new route and refresh the old one */
+
+	      old->flags &= ~(REF_STALE | REF_DISCARD | REF_MODIFY);
 
 	      if (!rte_is_filtered(new))
 		{
diff -Nru bird-1.6.5/NEWS bird-1.6.6/NEWS
--- bird-1.6.5/NEWS	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/NEWS	2019-03-01 00:13:15.000000000 +0100
@@ -1,3 +1,6 @@
+Version 1.6.6 (2019-02-27)
+  o Several bugfixes related to route propagation
+
 Version 1.6.5 (2019-01-05)
   o MRT table dumps (RFC 6396)
   o BGP Long-lived graceful restart
diff -Nru bird-1.6.5/sysdep/config.h bird-1.6.6/sysdep/config.h
--- bird-1.6.5/sysdep/config.h	2019-01-07 15:49:18.000000000 +0100
+++ bird-1.6.6/sysdep/config.h	2019-03-01 00:13:15.000000000 +0100
@@ -7,7 +7,7 @@
 #define _BIRD_CONFIG_H_
 
 /* BIRD version */
-#define BIRD_VERSION "1.6.5"
+#define BIRD_VERSION "1.6.6"
 
 /* Include parameters determined by configure script */
 #include "sysdep/autoconf.h"

Attachment: signature.asc
Description: PGP signature

Reply via email to