New port: net/frr

FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms
which includes protocol daemons for BGP, IS-IS, OSPF and RIP. FRR has its roots
in the Quagga project.

WWW: https://frrouting.org/

Sponsored by:   Orange
This commit is contained in:
Olivier Cochard 2017-06-29 21:05:33 +00:00
parent 3550198a2d
commit 0014661d9d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=444689
11 changed files with 419 additions and 3 deletions

4
GIDs
View File

@ -93,7 +93,7 @@ ipv6mon:*:148:
avenger:*:149:
cbsd:*:150:
# free: 151
# free: 152
frrvty:*:152:frr
rbldns:*:153:
trircd:*:154:
xorp:*:155:
@ -109,7 +109,7 @@ lightdm:*:164:
uwsgi:*:165:
yule:*:166:
ceph:*:167:
# free: 168
frr:*:168:
acme:*:169:
tile38:*:170:
sfs:*:171:

2
UIDs
View File

@ -114,7 +114,7 @@ lightdm:*:164:164::0:0:Light Display Manager:/var/lib/lightdm-data:/usr/sbin/nol
uwsgi:*:165:165::0:0:uwsgi Daemon:/nonexistent:/usr/sbin/nologin
yule:*:166:166::0:0:Samhain Daemon:/nonexistent:/usr/sbin/nologin
ceph:*:167:167::0:0:Ceph Daemons:/var/lib/ceph:/usr/sbin/nologin
# free: 168
frr:*:168:168::0:0:FRRouting user:/var/empty:/usr/sbin/nologin
acme:*:169:169::0:0:ACME protocol client:/var/db/acme:/bin/sh
tile38:*:170:170::0:0:Tile38 User:/var/db/tile38:/usr/sbin/nologin
sfs:*:171:171::0:0:Self-Certifying File System:/nonexistent:/usr/sbin/nologin

View File

@ -151,6 +151,7 @@
SUBDIR += freerdp1
SUBDIR += freeswitch
SUBDIR += freevrrpd
SUBDIR += frr
SUBDIR += fspclient
SUBDIR += fspd
SUBDIR += fsplib

81
net/frr/Makefile Normal file
View File

