From caede8c209b7a88861a03c319d1d1c2f2cc5d059 Mon Sep 17 00:00:00 2001 From: Marcin Krol Date: Sat, 12 Jul 2014 22:20:41 +0000 Subject: [PATCH] - ifenslave is deprecated, use sysfs for managing bond interfaces --- rc-scripts-net-bond.patch | 232 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 rc-scripts-net-bond.patch diff --git a/rc-scripts-net-bond.patch b/rc-scripts-net-bond.patch new file mode 100644 index 0000000..22b7047 --- /dev/null +++ b/rc-scripts-net-bond.patch @@ -0,0 +1,232 @@ +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 \ -- 2.46.0