Страница 1 из 1

Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 12:00
mmm
Доброго времени суток! Ошибка возникла после обновления routeros до 6.42.7 скрипт писал не я и о данунгрейте речи быть не может. Помогите разобраться, собственно сам скрипт:

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

### INT ###
$ipCONF iptmp=($config->3)
:global ether1NAME [/interface ethernet get [ find default-name="ether1" ] name ]
:global ether1 {ip="$ip";netmask="$prefix";gateway=($network+1)}
$ipCONF iptmp=($config->4)
:global ether5NAME [/interface ethernet get ($intCOUNT-1) name]
:global ether5 {ip="$ip";netmask="$prefix";gateway=($network+3)}
:if ( $MODE != "vsat" and $intCOUNT="5" ) do={
	/interface ethernet set [find name="$ether5NAME" ] name="ether$intCOUNT-$ISP5" master-port=none
	:set ether5NAME [/interface ethernet get ($intCOUNT-1) name]
	}
$ipCONF iptmp=($config->5)
:global lanNAME [/ip address get [find network="192.168.88.0"] interface ]
:global lan {ip=($network+1);netmask="$prefix";network="$network";pool="$poolSTART-$poolEND"}
$ipCONF iptmp=($config->6)
:global l2tpNAME "l2tp-$ORG"
:global l2tp {network=($network+1)}
$ipCONF iptmp=($config->7)
:global greNAME "gre-$ORG"
:global gre {ip=($network+2);netmask="$prefix";network="$network"}
собственно ошибка:

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

