feat: Optimize BGP export script with batched address list additions and introduce nice_new.rsc for populating the ip-lokal address list.
This commit is contained in:
@@ -4,32 +4,36 @@
|
||||
:local startTime [/system clock get time];
|
||||
:local startDate [/system clock get date];
|
||||
:log info "BGP Export [$startDate $startTime]: mulai...";
|
||||
/ip firewall address-list remove [find list="bgp-export"]; \
|
||||
:local cnt 0; \
|
||||
\
|
||||
# Iterasi distance=15 (CDN) - pecah per prefix /8 untuk menghindari limit array ~8192 RouterOS \
|
||||
:foreach pref in={1;2;5;10;14;17;23;27;31;36;42;43;45;49;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255} do={ \
|
||||
:local subnet ($pref . ".0.0.0/8"); \
|
||||
:foreach r in=[/routing/route find where distance=15 dst-address~("^" . $pref . "\\.")] do={ \
|
||||
:local dst [/routing/route get $r dst-address]; \
|
||||
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={ \
|
||||
/ip firewall address-list add list="bgp-export" address=$dst; \
|
||||
:set cnt ($cnt + 1); \
|
||||
}; \
|
||||
}; \
|
||||
}; \
|
||||
:log info "BGP Export: CDN selesai ($cnt)"; \
|
||||
\
|
||||
# Iterasi distance=200 (IIX Lokal) - pecah per prefix /8 \
|
||||
:foreach pref in={1;2;5;10;14;17;23;27;31;36;42;43;45;49;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255} do={ \
|
||||
:foreach r in=[/routing/route find where distance=200 dst-address~("^" . $pref . "\\.")] do={ \
|
||||
:local dst [/routing/route get $r dst-address]; \
|
||||
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={ \
|
||||
/ip firewall address-list add list="bgp-export" address=$dst; \
|
||||
:set cnt ($cnt + 1); \
|
||||
}; \
|
||||
}; \
|
||||
}; \
|
||||
|
||||
# Clear existing address list
|
||||
/ip firewall address-list remove [find list="bgp-export"];
|
||||
|
||||
:local cnt 0;
|
||||
:local batchSize 100; # Process in batches to avoid memory issues
|
||||
:local batchArray [:toarray ""];
|
||||
|
||||
# Single query for all relevant routes (distance=15 OR distance=200)
|
||||
:foreach r in=[/routing/route find where (distance=15 or distance=200)] do={
|
||||
:local dst [/routing/route get $r dst-address];
|
||||
|
||||
# Filter out default routes
|
||||
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={
|
||||
:set batchArray ($batchArray + $dst);
|
||||
:set cnt ($cnt + 1);
|
||||
|
||||
# Process batch when size reached
|
||||
:if ([:len $batchArray] >= $batchSize) do={
|
||||
/ip firewall address-list add list="bgp-export" address=[:pick $batchArray 0 [:len $batchArray]];
|
||||
:set batchArray [:toarray ""];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Process remaining routes in final batch
|
||||
:if ([:len $batchArray] > 0) do={
|
||||
/ip firewall address-list add list="bgp-export" address=[:pick $batchArray 0 [:len $batchArray]];
|
||||
};
|
||||
|
||||
:local endTime [/system clock get time];
|
||||
:local endDate [/system clock get date];
|
||||
:log info "BGP Export [$endDate $endTime]: selesai total $cnt rute"; \
|
||||
|
||||
15175
nice_new.rsc
Normal file
15175
nice_new.rsc
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user