forked from extern/shorewall_code
Finish alternative balancing
Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
6639b3534e
commit
3b6f5b2d8a
@ -608,7 +608,8 @@ sub add_a_provider( $$ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emit( qq(echo $load > \${VARDIR}/${physical}_load) ) if $load;
|
emit( "echo $load > \${VARDIR}/${physical}_load",
|
||||||
|
'echo ' . in_hex( $mark ) . '/' . in_hex( $globals{PROVIDER_MASK} ) . " > \${VARDIR}/${physical}_mark" ) if $load;
|
||||||
|
|
||||||
emit( '',
|
emit( '',
|
||||||
"cat <<EOF >> \${VARDIR}/undo_${table}_routing" );
|
"cat <<EOF >> \${VARDIR}/undo_${table}_routing" );
|
||||||
@ -618,6 +619,7 @@ sub add_a_provider( $$ ) {
|
|||||||
emit_unindented ' ;;';
|
emit_unindented ' ;;';
|
||||||
emit_unindented ' *)';
|
emit_unindented ' *)';
|
||||||
emit_unindented " rm -f \${VARDIR}/${physical}_load" if $load;
|
emit_unindented " rm -f \${VARDIR}/${physical}_load" if $load;
|
||||||
|
emit_unindented " rm -f \${VARDIR}/${physical}_mark" if $load;
|
||||||
emit_unindented <<"CEOF", 1;
|
emit_unindented <<"CEOF", 1;
|
||||||
rm -f \${VARDIR}/${physical}.status
|
rm -f \${VARDIR}/${physical}.status
|
||||||
;;
|
;;
|
||||||
|
@ -594,6 +594,7 @@ distribute_load() {
|
|||||||
local interface
|
local interface
|
||||||
local totalload
|
local totalload
|
||||||
local load
|
local load
|
||||||
|
local mark
|
||||||
local maxload
|
local maxload
|
||||||
|
|
||||||
maxload=$1
|
maxload=$1
|
||||||
@ -605,6 +606,8 @@ distribute_load() {
|
|||||||
if interface_up $interface; then
|
if interface_up $interface; then
|
||||||
load=$(cat ${VARDIR}/${interface}_load)
|
load=$(cat ${VARDIR}/${interface}_load)
|
||||||
eval ${interface}_load=$load
|
eval ${interface}_load=$load
|
||||||
|
mark=$(cat ${VARDIR}/${interface}_mark)
|
||||||
|
eval ${interface}_mark=$mark
|
||||||
totalload=$( bc <<EOF
|
totalload=$( bc <<EOF
|
||||||
scale=8
|
scale=8
|
||||||
$totalload + $load
|
$totalload + $load
|
||||||
@ -617,6 +620,7 @@ EOF
|
|||||||
for interface in $@; do
|
for interface in $@; do
|
||||||
qt $g_tool -t mangle -F ~$interface
|
qt $g_tool -t mangle -F ~$interface
|
||||||
eval load=\$${interface}_load
|
eval load=\$${interface}_load
|
||||||
|
eval mark=\$${interface}_mark
|
||||||
|
|
||||||
if [ -n "$load" ]; then
|
if [ -n "$load" ]; then
|
||||||
load=$(bc <<EOF
|
load=$(bc <<EOF
|
||||||
@ -629,7 +633,7 @@ scale=8
|
|||||||
$totalload - $load
|
$totalload - $load
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
run_iptables -t mangle -A ~$interface -m statistic --mode random --probability $load
|
run_iptables -t mangle -A ~$interface -m statistic --mode random --probability $load -j MARK --set-mark $mark
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user