Add support of 'weight' parameter at multipath route. Minor changes on script output.

This commit is contained in:
Christoph 2018-08-23 03:15:11 +02:00
parent 156fe900af
commit 8e68e00fcd
2 changed files with 52 additions and 34 deletions

View File

@ -21,28 +21,51 @@ log_file=/var/log/check_net.log
# -
# - Example:
# - _INITIAL_DEVICE_LIST="eth0:192.168.63.254 ppp-light"
# - _INITIAL_DEVICE_LIST="eth11:172.16.12.254 eth10:172.16.13.254 eth9:172.16.11.254"
# -
_INITIAL_DEVICE_LIST="ppp-ckubu"
_INITIAL_DEVICE_LIST=""
# - Set to "false" uses "0.0.0.0" as remote gateway instead of the real address
# -
USE_REMOTE_GATEWAY_ADDRESS=true
#USE_REMOTE_GATEWAY_ADDRESS=false
# - Set default gw (roundrobin)
# -
# - !! SET_MULTIPLE_DEFAULT_GW=true does not work for now..
# -
SET_MULTIPLE_DEFAULT_GW=false
#SET_MULTIPLE_DEFAULT_GW=true
# - Set to false uses "0.0.0.0" as default gateway adress instaed of real remote address
# -
USE_DEFAULT_GW_ADDRESS=true
#USE_DEFAULT_GW_ADDRESS=false
# - Set up the default route to be a multipath route.
# -
# - This will balance the routes over all uplink providers (instead of
# - a prefered default route.
# -
# - Note:
# - that balancing will not be perfect, as it is route based, and routes
# - are cached. This means that routes to often-used sites will always be
# - over the same provider.
# -
# - !! At least within this script, multipath route only works as exspected
# - if all providers have a static uplink (and do not nat the uplink?)
# -
SET_MULTIPLE_DEFAULT_GW=false
#SET_MULTIPLE_DEFAULT_GW=true
# - MULTIPATH_DEVICE_WEIGHT
# -
# - This a weight for (inet) devices of a multipath route reflecting
# - its relative bandwidth or quality.
# -
# - The default value for weight of any device is '1'
# -
# - Example:
# - MULTIPATH_DEVICE_WEIGHT="eth9:2 eth10:1 eth11:4"
# -
MULTIPATH_DEVICE_WEIGHT="eth9:2 eth11:4"
# - Hostnames for ping test
# -
# - Note: The first two reachable hosts will be used for ping test.
@ -67,9 +90,9 @@ content_type='Content-Type: text/plain;\n charset="utf-8"'
# -
# - Example:
# - ========
# - local ip 192.168.10.1 through extern interface ppp-st and
# - local ip 192.168.10.1 through extern interface eth10 and
# - local ip 192.168.10.13 through extern interface ppp-surf1
# - rule_local_ips="ppp-st:192.168.10.1 ppp-surf1:192.168.10.13"
# - rule_local_ips="eth10:192.168.10.1 ppp-surf1:192.168.10.13"
# -
rule_local_ips=""

View File

@ -152,26 +152,12 @@ for _online_device in $ONLINE_DEVICE_LIST ; do
done
#echo "All Devices:"
#for _device in "${inet_devices_arr[@]}" ; do
# echo -e "\t$_device"
#done
#echo "Online Devices:"
#for _device in "${online_devices_arr[@]}" ; do
# echo -e "\t$_device"
#done
#
#for inet_device in "${inet_devices_arr[@]}" ; do
# if [ -n "$ONLINE_DEVICE_LIST" ]; then
# if ! containsElement "$inet_device" "${online_devices_arr[@]}" ; then
# echo "$inet_device is offline"
# continue
# fi
# fi
#done
#
#echo ""
#exit
declare -A multipath_device_weigth_arr
declare -i weight
for _val in $MULTIPATH_DEVICE_WEIGHT ; do
IFS=':' read -a _val_arr <<< "${_val}"
multipath_device_weigth_arr[${_val_arr[0]}]=${_val_arr[1]}
done
## - Define associative arrays
@ -714,8 +700,10 @@ while ! $configured && [ $_try_number -lt $max_attempts ] ; do
echo "/sbin/ip route add $_remote_gw_net dev $_key src $_local_gw_address table $_rt_name" >> $log_file
/sbin/ip route add $_remote_gw_net dev $_key src $_local_gw_address table $_rt_name >> $log_file 2>&1
else
echo -e "#\t[ info ]: Connection through $_key is already part of table $_rt_name" >> $log_file
echo -e "#\t[ info ]: Connection to $_remote_gw through $_key is already part of table $_rt_name" >> $log_file
fi
else
echo -e "#\t[ info ]: $_remote_gw_net through $_key is already part of table $_rt_name"
fi
else
## - Remote Network: 0.0.0.0
@ -744,14 +732,21 @@ while ! $configured && [ $_try_number -lt $max_attempts ] ; do
default_gw_arg=""
for _key in "${!default_gw_arr[@]}"; do
if [[ -n "${multipath_device_weigth_arr[$_key]}" ]]; then
weight=${multipath_device_weigth_arr[$_key]}
else
weight=1
fi
[[ $weight -lt 1 ]] && weight=1
if $USE_DEFAULT_GW_ADDRESS ; then
## - Default Gateway: $remote_gw_address
## -
default_gw_arg="$default_gw_arg nexthop via ${default_gw_arr[$_key]} dev $_key weight 1"
default_gw_arg="nexthop via ${default_gw_arr[$_key]} dev $_key weight $weight $default_gw_arg"
else
## - Default Gateway: 0.0.0.0
## -
default_gw_arg="$default_gw_arg nexthop via 0.0.0.0 dev $_key weight 1"
default_gw_arg="nexthop via 0.0.0.0 dev $_key weight $weight $default_gw_arg"
fi
done