Как отключить порты на бридже

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Yuz
Сообщения: 8
Зарегистрирован: 18 фев 2019, 15:36

Как отключить порты на бридже

Сообщение Yuz »

Всем привет

Помогите разобраться, как отключить порты на выбраном бридже ?

В данном примере одним из бриджей есть "brLAN"
Нужно отключить (disable) порты (интерфейсы) "ether2" и "ether3"
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Как отключить порты на бридже

Сообщение Chupaka »

Приветствую.

Код: Выделить всё

/interface bridge port
disable [find interface="ether2"]
disable [find interface="ether3"]
Или более точечно:

Код: Выделить всё

/interface bridge port
disable [find interface="ether2" and bridge="brLAN"]
disable [find interface="ether3" and bridge="brLAN"]
Yuz
Сообщения: 8
Зарегистрирован: 18 фев 2019, 15:36

Re: Как отключить порты на бридже

Сообщение Yuz »

Не совсем хорошо.
Таким образом можно потушить любой интерфейс и необязательно знать в каком он бридже.
Нужно отключить (или включить) все интерфейсы, которые есть в известном бридже, не зная ни их количества ни названий

Ни сколько жизненная необходимость, сколько фича в скрипте, которая срабатывет по определенным событиям.

Есть ли сколь нибуть полная информация по использованию get find fetch и прочей магии?
Уж больно скудная mikrotik wiki

В любом случае спасибо за ответ
Yuz
Сообщения: 8
Зарегистрирован: 18 фев 2019, 15:36

Re: Как отключить порты на бридже

Сообщение Yuz »

Может так?

Код: Выделить всё

/interface ethernet disable [/interface bridge port find bridge="brLAN"]
или так

Код: Выделить всё

/interface ethernet disable [get [/interface bridge port find bridge="brLAN"] name]
Хотя вроде пробовал так (куча вариантов была) - не получалось.
Поскольку не разобрался с механизмами обработки выборки после find, то путаюсь.
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Как отключить порты на бридже

Сообщение Chupaka »

Ага, правильно сформулированная задача - уже половина ответа :) Значит, вам надо отключить не порты в бридже, а интерфейсы, являющиеся портами заданного бриджа. Уже лучше :)

Код: Выделить всё

:foreach i in=[ /interface bridge port find bridge=brLAN ] do={
	/interface disable [ /interface bridge port get $i interface ]
}
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Как отключить порты на бридже

Сообщение Chupaka »

Yuz писал(а): 16 мар 2019, 21:13 Есть ли сколь нибуть полная информация по использованию get find fetch и прочей магии?
Уж больно скудная mikrotik wiki
Ну, по скриптам там вроде не сильно-то и скудно: https://wiki.mikrotik.com/wiki/Manual:Scripting
Yuz
Сообщения: 8
Зарегистрирован: 18 фев 2019, 15:36

Re: Как отключить порты на бридже

Сообщение Yuz »

Отлично, работает!
Теперь видно, где я тормозил.
Огромное спасибо!!!

Почему назвал "портами", потому что интерфейсы бриджа находятся в разделе "/interface bridge port" :)
Ну, по скриптам там вроде не сильно-то и скудно
В целом по написанию скриптов то да, а вот конкретно, например, по get и find

Код: Выделить всё

get 	get <id> <param>=<value> 	get selected items parameter value
find 	find <expression> 		Returns list of internal numbers for items that are matched by given expression. 
Вот и вся помощь

А вот как конкретно работать с этими "selected items parameter value" и "list of internal numbers" можно узнать путём догадок, изучая различные примеры из других разделов wiki и форумов (слава Господу, что есть mikrotik.by).

В даном случае у меня не получилось правильно оформить конструкцию get <id> <param>, чтобы получать названия интерфейсов из выборки и правильно подставлять эти названия в конструкцию /interface disable <name interface>.

Буду курить форумы дальше. Не понимая как работатет этот механизм в скрипто-писании делать нечего.

Еще раз огромное спасибо, @Chupaka

:)
Yuz
Сообщения: 8
Зарегистрирован: 18 фев 2019, 15:36

Re: Как отключить порты на бридже

Сообщение Yuz »

Вот так вот чудненько получилось :)
Может кому пригодится


InitVars

Код: Выделить всё

:global BrVPN {"brONE"; "brTWO"};

BridgesDisactive

Код: Выделить всё

:global BrVPN;
:foreach bi in=$BrVPN do={
    :foreach i in=[ /interface bridge port find bridge="$bi" ] do={
         /interface disable [ /interface bridge port get $i interface ]
    }
}

BridgesActive

Код: Выделить всё

:global BrVPN;
:foreach bi in=$BrVPN do={
    :foreach i in=[ /interface bridge port find bridge="$bi" ] do={
         /interface enable [ /interface bridge port get $i interface ]
    }
}