@ -0,0 +1,81 @@
# $FreeBSD$
PORTNAME= frr
PORTVERSION= 2.0
CATEGORIES= net ipv6
MAINTAINER= olivier@FreeBSD.org
COMMENT= IP routing protocol suite including BGP, IS-IS, OSPF and RIP
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/COPYING
BUILD_DEPENDS= gawk:lang/gawk
LIB_DEPENDS= libjson-c.so:devel/json-c
CONFLICTS= openbgpd-[0-9]* openospfd-[0-9]* zebra-0* quagga-re-[0-9]* quagga-[0-9]*
USE_GITHUB= yes
GH_ACCOUNT= FRRouting
GH_PROJECT= frr
GH_TAGNAME= frr-2.0
GNU_CONFIGURE= yes
INSTALL_TARGET= install-strip
USES= autoreconf gmake pkgconfig libtool makeinfo readline
USE_LDCONFIG= yes
INFO= frr
OPTIONS_DEFINE= FPM LDPD PAM SHELLACCESS TCPSOCKETS VTYSH MULTIPATH TCMALLOC
OPTIONS_DEFAULT= VTYSH
OPTIONS_SUB= yes
# SNMP option build failed
# checksum.c:79:21: warning: implicit declaration of function 'typeof' is
# invalid in C99 [-Wimplicit-function-declaration]
# IRDP option needs something freebsd does not seem to have:
# configure: error: 'IRDP requires in_pktinfo at the moment!'
FPM_DESC= Enable Forwarding Plane Manager support
LDPD_DESC= Build ldpd
MULTIPATH_DESC= Enable multipath function
PAM_DESC= Use libpam for PAM support in vtysh
SHELLACCESS_DESC= Allow users to access shell/telnet/ssh
SNMP_DESC= SNMP support
TCMALLOC_DESC= Use tcmalloc
TCPSOCKETS_DESC= Use TCP/IP sockets for protocol daemons
VTYSH_DESC= Build integrated vty shell
USERS= frr
GROUPS= frr frrvty
CPPFLAGS+= -I${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib
INSTALL_TARGET= install-strip
# PIM compile but didn't work on FreeBSD
CONFIGURE_ARGS= --enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--sysconfdir=${ETCDIR} \
--localstatedir=/var/run/frr \
--disable-pimd
SHELLACCESS_CONFIGURE_ENABLE= shell-access
FPM_CONFIGURE_ENABLE= fpm
PAM_CONFIGURE_WITH= libpam
LDPD_CONFIGURE_ENABLE= ldpd
MULTIPATH_CONFIGURE_ON= --enable-multipath=64
TCMALLOC_CONFIGURE_ENABLE= tcmalloc
TCMALLOC_LIB_DEPENDS= libtcmalloc.so:devel/google-perftools
SNMP_CONFIGURE_ENABLE= snmp
SNMP_LIB_DEPENDS= libnetsnmp.so:net-mgmt/net-snmp
TCPSOCKETS_CONFIGURE_ENABLE= tcp-zebra
VTYSH_CONFIGURE_ENABLE= vtysh
USE_RC_SUBR= frr watchfrr
post-install:
${MKDIR} ${STAGEDIR}/var/run/frr
.include <bsd.port.mk>

3
net/frr/distinfo Normal file
View File

@ -0,0 +1,3 @@
TIMESTAMP = 1497785263
SHA256 (FRRouting-frr-2.0-frr-2.0_GH0.tar.gz) = 70259dc379678a7b0c32abd30173034f31876612451e2ffd7d09c52ab22ac05b
SIZE (FRRouting-frr-2.0-frr-2.0_GH0.tar.gz) = 3025536

154
net/frr/files/frr.in Normal file
View File

@ -0,0 +1,154 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: frr
# REQUIRE: netif routing
# KEYWORD: nojail shutdown
# Add the following line to /etc/rc.conf to enable frr:
# frr_enable="YES"
#
# You may also wish to use the following variables to fine-tune startup:
# frr_flags=""
# frr_daemons="zebra ripd ripngd ospfd ospf6d bgpd isisd"
# frr_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 frr_wait_for to a "default" or certain prefix.
# frr_wait_for="default"
# Set the time limit for the wait.
# frr_wait_seconds="90"
#
# If the frr daemons require additional shared libraries to start,
# use the following variable to run ldconfig(8) in advance:
# frr_extralibs_path="/usr/local/lib ..."
#
# This RC script was adapted from the net/quagga port
. /etc/rc.subr
name=frr
rcvar=$name_enable
start_postcmd=start_postcmd
stop_postcmd="rm -f $pidfile"
configtest_cmd=check_config
extra_commands=configtest
command_args="-d"
load_rc_config $name
: ${frr_enable:="NO"}
: ${frr_flags:=""}
: ${frr_daemons:="zebra ripd ripngd ospfd ospf6d bgpd isisd"}
: ${frr_vtysh_boot:="NO"}
: ${frr_wait_for:=""}
: ${frr_wait_seconds:="90"}
check_config()
{
echo "Checking $daemon.conf"
# pimd doesn't support -C
if [ "$daemon" == "pimd" ]; then
echo "Ignored"
else
$command $daemon_flags -C
result=$?
if [ "$result" -eq "0" ]; then
echo "OK"
else
echo "FAILED"
exit
fi
fi
}
start_postcmd()
{
local waited_for
waited_for=0
# Wait only when last daemon has started.
if [ "${frr_daemons}" = "${frr_daemons% ${name}}" ]; then
return;
fi
if [ -n "${frr_wait_for}" ]; then
echo Waiting for ${frr_wait_for} route...
while [ ${waited_for} -lt ${frr_wait_seconds} ]; do
/sbin/route -n get ${frr_wait_for} >/dev/null 2>&1 && break;
waited_for=$((${waited_for}+1))
sleep 1;
done
[ ${waited_for} -lt ${frr_wait_seconds} ] || echo Giving up...
fi
}
do_cmd()
{
local ret
ret=0
for daemon in ${frr_daemons}; do
command=%%PREFIX%%/sbin/${daemon}
required_files=%%ETCDIR%%/${daemon}.conf
pidfile=/var/run/frr/${daemon}.pid
if [ ${frr_cmd} = "restart" -o ${frr_cmd} = "start" ]; then
check_config
fi
if [ ${frr_cmd} = "start" -a ! -f ${required_files} ]; then
continue
fi
if [ ${frr_cmd} = "stop" -a -z $(check_process ${command}) ]; then
continue
fi
eval flags=\$\{${daemon}_flags:-\"${frr_flags}\"\}
name=${daemon}
_rc_restart_done=false
run_rc_command "$1" || ret=1
done
if checkyesno frr_vtysh_boot; then
echo "Booting for integrated-vtysh-config..."
%%PREFIX%%/bin/vtysh -b
fi
return ${ret}
}
frr_cmd=$1
case "$1" in
force*)
frr_cmd=${frr_cmd#force}
;;
fast*)
frr_cmd=${frr_cmd#fast}
;;
esac
shift
if [ $# -ge 1 ]; then
frr_daemons="$*"
fi
case "${frr_cmd}" in
start)
if [ -n "${frr_extralibs_path}" ]; then
/sbin/ldconfig -m ${frr_extralibs_path}
fi
# Why should I need to add this check ?
checkyesno frr_enable && do_cmd "start"
;;
stop)
frr_daemons=$(reverse_list ${frr_daemons})
do_cmd "stop"
;;
restart)
frr_daemons=$(reverse_list ${frr_daemons})
do_cmd "stop"
frr_daemons=$(reverse_list ${frr_daemons})
checkyesno frr_enable && do_cmd "start"
;;
*)
do_cmd "${frr_cmd}"
;;
esac

