Страница 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

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

: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 ]
    }
}