From b249cf8683cc0cf0f0175377eb253314d506f479 Mon Sep 17 00:00:00 2001 From: Lucian Cristian Date: Sun, 13 Aug 2017 15:28:23 +0300 Subject: [PATCH] frr: [RFC] add FFRouting 3.0-rc1, a Quagga fork LDP is marked BROKEN because of missing Perl-XML-LibXML from tree this version is the initial test release for LEDE/OpenWRT Signed-off-by: Lucian Cristian --- frr/Makefile | 348 +++++++++++++++++++++++++ frr/files/frr | 335 ++++++++++++++++++++++++ frr/files/frr.conf | 7 + frr/files/frr.init | 10 + frr/files/vtysh.conf | 7 + frr/patches/101-u_short_fix.patch | 10 + frr/patches/102-include_ethernet.patch | 10 + frr/patches/103-vtysh_fix_pager.patch | 11 + 8 files changed, 738 insertions(+) create mode 100644 frr/Makefile create mode 100644 frr/files/frr create mode 100644 frr/files/frr.conf create mode 100644 frr/files/frr.init create mode 100644 frr/files/vtysh.conf create mode 100644 frr/patches/101-u_short_fix.patch create mode 100644 frr/patches/102-include_ethernet.patch create mode 100644 frr/patches/103-vtysh_fix_pager.patch diff --git a/frr/Makefile b/frr/Makefile new file mode 100644 index 0000000000..d7dde440a5 --- /dev/null +++ b/frr/Makefile @@ -0,0 +1,348 @@ +# +# Copyright (C) 2017 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:=3.0-rc1 +PKG_RELEASE:=1 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/FRRouting/frr.git +PKG_SOURCE_VERSION:=c47b10cae1e0a623589692d6bd8793c2a17ed29a +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_CONFIG_DEPENDS:= \ + CONFIG_IPV6 \ + CONFIG_PACKAGE_frr-watchfrr \ + CONFIG_PACKAGE_frr-zebra \ + CONFIG_PACKAGE_frr-libfrr \ + CONFIG_PACKAGE_frr-bgpd \ + CONFIG_PACKAGE_frr-ldpd \ + CONFIG_PACKAGE_frr-isisd \ + CONFIG_PACKAGE_frr-nhrpd \ + CONFIG_PACKAGE_frr-ospfd \ + CONFIG_PACKAGE_frr-ospf6d \ + CONFIG_PACKAGE_frr-pimd \ + CONFIG_PACKAGE_frr-ripd \ + CONFIG_PACKAGE_frr-ripngd \ + CONFIG_PACKAGE_frr-vtysh +PKG_BUILD_PARALLEL:=1 +PKG_FIXUP:=autoreconf +PKG_INSTALL:=1 +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/frr/Default + SECTION:=net + CATEGORY:=Network + SUBMENU:=Routing and Redirection + DEPENDS:=frr + TITLE:=The FRRouting (FRR) Software Routing Suite + URL:=https://www.frrouting.org/ + MAINTAINER:=Lucian Cristian +endef + +define Package/frr + $(call Package/frr/Default) + DEPENDS:=+librt + MENU:=1 +endef + +define Package/frr/description + FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms which + includes protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP. +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 +endef + +define Package/frr-libfrr + $(call Package/frr/Default) + TITLE:=zebra library + DEPENDS+=+libjson-c +endef + +define Package/frr-bgpd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr + TITLE:=BGPv4, BGPv4+, BGPv4- routing engine +endef + +define Package/frr-ldpd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr @BROKEN + TITLE:=LDP routing engine +endef + +define Package/frr-isisd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr + TITLE:=IS-IS routing engine +endef + +define Package/frr-nhrpd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr +libcares + TITLE:=NHRP routing engine +endef + +define Package/frr-ospfd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr + TITLE:=OSPFv2 routing engine +endef + +define Package/frr-ospf6d + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr @IPV6 + TITLE:=OSPFv3 routing engine +endef + +define Package/frr-pimd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr + TITLE:=PIM routing engine +endef + +define Package/frr-ripd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr + TITLE:=RIP routing engine +endef + +define Package/frr-ripngd + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr @IPV6 + TITLE:=RIPNG routing engine +endef + +define Package/frr-vtysh + $(call Package/frr/Default) + DEPENDS+=+frr-libfrr +libreadline +libncurses + TITLE:=integrated shell for frr routing software +endef + +define Package/frr-zebra/conffiles +/etc/frr/zebra.conf +endef + +define Package/frr-bgpd/conffiles +/etc/frr/bgpd.conf +endef + +define Package/frr-isisd/conffiles +/etc/frr/isisd.conf +endef + +define Package/frr-ldpd/conffiles +/etc/frr/ldpd.conf +endef + +define Package/frr-nhrpd/conffiles +/etc/frr/nhrpd.conf +endef + +define Package/frr-ospfd/conffiles +/etc/frr/ospfd.conf +endef + +define Package/frr-ospf6d/conffiles +/etc/frr/ospf6d.conf +endef + +define Package/frr-pimd/conffiles +/etc/frr/pimd.conf +endef + +define Package/frr-ripd/conffiles +/etc/frr/ripd.conf +endef + +define Package/frr-ripngd/conffiles +/etc/frr/ripngd.conf +endef + +ifneq ($(SDK),) +CONFIG_PACKAGE_frr-libfrr:=m +CONFIG_PACKAGE_frr-watchfrr:=m +CONFIG_PACKAGE_frr-zebra:=m +CONFIG_PACKAGE_frr-bgpd:=m +CONFIG_PACKAGE_frr-isisd:=m +CONFIG_PACKAGE_frr-ldpd:=m +CONFIG_PACKAGE_frr-nhrpd:=m +CONFIG_PACKAGE_frr-ospfd:=m +CONFIG_PACKAGE_frr-ospf6d:=m +CONFIG_PACKAGE_frr-pimd:=m +CONFIG_PACKAGE_frr-ripd:=m +CONFIG_PACKAGE_frr-ripngd:=m +CONFIG_PACKAGE_frr-vtysh:=m +endif + +CONFIGURE_ARGS+= \ + --host="$(GNU_TARGET_NAME)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + HOST_CFLAGS="$(BUILD_CFLAGS)" \ + BUILD_CPPFLAGS="$(TARGET_CPPLAGS)" \ + BUILD_CFLAGS="$(TARGET_CFLAGS)" \ + BUILD_LDFLAGS="$(TARGET_LDFLAGS)" \ + --localstatedir=/var/run/frr \ + --sysconfdir=/etc/frr/ \ + --enable-shared \ + --disable-static \ + --enable-user=network \ + --enable-group=network \ + --enable-multipath=8 \ + --disable-ospfclient \ + --disable-capabilities \ + --disable-doc \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-libfrr,zebra) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-bgpd,bgpd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-ldpd,ldpd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-isisd,isisd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-nhrpd,nhrpd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-ospfd,ospfd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-ospf6d,ospf6d) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-pimd,pimd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-ripd,ripd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-ripngd,ripngd) \ + $(call autoconf_bool,CONFIG_PACKAGE_frr-vtysh,vtysh) \ + +MAKE_FLAGS += \ + CFLAGS="$(TARGET_CFLAGS)" \ + CPPFLAGS="$(TARGET_CPPLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" + +define Package/frr/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) ./files/frr $(1)/usr/sbin/frr.init + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/frr.init $(1)/etc/init.d/frr +endef + +define Package/frr-watchfrr/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/watchfrr $(1)/usr/sbin/ +endef + +define Package/frr-zebra/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/zebra $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/zebra.conf +endef + +define Package/frr-bgpd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bgpd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/bgpd.conf +endef + +define Package/frr-isisd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/isisd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/isisd.conf +endef + +define Package/frr-ldpd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ldpd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/ldpd.conf +endef + +define Package/frr-nhrpd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/nhrpd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/nhrpd.conf +endef + +define Package/frr-ospfd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospfd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/ospfd.conf +endef + +define Package/frr-ospf6d/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospf6d $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/ospf6d.conf +endef + +define Package/frr-pimd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/pimd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/pimd.conf +endef + +define Package/frr-ripd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/ripd.conf +endef + +define Package/frr-ripngd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripngd $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/frr.conf $(1)/etc/frr/ripngd.conf +endef + +define Package/frr-vtysh/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc/frr + chmod 0750 $(1)/etc/frr + $(INSTALL_CONF) ./files/vtysh.conf $(1)/etc/frr/ +endef + +define Package/frr-libfrr/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfrr.so.* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,frr)) +$(eval $(call BuildPackage,frr-libfrr)) +$(eval $(call BuildPackage,frr-watchfrr)) +$(eval $(call BuildPackage,frr-zebra)) +$(eval $(call BuildPackage,frr-bgpd)) +$(eval $(call BuildPackage,frr-isisd)) +$(eval $(call BuildPackage,frr-ldpd)) +$(eval $(call BuildPackage,frr-nhrpd)) +$(eval $(call BuildPackage,frr-ospfd)) +$(eval $(call BuildPackage,frr-ospf6d)) +$(eval $(call BuildPackage,frr-pimd)) +$(eval $(call BuildPackage,frr-ripd)) +$(eval $(call BuildPackage,frr-ripngd)) +$(eval $(call BuildPackage,frr-vtysh)) diff --git a/frr/files/frr b/frr/files/frr new file mode 100644 index 0000000000..c4491130c6 --- /dev/null +++ b/frr/files/frr @@ -0,0 +1,335 @@ +#!/bin/sh +# +# frr Starts/stops frr daemons and watchfrr. +# Create a daemon.conf file to have that routing daemon +# started/stopped automagically when using this script +# without any daemon names as args. +# If watchfrr is available, it will also be +# started/stopped if the script is called without +# any daemon names. +# + +ME=$(basename $0) + +usage() { + echo "Usage: ${ME} {start|stop|restart} [daemon ...]" + exit 2 +} + +if [ -z "$1" ] +then + usage +else + COMMAND=$1 +fi +shift +ARG_DAEMONS=$* +BINDIR=/usr/sbin +CONFDIR=/etc/frr +STATEDIR=/var/run/frr +RUNUSER=network +RUNGROUP=$RUNUSER +DAEMONS="zebra bgpd ldpd isisd nhrpd ospfd ospf6d pimd ripd ripngd" +DAEMON_FLAGS=-d +WATCHFRR_FLAGS="-d -z -T 60 -R" +WATCHFRR_CMD="$0 watchrestart" +if [ ${COMMAND} != "watchrestart" -a -x "${BINDIR}/watchfrr" ] +then + DAEMONS="${DAEMONS} watchfrr" +fi +DAEMONS_STARTSEQ=${DAEMONS} + +reverse() +{ + local revlist r + revlist= + for r + do + revlist="$r $revlist" + done + echo $revlist +} + +DAEMONS_STOPSEQ=$(reverse ${DAEMONS_STARTSEQ}) + +#pidof() { +# ps ax | awk 'match($5, "(^|/)'"$1"'$") > 0 { printf " %s", $1 }' +#} + +quit() { + echo "${ME}: $1" + exit 0 +} + +die() { + echo "${ME}: $1" + exit 1 +} + +is_in() { + local i + for i in $2 + do + [ "$1" = "$i" ] && return 0 + done + return 1 +} + +select_subset() { + local unknown i j + unknown= + RESULT= + for i in $1 + do + is_in $i "$2" || unknown="$unknown $i" + done + if [ -n "$unknown" ] + then + RESULT=$unknown + return 1 + else + for j in $2 + do + is_in $j "$1" && RESULT="$RESULT $j" + done + return 0 + fi +} + +# check command + +case ${COMMAND} +in + start|stop|restart) + ;; + watchrestart) + if [ -n "$ARG_DAEMONS" ] + then + echo "${ME}: watchrestart mode is only for use by watchfrr" + exit 2 + fi + ;; + *) + usage + ;; +esac + +# select daemons to start + +case ${COMMAND} +in + start|restart|watchrestart) + START_DAEMONS= + for d in ${DAEMONS_STARTSEQ} + do + [ -x "${BINDIR}/${d}" -a -f "${CONFDIR}/${d}.conf" ] \ + && START_DAEMONS="${START_DAEMONS}${d} " + done + WATCHFRR_DAEMONS=${START_DAEMONS} + if is_in watchfrr "${DAEMONS_STARTSEQ}" + then + START_DAEMONS="${START_DAEMONS} watchfrr" + fi + if [ -n "${ARG_DAEMONS}" ] + then + if select_subset "${ARG_DAEMONS}" "${DAEMONS}" + then + if select_subset "${ARG_DAEMONS}" "${START_DAEMONS}" + then + START_DAEMONS=${RESULT} + else + die "these daemons are not startable:${RESULT}." + fi + else + die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." + fi + fi + ;; +esac + +# select daemons to stop + +case ${COMMAND} +in + stop|restart|watchrestart) + STOP_DAEMONS=${DAEMONS_STOPSEQ} + if [ -n "${ARG_DAEMONS}" ] + then + if select_subset "${ARG_DAEMONS}" "${STOP_DAEMONS}" + then + STOP_DAEMONS=${RESULT} + else + die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." + fi + fi + stop_daemons= + for d in ${STOP_DAEMONS} + do + pidfile=${STATEDIR}/${d}.pid + if [ -f "${pidfile}" -o -n "$(pidof ${d})" ] + then + stop_daemons="${stop_daemons}${d} " + elif [ -n "${ARG_DAEMONS}" ] + then + echo "${ME}: found no ${d} process running." + fi + done + STOP_DAEMONS=${stop_daemons} + ;; +esac + +# stop daemons + +for d in $STOP_DAEMONS +do + echo -n "${ME}: Stopping ${d} ... " + pidfile=${STATEDIR}/${d}.pid + if [ -f "${pidfile}" ] + then + file_pid=$(cat ${pidfile}) + if [ -z "${file_pid}" ] + then + echo -n "no pid file entry found ... " + fi + else + file_pid= + echo -n "no pid file found ... " + fi + proc_pid=$(pidof ${d}) + if [ -z "${proc_pid}" ] + then + echo -n "found no ${d} process running ... " + else + count=0 + notinpidfile= + for p in ${proc_pid} + do + count=$((${count}+1)) + if kill ${p} + then + echo -n "killed ${p} ... " + else + echo -n "failed to kill ${p} ... " + fi + [ "${p}" = "${file_pid}" ] \ + || notinpidfile="${notinpidfile} ${p}" + done + [ ${count} -le 1 ] \ + || echo -n "WARNING: ${count} ${d} processes were found running ... " + for n in ${notinpidfile} + do + echo -n "WARNING: process ${n} was not in pid file ... " + done + fi + count=0 + survivors=$(pidof ${d}) + while [ -n "${survivors}" ] + do + sleep 1 + count=$((${count}+1)) + survivors=$(pidof ${d}) + [ -z "${survivors}" -o ${count} -gt 5 ] && break + for p in ${survivors} + do + sleep 1 + echo -n "${p} " + kill ${p} + done + done + survivors=$(pidof ${d}) + [ -n "${survivors}" ] && \ + if kill -KILL ${survivors} + then + echo -n "KILLed ${survivors} ... " + else + echo -n "failed to KILL ${survivors} ... " + fi + sleep 1 + survivors=$(pidof ${d}) + if [ -z "${survivors}" ] + then + echo -n "done." + if [ -f "${pidfile}" ] + then + rm -f ${pidfile} \ + || echo -n " Failed to remove pidfile." + fi + else + echo -n "failed to stop ${survivors} - giving up." + if [ "${survivors}" != "${file_pid}" ] + then + if echo "${survivors}" > ${pidfile} + then + chown ${RUNUSER}:${RUNGROUP} ${pidfile} + echo -n " Wrote ${survivors} to pidfile." + else + echo -n " Failed to write ${survivors} to pidfile." + fi + fi + fi + echo +done + +# start daemons + +if [ -n "$START_DAEMONS" ] +then + [ -d ${CONFDIR} ] \ + || quit "${ME}: no config directory ${CONFDIR} - exiting." + chown -R ${RUNUSER}:${RUNGROUP} ${CONFDIR} + [ -d ${STATEDIR} ] || mkdir -p ${STATEDIR} \ + || die "${ME}: could not create state directory ${STATEDIR} - exiting." + chown -R ${RUNUSER}:${RUNGROUP} ${STATEDIR} + + for d in $START_DAEMONS + do + echo -n "${ME}: Starting ${d} ... " + proc_pid=$(pidof ${d}) + pidfile=${STATEDIR}/${d}.pid + file_pid= + if [ -f "${pidfile}" ] + then + file_pid=$(cat ${pidfile}) + if [ -n "${file_pid}" ] + then + echo -n "found old pid file entry ${file_pid} ... " + fi + fi + if [ -n "${proc_pid}" ] + then + echo -n "found ${d} running (${proc_pid}) - skipping ${d}." + if [ "${proc_pid}" != "${file_pid}" ] + then + if echo "${proc_pid}" > ${pidfile} + then + chown ${RUNUSER}:${RUNGROUP} ${pidfile} + echo -n " Wrote ${proc_pid} to pidfile." + else + echo -n " Failed to write ${proc_pid} to pidfile." + fi + fi + elif rm -f "${pidfile}" + then + if [ "${d}" = "watchfrr" ] + then + "${BINDIR}/${d}" \ + ${WATCHFRR_FLAGS} \ + "${WATCHFRR_CMD}" \ + ${WATCHFRR_DAEMONS} + status=$? + else + "${BINDIR}/${d}" ${DAEMON_FLAGS} + status=$? + fi + if [ $status -eq 0 ] + then + echo -n "done." + else + echo -n "failed." + fi + else + echo -n " failed to remove pidfile." + fi + echo + done +fi diff --git a/frr/files/frr.conf b/frr/files/frr.conf new file mode 100644 index 0000000000..fb7a54e33c --- /dev/null +++ b/frr/files/frr.conf @@ -0,0 +1,7 @@ +password zebra +! +access-list vty permit 127.0.0.0/8 +access-list vty deny any +! +line vty + access-class vty diff --git a/frr/files/frr.init b/frr/files/frr.init new file mode 100644 index 0000000000..b62116eaf8 --- /dev/null +++ b/frr/files/frr.init @@ -0,0 +1,10 @@ +#!/bin/sh /etc/rc.common + +START=60 +start() { + /usr/sbin/frr.init start +} + +stop() { + /usr/sbin/frr.init stop +} diff --git a/frr/files/vtysh.conf b/frr/files/vtysh.conf new file mode 100644 index 0000000000..4e0a2beb44 --- /dev/null +++ b/frr/files/vtysh.conf @@ -0,0 +1,7 @@ +! +! Sample configuration file for vtysh. +! +!service integrated-vtysh-config +!hostname quagga-router +!username root nopassword +! diff --git a/frr/patches/101-u_short_fix.patch b/frr/patches/101-u_short_fix.patch new file mode 100644 index 0000000000..9b6283a4ff --- /dev/null +++ b/frr/patches/101-u_short_fix.patch @@ -0,0 +1,10 @@ +--- a/lib/log.h 2017-08-13 05:11:58.624824609 +0300 ++++ b/lib/log.h 2017-08-13 05:12:10.020121314 +0300 +@@ -25,6 +25,7 @@ + + #include + #include ++#include + + /* Here is some guidance on logging levels to use: + * diff --git a/frr/patches/102-include_ethernet.patch b/frr/patches/102-include_ethernet.patch new file mode 100644 index 0000000000..bb56b68e63 --- /dev/null +++ b/frr/patches/102-include_ethernet.patch @@ -0,0 +1,10 @@ +--- a/zebra/if_netlink.c 2017-08-13 04:59:26.779456946 +0300 ++++ b/zebra/if_netlink.c 2017-08-13 05:00:14.856453707 +0300 +@@ -22,6 +22,7 @@ + + #include + #include ++#include + #include + #include + diff --git a/frr/patches/103-vtysh_fix_pager.patch b/frr/patches/103-vtysh_fix_pager.patch new file mode 100644 index 0000000000..811f8ce830 --- /dev/null +++ b/frr/patches/103-vtysh_fix_pager.patch @@ -0,0 +1,11 @@ +--- a/vtysh/vtysh.c 2017-08-13 19:34:50.552975949 +0300 ++++ b/vtysh/vtysh.c 2017-08-13 19:35:15.891427915 +0300 +@@ -249,7 +249,7 @@ + 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. */