diff -ruN quagga-0.99.4/zebra/ip_mp_alg.h quagga-0.99.4.mpalgo/zebra/ip_mp_alg.h
--- quagga-0.99.4/zebra/ip_mp_alg.h	1970-01-01 01:00:00.000000000 +0100
+++ quagga-0.99.4.mpalgo/zebra/ip_mp_alg.h	2006-07-05 13:40:39.000000000 +0200
@@ -0,0 +1,26 @@
+/* ip_mp_alg.h: IPV4 multipath algorithm support, user-visible values.
+ *
+ * Copyright (C) 2004, 2005 Einar Lueck <elueck@de.ibm.com>
+ * Copyright (C) 2005 David S. Miller <davem@davemloft.net>
+ */
+
+#ifndef _LINUX_IP_MP_ALG_H
+#define _LINUX_IP_MP_ALG_H
+
+enum ip_mp_alg {
+	IP_MP_ALG_NONE,
+	IP_MP_ALG_RR,
+	IP_MP_ALG_DRR,
+	IP_MP_ALG_RANDOM,
+	IP_MP_ALG_WRANDOM,
+	__IP_MP_ALG_MAX
+};
+
+/* Routing message attributes */
+
+#define RTA_MP_ALGO 14
+
+#define IP_MP_ALG_MAX (__IP_MP_ALG_MAX - 1)
+
+#endif /* _LINUX_IP_MP_ALG_H */
+
diff -ruN quagga-0.99.4/zebra/rt_netlink.c quagga-0.99.4.mpalgo/zebra/rt_netlink.c
--- quagga-0.99.4/zebra/rt_netlink.c	2006-01-31 21:56:03.000000000 +0100
+++ quagga-0.99.4.mpalgo/zebra/rt_netlink.c	2006-07-05 13:40:28.000000000 +0200
@@ -42,6 +42,8 @@
 #include "zebra/interface.h"
 #include "zebra/debug.h"
 
+#include "ip_mp_alg.h"
+
 /* Socket interface to kernel */
 struct nlsock
 {
@@ -1449,6 +1451,10 @@
 
   addattr_l (&req.n, sizeof req, RTA_DST, &p->u.prefix, bytelen);
 
+  /* Multipath algorithm */
+  u_int32_t mp_alg = IP_MP_ALG_RR;
+  addattr_l (&req.n, sizeof req, RTA_MP_ALGO, &mp_alg, sizeof mp_alg);
+
   /* Metric. */
   addattr32 (&req.n, sizeof req, RTA_PRIORITY, rib->metric);
 

