Clean up distribute_load()

Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
Tom Eastep 2015-05-27 06:58:10 -07:00
parent 93c7e2c2f7
commit 18348ef6f1

View File

@ -604,11 +604,12 @@ interface_enabled() {
distribute_load() { distribute_load() {
local interface local interface
local currentload local currentload # Total load of enabled interfaces
local load local load # Specified load of an enabled interface
local mark local mark # Mark of an enabled interface
local totalload local totalload # Total load of all interfaces - usually 1.000000
local temp local nload # Normalized load of an enabled interface
local var # Interface name to embed in a variable name
totalload=$1 totalload=$1
shift shift
@ -617,10 +618,11 @@ distribute_load() {
for interface in $@; do for interface in $@; do
if interface_enabled $interface; then if interface_enabled $interface; then
var=$(echo $interface | sed 's/[.-]/_/g')
load=$(cat ${VARDIR}/${interface}_load) load=$(cat ${VARDIR}/${interface}_load)
eval ${interface}_load=$load eval ${var}_load=$load
mark=$(cat ${VARDIR}/${interface}_mark) mark=$(cat ${VARDIR}/${interface}_mark)
eval ${interface}_mark=$mark eval ${var}_mark=$mark
currentload=$( bc <<EOF currentload=$( bc <<EOF
scale=8 scale=8
$currentload + $load $currentload + $load
@ -633,25 +635,25 @@ 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 var=$(echo $interface | sed 's/[.-]/_/g')
eval mark=\$${interface}_mark eval load=\$${var}_load
eval mark=\$${var}_mark
if [ -n "$load" ]; then if [ -n "$load" ]; then
temp=$load nload=$(bc <<EOF
load=$(bc <<EOF
scale=8 scale=8
( $load / $currentload ) * $totalload ( $load / $currentload ) * $totalload
EOF EOF
) )
currentload=$(bc <<EOF currentload=$(bc <<EOF
scale=8 scale=8
$currentload - $temp $currentload - $load
EOF EOF
) )
case $load in case $nload in
.*|0.*) .*|0.*)
run_iptables -t mangle -A ~$interface -m statistic --mode random --probability $load -j MARK --set-mark $mark run_iptables -t mangle -A ~$interface -m statistic --mode random --probability $nload -j MARK --set-mark $mark
;; ;;
*) *)
run_iptables -t mangle -A ~$interface -j MARK --set-mark $mark run_iptables -t mangle -A ~$interface -j MARK --set-mark $mark