# # Copyright (C) 2019 Lucian Cristian # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk PKG_NAME:=frr PKG_VERSION:=7.2 PKG_RELEASE:=1 PKG_SOURCE_URL:=https://github.com/FRRouting/frr/releases/download/$(PKG_NAME)-$(PKG_VERSION)/ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_HASH:=6cd5bfb6975133ccf23cc3f3a1c1c9a3f6d6a6c792c763b3ea010db75b3de5b3 PKG_MAINTAINER:=Lucian Cristian PKG_DAEMON_AVAILABLE:= \ babeld \ bfdd \ bgpd \ eigrpd \ fabricd \ isisd \ ldpd \ nhrpd \ ospfd \ ospf6d \ pbrd \ pimd \ ripd \ ripngd \ staticd \ vrrpd PKG_CONFIG_DEPENDS:= \ CONFIG_IPV6 \ CONFIG_FRR_OPENSSL \ CONFIG_FRR_INTERNAL \ CONFIG_PACKAGE_frr-libfrr \ CONFIG_PACKAGE_frr-vtysh \ CONFIG_PACKAGE_frr-watchfrr \ CONFIG_PACKAGE_frr-zebra \ $(patsubst %,CONFIG_PACKAGE_frr-%,$(PKG_DAEMON_AVAILABLE)) \ PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=python3/host PKG_FIXUP:=autoreconf PKG_LICENSE:=GPL-2.0 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk define Package/frr-libfrr/config source "$(SOURCE)/Config.in" endef define Package/frr/Default SECTION:=net CATEGORY:=Network SUBMENU:=Routing and Redirection URL:=https://www.frrouting.org/ DEPENDS:=frr endef define Package/frr $(call Package/frr/Default) DEPENDS:=+librt TITLE:=The FRRouting (FRR) Software Routing Suite MENU:=1 endef define Package/frr/description FRRouting is free software that implements and manages various IPv4 and IPv6 routing protocols. Currently FRRouting supports BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1, RIPv2, RIPng, IS-IS, PIM-SM/MSDP, LDP, VRRP and Babel as well as very early support for EIGRP and NHRP. endef define Package/frr-libfrr $(call Package/frr/Default) TITLE:=zebra library DEPENDS+=+librt +libjson-c +libyang +FRR_OPENSSL:libopenssl CONFLICTS:=quagga-libzebra endef define Package/frr-vtysh $(call Package/frr/Default) DEPENDS+=+frr-libfrr +libreadline +libncurses +more TITLE:=integrated shell for frr routing software CONFLICTS:=quagga-vtysh endef define Package/frr-watchfrr $(call Package/frr/Default) TITLE:=frr watchdog DEPENDS+=+frr-libfrr DEFAULT:=y if PACKAGE_frr endef define Package/frr-zebra $(call Package/frr/Default) TITLE:=Zebra daemon DEPENDS+=+frr-libfrr DEFAULT:=y if PACKAGE_frr CONFLICTS:=quagga-zebra endef ##Migrate from quagga ##should test file exists and link in frr folder #define Package/frr/postinst ##!/bin/sh #if [ -f /etc/quagga/ospfd.conf ]; then # ls to /etc/frr # sed enable ospfd daemon #fi #exit 0 #endef define BuildDaemon define Package/frr-$(1) $$(call Package/frr/Default) TITLE:= $(1) routing engine DEPENDS+=frr-libfrr $(2) endef define Package/frr-$(1)/install $(INSTALL_DIR) $$(1)/usr/sbin if [ "$(1)" != "fabricd" ]; then \ $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/$(1)/.libs/$(1) $$(1)/usr/sbin/; \ else \ $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/isisd/.libs/$(1) $$(1)/usr/sbin/; fi if [ "$(1)" == "nhrpd" ]; then \ $(INSTALL_DIR) $$(1)/usr/lib; \ $(CP) $(PKG_BUILD_DIR)/build/lib/.libs/libfrrcares.so* $$(1)/usr/lib/; fi endef $$(eval $$(call BuildPackage,frr-$(1))) endef define Package/frr-libfrr/conffiles /etc/frr/ endef define Build/Prepare $(Build/Prepare/Default) mkdir -p $(PKG_BUILD_DIR)/build endef define Build/Configure ( cd $(PKG_BUILD_DIR)/build/ ; \ ../configure \ --host="$(GNU_TARGET_NAME)" \ --build="$(GNU_HOST_NAME)" \ CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \ HOST_CFLAGS="$(HOST_CFLAGS)" \ HOST_LDFLAGS="$(HOST_LDFLAGS)" \ BUILD_CPPFLAGS="$(TARGET_CPPLAGS)" \ BUILD_CFLAGS="$(TARGET_CFLAGS)" \ BUILD_LDFLAGS="$(TARGET_LDFLAGS)" \ --prefix=/usr \ --enable-shared \ --disable-static \ --enable-user=network \ --enable-group=network \ --enable-multipath=16 \ --disable-capabilities \ --disable-ospfclient \ --disable-doc \ --disable-backtrace \ --localstatedir=/var/run/frr \ --sysconfdir=/etc/frr/ \ $(if $(CONFIG_FRR_OPENSSL),--with-crypto=openssl,) \ $(foreach m,$(PKG_DAEMON_AVAILABLE), \ $(if $(CONFIG_PACKAGE_frr-$(m)),--enable-$(m),--disable-$(m)) ) \ ) endef # just speed it up NUM_CORES ?= $(shell grep -c "vendor_id" /proc/cpuinfo) define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR)/build -j$(NUM_CORES) endef define Package/frr/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) ./files/frrcommon.sh $(1)/usr/sbin/ $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/frr $(1)/etc/init.d/ endef define Package/frr-watchfrr/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) ./files/watchfrr.sh $(1)/usr/sbin/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/watchfrr/.libs/watchfrr $(1)/usr/sbin/ endef define Package/frr-zebra/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/build/zebra/.libs/zebra $(1)/usr/sbin/ endef define Package/frr-libfrr/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_BUILD_DIR)/build/lib/.libs/libfrr.so* $(1)/usr/lib/ $(INSTALL_DIR) $(1)/etc/frr chmod 0750 $(1)/etc/frr $(INSTALL_CONF) ./files/{frr.conf,daemons} $(1)/etc/frr/ endef $(eval $(call HostBuild)) $(eval $(call BuildPackage,frr)) $(eval $(call BuildPackage,frr-libfrr)) $(eval $(call BuildPackage,frr-watchfrr)) $(eval $(call BuildPackage,frr-zebra)) $(eval $(call BuildPackage,frr-vtysh)) $(eval $(call BuildDaemon,babeld,)) $(eval $(call BuildDaemon,bfdd,)) $(eval $(call BuildDaemon,bgpd,)) $(eval $(call BuildDaemon,eigrpd,)) $(eval $(call BuildDaemon,fabricd,)) $(eval $(call BuildDaemon,isisd,)) $(eval $(call BuildDaemon,ldpd,)) $(eval $(call BuildDaemon,nhrpd,+libcares)) $(eval $(call BuildDaemon,ospfd,)) $(eval $(call BuildDaemon,ospf6d,@IPV6)) $(eval $(call BuildDaemon,pbrd,)) $(eval $(call BuildDaemon,pimd,)) $(eval $(call BuildDaemon,ripd,)) $(eval $(call BuildDaemon,ripngd,@IPV6)) $(eval $(call BuildDaemon,staticd,)) $(eval $(call BuildDaemon,vrrpd,))