1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-30 10:38:37 +00:00

Add a quagga version back at 0.99.23.1. 0.99.24 seems to have some problems

with OSPFv3 on 8.4.

Sponsored by:	Absolight
This commit is contained in:
Mathieu Arnold 2015-03-18 22:28:43 +00:00
parent 75c88882b7
commit 8445a2820c
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=381584
13 changed files with 622 additions and 0 deletions

View File

@ -970,6 +970,7 @@
SUBDIR += qt5-network
SUBDIR += qtweetlib
SUBDIR += quagga
SUBDIR += quagga23
SUBDIR += queso
SUBDIR += quiterss
SUBDIR += quoted

100
net/quagga23/Makefile Normal file
View File

@ -0,0 +1,100 @@
# Created by: Bruce M Simpson <bms@FreeBSD.org>
# $FreeBSD$
PORTNAME= quagga
PORTVERSION= 0.99.23.1
PORTREVISION= 4
CATEGORIES= net ipv6
MASTER_SITES= SAVANNAH
PKGNAMESUFFIX= 23
MAINTAINER= mat@FreeBSD.org
COMMENT= Free RIPv1, RIPv2, OSPFv2, BGP4, IS-IS route software
LICENSE= GPLv2
BUILD_DEPENDS= gawk:${PORTSDIR}/lang/gawk
CONFLICTS= openbgpd-[0-9]* openospfd-[0-9]* zebra-0* quagga-re-[0-9]*
GNU_CONFIGURE= yes
CONFIGURE_ARGS= --enable-exampledir=${PREFIX}/share/examples/quagga
INSTALL_TARGET= install-strip
USES= gmake libtool makeinfo perl5 readline compiler:c11 cpe
USE_LDCONFIG= yes
USE_PERL5= build
INFO= quagga
OPTIONS_DEFINE= ISISD PAM OSPF_OPAQUE_LSA RTADV SNMP TCPSOCKETS DLMALLOC \
NO_BGP_ANNOUNCE OSPF_NEXTHOP
OPTIONS_SUB= yes
ISISD_DESC= Enable experimental ISIS daemon
PAM_DESC= PAM authentication for vtysh
OSPF_OPAQUE_LSA_DESC= OSPF Opaque-LSA support (RFC2370)
RTADV_DESC= IPv6 Router Advertisements
TCPSOCKETS_DESC= Use TCP/IP sockets for protocol daemons
DLMALLOC_DESC= Use dlmalloc (makes bgpd much faster)
NO_BGP_ANNOUNCE_DESC= Turn off BGP route announcement
OSPF_NEXTHOP_DESC= Set ip next-hop in OSPF route maps
ENABLE_USER?= quagga
ENABLE_GROUP?= quagga
USERS= ${ENABLE_USER}
GROUPS= ${ENABLE_GROUP}
SYSCONF_DIR?= ${ETCDIR}
LOCALSTATE_DIR?=/var/run/quagga
CONFIGURE_ARGS= --enable-user=${ENABLE_USER} \
--enable-group=${ENABLE_GROUP} \
--sysconfdir=${SYSCONF_DIR} \
--localstatedir=${LOCALSTATE_DIR} \
--enable-vtysh
.if defined(ENABLE_VTY_GROUP)
CONFIGURE_ARGS+=--enable-vty-group=${ENABLE_VTY_GROUP}
.endif
ISISD_CONFIGURE_ENABLE= isisd
PAM_CONFIGURE_WITH= libpam
OSPF_OPAQUE_LSA_CONFIGURE_ENABLE= opaque-lsa
RTADV_CONFIGURE_ENABLE= rtadv
SNMP_CONFIGURE_ENABLE= snmp
SNMP_LIB_DEPENDS= libnetsnmp.so:${PORTSDIR}/net-mgmt/net-snmp
TCPSOCKETS_CONFIGURE_ENABLE= tcp-zebra
DLMALLOC_LIB_DEPENDS= libdlmalloc.so:${PORTSDIR}/devel/libdlmalloc
DLMALLOC_LIBS= -L${LOCALBASE}/lib -ldlmalloc
NO_BGP_ANNOUNCE_CONFIGURE_ON= --disable-bgp-announce
NO_BGP_ANNOUNCE_CONFIGURE_OFF= --enable-bgp-announce
OSPF_NEXTHOP_EXTRA_PATCH= ${PATCHDIR}/extra-patch-ospf-nexthop
USE_RC_SUBR= quagga watchquagga
SUB_LIST+= LOCALSTATE_DIR=${LOCALSTATE_DIR} \
SYSCONF_DIR=${SYSCONF_DIR}
PLIST_SUB+= LOCALSTATE_DIR=${LOCALSTATE_DIR} \
SYSCONF_DIR=${SYSCONF_DIR} \
ENABLE_USER=${ENABLE_USER} \
ENABLE_GROUP=${ENABLE_GROUP}
pre-everything::
@${ECHO} "============================================================="
@${ECHO}
@${ECHO} "You can build ${PORTNAME} with the following options:"
@${ECHO}
@${ECHO} "ENABLE_USER Specify user to run Quagga suite as"
@${ECHO} "ENABLE_GROUP Specify group to run Quagga suite as"
@${ECHO} "ENABLE_VTY_GROUP Specify group for vty socket ownership"
@${ECHO} "SYSCONF_DIR Specify directory for Quagga configuration files"
@${ECHO} "LOCALSTATE_DIR Specify directory for Quagga runtime files"
post-install:
${MKDIR} ${STAGEDIR}${LOCALSTATE_DIR} ${STAGEDIR}${SYSCONF_DIR} \
${STAGEDIR}${EXAMPLESDIR}
@${MV} ${STAGEDIR}${ETCDIR}/* ${STAGEDIR}${EXAMPLESDIR}
.include <bsd.port.mk>

2
net/quagga23/distinfo Normal file
View File

@ -0,0 +1,2 @@
SHA256 (quagga-0.99.23.1.tar.gz) = 3abf2046bc27539ce2d17c238e06c8fd0d479a8e402580c6aa455808bd48e004
SIZE (quagga-0.99.23.1.tar.gz) = 2526612

View File

@ -0,0 +1,171 @@
--- ospfd/ospf_asbr.c.orig 2014-08-25 16:56:53 UTC
+++ ospfd/ospf_asbr.c
@@ -122,6 +122,7 @@
{
values->metric = -1;
values->metric_type = -1;
+ values->nexthop.s_addr = -1;
}
int
--- ospfd/ospf_asbr.h.orig 2014-08-25 16:56:53 UTC
+++ ospfd/ospf_asbr.h
@@ -27,6 +27,7 @@
{
int32_t metric;
int32_t metric_type;
+ struct in_addr nexthop;
};
/* Redistributed external information. */
@@ -50,6 +51,7 @@
struct route_map_set_values route_map_set;
#define ROUTEMAP_METRIC(E) (E)->route_map_set.metric
#define ROUTEMAP_METRIC_TYPE(E) (E)->route_map_set.metric_type
+#define ROUTEMAP_NEXTHOP(E) (E)->route_map_set.nexthop
};
#define OSPF_ASBR_CHECK_DELAY 30
--- ospfd/ospf_lsa.c.orig 2014-08-25 16:56:53 UTC
+++ ospfd/ospf_lsa.c
@@ -1633,7 +1633,8 @@
stream_put_ospf_metric (s, mvalue);
/* Get forwarding address to nexthop if on the Connection List, else 0. */
- fwd_addr = ospf_external_lsa_nexthop_get (ospf, ei->nexthop);
+ fwd_addr = (ei->route_map_set.nexthop.s_addr != -1) ?
+ ROUTEMAP_NEXTHOP (ei) : ospf_external_lsa_nexthop_get (ospf, ei->nexthop);
/* Put forwarding address. */
stream_put_ipv4 (s, fwd_addr.s_addr);
--- ospfd/ospf_routemap.c.orig 2014-08-25 16:56:53 UTC
+++ ospfd/ospf_routemap.c
@@ -531,6 +531,62 @@
route_set_metric_type_free,
};
+/* `set ip next-hop IP_ADDRESS' */
+/* Set nexthop to object. */
+static route_map_result_t
+route_set_ip_nexthop (void *rule, struct prefix *prefix,
+ route_map_object_t type, void *object)
+{
+ struct in_addr *address;
+ struct external_info *ei;
+
+ if (type == RMAP_OSPF)
+ {
+ /* Fetch routemap's rule information. */
+ address = rule;
+ ei = object;
+
+ /* Set metric out value. */
+ ei->route_map_set.nexthop = *address;
+ }
+ return RMAP_OKAY;
+}
+
+/* set ip next-hop compilation. */
+static void *
+route_set_ip_nexthop_compile (const char *arg)
+{
+ struct in_addr *address = NULL;
+ int ret;
+
+ address = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (struct in_addr));
+ ret = inet_aton (arg, address);
+
+ if (ret == 0)
+ {
+ XFREE (MTYPE_ROUTE_MAP_COMPILED, address);
+ return NULL;
+ }
+
+ return address;
+}
+
+/* Free route map's compiled `set ip next-hop' value. */
+static void
+route_set_ip_nexthop_free (void *rule)
+{
+ XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
+}
+
+/* Set ip next-hop rule structure. */
+struct route_map_rule_cmd route_set_ip_nexthop_cmd =
+{
+ "ip next-hop",
+ route_set_ip_nexthop,
+ route_set_ip_nexthop_compile,
+ route_set_ip_nexthop_free,
+};
+
DEFUN (match_ip_nexthop,
match_ip_nexthop_cmd,
"match ip next-hop (<1-199>|<1300-2699>|WORD)",
@@ -785,6 +841,49 @@
"OSPF[6] external type 1 metric\n"
"OSPF[6] external type 2 metric\n")
+DEFUN (set_ip_nexthop,
+ set_ip_nexthop_cmd,
+ "set ip next-hop A.B.C.D",
+ SET_STR
+ IP_STR
+ "Next hop address\n"
+ "IP address of next hop\n")
+{
+ union sockunion su;
+ int ret;
+
+ ret = str2sockunion (argv[0], &su);
+ if (ret < 0)
+ {
+ vty_out (vty, "%% Malformed Next-hop address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ return ospf_route_set_add (vty, vty->index, "ip next-hop", argv[0]);
+}
+
+DEFUN (no_set_ip_nexthop,
+ no_set_ip_nexthop_cmd,
+ "no set ip next-hop",
+ NO_STR
+ SET_STR
+ "Next hop address\n")
+{
+ if (argc == 0)
+ return ospf_route_set_delete (vty, vty->index, "ip next-hop", NULL);
+
+ return ospf_route_set_delete (vty, vty->index, "ip next-hop", argv[0]);
+}
+
+ALIAS (no_set_ip_nexthop,
+ no_set_ip_nexthop_val_cmd,
+ "no set ip next-hop A.B.C.D",
+ NO_STR
+ SET_STR
+ IP_STR
+ "Next hop address\n"
+ "IP address of next hop\n")
+
/* Route-map init */
void
ospf_route_map_init (void)
@@ -804,6 +903,7 @@
route_map_install_set (&route_set_metric_cmd);
route_map_install_set (&route_set_metric_type_cmd);
+ route_map_install_set (&route_set_ip_nexthop_cmd);
install_element (RMAP_NODE, &match_ip_nexthop_cmd);
install_element (RMAP_NODE, &no_match_ip_nexthop_cmd);
@@ -827,4 +927,7 @@
install_element (RMAP_NODE, &set_metric_type_cmd);
install_element (RMAP_NODE, &no_set_metric_type_cmd);
install_element (RMAP_NODE, &no_set_metric_type_val_cmd);
+ install_element (RMAP_NODE, &set_ip_nexthop_cmd);
+ install_element (RMAP_NODE, &no_set_ip_nexthop_cmd);
+ install_element (RMAP_NODE, &no_set_ip_nexthop_val_cmd);
}

View File

@ -0,0 +1,11 @@
--- configure.orig 2014-08-25 17:02:06 UTC
+++ configure
@@ -18158,7 +18158,7 @@ fi
-if test "${enable_snmp}" != ""; then
+if test "x${enable_snmp}" != "xno"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}net-snmp-config", so it can be a program name with args.
set dummy ${ac_tool_prefix}net-snmp-config; ac_word=$2

View File

@ -0,0 +1,21 @@
--- doc/bgpd.8.orig 2014-08-25 16:56:53 UTC
+++ doc/bgpd.8
@@ -28,6 +28,8 @@
] [
.B \-g
.I group
+] [
+.B \--no_kernel
]
.SH DESCRIPTION
.B bgpd
@@ -76,6 +78,9 @@
.TP
\fB\-v\fR, \fB\-\-version\fR
Print the version and exit.
+.TP
+\fB\--no_kernel\fR
+Prevents route updates to be submitted to the kernel.
.SH FILES
.TP
.BI /usr/local/sbin/bgpd

View File

@ -0,0 +1,12 @@
--- lib/zebra.h.orig 2014-08-25 16:56:53 UTC
+++ lib/zebra.h
@@ -358,7 +358,8 @@
* OpenBSD: network byte order, apart from older versions which are as per
* *BSD
*/
-#if defined(__NetBSD__) || defined(__FreeBSD__) \
+#if defined(__NetBSD__) \
+ || (defined(__FreeBSD__) && (__FreeBSD_version < 1100030)) \
|| (defined(__OpenBSD__) && (OpenBSD < 200311)) \
|| (defined(__APPLE__)) \
|| (defined(SUNOS_5) && defined(WORDS_BIGENDIAN))

