нужна помощь с конструкцией в скрипте

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Нужна помощь с конструкцией в скрипте (см. под спойлером).

Скрипт получает в переменную $GatewayName название активного интерфейса в Интернет с дефолтным маршрутом (dst-adress=0.0.0.0/0). Но работает нормально только если на роутере один активный шлюз с таким маршрутом.
Если таких маршрутов несколько, то как из них выбрать (найти скриптом) нужный шлюз не имеющий комментария (исходим из условия, что остальные такие маршруты имеют какие-то комментарии).
Сломал голову, не получается. Нужно именно по комментарию различить или по маркировке, по дистанции - нельзя.

 
# Get address active gateway - in var $activeGateway
/ip route
{ :local counter;
:foreach counter in=[find dst-address=0.0.0.0/0] do={
:if ([get $counter active] = true) do={
:set $activeGateway [get $counter gateway];
} }}
:log info $activeGateway;


# Get string in <gateway-status>
:local GatewayName;
:set $GatewayName [ :tostr [ /ip route get [ find gateway=$activeGateway dst-address=0.0.0.0/0] gateway-status ]];
:log warning $GatewayName;


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Из конкретного затруднения я вышел добавив в скрипт получение дистанции активного шлюза и запрос имени интерфейса активного шлюза уже с указанием дистанции - тогда есть возможность получать это имя, если дистанции разные (например, при резервировании).

# Get address active gateway - in var $activeGateway
/ip route
{ :local counter;
:foreach counter in=[find dst-address=0.0.0.0/0] do={
:if ([get $counter active] = true) do={
:set $activeGateway [get $counter gateway]; :set $Gdistance [get $counter distance];
} }}
:log info $activeGateway;
:log info $Gdistance;


# Get string in <gateway-status>
:local GatewayStatus;
:set $GatewayStatus [ :tostr [ /ip route get [ find gateway=$activeGateway dst-address=0.0.0.0/0 distance=$Gdistance] gateway-status ]];
:log warning $GatewayStatus;

Однако это работает только при разных дистанциях - мою задачу выполняет, но костыльно как-то. Хотелось бы универсальности. Почему то нельзя получить routing-mark и comment таким же способом ... Где то видно не так пишу.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Всё, разобрался. Всё же синтаксис у скриптов Рос весьма не "дружелюбный". Хоть бы закономерности какие-то были - везде есть отличия ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить