Commit d4fa70bd authored by Timo Teräs's avatar Timo Teräs

main/quagga: upgrade to 0.99.15

remove patches merged upstream.
parent ca778857
# Maintainer: Natanael Copa <ncopa@alpinelinux.org> # Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=quagga pkgname=quagga
pkgver=0.99.13 pkgver=0.99.15
pkgrel=2 pkgrel=0
pkgdesc="A free routing daemon replacing Zebra supporting RIP, OSPF and BGP." pkgdesc="A free routing daemon replacing Zebra supporting RIP, OSPF and BGP."
url="http://quagga.net/" url="http://quagga.net/"
license="GPL-2" license="GPL-2"
...@@ -12,10 +12,7 @@ install="$pkgname.pre-install $pkgname.post-install" ...@@ -12,10 +12,7 @@ install="$pkgname.pre-install $pkgname.post-install"
subpackages="$pkgname-dev $pkgname-doc" subpackages="$pkgname-dev $pkgname-doc"
source="http://www.quagga.net/download/$pkgname-$pkgver.tar.gz source="http://www.quagga.net/download/$pkgname-$pkgver.tar.gz
$pkgname-0.99.11-link-libcap.patch $pkgname-0.99.11-link-libcap.patch
$pkgname-0.99.11-ipv6-only.patch
$pkgname-0.99.11-del-routes.patch $pkgname-0.99.11-del-routes.patch
$pkgname-0.99.11-zombie.patch
$pkgname-0.99.11-fd-leak.patch
bgpd.initd bgpd.initd
ospf6d.initd ospf6d.initd
ospfd.initd ospfd.initd
...@@ -61,12 +58,9 @@ build() { ...@@ -61,12 +58,9 @@ build() {
done done
install -Dm644 "$srcdir/zebra.confd" "$pkgdir"/etc/conf.d/zebra install -Dm644 "$srcdir/zebra.confd" "$pkgdir"/etc/conf.d/zebra
} }
md5sums="55a7d2dcf016580a7c7412b3518cd942 quagga-0.99.13.tar.gz md5sums="8975414c76a295f4855a417af0b5ddce quagga-0.99.15.tar.gz
8f99d41a8ed79e51704e8f655d255f29 quagga-0.99.11-link-libcap.patch 8f99d41a8ed79e51704e8f655d255f29 quagga-0.99.11-link-libcap.patch
44c517e988273e0e5076d24f3959a125 quagga-0.99.11-ipv6-only.patch
1cbcf60a637b2577dee4d6df711e1247 quagga-0.99.11-del-routes.patch 1cbcf60a637b2577dee4d6df711e1247 quagga-0.99.11-del-routes.patch
ce345725f2e7240cebe0fd5ac2b2fc48 quagga-0.99.11-zombie.patch
e2391e19b542ec1743776ca9e36ac11a quagga-0.99.11-fd-leak.patch
c4c3b174b1e3400a143407fcc3d27cf5 bgpd.initd c4c3b174b1e3400a143407fcc3d27cf5 bgpd.initd
92aba039c049050c48abf984c2db7e2b ospf6d.initd 92aba039c049050c48abf984c2db7e2b ospf6d.initd
878328ead225e6eb5f5f77f05ab39106 ospfd.initd 878328ead225e6eb5f5f77f05ab39106 ospfd.initd
......
--- quagga-0.99.11.DIST/bgpd/bgp_fsm.c 2008-09-09 16:18:57.000000000 -0400
+++ quagga-0.99.11/bgpd/bgp_fsm.c 2009-04-13 13:09:25.000000000 -0400
@@ -1013,11 +1013,11 @@
{
/* Clearing, */
{bgp_ignore, Clearing}, /* BGP_Start */
- {bgp_ignore, Clearing}, /* BGP_Stop */
- {bgp_ignore, Clearing}, /* TCP_connection_open */
- {bgp_ignore, Clearing}, /* TCP_connection_closed */
- {bgp_ignore, Clearing}, /* TCP_connection_open_failed */
- {bgp_ignore, Clearing}, /* TCP_fatal_error */
+ {bgp_stop, Clearing}, /* BGP_Stop */
+ {bgp_stop, Clearing}, /* TCP_connection_open */
+ {bgp_stop, Clearing}, /* TCP_connection_closed */
+ {bgp_stop, Clearing}, /* TCP_connection_open_failed */
+ {bgp_stop, Clearing}, /* TCP_fatal_error */
{bgp_ignore, Clearing}, /* ConnectRetry_timer_expired */
{bgp_ignore, Clearing}, /* Hold_Timer_expired */
{bgp_ignore, Clearing}, /* KeepAlive_timer_expired */
On Linux the default behaviour of getaddrinfo is to provide both IPV4 and IPV6
addresses if available. But the default behaviour of binding to an IPV6 address
is to handle both the native IPV6 address and IPV4 to IPV6 mapped addresses.
Without this patch what happens is:
1. First address is IPV6, bind succeeds.
2. Second address is IPV4, bind fails (port already used by IPV6)
3. incoming connections come in on IPV6 listen socket, as IPV4 mapped
addresses then BGP gets confused because of client with unexpected address.
The fix is to force IPV6 socket as IPV6 only.
--- a/bgpd/bgp_network.c 2008-08-27 17:59:20.000000000 -0700
+++ b/bgpd/bgp_network.c 2008-08-27 18:02:46.000000000 -0700
@@ -412,6 +412,15 @@ bgp_socket (struct bgp *bgp, unsigned sh
setsockopt_ipv4_tos (sock, IPTOS_PREC_INTERNETCONTROL);
#endif
+#ifdef IPV6_V6ONLY
+ /* Want only IPV6 on ipv6 socket (not mapped addresses) */
+ if (ainfo->ai_family == AF_INET6) {
+ int on = 1;
+ setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY,
+ (void *) &on, sizeof (on));
+ }
+#endif
+
if (bgpd_privs.change (ZPRIVS_RAISE) )
zlog_err ("bgp_socket: could not raise privs");
Currently, when accepting the connection, it can be left as zombie,
when the peer just initiates a connection, but never sends data (and
the TCP connection end packets are lost). This happens because for
accepted connections a temporary new peer entry is created until OPEN
message is exchanged, and this temporary peer entry does not get the
hold time parameter set at all.
Signed-off-by: Timo Teras <timo.teras@iki.fi>
---
bgpd/bgp_network.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index 5dbd487..9a4c36d 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -185,6 +185,8 @@ bgp_accept (struct thread *thread)
peer->fd = bgp_sock;
peer->status = Active;
peer->local_id = peer1->local_id;
+ peer->v_holdtime = peer1->v_holdtime;
+ peer->v_keepalive = peer1->v_keepalive;
/* Make peer's address string. */
sockunion2str (&su, buf, SU_ADDRSTRLEN);
--
1.5.6.3
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment