diff -urN rc-scripts-0.4.12.orig/lib/ifdown rc-scripts-0.4.12/lib/ifdown --- rc-scripts-0.4.12.orig/lib/ifdown 2014-06-10 06:55:19.000000000 +0000 +++ rc-scripts-0.4.12/lib/ifdown 2014-07-12 18:44:23.637000000 +0000 @@ -118,25 +118,6 @@ ip addr del ${IP4ADDR} label ${SUBDEVICE} dev ${DEVICE} else LC_ALL=C ip addr flush dev ${DEVICE} 2>&1 | grep -v "Nothing to flush" - - if [ ${DEVICETYPE} = "bond" ]; then - if [ ! -x /sbin/ifenslave ]; then - nls "%s is missing. Can't continue." "/sbin/ifenslave" - exit 1 - fi - - # get up the bonding device before enslaving - if ! check_device_down "${DEVICE}"; then - ip link set ${DEVICE} up - fi - - for BSVAR in $(awk '/Slave Interface:/{ print $3}' /proc/net/bonding/${DEVICE}); do - if [ "${BSVAR}" ]; then - ifenslave -d ${DEVICE} $BSVAR - fi - done - fi - ip link set ${DEVICE} down fi diff -urN rc-scripts-0.4.12.orig/lib/ifdown-bond rc-scripts-0.4.12/lib/ifdown-bond --- rc-scripts-0.4.12.orig/lib/ifdown-bond 1970-01-01 00:00:00.000000000 +0000 +++ rc-scripts-0.4.12/lib/ifdown-bond 2014-07-12 22:00:34.509000000 +0000 @@ -0,0 +1,54 @@ +#!/bin/sh +# +# ifdown-bond - bonding configuration script +# Copyright (C) 2014 Marcin Krol +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +PATH=/sbin:/usr/sbin:/bin:/usr/bin + +. /etc/sysconfig/network +. /etc/rc.d/init.d/functions +. /lib/rc-scripts/functions.network + +CONFIG=$1 +source_config + +if [ "x${2}" = "xboot" ] && is_no "${ONBOOT}"; then + exit +fi + +# set all major variables +setup_ip_param + +# forget all addresses +LC_ALL=C ip addr flush dev ${DEVICE} 2>&1 | grep -v "Nothing to flush" + +# release slave devices +for SLAVE_DEV in $(cat /sys/class/net/${DEVICE}/bonding/slaves); do + echo "-${SLAVE_DEV}" > /sys/class/net/${DEVICE}/bonding/slaves +done + +# bring bonding master down +ip link set ${DEVICE} down + +# remove bonding master +if grep -wq "${DEVICE}" /sys/class/net/bonding_masters; then + echo "-${DEVICE}" > /sys/class/net/bonding_masters + if [ $? -ne 0 ]; then + exit 1 + fi +fi diff -urN rc-scripts-0.4.12.orig/lib/ifup rc-scripts-0.4.12/lib/ifup --- rc-scripts-0.4.12.orig/lib/ifup 2014-06-10 06:55:19.000000000 +0000 +++ rc-scripts-0.4.12/lib/ifup 2014-07-12 21:58:42.147000000 +0000 @@ -89,18 +89,12 @@ exit 1 fi -if is_yes "$SLAVE" && [ ! -x /sbin/ifenslave ]; then - nls "%s is missing. Can't continue." "/sbin/ifenslave" - exit 1 -fi - -if is_yes "$SLAVE" && [ -n "$MASTER" -a -x /sbin/ifenslave ]; then - RFLAG="" && is_yes "${RECIEVE-ONLY}" && RFLAG="-r" - - ip link set ${DEVICE} down - nls "Enslaving %s to %s" "$DEVICE" "$MASTER" - ifenslave $RFLAG "$MASTER" "$DEVICE" - +if is_yes "$SLAVE" && [ -n "$MASTER" ]; then + if ! grep -wq "${DEVICE}" /sys/class/net/${MASTER}/bonding/slaves 2>/dev/null; then + nls "Enslaving %s to %s" "$DEVICE" "$MASTER" + ip link set dev ${DEVICE} down + echo "+${DEVICE}" > /sys/class/net/${MASTER}/bonding/slaves 2>/dev/null + fi if [ -n "$ETHTOOL_OPTS" ] ; then /sbin/ethtool -s $DEVICE $ETHTOOL_OPTS fi diff -urN rc-scripts-0.4.12.orig/lib/ifup-bond rc-scripts-0.4.12/lib/ifup-bond --- rc-scripts-0.4.12.orig/lib/ifup-bond 1970-01-01 00:00:00.000000000 +0000 +++ rc-scripts-0.4.12/lib/ifup-bond 2014-07-12 22:08:02.953000000 +0000 @@ -0,0 +1,75 @@ +#!/bin/sh +# +# ifup-bond - bonding configuration script +# Copyright (C) 2014 Marcin Krol +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +PATH=/sbin:/usr/sbin:/bin:/usr/bin + +. /etc/sysconfig/network +. /etc/rc.d/init.d/functions +. /lib/rc-scripts/functions.network + +CONFIG=$1 +source_config + +if [ "x${2}" = "xboot" ] && is_no "${ONBOOT}"; then + exit +fi + +# check for bonding support +if [ ! -f /sys/class/net/bonding_masters ]; then + modprobe -s bonding || exit 1 + # delete default bond0 + echo "-bond0" > /sys/class/net/bonding_masters +fi + +# set all major variables +setup_ip_param + +# create bonding master +if ! grep -wq "${DEVICE}" /sys/class/net/bonding_masters; then + echo "+${DEVICE}" > /sys/class/net/bonding_masters + if [ $? -eq 0 ]; then + ip link set dev ${DEVICE} multicast ${MULTICAST} ${ARP} + else + exit 1 + fi +fi + +# add the bits to setup driver parameters here +# taken from Fedora initscripts +for arg in ${BONDING_OPTS} ; do + key=${arg%%=*}; + value=${arg##*=}; + if [ "${key}" = "arp_ip_target" -a "${value:0:1}" != "+" ]; then + OLDIFS=$IFS; + IFS=','; + for arp_ip in $value; do + if ! grep -q $arp_ip /sys/class/net/${DEVICE}/bonding/$key; then + echo +$arp_ip > /sys/class/net/${DEVICE}/bonding/$key + fi + done + IFS=$OLDIFS; + elif [ "${key}" = "arp_ip_target" ]; then + if ! grep -q ${value#+} /sys/class/net/${DEVICE}/bonding/$key; then + echo "$value" > /sys/class/net/${DEVICE}/bonding/$key + fi + elif [ "${key}" != "primary" ]; then + echo $value > /sys/class/net/${DEVICE}/bonding/$key + fi +done diff -urN rc-scripts-0.4.12.orig/lib/Makefile.am rc-scripts-0.4.12/lib/Makefile.am --- rc-scripts-0.4.12.orig/lib/Makefile.am 2013-11-02 20:50:20.000000000 +0000 +++ rc-scripts-0.4.12/lib/Makefile.am 2014-07-12 22:01:57.571000000 +0000 @@ -10,6 +10,7 @@ scriptsdir = @exec_prefix@/lib/$(PACKAGE) scripts_SCRIPTS = \ + ifdown-bond \ ifdown-br \ ifdown-irda \ ifdown-ppp \ @@ -17,6 +18,7 @@ ifdown-sl \ ifdown-vlan \ ifup-aliases \ + ifup-bond \ ifup-br \ ifup-ipx \ ifup-irda \ diff -urN rc-scripts-0.4.12.orig/lib/Makefile.in rc-scripts-0.4.12/lib/Makefile.in --- rc-scripts-0.4.12.orig/lib/Makefile.in 2014-07-12 11:45:17.000000000 +0000 +++ rc-scripts-0.4.12/lib/Makefile.in 2014-07-12 22:01:50.605000000 +0000 @@ -256,6 +256,7 @@ #scriptsdir = @networkscriptsdir@ scriptsdir = @exec_prefix@/lib/$(PACKAGE) scripts_SCRIPTS = \ + ifdown-bond \ ifdown-br \ ifdown-irda \ ifdown-ppp \ @@ -263,6 +264,7 @@ ifdown-sl \ ifdown-vlan \ ifup-aliases \ + ifup-bond \ ifup-br \ ifup-ipx \ ifup-irda \