View File

@ -0,0 +1,11 @@
--- vtysh/extract.pl.in.orig 2014-08-25 16:56:53 UTC
+++ vtysh/extract.pl.in
@@ -63,7 +63,7 @@
foreach (@ARGV) {
$file = $_;
- open (FH, "@CPP@ -DHAVE_CONFIG_H -DVTYSH_EXTRACT_PL -DHAVE_IPV6 -I@top_builddir@ -I@srcdir@/ -I@srcdir@/.. -I@top_srcdir@/lib -I@top_builddir@/lib -I@top_srcdir@/isisd/topology @CPPFLAGS@ $file |");
+ open (FH, "@CPP@ -DHAVE_CONFIG_H -DVTYSH_EXTRACT_PL -DHAVE_IPV6 -I@top_builddir@ -I@srcdir@/ -I@srcdir@/.. -I@top_srcdir@/lib -I@top_builddir@/lib -I/usr/local/include -I@top_srcdir@/isisd/topology @CPPFLAGS@ $file |");
local $/; undef $/;
$line = <FH>;
close (FH);

View File

@ -0,0 +1,148 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: quagga
# REQUIRE: netif routing
# KEYWORD: nojail shutdown
# Add the following line to /etc/rc.conf to enable quagga:
# quagga_enable="YES"
#
# You may also wish to use the following variables to fine-tune startup:
# quagga_flags=""
# quagga_daemons="zebra ripd ripngd ospfd ospf6d bgpd isisd"
# quagga_vysh_boot="YES"
# Per daemon tuning may be done with daemon_name_flags
# zebra_flags="-P 0"
# bgpd_flags="-nrP 0" and so on
# If you want to give the routing deamons a chance to catchup before
# continueing, set quagga_wait_for to a "default" or certain prefix.
# quagga_wait_for="default"
# Set the time limit for the wait.
# quagga_wait_seconds="90"
#
# If the quagga daemons require additional shared libraries to start,
# use the following variable to run ldconfig(8) in advance:
# quagga_extralibs_path="/usr/local/lib ..."
#
. /etc/rc.subr
name=quagga
rcvar=quagga_enable
start_postcmd=start_postcmd
stop_postcmd="rm -f $pidfile"
configtest_cmd=check_config
extra_commands=configtest
command_args="-d"
load_rc_config $name
quagga_enable=${quagga_enable:-"NO"}
quagga_flags=${quagga_flags:-""}
quagga_daemons=${quagga_daemons:-"zebra ripd ripngd ospfd ospf6d bgpd isisd"}
quagga_vtysh_boot=${quagga_vtysh_boot:-"NO"}
quagga_wait_for=${quagga_wait_for:-""}
quagga_wait_seconds=${quagga_wait_seconds:-"90"}
check_config()
{
echo "Checking $daemon.conf"
$command $daemon_flags -C
result=$?
if [ "$result" -eq "0" ]; then
echo "OK"
else
echo "FAILED"
exit
fi
}
start_postcmd()
{
local waited_for
waited_for=0
# Wait only when last daemon has started.
if [ "${quagga_daemons}" = "${quagga_daemons% ${name}}" ]; then
return;
fi
if [ -n "${quagga_wait_for}" ]; then
echo Waiting for ${quagga_wait_for} route...
while [ ${waited_for} -lt ${quagga_wait_seconds} ]; do
/sbin/route -n get ${quagga_wait_for} >/dev/null 2>&1 && break;
waited_for=$((${waited_for}+1))
sleep 1;
done
[ ${waited_for} -lt ${quagga_wait_seconds} ] || echo Giving up...
fi
}
do_cmd()
{
local ret
ret=0
for daemon in ${quagga_daemons}; do
command=%%PREFIX%%/sbin/${daemon}
required_files=%%SYSCONF_DIR%%/${daemon}.conf
pidfile=%%LOCALSTATE_DIR%%/${daemon}.pid
if [ ${quagga_cmd} = "restart" -o ${quagga_cmd} = "start" ]; then
check_config
fi
if [ ${quagga_cmd} = "start" -a ! -f ${required_files} ]; then
continue
fi
if [ ${quagga_cmd} = "stop" -a -z $(check_process ${command}) ]; then
continue
fi
eval flags=\$\{${daemon}_flags:-\"${quagga_flags}\"\}
name=${daemon}
_rc_restart_done=false
run_rc_command "$1" || ret=1
done
if checkyesno quagga_vtysh_boot; then
echo "Booting for integrated-vtysh-config..."
%%PREFIX%%/bin/vtysh -b
fi
return ${ret}
}
quagga_cmd=$1
case "$1" in
force*)
quagga_cmd=${quagga_cmd#force}
;;
fast*)
quagga_cmd=${quagga_cmd#fast}
;;
esac
shift
if [ $# -ge 1 ]; then
quagga_daemons="$*"
fi
case "${quagga_cmd}" in
start)
if [ -n "${quagga_extralibs_path}" ]; then
/sbin/ldconfig -m ${quagga_extralibs_path}
fi
do_cmd "start"
;;
stop)
quagga_daemons=$(reverse_list ${quagga_daemons})
do_cmd "stop"
;;
restart)
quagga_daemons=$(reverse_list ${quagga_daemons})
do_cmd "stop"
quagga_daemons=$(reverse_list ${quagga_daemons})
do_cmd "start"
;;
*)
do_cmd "${quagga_cmd}"
;;
esac

View File

@ -0,0 +1,30 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: watchquagga
# REQUIRE: NETWORKING quagga
# KEYWORD: shutdown
# Add the following line to /etc/rc.conf to enable watchquagga:
# watchquagga_enable="YES"
#
# You may also wish to use the following variables to fine-tune startup:
# watchquagga_flags
. /etc/rc.subr
name=watchquagga
rcvar=watchquagga_enable
load_rc_config $name
stop_postcmd="rm -f $pidfile"
watchquagga_enable=${watchquagga_enable:-"NO"}
command=%%PREFIX%%/sbin/watchquagga
pidfile=%%LOCALSTATE_DIR%%/watchquagga.pid
run_rc_command "$1"

8
net/quagga23/pkg-descr Normal file
View File

@ -0,0 +1,8 @@
Quagga is a routing software suite, providing implementations of
OSPFv2, OSPFv3, RIP v1 and v2, RIPv3, BGPv4 and experemental ISIS
for Unix platforms, particularly FreeBSD and Linux and also NetBSD,
to mention a few. Quagga is a fork of GNU Zebra which was developed
by KunihiroIshiguro. The Quagga tree aims to build a more involved
community around Quagga than the current centralised model of GNU Zebra.
WWW: http://www.quagga.net/

13
net/quagga23/pkg-message Normal file
View File

