package/frr: new package

FRR is free software that implements and manages various IPv4 and IPv6
routing protocols. It runs on nearly all distributions of Linux and
BSD as well as Solaris and supports all modern CPU architectures.

FRR currently supports the following protocols:

    BGP
    OSPFv2
    OSPFv3
    RIPv1
    RIPv2
    RIPng
    IS-IS
    PIM-SM/MSDP
    LDP
    BFD
    Babel
    PBR
    OpenFabric
    VRRP
    EIGRP (alpha)
    NHRP (alpha)

Some not-needed features were disabled to minimize package
dependencies:

    - POSIX capabilities
    - RPKi

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[Thomas:
 - select bash instead of depending on it
 - switch to version 7.4, since 7.3 was not building (it's using
   TRUE/FALSE, which are not standard, and this was fixed in 7.4)
 - use the github macro to define FRR_SITE
 - use host-python3 instead of host-python]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Vadim Kochan 2020-02-25 17:53:22 +02:00 committed by Thomas Petazzoni
parent d97e54747c
commit 26d82d006b
6 changed files with 142 additions and 0 deletions

View file

@ -2592,6 +2592,7 @@ F: package/tstools/
N: Vadim Kochan <vadim4j@gmail.com>
F: package/brcm-patchram-plus/
F: package/frr/
F: package/gettext-tiny/
F: package/tinyssh/

View file

@ -2055,6 +2055,7 @@ menu "Networking applications"
source "package/fping/Config.in"
source "package/freeswitch/Config.in"
source "package/freeswitch-mod-bcg729/Config.in"
source "package/frr/Config.in"
source "package/gerbera/Config.in"
source "package/gesftpserver/Config.in"
source "package/gloox/Config.in"

25
package/frr/Config.in Normal file
View file

@ -0,0 +1,25 @@
config BR2_PACKAGE_FRR
bool "frr"
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on !BR2_STATIC_LIBS # libyang
depends on BR2_USE_MMU # fork()
depends on BR2_TOOLCHAIN_HAS_SYNC_4 # json-c
select BR2_PACKAGE_BASH
select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash
select BR2_PACKAGE_C_ARES
select BR2_PACKAGE_LIBYANG
select BR2_PACKAGE_LIBNL
select BR2_PACKAGE_READLINE
select BR2_PACKAGE_JSON_C
help
The FRRouting Protocol Suite.
FRR is free software that implements and manages various
IPv4 and IPv6 routing protocols.
https://frrouting.org
comment "frr needs a toolchain w/ threads, dynamic library"
depends on BR2_TOOLCHAIN_HAS_SYNC_4
depends on BR2_USE_MMU
depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS

46
package/frr/S50frr Normal file
View file

@ -0,0 +1,46 @@
#!/bin/sh
DAEMON="frr"
[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
start() {
install -m 755 -o frr -g frr -d /var/run/frr
install -m 755 -o frr -g frr -d /var/log/frr
printf 'Starting %s: ' "$DAEMON"
/usr/sbin/frrinit.sh start
status=$?
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
return "$status"
}
stop() {
printf 'Stopping %s: ' "$DAEMON"
/usr/sbin/frrinit.sh stop
status=$?
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
return "$status"
}
restart() {
stop
sleep 1
start
}
case "$1" in
start|stop|restart)
"$1";;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

3
package/frr/frr.hash Normal file
View file

@ -0,0 +1,3 @@
# Locally calculated
sha256 3c8204fda1c9b178d8446562579bbbc49d134b98f3ad02aa56f68724a2f9e40a frr-7.4.tar.gz
sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING

66
package/frr/frr.mk Normal file
View file

@ -0,0 +1,66 @@
################################################################################
#
# frr
#
################################################################################
FRR_VERSION = 7.4
FRR_SITE = $(call github,FRRouting,frr,frr-$(FRR_VERSION))
FRR_LICENSE = GPL-2.0
FRR_LICENSE_FILES = COPYING
FRR_AUTORECONF = YES
FRR_DEPENDENCIES = host-frr readline json-c \
libyang libnl c-ares
HOST_FRR_DEPENDENCIES = host-flex host-bison host-python3
FRR_CONF_OPTS = --with-clippy=$(HOST_DIR)/bin/clippy \
--sysconfdir=/etc/frr \
--localstatedir=/var/run/frr \
--with-moduledir=/usr/lib/frr/modules \
--enable-configfile-mask=0640 \
--enable-logfile-mask=0640 \
--enable-multipath=256 \
--disable-ospfclient \
--enable-shell-access \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--disable-capabilities \
--enable-fpm
HOST_FRR_CONF_OPTS = --enable-clippy-only
define HOST_FRR_INSTALL_CMDS
$(INSTALL) -D -m 0755 $(@D)/lib/clippy $(HOST_DIR)/bin/clippy
endef
define FRR_INSTALL_CONFIG_FILES
$(foreach f,daemons daemons.conf frr.conf vtysh.conf support_bundle_commands.conf,\
$(INSTALL) -D -m 0640 $(@D)/tools/etc/frr/$(f) \
$(TARGET_DIR)/etc/frr/$(f)
)
$(RM) $(TARGET_DIR)/etc/frr/*.sample
endef
FRR_POST_INSTALL_TARGET_HOOKS += FRR_INSTALL_CONFIG_FILES
define FRR_PERMISSIONS
/etc/frr/daemons f 640 frr frr - - - - -
/etc/frr/daemons.conf f 640 frr frr - - - - -
/etc/frr/frr.conf f 640 frr frr - - - - -
/etc/frr/vtysh.conf f 640 frr frrvty - - - - -
/etc/frr/support_bundle_commands.conf f 640 frr frr
endef
define FRR_USERS
frr -1 frr -1 * /var/run/frr - frrvty FRR user priv
endef
define FRR_INSTALL_INIT_SYSV
$(INSTALL) -D -m 755 $(FRR_PKGDIR)/S50frr \
$(TARGET_DIR)/etc/init.d/S50frr
endef
$(eval $(autotools-package))
$(eval $(host-autotools-package))