View File

@ -0,0 +1,11 @@
--- Makefile.am.orig 2017-04-02 05:22:47 UTC
+++ Makefile.am
@@ -3,7 +3,7 @@
SUBDIRS = lib qpb fpm @ZEBRA@ @LIBRFP@ @RFPTEST@ \
@BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @LDPD@ \
@ISISD@ @PIMD@ @WATCHFRR@ @VTYSH@ @OSPFCLIENT@ @DOC@ m4 @pkgsrcdir@ \
- redhat @SOLARIS@ tests tools cumulus snapcraft
+ redhat @SOLARIS@ tests cumulus snapcraft
DIST_SUBDIRS = lib qpb fpm zebra bgpd ripd ripngd ospfd ospf6d ldpd \
isisd watchfrr vtysh ospfclient doc m4 pkgsrc redhat tests \

View File

@ -0,0 +1,11 @@
--- vtysh/vtysh.c.orig 2017-06-27 14:48:26 UTC
+++ vtysh/vtysh.c
@@ -261,7 +261,7 @@ vtysh_pager_init (void)
if (pager_defined)
vtysh_pager_name = strdup (pager_defined);
else
- vtysh_pager_name = strdup ("more");
+ vtysh_pager_name = strdup ("cat");
}
/* Command execution over the vty interface. */

30
net/frr/files/watchfrr.in Normal file
View File

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

5
net/frr/pkg-descr Normal file
View File

@ -0,0 +1,5 @@
FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms
which includes protocol daemons for BGP, IS-IS, OSPF and RIP. FRR has its roots
in the Quagga project.
WWW: https://frrouting.org/

120
net/frr/pkg-plist Normal file
View File

