1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-26 18:50:30 +03:00

config/13.per_ip_routing: add a setup_per_ip_routing() function

This combines the logic into a shell function which can be used by the
"takeip" and "updateip" hooks.

We check the return values of the "ip" commands now
instead of ignoring them.

We now create a setup_script.sh similar to the release_script.sh
which makes it easier to analyze problems.

metze

(This used to be ctdb commit 624e8878851b4957cc7c02e922ec86926d6927ee)
This commit is contained in:
Stefan Metzmacher 2010-02-09 16:34:59 +01:00
parent 3419e9c4dd
commit 3a0d830e4c

View File

@ -207,6 +207,7 @@ generate_per_ip_routing()
table_id=""
release_script="$_ipdir/release_script.sh"
setup_script="$_ipdir/setup_script.sh"
test x"$_readonly" = x"yes" && {
test -d $_ipdir || {
@ -227,12 +228,65 @@ generate_per_ip_routing()
generate_auto_link_local $_ip $_maskbits
}
release_script="$_ipdir/release_script.sh"
run_release_script_once $release_script
echo -e "#!/bin/sh\n#\n" > $setup_script
chmod +x $setup_script
return 0;
}
setup_per_ip_routing()
{
local _ip=$1
local _iface=$2
local _table_id=$3
local _release_script=$4
local _setup_script=$5
local _config=`cat $CTDB_PER_IP_ROUTING_CONF`
local _lines=`echo -n "$_config" | grep -n "^$_ip " | cut -d ':' -f1 | xargs`
local _pref="$CTDB_PER_IP_ROUTING_RULE_PREF"
test -n "$_lines" && {
echo "ip rule del from $_ip pref $_pref table $_table_id" >> $_release_script
echo "ip route flush table $_table_id 2>/dev/null" >> $_release_script
cmd="ip rule del from $_ip pref $_pref 2>/dev/null"
echo "$cmd" >> $_setup_script
cmd="ip route flush table $_table_id 2>/dev/null"
echo "$cmd" >> $_setup_script
cmd="ip rule add from $_ip pref $_pref table $_table_id"
echo "$cmd || {" >> $_setup_script
echo " echo \"$cmd - failed \$ret\"" >> $_setup_script
echo " exit \$ret" >> $_setup_script
echo "}" >> $_setup_script
}
local _l
for _l in $_lines; do
local _line=`echo -n "$_config" | head -n $_l | tail -n 1`
local _dest=`echo -n "$_line" | cut -d ' ' -f 2`
local _gw=`echo -n "$_line" | cut -d ' ' -f 3`
local _via=""
test -n "$_gw" && {
_via="via $_gw"
}
cmd="ip route add $_dest $_via dev $_iface table $_table_id"
echo "$cmd || {" >> $_setup_script
echo " echo \"$cmd - failed \$ret\"" >> $_setup_script
echo " exit \$ret" >> $_setup_script
echo "}" >> $_setup_script
done
$_setup_script
return $?;
}
case "$1" in
#############################
# called when ctdbd starts up
@ -298,31 +352,10 @@ case "$1" in
exit 1;
}
config=`cat $CTDB_PER_IP_ROUTING_CONF`
lines=`echo -n "$config" | grep -n "^$ip " | cut -d ':' -f1 | xargs`
pref="$CTDB_PER_IP_ROUTING_RULE_PREF"
test -n "$lines" && {
echo "ip rule del from $ip pref $pref table $table_id" >> $release_script
echo "ip route flush table $table_id 2>/dev/null" >> $release_script
ip rule del from $ip pref $pref 2>/dev/null
ip rule add from $ip pref $pref table $table_id
ip route flush table $table_id 2>/dev/null
setup_per_ip_routing $ip $iface $table_id $release_script $setup_script || {
echo "$0: $1: setup_per_ip_routing $ip $iface $table_id $release_script $setup_script - failed"
exit 1;
}
for l in $lines; do
line=`echo -n "$config" | head -n $l | tail -n 1`
dest=`echo -n "$line" | cut -d ' ' -f 2`
gw=`echo -n "$line" | cut -d ' ' -f 3`
via=""
test -n "$gw" && {
via="via $gw"
}
ip route add $dest $via dev $iface table $table_id
done
# flush our route cache
echo 1 > /proc/sys/net/ipv4/route/flush
@ -357,32 +390,10 @@ case "$1" in
exit 1;
}
config=`cat $CTDB_PER_IP_ROUTING_CONF`
lines=`echo -n "$config" | grep -n "^$ip " | cut -d ':' -f1 | xargs`
pref="$CTDB_PER_IP_ROUTING_RULE_PREF"
test -n "$lines" && {
echo "ip rule del from $ip pref $pref table $table_id" >> $release_script
echo "ip route flush table $table_id 2>/dev/null" >> $release_script
ip rule del from $ip pref $pref 2>/dev/null
ip rule add from $ip pref $pref table $table_id
ip route flush table $table_id 2>/dev/null
setup_per_ip_routing $ip $niface $table_id $release_script $setup_script || {
echo "$0: $1: setup_per_ip_routing $ip $iface $table_id $release_script $setup_script - failed"
exit 1;
}
for l in $lines; do
line=`echo -n "$config" | head -n $l | tail -n 1`
dest=`echo -n "$line" | cut -d ' ' -f 2`
gw=`echo -n "$line" | cut -d ' ' -f 3`
via=""
test -n "$gw" && {
via="via $gw"
}
ip route add $dest $via dev $niface table $table_id
done
# flush our route cache
echo 1 > /proc/sys/net/ipv4/route/flush