1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00

ctdb/tests/eventscripts: Improve ip command stub secondary handling

It should support primary and secondaries per network instead of per
interface.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
This commit is contained in:
Martin Schwenke 2014-01-28 16:07:53 +11:00 committed by Amitay Isaacs
parent e5778cc172
commit 1640f36d58

View File

@ -143,7 +143,7 @@ ip_addr_show ()
if [ -z "$devices" ] ; then
# No device specified? Get all the primaries...
devices=$(ls "${FAKE_IP_STATE}/addresses/"*-primary 2>/dev/null | \
sed -e 's@.*/@@' -e 's@-primary$@@')
sed -e 's@.*/@@' -e 's@-.*-primary$@@' | sort -u)
fi
calc_brd ()
{
@ -157,27 +157,33 @@ ip_addr_show ()
}
show_iface()
{
pf="${FAKE_IP_STATE}/addresses/${dev}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-secondary"
ip_link_show "$dev"
if $primary && [ -r "$pf" ] ; then
read local <"$pf"
if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
calc_brd
echo " inet ${local} brd ${brd} scope global ${dev}"
fi
fi
if $secondary && [ -r "$sf" ] ; then
while read local ; do
nets=$(ls "${FAKE_IP_STATE}/addresses/${dev}"-*-primary 2>/dev/null | \
sed -e 's@.*/@@' -e "s@${dev}-\(.*\)-primary\$@\1@")
for net in $nets ; do
pf="${FAKE_IP_STATE}/addresses/${dev}-${net}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-${net}-secondary"
if $primary && [ -r "$pf" ] ; then
read local <"$pf"
if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
calc_brd
echo " inet ${local} brd ${brd} scope global secondary ${dev}"
echo " inet ${local} brd ${brd} scope global ${dev}"
fi
done <"$sf"
fi
if [ -z "$_to" ] ; then
echo " valid_lft forever preferred_lft forever"
fi
fi
if $secondary && [ -r "$sf" ] ; then
while read local ; do
if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
calc_brd
echo " inet ${local} brd ${brd} scope global secondary ${dev}"
fi
done <"$sf"
fi
if [ -z "$_to" ] ; then
echo " valid_lft forever preferred_lft forever"
fi
done
}
n=1
for dev in $devices ; do
@ -189,6 +195,33 @@ ip_addr_show ()
done
}
# Copied from 13.per_ip_routing for now... so this is lazy testing :-(
ipv4_host_addr_to_net ()
{
_host="$1"
_maskbits="$2"
# Convert the host address to an unsigned long by splitting out
# the octets and doing the math.
_host_ul=0
for _o in $(export IFS="." ; echo $_host) ; do
_host_ul=$(( ($_host_ul << 8) + $_o)) # work around Emacs color bug
done
# Calculate the mask and apply it.
_mask_ul=$(( 0xffffffff << (32 - $_maskbits) ))
_net_ul=$(( $_host_ul & $_mask_ul ))
# Now convert to a network address one byte at a time.
_net=""
for _o in $(seq 1 4) ; do
_net="$(($_net_ul & 255))${_net:+.}${_net}"
_net_ul=$(($_net_ul >> 8))
done
echo "${_net}/${_maskbits}"
}
ip_addr_add ()
{
local=""
@ -220,8 +253,10 @@ ip_addr_add ()
not_implemented "addr add (without dev)"
fi
mkdir -p "${FAKE_IP_STATE}/addresses"
pf="${FAKE_IP_STATE}/addresses/${dev}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-secondary"
net_str=$(ipv4_host_addr_to_net $(IFS="/" ; echo $local))
net_str=$(echo "$net_str" | sed -e 's@/@_@')
pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
# We could lock here... but we should be the only ones playing
# around here with these stubs.
if [ ! -f "$pf" ] ; then
@ -260,8 +295,10 @@ ip_addr_del ()
not_implemented "addr del (without dev)"
fi
mkdir -p "${FAKE_IP_STATE}/addresses"
pf="${FAKE_IP_STATE}/addresses/${dev}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-secondary"
net_str=$(ipv4_host_addr_to_net $(IFS="/" ; echo $local))
net_str=$(echo "$net_str" | sed -e 's@/@_@')
pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
# We could lock here... but we should be the only ones playing
# around here with these stubs.
if [ ! -f "$pf" ] ; then