Fail Over
Fail Over
Fail Over
:global ispsCaidosAnt;
# Variable isps
# Cada elemento está compuesto por un par de números,
# el primero indica el ID del ISP y el segundo la cantidad de pasos
# asignados al ISP
# {{ID:nPasos}; {ID:nPasos}};
#
# Ejemplos:
# Si el ISP1 tiene 20Mbps y los otros 3 10Mbps entonces la cantidad de
# pasos para el ISP1 son 2 pasos y la variable isps quedaria:
# :local isps {{1;2}; {2;1}; {3;1}; {4;1} };
#
# Si el ISP1 e ISP3 tienen 30 Mbps cada uno y los demás tienen 10Mbps,
# la variable isps quedaria:
# :local isps {{1;3}; {2;1}; {3;3}; {4;1} };
#
# Si el ISP1 tiene 50Mbps, el ISP3 tiene 20Mbps y los otros tienen 10Mbps
# la variable isps quedaria:
# :local isps {{1;5}; {2;1}; {3;2}; {4;1} };
#
# La declaración por default de la variable isps toma en cuenta que todos
# los ISPs tienen la misma capacidad, sin importar qué capacidad tengan
#
:local isps {{1;1}; {2;1}; {3;1}; {4;1} };
:local pasos 0;
:local ispsCaidos;
# Compara los ISPs caidos actualmente contra los ISPs caidos previamente
# Si son iguales evita ejecutar por completo el script
:if ( $ispsCaidos = $ispsCaidosAnt) do={
:exit;
}
# Si son diferentes, se actualizan los ispsCaidosAnt
:if ( $ispsCaidos != $ispsCaidosAnt ) do={
:set ispsCaidosAnt ($ispsCaidos);
}
# Si el ISP no está caido se procede a actualizar las reglas con los "pasos"
correctos
:if ($estaCaido=false) do={
# Desactivar las reglas del ISP activo para hacer la actualizacion
/ip firewall mangle disable [find new-connection-mark="ISP$idIsp_conn" and per-
connection-classifier~"both-addresses"];