mirror of
https://github.com/eworm-de/routeros-scripts
synced 2024-05-14 08:04:19 +00:00
fw-addr-lists: support timeout per list
This works with something like this: :global FwAddrLists { "allow"={ { url="https://eworm.de/ros/fw-addr-lists/allow"; cert="E1"; timeout=1w }; }; ... } All urls for one named list should have the same timeout! With different timeout values and identical addresses the behavior is besically undefined, depending on order.
This commit is contained in:
parent
c6bf722e49
commit
aba4770395
2 changed files with 9 additions and 7 deletions
|
@ -14,6 +14,7 @@
|
||||||
:global FwAddrListTimeOut;
|
:global FwAddrListTimeOut;
|
||||||
|
|
||||||
:global CertificateAvailable;
|
:global CertificateAvailable;
|
||||||
|
:global EitherOr;
|
||||||
:global LogPrintExit2;
|
:global LogPrintExit2;
|
||||||
:global ScriptLock;
|
:global ScriptLock;
|
||||||
:global WaitFullyConnected;
|
:global WaitFullyConnected;
|
||||||
|
@ -42,6 +43,7 @@ $WaitFullyConnected;
|
||||||
:foreach List in=$FwList do={
|
:foreach List in=$FwList do={
|
||||||
:local CheckCertificate "no";
|
:local CheckCertificate "no";
|
||||||
:local Data false;
|
:local Data false;
|
||||||
|
:local TimeOut [ $EitherOr [ :totime ($List->"timeout") ] $FwAddrListTimeOut ];
|
||||||
|
|
||||||
:if ([ :len ($List->"cert") ] > 0) do={
|
:if ([ :len ($List->"cert") ] > 0) do={
|
||||||
:set CheckCertificate "yes-without-crl";
|
:set CheckCertificate "yes-without-crl";
|
||||||
|
@ -75,7 +77,7 @@ $WaitFullyConnected;
|
||||||
:local Address ([ :pick $Line 0 [ $FindDelim $Line ] ] . ($List->"cidr"));
|
:local Address ([ :pick $Line 0 [ $FindDelim $Line ] ] . ($List->"cidr"));
|
||||||
:if ($Address ~ "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}(/[0-9]{1,2})?\$" || \
|
:if ($Address ~ "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}(/[0-9]{1,2})?\$" || \
|
||||||
$Address ~ "^[\\.a-zA-Z0-9-]+\\.[a-zA-Z]{2,}\$") do={
|
$Address ~ "^[\\.a-zA-Z0-9-]+\\.[a-zA-Z]{2,}\$") do={
|
||||||
:set ($Addresses->$Address) 1;
|
:set ($Addresses->$Address) $TimeOut;
|
||||||
}
|
}
|
||||||
:set Data [ :pick $Data ([ :len $Line ] + 1) [ :len $Data ] ];
|
:set Data [ :pick $Data ([ :len $Line ] + 1) [ :len $Data ] ];
|
||||||
}
|
}
|
||||||
|
@ -83,9 +85,9 @@ $WaitFullyConnected;
|
||||||
|
|
||||||
:foreach Entry in=[ /ip/firewall/address-list/find where list=$FwListName comment=$ListComment ] do={
|
:foreach Entry in=[ /ip/firewall/address-list/find where list=$FwListName comment=$ListComment ] do={
|
||||||
:local Address [ /ip/firewall/address-list/get $Entry address ];
|
:local Address [ /ip/firewall/address-list/get $Entry address ];
|
||||||
:if (($Addresses->$Address) = 1) do={
|
:if ([ :typeof ($Addresses->$Address) ] = "time") do={
|
||||||
$LogPrintExit2 debug $0 ("Renewing: " . $Address) false;
|
$LogPrintExit2 debug $0 ("Renewing for " . ($Addresses->$Address) . ": " . $Address) false;
|
||||||
/ip/firewall/address-list/set $Entry timeout=$FwAddrListTimeOut;
|
/ip/firewall/address-list/set $Entry timeout=($Addresses->$Address);
|
||||||
:set ($Addresses->$Address);
|
:set ($Addresses->$Address);
|
||||||
:set CntRenew ($CntRenew + 1);
|
:set CntRenew ($CntRenew + 1);
|
||||||
} else={
|
} else={
|
||||||
|
@ -98,9 +100,9 @@ $WaitFullyConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
:foreach Address,Ignore in=$Addresses do={
|
:foreach Address,Ignore in=$Addresses do={
|
||||||
$LogPrintExit2 debug $0 ("Adding: " . $Address) false;
|
$LogPrintExit2 debug $0 ("Adding for " . ($Addresses->$Address) . ": " . $Address) false;
|
||||||
:do {
|
:do {
|
||||||
/ip/firewall/address-list/add list=$FwListName comment=$ListComment address=$Address timeout=$FwAddrListTimeOut;
|
/ip/firewall/address-list/add list=$FwListName comment=$ListComment address=$Address timeout=($Addresses->$Address);
|
||||||
:set ($Addresses->$Address);
|
:set ($Addresses->$Address);
|
||||||
:set CntAdd ($CntAdd + 1);
|
:set CntAdd ($CntAdd + 1);
|
||||||
} on-error={
|
} on-error={
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
:global FwAddrLists {
|
:global FwAddrLists {
|
||||||
# "allow"={
|
# "allow"={
|
||||||
# { url="https://eworm.de/ros/fw-addr-lists/allow";
|
# { url="https://eworm.de/ros/fw-addr-lists/allow";
|
||||||
# cert="E1" };
|
# cert="E1"; timeout=1w };
|
||||||
# };
|
# };
|
||||||
"block"={
|
"block"={
|
||||||
# { url="https://eworm.de/ros/fw-addr-lists/block";
|
# { url="https://eworm.de/ros/fw-addr-lists/block";
|
||||||
|
|
Loading…
Reference in a new issue