@ -0,0 +1,120 @@
bin/bgp_btoa
%%VTYSH%%bin/vtysh
include/frr/bfd.h
include/frr/bitfield.h
include/frr/buffer.h
include/frr/checksum.h
include/frr/command.h
include/frr/csv.h
include/frr/distribute.h
include/frr/event_counter.h
include/frr/fifo.h
include/frr/filter.h
include/frr/getopt.h
include/frr/hash.h
include/frr/if.h
include/frr/if_rmap.h
include/frr/imsg.h
include/frr/jhash.h
include/frr/json.h
include/frr/keychain.h
include/frr/libospf.h
include/frr/linklist.h
include/frr/log.h
include/frr/md5.h
include/frr/memory.h
include/frr/memory_vty.h
include/frr/mpls.h
include/frr/network.h
include/frr/nexthop.h
include/frr/ns.h
include/frr/openbsd-queue.h
include/frr/openbsd-tree.h
include/frr/ospfapi/ospf_apiclient.h
include/frr/ospfd/ospf_api.h
include/frr/ospfd/ospf_asbr.h
include/frr/ospfd/ospf_dump.h
include/frr/ospfd/ospf_dump_api.h
include/frr/ospfd/ospf_ism.h
include/frr/ospfd/ospf_lsa.h
include/frr/ospfd/ospf_lsdb.h
include/frr/ospfd/ospf_nsm.h
include/frr/ospfd/ospf_opaque.h
include/frr/ospfd/ospfd.h
include/frr/plist.h
include/frr/pqueue.h
include/frr/prefix.h
include/frr/privs.h
include/frr/ptm_lib.h
include/frr/qobj.h
include/frr/route_types.h
include/frr/routemap.h
include/frr/sigevent.h
include/frr/skiplist.h
include/frr/smux.h
include/frr/sockopt.h
include/frr/sockunion.h
include/frr/stream.h
include/frr/systemd.h
include/frr/table.h
include/frr/thread.h
include/frr/vector.h
include/frr/version.h
include/frr/vrf.h
include/frr/vty.h
include/frr/workqueue.h
include/frr/zassert.h
include/frr/zclient.h
include/frr/zebra.h
lib/libfrr.a
lib/libfrr.so
lib/libfrr.so.0
lib/libfrr.so.0.0.0
lib/libfrr_pb.a
lib/libfrr_pb.so
lib/libfrr_pb.so.0
lib/libfrr_pb.so.0.0.0
lib/libfrrfpm_pb.a
lib/libfrrfpm_pb.so
lib/libfrrfpm_pb.so.0
lib/libfrrfpm_pb.so.0.0.0
lib/libfrrospfapiclient.a
lib/libfrrospfapiclient.so
lib/libfrrospfapiclient.so.0
lib/libfrrospfapiclient.so.0.0.0
man/man1/frr.1.gz
man/man8/isisd.8.gz
man/man8/watchfrr.8.gz
%%VTYSH%%man/man1/vtysh.1.gz
man/man8/bgpd.8.gz
%%LDPD%%man/man8/ldpd.8.gz
man/man8/ospf6d.8.gz
man/man8/ospfclient.8.gz
man/man8/ospfd.8.gz
man/man8/ripd.8.gz
man/man8/ripngd.8.gz
man/man8/zebra.8.gz
sbin/bgpd
%%LDPD%%sbin/ldpd
sbin/ospf6d
sbin/ospfclient
sbin/ospfd
sbin/ripd
sbin/ripngd
sbin/zebra
sbin/isisd
sbin/rfptest
sbin/ssd
sbin/watchfrr
%%ETCDIR%%/bgpd.conf.sample
%%ETCDIR%%/bgpd.conf.sample2
%%ETCDIR%%/bgpd.conf.vnc.sample
%%ETCDIR%%/isisd.conf.sample
%%LDPD%%%%ETCDIR%%/ldpd.conf.sample
%%ETCDIR%%/ospf6d.conf.sample
%%ETCDIR%%/ospfd.conf.sample
%%ETCDIR%%/ripd.conf.sample
%%ETCDIR%%/ripngd.conf.sample
%%VTYSH%%%%ETCDIR%%/vtysh.conf.sample
%%ETCDIR%%/zebra.conf.sample
@dir(frr,frr,750) /var/run/frr