On Tue, Dec 18, 2007 at 09:09:18PM +0100, Guus Sliepen wrote:
> On Tue, Dec 18, 2007 at 06:53:20PM +0100, Guido Guenther wrote:
> 
> > since bonding can be configured via sysfs it's very convenient to
> > set the bonding options in /etc/network/interfaces instead of at module
> > load time. This is especially handy when you have multiple bonding
> > interfaces. This patch adds support for the bond, miimon and primary
> > options. More can easily be added, just let me know. I've prefixed all
> > the options with bond_ to avoid namespace clashes.
> > Please apply,
> 
> Ah, that would be nice! However your email did not contain the patch.
> Perhaps you forgot to attach it?
It's attached now.
 -- Guido
commit ce009a7cfc4b67a3a13381d27557297dc5ae43fd
Author: Guido Guenther <[EMAIL PROTECTED]>
Date:   Wed Dec 19 09:36:31 2007 +0100

    support bonding options via /etc/network/interfaces

diff --git a/debian/README.debian b/debian/README.debian
index 1492fd5..7f639a0 100644
--- a/debian/README.debian
+++ b/debian/README.debian
@@ -18,6 +18,15 @@ iface bond0 inet static
 
 The "slaves" option can take a list of network interfaces, the keyword "none"
 (with obvious results) and the keyword "all" (which selects all interfaces with
-"eth" in their name).
+"eth" in their name). Additionally you can set bonding options by adding them
+to the interface section:
+
+	bond_mode    active-backup
+	bond_primary eth0
+
+This would run the bonding device in active backup mode with eth0 as primary.
+Supported options are bond_mode, bond_miimon, bond_primary, bond_updelay,
+bond_downdelay, bond_arp_ip_target, bond_arp_interval, bond_xmit_hash_policy
+and bond_lacp_rate.
 
 Guus Sliepen <[EMAIL PROTECTED]>, Fri, 30 Sep 2005 14:33:06 +0200
diff --git a/debian/pre-up b/debian/pre-up
index 854010a..44783b4 100644
--- a/debian/pre-up
+++ b/debian/pre-up
@@ -2,11 +2,25 @@
 
 IFENSLAVE=/sbin/ifenslave
 IFSTATE=/etc/network/run/ifstate
+BOND_PARAMS=/sys/class/net/$IFACE/bonding/
 
 if [ ! -x $IFENSLAVE ] ; then
 	exit 0
 fi
 
+
+add_master()
+{
+    if [ ! -r /sys/class/net/bonding_masters ]; then
+        modprobe bonding >/dev/null 2>&1 || true
+    fi
+
+    if ! grep -sq "$IFACE[[:space:]]" /sys/class/net/bonding_masters; then
+        echo +$IFACE > /sys/class/net/bonding_masters
+    fi
+}
+
+
 case "$IF_SLAVES" in
 	"")
 		exit 0
@@ -22,7 +36,34 @@ case "$IF_SLAVES" in
 		;;
 esac
 
+
 if [ -n "$INTERFACES" ] ; then
+		add_master
+
+		if [ "$IF_BOND_MODE" ]; then
+			echo $IF_BOND_MODE > $BOND_PARAMS/mode
+	        fi
+		if [ "$IF_BOND_MIIMON" ]; then
+			echo $IF_BOND_MIIMON > $BOND_PARAMS/miimon
+	        fi
+		if [ "$IF_BOND_UPDELAY" ]; then
+			echo $IF_BOND_UPDELAY > $BOND_PARAMS/updelay
+	        fi
+		if [ "$IF_BOND_DOWNDELAY" ]; then
+			echo $IF_BOND_DOWNDELAY > $BOND_PARAMS/downdelay
+	        fi
+		if [ "$IF_BOND_ARP_IP_TARGET" ]; then
+			echo $IF_BOND_ARP_IP_TARGET > $BOND_PARAMS/arp_ip_target
+	        fi
+		if [ "$IF_BOND_ARP_INTERVAL" ]; then
+			echo $IF_BOND_ARP_INTERVAL > $BOND_PARAMS/arp_interval
+	        fi
+		if [ "$IF_BOND_XMIT_HASH_POLICY" ]; then
+			echo $IF_BOND_XMIT_HASH_POLICY > $BOND_PARAMS/xmit_hash_policy
+	        fi
+		if [ "$IF_BOND_LACP_RATE" ]; then
+			echo $IF_BOND_LACP_RATE > $BOND_PARAMS/lacp_rate
+	        fi
 		ifconfig "$IFACE" up
 		for slave in $INTERFACES ; do
 				if grep -q "^$slave=" $IFSTATE ; then
@@ -32,4 +73,7 @@ if [ -n "$INTERFACES" ] ; then
 					$IFENSLAVE "$IFACE" "$slave"
 				fi
 		done
+		if [ "$IF_BOND_PRIMARY" ]; then
+			echo $IF_BOND_PRIMARY > $BOND_PARAMS/primary
+	        fi
 fi

Reply via email to