@ -0,0 +1,13 @@
==========================================================
To enable quagga, add the following lines to rc.conf:
defaultrouter="NO"
quagga_enable="YES"
Also, you may wish to set the following options:"
quagga_daemons="zebra bgpd etc..."
quagga_flags="...."
quagga_extralibs_path="... ..."
router_enable="NO"
watchquagga_enable="YES"
==========================================================

94
net/quagga23/pkg-plist Normal file
View File

@ -0,0 +1,94 @@
sbin/babeld
sbin/bgpd
%%ISISD%%sbin/isisd
sbin/ospf6d
%%OSPF_OPAQUE_LSA%%sbin/ospfclient
sbin/ospfd
sbin/ripd
sbin/ripngd
sbin/watchquagga
sbin/zebra
bin/vtysh
lib/libospf.a
lib/libospf.so
lib/libospf.so.0
lib/libospf.so.0.0.0
%%OSPF_OPAQUE_LSA%%lib/libospfapiclient.a
%%OSPF_OPAQUE_LSA%%lib/libospfapiclient.so
%%OSPF_OPAQUE_LSA%%lib/libospfapiclient.so.0
%%OSPF_OPAQUE_LSA%%lib/libospfapiclient.so.0.0.0
lib/libzebra.a
lib/libzebra.so
lib/libzebra.so.0
lib/libzebra.so.0.0.0
include/quagga/buffer.h
include/quagga/checksum.h
include/quagga/command.h
include/quagga/distribute.h
include/quagga/filter.h
include/quagga/getopt.h
include/quagga/hash.h
include/quagga/if.h
include/quagga/if_rmap.h
include/quagga/jhash.h
include/quagga/keychain.h
include/quagga/libospf.h
include/quagga/linklist.h
include/quagga/log.h
include/quagga/md5.h
include/quagga/memory.h
include/quagga/memtypes.h
include/quagga/network.h
%%OSPF_OPAQUE_LSA%%include/quagga/ospfapi/ospf_apiclient.h
include/quagga/ospfd/ospf_api.h
include/quagga/ospfd/ospf_asbr.h
include/quagga/ospfd/ospf_dump.h
include/quagga/ospfd/ospf_ism.h
include/quagga/ospfd/ospf_lsa.h
include/quagga/ospfd/ospf_lsdb.h
include/quagga/ospfd/ospf_nsm.h
include/quagga/ospfd/ospf_opaque.h
include/quagga/ospfd/ospfd.h
include/quagga/plist.h
include/quagga/pqueue.h
include/quagga/prefix.h
include/quagga/privs.h
include/quagga/routemap.h
include/quagga/route_types.h
include/quagga/sigevent.h
include/quagga/smux.h
include/quagga/sockopt.h
include/quagga/sockunion.h
include/quagga/str.h
include/quagga/stream.h
include/quagga/table.h
include/quagga/thread.h
include/quagga/vector.h
include/quagga/version.h
include/quagga/vty.h
include/quagga/workqueue.h
include/quagga/zassert.h
include/quagga/zclient.h
include/quagga/zebra.h
%%EXAMPLESDIR%%/babeld.conf.sample
%%EXAMPLESDIR%%/bgpd.conf.sample
%%EXAMPLESDIR%%/bgpd.conf.sample2
%%ISISD%%%%EXAMPLESDIR%%/isisd.conf.sample
%%EXAMPLESDIR%%/ospf6d.conf.sample
%%EXAMPLESDIR%%/ospfd.conf.sample
%%EXAMPLESDIR%%/ripd.conf.sample
%%EXAMPLESDIR%%/ripngd.conf.sample
%%EXAMPLESDIR%%/vtysh.conf.sample
%%EXAMPLESDIR%%/zebra.conf.sample
man/man1/vtysh.1.gz
man/man8/bgpd.8.gz
%%ISISD%%man/man8/isisd.8.gz
man/man8/ospf6d.8.gz
man/man8/ospfd.8.gz
%%OSPF_OPAQUE_LSA%%man/man8/ospfclient.8.gz
man/man8/ripd.8.gz
man/man8/ripngd.8.gz
man/man8/watchquagga.8.gz
man/man8/zebra.8.gz
@dir(%%ENABLE_USER%%,%%ENABLE_GROUP%%,750) %%LOCALSTATE_DIR%%
@dir(%%ENABLE_USER%%,%%ENABLE_GROUP%%,750) %%ETCDIR%%