remove quagga-unstable from upcoming 8.09 stable release(s)
authorNicolas Thill <nico@openwrt.org>
Sun, 17 May 2009 00:26:50 +0000 (00:26 +0000)
committerNicolas Thill <nico@openwrt.org>
Sun, 17 May 2009 00:26:50 +0000 (00:26 +0000)
SVN-Revision: 15881

net/quagga-unstable/Makefile [deleted file]
net/quagga-unstable/files/quagga [deleted file]
net/quagga-unstable/files/quagga.init [deleted file]
net/quagga-unstable/patches/100-quagga_multipath_caching_policy.patch [deleted file]

diff --git a/net/quagga-unstable/Makefile b/net/quagga-unstable/Makefile
deleted file mode 100644 (file)
index f2a424a..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-#
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-# $Id: Makefile 12175 2008-08-05 22:04:10Z florian $
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=quagga-unstable
-PKG_VERSION:=0.99.11
-PKG_RELEASE:=2
-PKG_MD5SUM:=903e40c744730ad4d62bee872eeb813b
-
-PKG_SOURCE_URL:=http://www.quagga.net/download/ \
-                http://www.de.quagga.net/download/ \
-                http://www.uk.quagga.net/download/
-PKG_SOURCE:=quagga-$(PKG_VERSION).tar.gz
-PKG_BUILD_DIR:=$(BUILD_DIR)/quagga-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/quagga-unstable/Default
-  SECTION:=net
-  CATEGORY:=Network
-  DEPENDS:=quagga-unstable
-  TITLE:=The Quagga Software Routing Suite
-  URL:=http://www.quagga.net
-endef
-
-define Package/quagga-unstable
-  $(call Package/quagga-unstable/Default)
-  DEPENDS:=
-  MENU:=1
-endef
-
-define Package/quagga-unstable/description
-       A routing software package that provides TCP/IP based routing services
-       with routing protocols support such as RIPv1, RIPv2, RIPng, OSPFv2,
-       OSPFv3, BGP-4, and BGP-4+
-
-endef
-
-define Package/quagga-unstable-libzebra
-  $(call Package/quagga-unstable/Default)
-  TITLE:=zebra library
-endef
-
-define Package/quagga-unstable-libospf
-  $(call Package/quagga-unstable/Default)
-  TITLE:=OSPF library
-endef
-
-define Package/quagga-unstable-bgpd
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libzebra
-  TITLE:=BGPv4, BGPv4+, BGPv4- routing engine
-endef
-
-define Package/quagga-unstable-isisd
-  $(call Package/quagga-unstable/Default)
-  TITLE:=IS-IS routing engine
-endef
-
-define Package/quagga-unstable-ospfd
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libospf quagga-unstable-libzebra
-  TITLE:=OSPFv2 routing engine
-endef
-
-define Package/quagga-unstable-ospf6d
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libospf quagga-unstable-libzebra
-  TITLE:=OSPFv3 routing engine
-endef
-
-define Package/quagga-unstable-ripd
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libzebra
-  TITLE:=RIP routing engine
-endef
-
-define Package/quagga-unstable-ripngd
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libzebra
-  TITLE:=RIPNG routing engine
-endef
-
-define Package/quagga-unstable-vtysh
-  $(call Package/quagga-unstable/Default)
-  DEPENDS += quagga-unstable-libzebra +libreadline +libncurses
-  TITLE:=integrated shell for Quagga routing software
-endef
-
-define Build/Configure
-       $(call Build/Configure/Default, \
-               --localstatedir=/var/run/quagga \
-               --sysconfdir=/etc/quagga/ \
-               --enable-shared \
-               --disable-static \
-               --enable-ipv6 \
-               --enable-vtysh \
-               --enable-user=quagga \
-               --enable-group=quagga \
-               --enable-multipath=8 \
-               --enable-isisd \
-       )
-endef
-
-define Build/Compile   
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               DESTDIR=$(PKG_INSTALL_DIR) \
-               all install
-endef
-
-define Package/quagga-unstable/install 
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/zebra $(1)/usr/sbin/
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/watchquagga $(1)/usr/sbin/
-       # avoid /etc being set to 0750
-       $(INSTALL_DIR) $(1)/etc/quagga/
-       chmod 0750 $(1)/etc/quagga/
-       $(INSTALL_DIR) $(1)/etc/init.d/
-       $(INSTALL_BIN) ./files/quagga $(1)/usr/sbin/quagga.init
-       $(INSTALL_BIN) ./files/quagga.init $(1)/etc/init.d/quagga
-       $(INSTALL_DIR) $(1)/var/run/quagga
-endef
-
-define Package/quagga-unstable/postinst
-#!/bin/sh
-  
-name=quagga
-id=51
-  
-# do not change below
-# check if we are on real system
-if [ -z "$${IPKG_INSTROOT}" ]; then
-       # create copies of passwd and group, if we use squashfs
-       rootfs=`mount |awk '/root/ { print $$5 }'`
-       if [ "$$rootfs" = "squashfs" ]; then
-               if [ -h /etc/group ]; then
-                       rm /etc/group
-                       cp /rom/etc/group /etc/group
-               fi
-               if [ -h /etc/passwd ]; then
-                       rm /etc/passwd
-                       cp /rom/etc/passwd /etc/passwd
-               fi
-       fi
-fi
-
-echo ""
-if [ -z "$$(grep ^\\$${name}: $${IPKG_INSTROOT}/etc/group)" ]; then 
-       echo "adding group $$name to /etc/group"
-       echo "$${name}:x:$${id}:" >> $${IPKG_INSTROOT}/etc/group  
-fi
-
-if [ -z "$$(grep ^\\$${name}: $${IPKG_INSTROOT}/etc/passwd)" ]; then 
-       echo "adding user $$name to /etc/passwd"
-       echo "$${name}:x:$${id}:$${id}:$${name}:/tmp/.$${name}:/bin/false" >> $${IPKG_INSTROOT}/etc/passwd
-fi
-
-grep -q '^zebra[[:space:]]*2601/tcp' $${IPKG_INSTROOT}/etc/services 2>/dev/null
-if [ $$? -ne 0 ]; then  
-echo "zebrasrv      2600/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "zebra         2601/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "ripd          2602/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "ripngd        2603/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "ospfd         2604/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "bgpd          2605/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "ospf6d        2606/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "ospfapi       2607/tcp" >>$${IPKG_INSTROOT}/etc/services
-echo "isisd         2608/tcp" >>$${IPKG_INSTROOT}/etc/services
-fi
-endef
-
-define Package/quagga-unstable-bgpd/install    
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bgpd $(1)/usr/sbin/
-endef
-
-define Package/quagga-unstable-isisd/install
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/isisd $(1)/usr/sbin
-endef
-
-define Package/quagga-unstable-ospfd/install   
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospfd $(1)/usr/sbin/
-endef
-
-define Package/quagga-unstable-ospf6d/install  
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ospf6d $(1)/usr/sbin/
-endef
-
-define Package/quagga-unstable-ripd/install    
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripd $(1)/usr/sbin/
-endef
-
-define Package/quagga-unstable-ripngd/install  
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ripngd $(1)/usr/sbin/
-endef
-
-define Package/quagga-unstable-vtysh/install   
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/
-endef
-
-define Package/quagga-unstable-libospf/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libospf.so.* $(1)/usr/lib/
-endef
-
-define Package/quagga-unstable-libzebra/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libzebra.so.* $(1)/usr/lib
-endef
-
-$(eval $(call BuildPackage,quagga-unstable))
-$(eval $(call BuildPackage,quagga-unstable-libzebra))
-$(eval $(call BuildPackage,quagga-unstable-libospf))
-$(eval $(call BuildPackage,quagga-unstable-bgpd))
-$(eval $(call BuildPackage,quagga-unstable-isisd))
-$(eval $(call BuildPackage,quagga-unstable-ospfd))
-$(eval $(call BuildPackage,quagga-unstable-ospf6d))
-$(eval $(call BuildPackage,quagga-unstable-ripd))
-$(eval $(call BuildPackage,quagga-unstable-ripngd))
-$(eval $(call BuildPackage,quagga-unstable-vtysh))
diff --git a/net/quagga-unstable/files/quagga b/net/quagga-unstable/files/quagga
deleted file mode 100644 (file)
index 01f8d71..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-#!/bin/sh
-#
-# quagga       Starts/stops quagga daemons and watchquagga.
-#              Create a daemon.conf file to have that routing daemon
-#              started/stopped automagically when using this script
-#              without any daemon names as args.
-#              If watchquagga 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/quagga
-STATEDIR=/var/run/quagga
-DAEMONS="zebra ripd ripngd ospfd ospf6d bgpd"
-DAEMON_FLAGS=-d
-WATCHQUAGGA_FLAGS="-d -z -T 60 -R"
-WATCHQUAGGA_CMD="$0 watchrestart"
-if [ ${COMMAND} != "watchrestart" ]
-then
-       DAEMONS="${DAEMONS} watchquagga"
-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 watchquagga"
-                       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
-               WATCHQUAGGA_DAEMONS=${START_DAEMONS}
-               if is_in watchquagga "${DAEMONS_STARTSEQ}"
-               then
-                       START_DAEMONS="${START_DAEMONS} watchquagga"
-               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 quagga:quagga ${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 quagga:quagga ${CONFDIR}
-       [ -d ${STATEDIR} ] || mkdir -p ${STATEDIR} \
-       || die "${ME}: could not create state directory ${STATEDIR} - exiting."
-       chown -R quagga:quagga ${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 quagga:quagga ${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}" = "watchquagga" ]
-                       then
-                               $("${BINDIR}/${d}" \
-                                       ${WATCHQUAGGA_FLAGS} \
-                                       "${WATCHQUAGGA_CMD}" \
-                                       ${WATCHQUAGGA_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/net/quagga-unstable/files/quagga.init b/net/quagga-unstable/files/quagga.init
deleted file mode 100644 (file)
index 21fbf2c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
-
-START=60
-start() {
-       /usr/sbin/quagga.init start
-}
-
-stop() {
-       /usr/sbin/quagga.init stop
-}
diff --git a/net/quagga-unstable/patches/100-quagga_multipath_caching_policy.patch b/net/quagga-unstable/patches/100-quagga_multipath_caching_policy.patch
deleted file mode 100644 (file)
index 1213b04..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-diff -urN quagga-0.99.11/configure.ac quagga-0.99.11.new/configure.ac
---- quagga-0.99.11/configure.ac        2008-10-02 10:31:09.000000000 +0200
-+++ quagga-0.99.11.new/configure.ac    2008-11-22 20:58:12.000000000 +0100
-@@ -385,7 +385,7 @@
- AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
-       sys/types.h linux/version.h netdb.h asm/types.h \
-       sys/param.h limits.h signal.h libutil.h \
--      sys/socket.h netinet/in.h])
-+      sys/socket.h netinet/in.h linux/ip_mp_alg.h])
- dnl Utility macro to avoid retyping includes all the time
- m4_define([QUAGGA_INCLUDES],
-@@ -755,6 +755,17 @@
- AC_SUBST(KERNEL_METHOD)
- AC_SUBST(OTHER_METHOD)
-+dnl ----------
-+dnl Check for RTA_MP_ALGO in linux/rtnetlink.h
-+dnl ----------
-+AC_MSG_CHECKING(for support of multipath alg. in netlink)
-+  if grep RTA_MP_ALGO linux/rtnetlink.h >/dev/null 2>&1; then
-+    AC_DEFINE(HAVE_RT_MP_ALGO,,RTA_MP exist in rtnetlink)
-+    AC_MSG_RESULT(yes)
-+  else
-+    AC_MSG_RESULT(no)
-+  fi
-+
- dnl --------------------------
- dnl Determine IS-IS I/O method
- dnl --------------------------
-diff -urN quagga-0.99.11/lib/command.h quagga-0.99.11.new/lib/command.h
---- quagga-0.99.11/lib/command.h       2008-09-09 22:18:57.000000000 +0200
-+++ quagga-0.99.11.new/lib/command.h   2008-11-22 20:48:07.000000000 +0100
-@@ -101,6 +101,7 @@
-   DUMP_NODE,                  /* Packet dump node. */
-   FORWARDING_NODE,            /* IP forwarding node. */
-   PROTOCOL_NODE,                /* protocol filtering node */
-+  MULTIPATH_NODE,             /* Multipath policy node */
-   VTY_NODE,                   /* Vty node. */
- };
-@@ -272,6 +273,7 @@
- /* Common descriptions. */
- #define SHOW_STR "Show running system information\n"
- #define IP_STR "IP information\n"
-+#define MULTIPATH_STR "Configure multipath policy\n"
- #define IPV6_STR "IPv6 information\n"
- #define NO_STR "Negate a command or set its defaults\n"
- #define REDIST_STR "Redistribute information from another routing protocol\n"
-diff -urN quagga-0.99.11/lib/zebra.h quagga-0.99.11.new/lib/zebra.h
---- quagga-0.99.11/lib/zebra.h 2008-09-24 17:22:51.000000000 +0200
-+++ quagga-0.99.11.new/lib/zebra.h     2008-11-22 20:48:44.000000000 +0100
-@@ -168,6 +168,10 @@
- #define RT_TABLE_MAIN         0
- #endif /* HAVE_NETLINK */
-+#ifdef HAVE_LINUX_IP_MP_ALG_H
-+#include <linux/ip_mp_alg.h>
-+#endif /* HAVE_LINUX_IP_MP_ALG_H */
-+
- #ifdef HAVE_NETDB_H
- #include <netdb.h>
- #endif /* HAVE_NETDB_H */
-diff -urN quagga-0.99.11/zebra/main.c quagga-0.99.11.new/zebra/main.c
---- quagga-0.99.11/zebra/main.c        2008-09-05 16:27:26.000000000 +0200
-+++ quagga-0.99.11.new/zebra/main.c    2008-11-22 20:48:44.000000000 +0100
-@@ -44,6 +44,7 @@
- struct zebra_t zebrad =
- {
-   .rtm_table_default = 0,
-+  .mpath = 0,
- };
- /* process id. */
-diff -urN quagga-0.99.11/zebra/multipath.h quagga-0.99.11.new/zebra/multipath.h
---- quagga-0.99.11/zebra/multipath.h   1970-01-01 01:00:00.000000000 +0100
-+++ quagga-0.99.11.new/zebra/multipath.h       2008-11-22 20:48:44.000000000 +0100
-@@ -0,0 +1,37 @@
-+/*
-+ * multipath policy names.
-+ *
-+ * This file is part of Quagga routing suite.
-+ *
-+ * Quagga is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * Quagga is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with GNU Zebra; see the file COPYING.  If not, write to the Free
-+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-+ * 02111-1307, USA.
-+ */
-+
-+#ifndef ZEBRA_MULTIPATH_H
-+#define ZEBRA_MULTIPATH_H
-+#include <zebra.h>
-+
-+#ifdef HAVE_LINUX_IP_MP_ALG_H
-+
-+static char *mp_alg_names[IP_MP_ALG_MAX+1] = {
-+                        [IP_MP_ALG_NONE] = "none",
-+                        [IP_MP_ALG_RR] = "rr",
-+                        [IP_MP_ALG_DRR] = "drr",
-+                        [IP_MP_ALG_RANDOM] = "random",
-+                        [IP_MP_ALG_WRANDOM] = "wrandom"
-+                      };
-+#endif
-+#endif
-+
-diff -urN quagga-0.99.11/zebra/rt_netlink.c quagga-0.99.11.new/zebra/rt_netlink.c
---- quagga-0.99.11/zebra/rt_netlink.c  2008-09-05 16:27:26.000000000 +0200
-+++ quagga-0.99.11.new/zebra/rt_netlink.c      2008-11-22 20:48:44.000000000 +0100
-@@ -36,6 +36,7 @@
- #include "thread.h"
- #include "privs.h"
-+#include "multipath.h"
- #include "zebra/zserv.h"
- #include "zebra/rt.h"
- #include "zebra/redistribute.h"
-@@ -1694,6 +1695,16 @@
-       if (src)
-         addattr_l (&req.n, sizeof req, RTA_PREFSRC, &src->ipv4, bytelen);
-+#ifdef HAVE_RT_MP_ALGO
-+       if (zebrad.mpath != IP_MP_ALG_NONE)
-+       {
-+             if (IS_ZEBRA_DEBUG_KERNEL)
-+                        zlog_debug("netlink_route_multipath() (multihop): "
-+                                 "multipath policy : %s",mp_alg_names[zebrad.mpath]);
-+
-+            addattr_l (&req.n, 1024, RTA_MP_ALGO, &zebrad.mpath, sizeof(zebrad.mpath));
-+       }
-+#endif 
-       if (rta->rta_len > RTA_LENGTH (0))
-         addattr_l (&req.n, 1024, RTA_MULTIPATH, RTA_DATA (rta),
-                    RTA_PAYLOAD (rta));
-diff -urN quagga-0.99.11/zebra/zserv.c quagga-0.99.11.new/zebra/zserv.c
---- quagga-0.99.11/zebra/zserv.c       2008-09-24 17:22:51.000000000 +0200
-+++ quagga-0.99.11.new/zebra/zserv.c   2008-11-22 20:48:44.000000000 +0100
-@@ -36,6 +36,7 @@
- #include "privs.h"
- #include "network.h"
- #include "buffer.h"
-+#include "multipath.h"
- #include "zebra/zserv.h"
- #include "zebra/router-id.h"
-@@ -1120,6 +1121,9 @@
-   /* Set table number. */
-   client->rtm_table = zebrad.rtm_table_default;
-+  /* Set multipath policy */
-+  client->mpath = zebrad.mpath;
-+
-   /* Add this client to linked list. */
-   listnode_add (zebrad.client_list, client);
-   
-@@ -1697,6 +1701,91 @@
- };
\f
-+#ifdef HAVE_RT_MP_ALGO
-+DEFUN (multipath_rr,
-+       multipath_rr_cmd,
-+       "multipath rr",
-+       MULTIPATH_STR
-+       "Round Robin multipath policy")
-+{
-+        zebrad.mpath=IP_MP_ALG_RR;
-+        return CMD_SUCCESS;
-+}
-+
-+DEFUN (multipath_drr,
-+       multipath_drr_cmd,
-+       "multipath drr",
-+       MULTIPATH_STR
-+       "Device round robin multipath policy")
-+{
-+        zebrad.mpath=IP_MP_ALG_DRR;
-+        return CMD_SUCCESS;
-+}
-+
-+DEFUN (multipath_random,
-+       multipath_random_cmd,
-+       "multipath random",
-+       MULTIPATH_STR
-+       "Random multipath policy")
-+{
-+        zebrad.mpath=IP_MP_ALG_RANDOM;
-+        return CMD_SUCCESS;
-+}
-+
-+DEFUN (multipath_wrandom,
-+       multipath_wrandom_cmd,
-+       "multipath wrandom",
-+      MULTIPATH_STR
-+       "Weighted random multipath policy")
-+{
-+         zebrad.mpath=IP_MP_ALG_WRANDOM;
-+         return CMD_SUCCESS;
-+}
-+
-+DEFUN (no_multipath,
-+      no_multipath_cmd,
-+      "no multipath",
-+      NO_STR
-+      MULTIPATH_STR
-+      "Remove multipath policy")
-+{
-+      zebrad.mpath=IP_MP_ALG_NONE;
-+      return CMD_SUCCESS;
-+}
-+
-+DEFUN (show_multipath,
-+      show_multipath_cmd,
-+      "show multipath",
-+      SHOW_STR
-+      "Show multipath policy")
-+{
-+        vty_out (vty, "multipath %s%s", mp_alg_names[zebrad.mpath],
-+                           VTY_NEWLINE);
-+      return CMD_SUCCESS;
-+}
-+
-+/* multipath policy configuration write function. */
-+static int
-+config_write_multipath (struct vty *vty)
-+{
-+
-+
-+  if (zebrad.mpath)
-+    vty_out (vty, "multipath %s%s", mp_alg_names[zebrad.mpath],
-+           VTY_NEWLINE);
-+  return 0;
-+}
-+
-+/* table node for multipath policy. */
-+struct cmd_node multipath_node =
-+{
-+        MULTIPATH_NODE,
-+        "",                           
-+        1
-+};
-+
-+#endif /* HAVE_RT_MP_ALGO */
-+
- /* Initialisation of zebra and installation of commands. */
- void
- zebra_init (void)
-@@ -1715,6 +1804,10 @@
-   install_node (&table_node, config_write_table);
-   install_node (&forwarding_node, config_write_forwarding);
-+#ifdef HAVE_RT_MP_ALGO
-+  install_node (&multipath_node, config_write_multipath);
-+#endif
-+
-   install_element (VIEW_NODE, &show_ip_forwarding_cmd);
-   install_element (ENABLE_NODE, &show_ip_forwarding_cmd);
-   install_element (CONFIG_NODE, &ip_forwarding_cmd);
-@@ -1725,6 +1818,14 @@
-   install_element (VIEW_NODE, &show_table_cmd);
-   install_element (ENABLE_NODE, &show_table_cmd);
-   install_element (CONFIG_NODE, &config_table_cmd);
-+#ifdef HAVE_RT_MP_ALGO
-+  install_element (CONFIG_NODE, &multipath_rr_cmd);
-+  install_element (CONFIG_NODE, &multipath_drr_cmd);
-+  install_element (CONFIG_NODE, &multipath_random_cmd);
-+  install_element (CONFIG_NODE, &multipath_wrandom_cmd);
-+  install_element (CONFIG_NODE, &no_multipath_cmd);
-+  install_element (ENABLE_NODE, &show_multipath_cmd);
-+#endif /* HAVE_RT_MP_ALGO */
- #endif /* HAVE_NETLINK */
- #ifdef HAVE_IPV6
-diff -urN quagga-0.99.11/zebra/zserv.h quagga-0.99.11.new/zebra/zserv.h
---- quagga-0.99.11/zebra/zserv.h       2008-09-24 17:22:51.000000000 +0200
-+++ quagga-0.99.11.new/zebra/zserv.h   2008-11-22 20:48:44.000000000 +0100
-@@ -55,6 +55,9 @@
-   /* default routing table this client munges */
-   int rtm_table;
-+  /* multipath policy */
-+  u_int32_t mpath;
-+
-   /* This client's redistribute flag. */
-   u_char redist[ZEBRA_ROUTE_MAX];
-@@ -78,6 +81,9 @@
-   /* default table */
-   int rtm_table_default;
-+  /* multipath policy */
-+  u_int32_t mpath;
-+
-   /* rib work queue */
-   struct work_queue *ribq;
-   struct meta_queue *mq;