aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick McLean <chutzpah@gentoo.org>2020-11-20 22:52:48 -0800
committerLars Wendler <polynomial-c@gentoo.org>2021-03-11 17:53:33 +0100
commit2eca000593194ef3bcf099b8bb1003bb5ea4292f (patch)
treee3dfe1e94f76579ca654ba021b4f51211b41bf69
parentnet.example: Add example for network namespace support (diff)
downloadnetifrc-2eca000593194ef3bcf099b8bb1003bb5ea4292f.tar.gz
netifrc-2eca000593194ef3bcf099b8bb1003bb5ea4292f.tar.bz2
netifrc-2eca000593194ef3bcf099b8bb1003bb5ea4292f.zip
net/bonding.sh: Add support for network namespaces
Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
-rw-r--r--net/bonding.sh57
1 files changed, 31 insertions, 26 deletions
diff --git a/net/bonding.sh b/net/bonding.sh
index 880f69b..1757a89 100644
--- a/net/bonding.sh
+++ b/net/bonding.sh
@@ -12,13 +12,18 @@ bonding_depend()
if [ ! -d /sys/class/net ]; then
program /sbin/ifenslave
fi
+
+ local netns
+ eval netns="\$netns_${IFVAR}"
+ [ -n "${netns}" ] && program ip
+ return 0
}
_config_vars="$_config_vars slaves"
_is_bond()
{
- [ -f "/proc/net/bonding/${IFACE}" ]
+ _netns [ -f "/proc/net/bonding/${IFACE}" ]
}
bonding_pre_start()
@@ -52,7 +57,7 @@ bonding_pre_start()
# We can create the interface name we like now, but this
# requires sysfs
if ! _exists && [ -d /sys/class/net ]; then
- echo "+${IFACE}" > /sys/class/net/bonding_masters
+ _netns echo "+${IFACE}" \> /sys/class/net/bonding_masters
fi
_exists true || return 1
@@ -68,13 +73,13 @@ bonding_pre_start()
# we configure all other options
# mode needs to be done before all other options.
# miimon needs to be done BEFORE downdelay
- [ -d /sys/class/net ] && for n in mode miimon; do
+ _netns [ -d /sys/class/net ] && for n in mode miimon; do
x=/sys/class/net/"${IFACE}"/bonding/$n
- [ -f "${x}" ] || continue
+ _netns [ -f "${x}" ] || continue
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}"
- echo "${s}" >"${x}" || \
+ _netns echo "${s}" \>"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi
done
@@ -82,19 +87,19 @@ bonding_pre_start()
# With a leading '+' as a prefix.
n=arp_ip_target
x=/sys/class/net/"${IFACE}"/bonding/$n
- [ -d /sys/class/net ] && if [ -f "$x" ]; then
+ _netns [ -d /sys/class/net ] && if _netns [ -f "$x" ]; then
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
for i in $s; do
einfo "Adding ${n}: ${i}"
- echo "+${i/+/}" >"${x}" || \
+ _netns echo "+${i/+/}" \>"${x}" || \
eerror "Failed to add $i (${n}_${IFVAR})"
done
fi
fi
# Nice and dynamic for remaining options:)
- [ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/*; do
- [ -f "${x}" ] || continue
+ _netns [ -d /sys/class/net ] && for x in $(_netns glob /sys/class/net/"${IFACE}"/bonding/\*); do
+ _netns [ -f "${x}" ] || continue
n=${x##*/}
# These entries are already handled above.
case "$n" in
@@ -106,7 +111,7 @@ bonding_pre_start()
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}"
- echo "${s}" >"${x}" || \
+ _netns echo "${s}" \>"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi
done
@@ -145,9 +150,9 @@ bonding_pre_start()
unset oiface
eoutdent
# subsume (presumably kernel auto-)configured IP
- if [ -x "$(command -v ip)" ]; then
- ip link set ${IFACE} up
- ip address add ${addr} dev ${IFACE}
+ if [ -x "$(command -v ip 2>/dev/null)" ]; then
+ _netns ip link set ${IFACE} up
+ _netns ip address add ${addr} dev ${IFACE}
else
ifconfig ${IFACE} ${addr} up
fi
@@ -171,7 +176,7 @@ bonding_pre_start()
# set mtu: ifenslave, kernel
# set slave MAC: ifenslave, kernel
eoutdent
- if [ -d /sys/class/net ]; then
+ if _netns [ -d /sys/class/net ]; then
sys_bonding_path=/sys/class/net/"${IFACE}"/bonding
local oiface
oiface=$IFACE
@@ -179,20 +184,20 @@ bonding_pre_start()
IFACE=$primary
_down
IFACE=$oiface
- echo "+${primary}" >$sys_bonding_path/slaves
- echo "${primary}" >$sys_bonding_path/primary
+ _netns echo "+${primary}" \> $sys_bonding_path/slaves
+ _netns echo "${primary}" \> $sys_bonding_path/primary
fi
for s in ${slaves}; do
[ "${s}" = "${primary}" ] && continue
- if ! grep -q ${s} $sys_bonding_path/slaves; then
+ if ! _netns grep -q ${s} $sys_bonding_path/slaves; then
IFACE=$s
_down
IFACE=$oiface
- echo "+${s}" >$sys_bonding_path/slaves
+ _netns echo "+${s}" \> $sys_bonding_path/slaves
fi
done
else
- ifenslave "${IFACE}" ${slaves} >/dev/null
+ _netns ifenslave "${IFACE}" ${slaves} >/dev/null
fi
eend $?
@@ -206,7 +211,7 @@ bonding_stop()
# Wipe subsumed interface
if [ -n "${subsume}" ]; then
if [ -x "$(command -v ip)" ]; then
- ip address flush dev ${subsume}
+ _netns ip address flush dev ${subsume}
else
ifconfig ${subsume} 0.0.0.0
fi
@@ -214,7 +219,7 @@ bonding_stop()
local slaves= s=
slaves=$( \
- sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \
+ _netns sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \
| tr '\n' ' ' \
)
[ -z "${slaves}" ] && return 0
@@ -224,12 +229,12 @@ bonding_stop()
eindent
einfo "${slaves}"
eoutdent
- if [ -d /sys/class/net ]; then
+ if _netns [ -d /sys/class/net ]; then
for s in ${slaves}; do
- echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves
+ _netns echo -"${s}" \> /sys/class/net/"${IFACE}"/bonding/slaves
done
else
- ifenslave -d "${IFACE}" ${slaves}
+ _netns ifenslave -d "${IFACE}" ${slaves}
fi
# reset all slaves
@@ -244,8 +249,8 @@ bonding_stop()
_down
- if [ -d /sys/class/net ]; then
- echo "-${IFACE}" > /sys/class/net/bonding_masters
+ if _netns [ -d /sys/class/net ]; then
+ _netns echo "-${IFACE}" \> /sys/class/net/bonding_masters
fi
eend 0