[admin@MikroTik] /ip address> :if ( $MODE != "vsat" and $intCOUNT="5" ) do={
{... /interface ethernet set [find name="$ether5NAME" ] name="ether$intCOUNT-$ISP5" master-port=none
expected end of command (line 2 column 80)
Спасибо!

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 12:06
Chupaka
Параметр "master-port=" убрали в версии 6.42, теперь всё делается через Bridge. Поскольку у вас только none - то просто уберите его из скрипта.

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 13:16
mmm
Вот такая петрушка!

[admin@MikroTik] > $ipCONF iptmp=($config->3)
[admin@MikroTik] > :global ether1NAME [/interface ethernet get [ find default-name="ether1" ] name ]
[admin@MikroTik] > :global ether1 {ip="$ip";netmask="$prefix";gateway=($network+1)}
[admin@MikroTik] > $ipCONF iptmp=($config->4)
[admin@MikroTik] > :global ether5NAME [/interface ethernet get ($intCOUNT-1) name]
no such item
[admin@MikroTik] > :global ether5 {ip="$ip";netmask="$prefix";gateway=($network+3)}
[admin@MikroTik] > :if ( $MODE != "vsat" and $intCOUNT="5" ) do={
{... /interface ethernet set [find name="$ether5NAME" ] name="ether$intCOUNT-$ISP5"
{... :set ether5NAME [/interface ethernet get ($intCOUNT-1) name]
syntax error (line 3 column 6)
[admin@MikroTik] >
caps-man console driver interface ipv6 metarouter partitions ppp radius snmp system user blink import ping redo
certificate disk file ip log mpls port queue routing special-login tool beep export password quit undo
[admin@MikroTik] > }
[admin@MikroTik] > $ipCONF iptmp=($config->5)
[admin@MikroTik] > :global lanNAME [/ip address get [find network="192.168.88.0"] interface ]
[admin@MikroTik] > :global lan {ip=($network+1);netmask="$prefix";network="$network";pool="$poolSTART-$poolEND"}
[admin@MikroTik] > $ipCONF iptmp=($config->6)
[admin@MikroTik] > :global l2tpNAME "l2tp-$ORG"
[admin@MikroTik] > :global l2tp {network=($network+1)}
[admin@MikroTik] > $ipCONF iptmp=($config->7)
[admin@MikroTik] > :global greNAME "gre-$ORG"
[admin@MikroTik] > :global gre {ip=($network+2);netmask="$prefix";network="$network"}
[admin@MikroTik] >

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 14:35
Chupaka

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

/interface ethernet get ($intCOUNT-1) name
В скриптах обращаться к интерфейсам по номеру нельзя, результат непредсказуемый. А судя по первому посту, переменная intCOUNT у вас вообще не инициализируется, поэтому я даже угадать затрудняюсь, что там должно происходить...

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 15:17
mmm
1111

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 04 окт 2018, 19:14
Chupaka
В общем, раньше в скриптах всё, что использовало команду print, работало кое-как и не всегда, а сейчас, видимо, это вообще на всякий случай закрыли :)

Полотенце сильно большое, чтобы с наскоку разобраться, чего же оно там хочет. Если просто найти последний интерфейс на роутере - то можно сделать как-то так:

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

:global ether5NAME [/interface ethernet get ($intCOUNT-1) name]
заменить на

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

:local i5; :foreach i in=[/interface ethernet find] do={ :set i5 $i }; :global ether5NAME [/interface ethernet get $i5 name];
, а

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

:set ether5NAME [/interface ethernet get ($intCOUNT-1) name]
- на

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

:set ether5NAME "ether$intCOUNT-$ISP5"
Ну и использовать global-переменные в таком количестве без надобности - тоже так себе подход...

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 11:11
mmm
День добрый Chupaka! ошибок при заливке скрипта нет но результат нулевой. По идее скрип должен отключить дефолтную конфигурацию и выдать новый ИП этого почему то не происходит. После перезагрузки адрес не получаю a Neighbors пишет что 192.168.88.1. Хэлп!!!!!

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 11:54
Chupaka
Куда выдать? От кого не получаю? Зачем перезагрузка?

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 12:11
mmm
мои действия:
-New terminal
-копипаст скрипта
-reboot
и....вуаля микротик должен работать но на деле после перезагрузки ИП адрес не получаю a Neighbors пишет что 192.168.88.1

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:06
Chupaka
И ошибок при копипасте никаких нет?

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:17
mmm
Думаю что нет. Проверил концы строк пробелов нет

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:34
Chupaka
Ну, команда, добавляющая LAN-адрес - вот тут:

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

/ip address {
	remove [find address="$lanIP$lanMASK"]
	add address="$lanIP$lanMASK" interface="$lanNAME"
Можно вывести в Терминал, что же она пытается добавить:

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

/ip address {
	:put "Adding $lanIP$lanMASK";
	remove [find address="$lanIP$lanMASK"]
	add address="$lanIP$lanMASK" interface="$lanNAME"
И посмотреть, что именно он в этот момент добавляет.

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:45
mmm
Скорее всего первую строку...других мыслей нет

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:49
Chupaka
Это сейчас о чём было?.. Я, вроде, про другое говорил

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 13:55
mmm
Сори, автор скрипта в данный момент недоступен а микротики надо заставить работать прошу помочь мне, буду очень благодарен! Может Вайбер?

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 15:14
Chupaka
Что Вайбер? Я же предложил выше вставить команду :put в код, посмотреть, что там творится при запуске

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 16:07
mmm
Прошло без ошибок, но результата не дало Микротик не рабочий

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 05 окт 2018, 17:34
Chupaka
Где результат отработки скрипта? Он сразу после ":put ***" должен вывести значение.

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 06 окт 2018, 09:24
mmm

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

MMM      MMM       KKK                          TTTTTTTTTTT      KKK
  MMMM    MMMM       KKK                          TTTTTTTTTTT      KKK
  MMM MMMM MMM  III  KKK  KKK  RRRRRR     OOOOOO      TTT     III  KKK  KKK
  MMM  MM  MMM  III  KKKKK     RRR  RRR  OOO  OOO     TTT     III  KKKKK
  MMM      MMM  III  KKK KKK   RRRRRR    OOO  OOO     TTT     III  KKK KKK
  MMM      MMM  III  KKK  KKK  RRR  RRR   OOOOOO      TTT     III  KKK  KKK

  MikroTik RouterOS 6.43.2 (c) 1999-2018       http://www.mikrotik.com/

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 06 окт 2018, 12:57
Chupaka
Прячьте код под тег [code]

Вижу, в новой версии комментарий "default configuration" сменили на "defconf", поэтому 192.168.88.1 у вас не выключается, хотя 172.... добавился нормально. Измените комментарий в скрипте.

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 06 окт 2018, 14:55
mmm
Ничего я не менял! :-( и "defconf" в скрипте не нашел, к сожалению
менять здесь?

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

/ip dhcp-server {
	:local o [find name="default" ]
	:if ([:len $o] != 0) do={ remove $o }
	}
/ip pool {
	:local o [find name="default-dhcp"]
	:if ([:len $o] != 0) do={ remove $o }

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 07 окт 2018, 09:32
Chupaka
Меняли разработчики из компании MiktoTik, поэтому вам надо в скрипте comment="default configuration" заменить на comment="defconf"

Re: Ошибка в скрипте назначение интерфейсов

Добавлено: 07 окт 2018, 13:16
mmm
Огромный респект за помощ, все заработало!!!!!!!!!!!