Opened 2 months ago

Last modified 8 weeks ago

#700 new задача

Добавить поддержку исполнения 2 для платы PE-14

Reported by: AlexLir Owned by: alx
Priority: средний Milestone: 1 очередь
Component: sw Keywords:
Cc:

Description (last modified by AlexLir)

Параметры PE-14 исп. 2 нужно отображать так-же как параметры исп. 1, за исключением того что у плат исп. 2 есть новые переменные:
.13.0: RO, INT8 - Ревизия ПО платы. Если переменная .13.0 присутствует в MIB, то в переменную .5.5.1.0 в 5 байт нужно записать не константные значения(0x5F), а значения с checkbox "Port-based VLAN settings", рассчитанные по такому же алгоритму как для остальных портов. Если переменная .13.0 отсутствует, то в переменную .5.5.1.0 в 5 байт нужно записать константу 0x5F(как это сейчас и делается).

.14.0: RO, INT8 - Авария "Отсутствует 48 вольт". В верхней части диалогового окна платы, в исполнении 1 выводилась предупреждающая надпись если отсутствовали плата питания, которая формирует напряжение 48 вольт. В исполнении 2 нужно вывести предупреждающую надпись "Предупреждение: для работы PoE требуется наличие в блоке напряжения 48 В" если переменная .14.0 == 1, иначе надпись не выводить.

.250.0 - серийный номер

Change History (23)

comment:1 by AlexLir, 2 months ago

Потыкть плату можно в блоке 192.168.20.202

in reply to:  description comment:2 by alx, 2 months ago

Replying to AlexLir:

Если переменная .13.0 присутствует в MIB, то в переменную .5.0 в...

Здесь какая-то ошибка: у платы PE-14 нет переменной .5.0.

comment:3 by AlexLir, 2 months ago

Действительно, переменная .5 - эта таблица на 5 портов.
Исправляю ранее написанное:
.13.0: RO, INT8 - Ревизия ПО платы. Если переменная .13.0 присутствует в MIB, то в переменную .5.5.0 в 5 байт нужно записать не константные значения(0x5F), а значения с checkbox "Port-based VLAN settings", рассчитанные по такому же алгоритму как для остальных портов. Если переменная .13.0 отсутствует, то в переменную .5.5.0 в 5 байт нужно записать константу 0x5F(как это сейчас и делается).

comment:4 by AlexLir, 2 months ago

Description: modified (diff)

in reply to:  3 comment:5 by alx, 2 months ago

Replying to AlexLir:

Действительно, переменная .5 - эта таблица на 5 портов.
Исправляю ранее написанное:
.13.0: RO, INT8 - Ревизия ПО платы. Если переменная .13.0 присутствует в MIB, то в переменную .5.5.0

Здесь опять ошибка: в плате PE-14 нет переменной .5.5.0.

Так как речь идет о таблице, то вторая "5" здесь означает номер строки в таблице (пятая строка), а далее должен следовать oid столбца в этой строке, он не может быть пустым. Предполагаю, что имелась в виду переменная .5.5.1.0. Угадал? :)

Last edited 2 months ago by alx (previous) (diff)

comment:6 by AlexLir, 2 months ago

Да. Угадал)))

Last edited 2 months ago by AlexLir (previous) (diff)

comment:7 by AlexLir, 2 months ago

Description: modified (diff)

in reply to:  6 comment:8 by alx, 2 months ago

Replying to AlexLir:

Да. Угадал)))

Хорошо. С этим разобрались, нужный байт я нашел. Однако возник новый вопрос...

Replying to AlexLir:

Если переменная .13.0 присутствует в MIB, то в переменную .5.5.1.0 в 5 байт нужно записать не константные значения(0x5F),...
Если переменная .13.0 отсутствует, то в переменную .5.5.1.0 в 5 байт нужно записать константу 0x5F(как это сейчас и делается).

Здесь опять какая-то ошибка. Так не делается сейчас (и по-моем не делалось никогда) - в 5-й байт переменной .5.5.1.0 не записывается константа. Значение, записываемое в этот байт, определяется задаваемой пользователем конфигурацией. Неверно указан номер байта? Прошу уточнить.

comment:9 by AlexLir, 2 months ago

Вот кусок кода из JS, где в порт == 5 плат PE-04 или PE-14, записывается в массив data[5] = 0x5F

if((this.type == 22 || this.type == 45) && p == 5) {
	data[5] = 0x5f;
	data[15] = 0x20;
	data[29] = 3;
}

Именно про этот байт и идет речь.

Last edited 2 months ago by AlexLir (previous) (diff)

in reply to:  9 comment:10 by alx, 2 months ago

Replying to AlexLir:

if((this.type == 22 || this.type == 45) && p == 5) {
	data[5] = 0x5f;

А, действительно... 45 - это же PE-14 и есть!

Но тогда я не понимаю, как выполнить то, что предлагается в описании тикета:

...в переменную .5.5.1.0 в 5 байт нужно записать не константные значения(0x5F), а значения с checkbox "Port-based VLAN settings", рассчитанные по такому же алгоритму как для остальных портов.

Если в веб-интерфейсе значение, рассчитанное как для всех остальных портов, было заменено константой (в приведенном выше фрагменте кода), следовательно, рассчитанное значение было безвозвратно потеряно - в плату PE-14 было записано значение 0x5f, и именно это значение (а не рассчитанное как для всех остальных портов) было записано в конфиг-файл. То есть в конфиг-файле для порта 5 в пятом байте всегда записано 0x5f! Как же я теперь вместо 0x5f могу записать то, что когда-то было рассчитано веб-интерфейсом, но никогда не передавалось в блок? По-моему это невыполнимо...

comment:11 by AlexLir, 2 months ago

Вот именно если есть переменная .13.0 значение 5 порта ненужно заменять константой, а если нет переменной .13.0 заменить значение константой.

in reply to:  11 ; comment:12 by alx, 2 months ago

Replying to AlexLir:

Вот именно если есть переменная .13.0 значение 5 порта ненужно заменять константой, а если нет переменной .13.0 заменить значение константой.

Ты не понимаешь, о чем я говорю. Представь себе, что год назад пользователь сконфигурировал плату и записал конфиг в ПЗУ. Там байт 5 переменной .5.5.1.0 уже заменен константой! Теперь в блок вставили PE-14 исполнения 2. Откуда теперь брать то, что год назад было заменено константой 0x5f?

in reply to:  12 comment:13 by alx, 2 months ago

Replying to alx:

Откуда теперь брать то, что год назад было заменено константой 0x5f?

Хорошо. Я только что сообразил, что этот байт можно перевычислить. Ведь при чтении настроек из платы веб-интерфейс каким-то образом узнает, какие чекбоксы отмечены, а какие нет. Следовательно, в конфиге эта информация в какой-то форме присутствует. Следовательно, ее можно извлечь и перевычислить наш несчастный 5-й байт по правилам остальных портов...

Но не могу удержаться от вопроса: зачем ты сделал в двух исполнениях одной и той же платы, одинаковых по функционалу (судя по тому, что никаких изменений в диалоге конфигурации делать не предлагается) разный формат настроек? Если все чекбоксы, select'ы и прочие поля ввода в веб-интерфейсе остались прежние, зачем ты формат конфига изменил? Разве не было бы логичнее (и, главное, проще!) оставить его прежним??? Это был риторический вопрос...

Last edited 2 months ago by alx (previous) (diff)

comment:14 by san, 2 months ago

То что год назад было заменено константой, конечно никак не вернёшь :)
Алексей, приостанови пока работу по этому тикету, мы с Сашей сейчас обсуждали и увидели что есть проблема.
Попробую объяснить.
В разводке GE-04 в сторону кросс смотрит порт 4 коммутатора платы, а в разводке PE-04 - порт 5.
ПО платы PE-04 было сделано из ПО GE-04, настройки порта были перенесены в соответствующий порт, однако один битик в настройках port-based порта смотрящего в кросс сместить с позиции 4 в позицию 5 забыли. В результате этот порт имел настройку port-based "сам в себя" т.е. трафик кольцевался. Т.к. в момент выпуска ПО платы суть проблемы была неизвестна(а как обычно нужно было срочно отгружать), то вместо "настройки делающей кольцо" разработчик принял решение писать константу 0x5f, что сломало настройку, но избавило от кольца. Затем проблема была благополучно забыта, пока не появилась плата PE-14 исп 2 с другим контроллером и ПО платы было переписано другим разработчиком.

comment:15 by san, 2 months ago

Разве не было бы логичнее (и, главное, проще!) оставить его прежним

Да тут ты прав. Логичнее сделать для обоих исполнений PE-14 и для PE-04 одинаковую настройку.
Сейчас мы с Сашей сформулируем что конкретно нужно записать в плату, чтобы настройка стала рабочей и не было колец.

in reply to:  14 comment:16 by alx, 2 months ago

Replying to san:

То что год назад было заменено константой, конечно никак не вернёшь :)

Прочитай comment:13 - насколько я понимаю, как раз вернешь (если я там нигде не ошибся в своих рассуждениях).

Алексей, приостанови пока работу по этому тикету,

Нет проблем.

Попробую объяснить.

Сразу скажу, что объяснить не получилось. Главным образом потому, что я искренне не понимаю, какое отношение внутреннее устройство и прошлые проблемы плат GE-04 и PE-04 имеют к плате PE-14 и к веб-интерфейсу...

В веб-интерфейсе для конфигурации кроссового порта платы PE-14 исполнения 1 имеется 6 чекбоксов ("Запрет управления потоком" не считаю) и две строки ввода. Значения всех этих элементов в какой-то форме передаются плате. В PE-14 исполнения 2 все эти конфигурационные элементы и их семантика остались прежними. Так зачем разработчик изменил формат, в котором те же самые настройки передаются плате? Это был риторический вопрос.

В разводке GE-04 в сторону кросс смотрит порт 4 коммутатора платы, а в разводке PE-04 - порт 5.

Какое это имеет значение? Из веб-интерфейса в переменную .5.5.1.0 передаются настройки кроссового порта коммутатора. Какое имеет значение, какой физический номер этот порт имеет в каждой конкретной плате? Хоть четвертый, хоть пятый, хоть двадцать пятый... Плата получила настройки, и она знает, что это настройки того порта, который идет в кросс-плату, какой бы номер он не имел...

ПО платы PE-04 было сделано из ПО GE-04, настройки порта были перенесены в соответствующий порт, однако один битик в настройках port-based порта смотрящего в кросс сместить с позиции 4 в позицию 5 забыли.

И что? Ну, забыли, а потом вспомнили, сместили, выпустили исправленную прошивку... Это же чисто внутренняя проблема платы PE-04. Искренне не понимаю, каким образом из этой проблемы (к тому же давно решенной) платы PE-04 логически вытекает необходимость двум разным вариантам исполнения платы PE-14 иметь разный формат одних и тех же настроек...

...пока не появилась плата PE-14 исп 2 с другим контроллером и ПО платы было переписано другим разработчиком.

Искренне не понимаю, что мешало разработчику ПО платы PE-14 исполнения 2 использовать тот же формат конфигурации, который уже применяется в PE-14 исполнения 1. Ведь все нужные плате настройки в нем уже есть...

Last edited 2 months ago by alx (previous) (diff)

in reply to:  15 comment:17 by alx, 2 months ago

Replying to san:

Разве не было бы логичнее (и, главное, проще!) оставить его прежним

Я тут почему-то (видимо, в силу очевидности) не написал самое главное, что сразу бросается в глаза и больше всего удивляет: ведь изменение формата настроек делает разные исполнения одной и той же платы несовместимыми между собой! Это же просто диверсия: у владельца блока выходит из строя плата PE-14, он берет из ЗИП другую такую же, вставляет в блок на место сломавшейся, эта плата получает конфиг и... не работает!

Last edited 2 months ago by alx (previous) (diff)

comment:18 by san, 2 months ago

какое отношение внутреннее устройство и прошлые проблемы плат GE-04 и PE-04 имеют к плате PE-14 и к веб-интерфейсу...

PE-14 это таже PE-04 но с гигабитными портами, её ПО для исполнения 1 сделано из ПО PE-04 и унаследовало проблему.

Так зачем разработчик изменил формат, в котором те же самые настройки передаются плате?

Саша пытался исправить ошибку в формате конфигурации допущенную в первом исполнении платы. Но в ходе обсуждения, мы пришли к выводу, что формат должен быть одинаковый, чтобы не допустить несовместимости.

Сейчас придётся сделать в веб-морде костыль, чтобы настройки можно было таки корректно записать и в предыдущее исполнения платы и в новое.

in reply to:  18 comment:19 by alx, 2 months ago

Replying to san:

какое отношение внутреннее устройство и прошлые проблемы плат GE-04 и PE-04 имеют к плате PE-14 и к веб-интерфейсу...

PE-14 это таже PE-04 но с гигабитными портами, её ПО для исполнения 1 сделано из ПО PE-04 и унаследовало проблему.

А, понял. Форк PE-04 --> PE-14 был сделан до того, как проблема в PE-04 была устранена. Но я все равно не понимаю, при чем тут формат, в котором плате передаются настройки. Это же все равно внутренняя проблема платы! Надо всего-то смержить коммит, исправляющий эту проблему в PE-04, в ветку PE-14...

Так зачем разработчик изменил формат, в котором те же самые настройки передаются плате?

Саша пытался исправить ошибку в формате конфигурации допущенную в первом исполнении платы.

По-прежнему не вижу логики... Если в формате допущена ошибка, почему исправить ее предлагается только для платы PE-14 исполнения 2? Казалось бы, формат должен быть исправлен для всех исполнений всх плат, которые его используют - и GE-04, и GE-12, и GE-16, и PE-04 и т.п... Как минимум, для всех исполнений платы одного типа!...

Сейчас придётся сделать в веб-морде костыль, чтобы настройки можно было таки корректно записать и в предыдущее исполнения платы и в новое.

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

Version 1, edited 2 months ago by alx (previous) (next) (diff)

in reply to:  18 comment:20 by alx, 2 months ago

Replying to san:

Саша пытался исправить ошибку в формате конфигурации

А в чем заключается ошибка в формате? Я как разработчик SW-01 имею непосредственное отношение к этому формату (ведь этот формат используется для передачи настроек от SW-01 к PE-14), поэтому, если в формате обнаружена ошибка, мне кажется, что мне необходимо о ней знать...

Last edited 2 months ago by alx (previous) (diff)

comment:21 by san, 2 months ago

Ошибка в том, что вместо выбранных пользователем настроек, в переменную .5.x.1.0 пишется константа 0x5f.
Эту ошибку намеренно ввёл разработчик ПО первого исполнения PE-14, т.к. в то время не разобрался в корне проблемы и применил такое обходное решение.
На данный момент известно, что в прошивке PE-14 исп1 (как и в PE-04, там ошибка тоже не исправлена) есть ошибка - в настройке port-based в байте 5 переменных .5.x.1.0 перепутаны биты 5 и 4.

Кажется, что правильный путь - исправить ошибку в ПО PE-14 исп1, а в веб-интерфейсе, вместо костыля-константы честно писать настройки выбранные пользователем.
Но в таком случае, если пользователь вдруг вставит на место сконфигурированной платы с новой прошивкой плату со старой прошивкой, то получит кольцо Ethernet.

Сейчас мне лучшим решением кажется - переставить битики со стороны веб-интерфейса для того чтобы формат этого байта подходил для плат со старым(ошибочным) ПО, и в новом ПО платы использовать тот-же формат.

in reply to:  21 comment:22 by alx, 2 months ago

Replying to san:

Ошибка в том, что вместо выбранных пользователем настроек, в переменную .5.x.1.0 пишется константа 0x5f.

О, я только сейчас понял, что байт 5 переменной .5.5.1.0, в который пишется константа 0x5f, как раз и должен содержать значения четырех чекбоксов порта 5, разрешающих/запрещаюших форвардинг в другие порты! То есть, записывая константу, мы "портим" заданную пользователем конфигурацию!

Провел эксперимент: снял отметку пары из этих четырех чекбоксов, записал конфигурацию в плату PE-04, затем прочитал конфигурацию из платы. Результат - все чекбоксы отмечены! Кошмар...

Эту ошибку намеренно ввёл разработчик ПО первого исполнения PE-14,

Ты что-то путаешь. Плата PE-14 исполнения 1 использует тот же формат конфигурации, что и плата PE-04. Никаких изменений в формат конфигурации при добавлении поддержки платы PE-14 внесено не было. Смотри changeset:2156 - там ко всем проверкам типа платы PE-04 добавляется "или PE-14", и ничего более...

На данный момент известно, что в прошивке PE-14 исп1 (как и в PE-04, там ошибка тоже не исправлена) есть ошибка - в настройке port-based в байте 5 переменных .5.x.1.0 перепутаны биты 5 и 4.

А, теперь понятно. Ты, видимо, говоришь об этой ошибке. Этому тикету уже шестой год (а "костыль" в байте 5 переменной .5.5.1.0 существует 10 лет!). Странно, что суть ошибки известна, однако эта ошибка до сих пор не была исправлена...

Last edited 2 months ago by alx (previous) (diff)

comment:23 by alx, 8 weeks ago

Я вспомнил одно обстоятельство, которое, наверное, поможет выйти из нашей затруднительной ситуации.

Когда-то очень давно (видимо, по указанию разработчика платы GE-04) в веб-интерфейсе было запрещено устанавливать несимметричные настройки port-based VLAN (когда одному порту A разрешен форвардинг в порт B, но порту B не разрешен форвардинг в порт A): при установке или снятии отметки чекбокса, управляющего форвардингом из порта A в порт B, то жесаое автоматически происходит с отметкой чекбокса, управляющего форвардингом из порта B в порт A. Почему это было сделано, я сейчас не помню, но это нам сейчас и не важно.

Благодаря описанной выше особенности, конфигурация форвардинга содержит избыточность, так как пары чекбоксов всегда имеют одно и то же состояние (прямо как квантовая запутанность!). Пользуясь этой особенностью, платы могут определить, какие настройки порта 5 пользователь хотел записать в плату, несмотря на то, что эти настройки были испорчены заменой байта 5 на константу. Чтобы определить, разрешен ли форвардинг порту 5 в любой другой порт, плата должна вместо соответствующего бита байта 5 переменной .5.5.1.0 проверят бит 4 байта 5 переменных .5.x.1.0 где x - номер порта, куда порт 5 форвардит пакеты. Например если в переменной .5.3.1.0 бит 4 байта 5 установлен в 0 (запрещен форвардинг из порта 3 в порт 5), значит и форвардинг из порта 5 в порт 3 тоже должен быть запрещен.

Предлагаю использовать описанный выше принцип для исправления ошибки в платах PE-04 и PE-14.

Note: See TracTickets for help on using tickets.