Does anyone have quagga setup with ripd and/or ospfd that's in a
position to test this update?
Background: OpenBSD multicast code wants the interface IP address passed
when joining/leaving groups.
Old quagga code passed this up e.g. from ripd/ospfd but this was changed
c.2012 and now only uses ifindex-based APIs (either RFC3678 MCAST_JOIN_GROUP
etc, struct ip_mreqn on some OS, or a hack allowed in some OS of passing
the ifindex in as the source address).
The current port version reverts to the old quagga code for this (and
has done so since 2013 - https://marc.info/?t=135706131200001&r=1&w=2),
but it's becoming harder to maintain as upstream diverges (quagga 1.2 is
a bit different; the frrouter fork is different again).
So this takes a different and less intrusive approach to handling the
changes needed - borrowing some code used for SunOS in another function
in the file, given an ifindex from the calling function, it does a
lookup for the interface address, and uses that instead. This avoids
scattering the changes through 4 files, and reduces the main patch
scope (the current one is guaranteed to conflict when anything is
changed in the relevant functions upstream).
Any tests/comments welcome...
Index: Makefile
===================================================================
RCS file: /cvs/ports/net/quagga/Makefile,v
retrieving revision 1.53
diff -u -p -r1.53 Makefile
--- Makefile 31 Oct 2017 09:37:18 -0000 1.53
+++ Makefile 31 Oct 2017 11:42:44 -0000
@@ -2,13 +2,13 @@
COMMENT= multi-threaded routing daemon
-DISTNAME= quagga-1.0.20161017
+DISTNAME= quagga-1.2.2
CATEGORIES= net
MASTER_SITES= http://download.savannah.gnu.org/releases/quagga/
-SHARED_LIBS= ospf 0.1 \
- ospfapiclient 0.0 \
- zebra 1.0
+.for i in ospf ospfapiclient zebra fpm_pb quagga_pb
+SHARED_LIBS+= $i 1.0
+.endfor
HOMEPAGE= http://www.quagga.net/
@@ -37,10 +37,10 @@ CONFIGURE_ARGS+= --disable-pie
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib" \
LIBS=-lcurses
-
MAKE_FLAGS= MAKEINFO="makeinfo --no-split"
FAKE_FLAGS= exampledir='${PREFIX}/share/examples/quagga' \
${MAKE_FLAGS}
+LIBTOOL_FLAGS= --tag=disable-static
FLAVORS= snmp
FLAVOR?=
Index: distinfo
===================================================================
RCS file: /cvs/ports/net/quagga/distinfo,v
retrieving revision 1.21
diff -u -p -r1.21 distinfo
--- distinfo 31 Oct 2017 09:37:18 -0000 1.21
+++ distinfo 31 Oct 2017 11:42:44 -0000
@@ -1,2 +1,2 @@
-SHA256 (quagga-1.0.20161017.tar.gz) = jyZyTdt0GfORL4DOjxNokZAongAizwmSHQpAP9dxSRg=
-SIZE (quagga-1.0.20161017.tar.gz) = 2758494
+SHA256 (quagga-1.2.2.tar.gz) = Ui4i8r7uZOPwws3j0BVfO4ED9Pb8ir75LLQLw6TMKTE=
+SIZE (quagga-1.2.2.tar.gz) = 2986142
Index: patches/patch-bgpd_bgp_aspath_c
===================================================================
RCS file: patches/patch-bgpd_bgp_aspath_c
diff -N patches/patch-bgpd_bgp_aspath_c
--- patches/patch-bgpd_bgp_aspath_c 31 Oct 2017 09:37:18 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,26 +0,0 @@
-$OpenBSD: patch-bgpd_bgp_aspath_c,v 1.3 2017/10/31 09:37:18 sthen Exp $
-
-From 7a42b78be9a4108d98833069a88e6fddb9285008 Mon Sep 17 00:00:00 2001
-From: Andreas Jaggi <aj@open.ch>
-Date: Mon, 2 Oct 2017 19:38:43 +0530
-Subject: bgpd: Fix AS_PATH size calculation for long paths
-
-If you have an AS_PATH with more entries than
-what can be written into a single AS_SEGMENT_MAX
-it needs to be broken up. The code that noticed
-that the AS_PATH needs to be broken up was not
-correctly calculating the size of the resulting
-message. This patch addresses this issue.
-
-Index: bgpd/bgp_aspath.c
---- bgpd/bgp_aspath.c.orig
-+++ bgpd/bgp_aspath.c
-@@ -904,7 +904,7 @@ aspath_put (struct stream *s, struct aspath *as, int u
- assegment_header_put (s, seg->type, AS_SEGMENT_MAX);
- assegment_data_put (s, seg->as, AS_SEGMENT_MAX, use32bit);
- written += AS_SEGMENT_MAX;
-- bytes += ASSEGMENT_SIZE (written, use32bit);
-+ bytes += ASSEGMENT_SIZE (AS_SEGMENT_MAX, use32bit);
- }
-
- /* write the final segment, probably is also the first */
Index: patches/patch-configure_ac
===================================================================
RCS file: /cvs/ports/net/quagga/patches/patch-configure_ac,v
retrieving revision 1.5
diff -u -p -r1.5 patch-configure_ac
--- patches/patch-configure_ac 31 Mar 2016 22:42:00 -0000 1.5
+++ patches/patch-configure_ac 31 Oct 2017 11:42:44 -0000
@@ -3,9 +3,10 @@ $OpenBSD: patch-configure_ac,v 1.5 2016/
We have never supported passing an ifindex in struct
ip_mreq.imr_interface.
---- configure.ac.orig Thu Mar 31 23:33:14 2016
-+++ configure.ac Thu Mar 31 23:33:45 2016
-@@ -951,7 +951,7 @@ AC_CHECK_HEADERS([linux/mroute.h], [], [],
+Index: configure.ac
+--- configure.ac.orig
++++ configure.ac
+@@ -1053,7 +1053,7 @@ AC_CHECK_HEADERS([linux/mroute.h], [], [],
AC_MSG_CHECKING([for BSD struct ip_mreq hack])
AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
Index: patches/patch-lib_sockopt_c
===================================================================
RCS file: /cvs/ports/net/quagga/patches/patch-lib_sockopt_c,v
retrieving revision 1.3
diff -u -p -r1.3 patch-lib_sockopt_c
--- patches/patch-lib_sockopt_c 31 Oct 2017 11:02:50 -0000 1.3
+++ patches/patch-lib_sockopt_c 31 Oct 2017 11:42:44 -0000
@@ -1,195 +1,71 @@
-$OpenBSD: patch-lib_sockopt_c,v 1.3 2017/10/31 11:02:50 sthen Exp $
-
-Revert 69bf3a39; does not work on at least (Open/Net)BSD.
-This can be put back if we get RFC3678 support.
+$OpenBSD$
Index: lib/sockopt.c
--- lib/sockopt.c.orig
+++ lib/sockopt.c
-@@ -197,7 +197,7 @@ setsockopt_ipv6_tclass(int sock, int tclass)
+@@ -21,7 +21,7 @@
+
+ #include <zebra.h>
+
+-#ifdef SUNOS_5
++#if defined(SUNOS_5) || defined(__OpenBSD__)
+ #include <ifaddrs.h>
+
No comments:
Post a Comment