Страница 1 из 1
Как отключить порты на бридже
Добавлено: 16 мар 2019, 12:52
Yuz
Всем привет
Помогите разобраться, как отключить порты на выбраном бридже ?
В данном примере одним из бриджей есть "brLAN"
Нужно отключить (disable) порты (интерфейсы) "ether2" и "ether3"
Re: Как отключить порты на бридже
Добавлено: 16 мар 2019, 19:02
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"]
Re: Как отключить порты на бридже
Добавлено: 16 мар 2019, 21:13
Yuz
Не совсем хорошо.
Таким образом можно потушить любой интерфейс и необязательно знать в каком он бридже.
Нужно отключить (или включить) все интерфейсы, которые есть в известном бридже, не зная ни их количества ни названий
Ни сколько жизненная необходимость, сколько фича в скрипте, которая срабатывет по определенным событиям.
Есть ли сколь нибуть полная информация по использованию get find fetch и прочей магии?
Уж больно скудная mikrotik wiki
В любом случае спасибо за ответ
Re: Как отключить порты на бридже
Добавлено: 16 мар 2019, 21:27
Yuz
Может так?
Код: Выделить всё
/interface ethernet disable [/interface bridge port find bridge="brLAN"]
или так
Код: Выделить всё
/interface ethernet disable [get [/interface bridge port find bridge="brLAN"] name]
Хотя вроде пробовал так (куча вариантов была) - не получалось.
Поскольку не разобрался с механизмами обработки выборки после find, то путаюсь.
Re: Как отключить порты на бридже
Добавлено: 16 мар 2019, 23:00
Chupaka
Ага, правильно сформулированная задача - уже половина ответа
Значит, вам надо отключить не порты в бридже, а интерфейсы, являющиеся портами заданного бриджа. Уже лучше
Код: Выделить всё
:foreach i in=[ /interface bridge port find bridge=brLAN ] do={
/interface disable [ /interface bridge port get $i interface ]
}
Re: Как отключить порты на бридже
Добавлено: 16 мар 2019, 23:01
Chupaka
Yuz писал(а): ↑16 мар 2019, 21:13
Есть ли сколь нибуть полная информация по использованию get find fetch и прочей магии?
Уж больно скудная mikrotik wiki
Ну, по скриптам там вроде не сильно-то и скудно:
https://wiki.mikrotik.com/wiki/Manual:Scripting
Re: Как отключить порты на бридже
Добавлено: 17 мар 2019, 16:39
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
Re: Как отключить порты на бридже
Добавлено: 18 мар 2019, 13:58
Yuz
Вот так вот чудненько получилось
Может кому пригодится
InitVars
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 ]
}
}