mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Add a new redundant mode that should give a better failover
This commit is contained in:
parent
f7e171accc
commit
0a8b358e9a
2 changed files with 55 additions and 1 deletions
|
@ -174,6 +174,7 @@
|
|||
<option value="change" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "change" then %>selected="selected"<% end %>><%:On wizard change%></option>
|
||||
<option value="dynamic" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "dynamic" then %>selected="selected"<% end %>><%:Dynamic change%></option>
|
||||
<option value="static" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "static" then %>selected="selected"<% end %>><%:No change%></option>
|
||||
<option value="redundant" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "redundant" then %>selected="selected"<% end %>><%:Redundant%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -72,6 +72,52 @@ set_server_default_route() {
|
|||
fi
|
||||
}
|
||||
|
||||
set_routes_intf() {
|
||||
local INTERFACE=$1
|
||||
multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off")
|
||||
interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
|
||||
[ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
|
||||
[ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname)
|
||||
multipath_current_config=$(multipath $interface_if | grep 'deactivated')
|
||||
if [ "$multipath_config" != "off" ] && [ "$multipath_current_config" = "" ] && [ "$interface_if" != "" ]; then
|
||||
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
|
||||
if [ -z "$interface_gw" ]; then
|
||||
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n")
|
||||
fi
|
||||
if [ -z "$interface_gw" ]; then
|
||||
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n")
|
||||
fi
|
||||
if [ -z "$interface_gw" ]; then
|
||||
interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n")
|
||||
fi
|
||||
if [ "$interface_gw" != "" ]; then
|
||||
routesintf="$routesintf nexthop via $interface_gw dev $interface_if weight 1"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
set_server_all_routes() {
|
||||
local server=$1
|
||||
local serverip
|
||||
config_get serverip $server ip
|
||||
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
|
||||
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
|
||||
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
|
||||
multipath_current_config=$(multipath $interface_if | grep "deactivated")
|
||||
multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
|
||||
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show $serverip | grep nexthop | grep $OMR_TRACKER_DEVICE_GATEWAY | grep $OMR_TRACKER_INTERFACE)" = "" ] && [ "$multipath_config_route" != "off" ]; then
|
||||
routesintf=""
|
||||
config_load network
|
||||
config_foreach set_routes_intf interface
|
||||
[ -n "$routesintf" ] && {
|
||||
_log "Set server $server ($serverip) default route $routesintf"
|
||||
ip route replace $serverip scope global $routesintf
|
||||
}
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
set_server_route() {
|
||||
local server=$1
|
||||
local serverip
|
||||
|
@ -182,6 +228,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then
|
|||
fi
|
||||
config_load openmptcprouter
|
||||
config_foreach del_server_route server
|
||||
if [ "$(uci -q get openmptcprouter.settings.master)" = "redundant" ]; then
|
||||
config_foreach set_server_all_routes server
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
||||
|
@ -308,7 +357,11 @@ if [ "$multipath_config" = "master" ]; then
|
|||
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
||||
else
|
||||
config_load openmptcprouter
|
||||
config_foreach set_server_default_route server
|
||||
if [ "$(uci -q get openmptcprouter.settings.master)" = "redundant" ]; then
|
||||
config_foreach set_server_all_routes server
|
||||
else
|
||||
config_foreach set_server_default_route server
|
||||
fi
|
||||
fi
|
||||
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337
|
||||
if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue