Задача сделать универсальный. Если так:
/interface bridge
add auto-mac=yes name=bridge
А потом если необходимо дописать
admin-mac
Не проще взять код из дефолта и использовать его?
Так например на объекте где резервирование кольцом настроите RSTP пропишете path coast на портах и вроде все заработает. Но забудете про admin-mac на бридже и при отвале одного из портов mac на бридже автоматом смениться. Начнутся проблемы как минимум с доступом по IP к нему, т.к. arp запись будет со старым mac-адресом
Набросал скрипт из дефолта, но не проверял как работает, под рукой нет подопытного устройства. Протестируйте.
:local portAddToBridge do={
:if (([/interface get $1 type] != "ppp-out") && ([/interface get $1 type] != "lte")) do={
/interface bridge port
add bridge=bridge interface=$2 comment=defconf;
}
}
/interface bridge
add name=bridge disabled=no auto-mac=yes protocol-mode=rstp comment=defconf;
:local bMACIsSet 0;
:if ( [/interface print count-only where name ~"ether"]>1 || [/interface print count-only where name ~"sfp"]>1 ) do={
:foreach k in=[/interface find where !(slave=yes || name="ether1" || name="lte1" || passthrough=yes || type=loopback || name~"bridge")] do={
:local tmpPortName [/interface get $k name];
:if ($bMACIsSet = 0 ) do={
:if ([/interface/get [/interface/find name~$tmpPortName] type] = "ether") do={
/interface bridge set "bridge" auto-mac=no admin-mac=[/interface get $tmpPortName mac-address];
:set bMACIsSet 1;
}
}
$portAddToBridge $k $tmpPortName;
} else={
:foreach k in=[/interface find where !(slave=yes || name="lte1" || passthrough=yes || type=loopback || name~"bridge")] do={
:local tmpPortName [/interface get $k name];
:if ($bMACIsSet = 0 ) do={
:if ([/interface/get [/interface/find name~$tmpPortName] type] = "ether") do={
/interface bridge set "bridge" auto-mac=no admin-mac=[/interface get $tmpPortName mac-address];
:set bMACIsSet 1;
}
}
$portAddToBridge $k $tmpPortName;
}