Проблема со скриптом, бьюсь уже неделю не могу понять причину проблемы.
Есть скрипт на удаление соединения sip:
:local pingcount "4";
:local pingip "8.8.8.8";
:local voiceGwIp "10.1.2.250:5060";
:local replyHost;
:local gateway;
:local gatewayDn;
:local activeReply;
:local activeRoute;
:local routeDn;
:local voiceCon;
:local pingresult [/ping $pingip count=$pingcount];
:if ($pingresult > 0) do={
:set activeRoute [/ip route find where active routing-mark=tel];
:if ($activeRoute = "") do={
:local mes1 "Clear-sip-connections: route is not found.";
}
:set routeDn [/ip route find where routing-mark=dn];
:if ($routeDn = "") do={
:local mes2 "Clear-sip-connections: route Dn is not found.";
}
:set voiceCon [/ip firewall connection find where src-address=$voiceGwIp];
:if ($voiceCon = "") do={
:local mes3 "Clear-sip-connections: connection is not found.";
}
:if (($activeRoute != "" ) && ($routeDn != "" ) && ($voiceCon != "" )) do={
:set gateway [/ip route get $activeRoute gateway];
:set gatewayDn [/ip route get $routeDn gateway];
:set activeReply [/ip firewall connection get $voiceCon reply-dst-address];
:if ($gateway = $gatewayDn) do={
:set replyHost "xxx.xxx.xxx.xxx:5060";
} else={
:set replyHost "yyy.yyy.yyy.yyy:5060";
}
:if ($activeReply != $replyHost) do={
/ip firewall connection remove $voiceCon;
:log warning ("Clear-sip-connections: clearing connection src-address:$voiceGwIp, reply-dst-address:$activeReply");
} else={
:nothing;
}
} else={
:log warning ("$mes1 $mes2 $mes3");
}
} else={
:log warning ("Clear-sip-connections: no ping");
}
Скрипт сам по себе работает (запускается через планировщик каждые 30 сек.), соединение убивает, но иногда в лог пишет "script error: no such item (4)".
Выяснил, что проблема происходит на этом участке:
:set voiceCon [/ip firewall connection find where src-address=$voiceGwIp];
Но почему он иногда выдает ошибку понять не могу, так это соединение висит постоянно, к тому же пробовал задавать заведомо неверный src-address, на выходе получаю пустой результат.
Версия системы 6.6.