Opened 4 months ago
Closed 12 days ago
#700 closed задача (fixed)
Добавить поддержку исполнения 2 для платы PE-14
Reported by: | AlexLir | Owned by: | alx |
---|---|---|---|
Priority: | средний | Milestone: | 1 очередь |
Component: | sw | Keywords: | |
Cc: |
Description (last modified by )
Параметры 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 (31)
comment:1 by , 4 months ago
comment:2 by , 4 months ago
Replying to AlexLir:
Если переменная .13.0 присутствует в MIB, то в переменную .5.0 в...
Здесь какая-то ошибка: у платы PE-14 нет переменной .5.0.
follow-up: 5 comment:3 by , 4 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 , 4 months ago
Description: | modified (diff) |
---|
comment:5 by , 4 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
. Угадал? :)
comment:7 by , 4 months ago
Description: | modified (diff) |
---|
comment:8 by , 4 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
не записывается константа. Значение, записываемое в этот байт, определяется задаваемой пользователем конфигурацией. Неверно указан номер байта? Прошу уточнить.
follow-up: 10 comment:9 by , 4 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; }
Именно про этот байт и идет речь.
comment:10 by , 4 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 могу записать то, что когда-то было рассчитано веб-интерфейсом, но никогда не передавалось в блок? По-моему это невыполнимо...
follow-up: 12 comment:11 by , 4 months ago
Вот именно если есть переменная .13.0 значение 5 порта ненужно заменять константой, а если нет переменной .13.0 заменить значение константой.
follow-up: 13 comment:12 by , 4 months ago
Replying to AlexLir:
Вот именно если есть переменная .13.0 значение 5 порта ненужно заменять константой, а если нет переменной .13.0 заменить значение константой.
Ты не понимаешь, о чем я говорю. Представь себе, что год назад пользователь сконфигурировал плату и записал конфиг в ПЗУ. Там байт 5 переменной .5.5.1.0
уже заменен константой! Теперь в блок вставили PE-14 исполнения 2. Откуда теперь брать то, что год назад было заменено константой 0x5f?
comment:13 by , 4 months ago
Replying to alx:
Откуда теперь брать то, что год назад было заменено константой 0x5f?
Хорошо. Я только что сообразил, что этот байт можно перевычислить. Ведь при чтении настроек из платы веб-интерфейс каким-то образом узнает, какие чекбоксы отмечены, а какие нет. Следовательно, в конфиге эта информация в какой-то форме присутствует. Следовательно, ее можно извлечь и перевычислить наш несчастный 5-й байт по правилам остальных портов...
Но не могу удержаться от вопроса: зачем ты сделал в двух исполнениях одной и той же платы, одинаковых по функционалу (судя по тому, что никаких изменений в диалоге конфигурации делать не предлагается) разный формат настроек? Если все чекбоксы, select'ы и прочие поля ввода в веб-интерфейсе остались прежние, зачем ты формат конфига изменил? Разве не было бы логичнее (и, главное, проще!) оставить его прежним??? Это был риторический вопрос...
follow-up: 16 comment:14 by , 4 months ago
То что год назад было заменено константой, конечно никак не вернёшь :)
Алексей, приостанови пока работу по этому тикету, мы с Сашей сейчас обсуждали и увидели что есть проблема.
Попробую объяснить.
В разводке GE-04 в сторону кросс смотрит порт 4 коммутатора платы, а в разводке PE-04 - порт 5.
ПО платы PE-04 было сделано из ПО GE-04, настройки порта были перенесены в соответствующий порт, однако один битик в настройках port-based порта смотрящего в кросс сместить с позиции 4 в позицию 5 забыли. В результате этот порт имел настройку port-based "сам в себя" т.е. трафик кольцевался. Т.к. в момент выпуска ПО платы суть проблемы была неизвестна(а как обычно нужно было срочно отгружать), то вместо "настройки делающей кольцо" разработчик принял решение писать константу 0x5f, что сломало настройку, но избавило от кольца. Затем проблема была благополучно забыта, пока не появилась плата PE-14 исп 2 с другим контроллером и ПО платы было переписано другим разработчиком.
follow-up: 17 comment:15 by , 4 months ago
Разве не было бы логичнее (и, главное, проще!) оставить его прежним
Да тут ты прав. Логичнее сделать для обоих исполнений PE-14 и для PE-04 одинаковую настройку.
Сейчас мы с Сашей сформулируем что конкретно нужно записать в плату, чтобы настройка стала рабочей и не было колец.
comment:16 by , 4 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. Ведь все нужные плате настройки в нем уже есть...
comment:17 by , 4 months ago
Replying to san:
Разве не было бы логичнее (и, главное, проще!) оставить его прежним
Я тут почему-то (видимо, в силу очевидности) не написал самое главное, что сразу бросается в глаза и больше всего удивляет: ведь изменение формата настроек делает разные исполнения одной и той же платы несовместимыми между собой! Это же просто диверсия: у владельца блока выходит из строя плата PE-14, он берет из ЗИП другую такую же, вставляет в блок на место сломавшейся, эта плата получает конфиг и... не работает!
follow-ups: 19 20 comment:18 by , 4 months ago
какое отношение внутреннее устройство и прошлые проблемы плат GE-04 и PE-04 имеют к плате PE-14 и к веб-интерфейсу...
PE-14 это таже PE-04 но с гигабитными портами, её ПО для исполнения 1 сделано из ПО PE-04 и унаследовало проблему.
Так зачем разработчик изменил формат, в котором те же самые настройки передаются плате?
Саша пытался исправить ошибку в формате конфигурации допущенную в первом исполнении платы. Но в ходе обсуждения, мы пришли к выводу, что формат должен быть одинаковый, чтобы не допустить несовместимости.
Сейчас придётся сделать в веб-морде костыль, чтобы настройки можно было таки корректно записать и в предыдущее исполнения платы и в новое.
comment:19 by , 4 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 и т.п... Как минимум, для всех исполнений платы одного типа!...
Сейчас придётся сделать в веб-морде костыль, чтобы настройки можно было таки корректно записать и в предыдущее исполнения платы и в новое.
А что этому (корректной записи) мешает? Настройки и так записываются одинаково, номер исполнения на них никак не влияет, и не должен влиять (иначе платы одного типа разных исполнений окажутся несовместимы между собой)...
comment:20 by , 4 months ago
Replying to san:
Саша пытался исправить ошибку в формате конфигурации
А в чем заключается ошибка в формате? Я как разработчик SW-01 имею непосредственное отношение к этому формату (ведь этот формат используется для передачи настроек от SW-01 к PE-14), поэтому, если в формате обнаружена ошибка, мне кажется, что мне необходимо о ней знать...
follow-up: 22 comment:21 by , 4 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.
Сейчас мне лучшим решением кажется - переставить битики со стороны веб-интерфейса для того чтобы формат этого байта подходил для плат со старым(ошибочным) ПО, и в новом ПО платы использовать тот-же формат.
comment:22 by , 4 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 лет!). Странно, что суть ошибки известна, однако эта ошибка до сих пор не была исправлена...
comment:23 by , 3 months 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.
follow-ups: 25 26 comment:24 by , 2 weeks ago
Применил вышеописанный алгоритм, если значение переменной .5.5.1.0 == 0x5F, то для порта 5 значение формируется из значений других портов, иначе записывается как есть, благодаря этому в старых платах ошибка будет исправлена.
Для новых плат предлагаю сделать нормально то есть как описано в тикете.
follow-up: 27 comment:25 by , 13 days ago
Replying to AlexLir:
Для новых плат предлагаю сделать нормально то есть как описано в тикете.
Тогда у меня есть еще вопрос по предложению из описания тикета.
Параметры PE-14 исп. 2 нужно отображать так-же как параметры исп. 1, за исключением того что у плат исп. 2 есть новые переменные:
.13.0: RO, INT8 - Ревизия ПО платы. Если переменная .13.0 присутствует в MIB, то в переменную .5.5.1.0 в 5 байт нужно записать не константные значения(0x5F)...
Если известно, что у PE-14 исполнения 2 есть переменная .13.0, могу я не проверять наличие этой переменной в MIB, а вместо этого проверить номер исполнения платы? Мне так было бы проще и удобнее, так как номер исполнения известен сразу, а MIB надо специально запрашивать.
comment:26 by , 13 days ago
Replying to AlexLir:
Применил вышеописанный алгоритм, если значение переменной .5.5.1.0 == 0x5F, то для порта 5 значение формируется из значений других портов,
Для новых плат предлагаю сделать нормально то есть как описано в тикете.
Поясни, пожалуйста, что значит "старые платы" и "новые платы". Я, например, не понял, применен ли этот алгоритм для PE-14 исполнения 2.
follow-up: 28 comment:27 by , 13 days ago
Replying to alx:
Если известно, что у PE-14 исполнения 2 есть переменная .13.0, могу я не проверять наличие этой переменной в MIB, а вместо этого проверить номер исполнения платы?
Нельзя на номер исполнения платы ориентироваться, так как эта переменная будет добавлена в PE-04 и в PE-14 исп.1, для исправления ошибки с port-based VLAN.
Replying to alx:
Поясни, пожалуйста, что значит "старые платы" и "новые платы".
Старые платы имелось в виду те, у которых уже присутствует ошибка. И эта ошибка будет исправлена добавление переменной .13.0.
Новые платы PE-14 исп.2.
comment:28 by , 13 days ago
Replying to AlexLir:
Нельзя на номер исполнения платы ориентироваться, так как эта переменная будет добавлена в PE-04 и в PE-14 исп.1, для исправления ошибки с port-based VLAN.
Не понимаю, какое отношение платы PE-04 и PE-14 исполнения 1 имеют у этому тикету. Насколько я вижу, тикет касается платы PE-14 исполнения 2. Хорошо, переформулирую вопрос. Верно ли я понял, что возможна ситуация, когда в MIB платы PE-14 исполнения 2 отсутствует переменная .13.0 (и в этом случае в байт 5 переменной .5.5.1.0 надо записывать 0x5f)?
Поясни, пожалуйста, что значит "старые платы" и "новые платы".
Старые платы имелось в виду те, у которых уже присутствует ошибка. И эта ошибка будет исправлена добавление переменной .13.0.
Новые платы PE-14 исп.2.
Спасибо за уточнение. То есть PE-14 исполнения 2 - это в твоей терминологии "новая плата", и в ней реализован алгоритм, предложенный в comment:23, и, следовательно, для нее безразлично, будет ли в байте 5 переменной .5.5.1.0 записано 0x5f или реальная конфигурация. Я правильно понял? Если все так, то я не буду повторно воспроизводить этот алгоритм в плате SW-01.
follow-up: 30 comment:29 by , 12 days ago
То есть PE-14 исполнения 2 - это в твоей терминологии "новая плата", и в ней реализован алгоритм, предложенный в comment:23, и, следовательно, для нее безразлично, будет ли в байте 5 переменной .5.5.1.0 записано 0x5f или реальная конфигурация. Я правильно понял? Если все так, то я не буду повторно воспроизводить этот алгоритм в плате SW-01.
Да, алгоритм "воосстановления" конфига не нужно в SW-01 повторять.
В PE-14 исп2 Саша восстанавливает конфиг для совместимости с текущим ПО SW-01.
Но также план Саши был ввести признак отличающий старые прошивки(с ошибкой) от новых - переменную 13.0.
Сейчас новая прошивка(и только новая) есть только для PE-14 исп.2, в плату вместо 5f можно записать адекватный конфиг.
Но в PE-14 исп.1 адекватный конфиг записывать нельзя, у неё старая прошивка и она закольцует Ethernet, в неё можно записывать. только 5f, независимо от реального значения из конфига. Такая же проблема и с платами PE-04.
Можно надеяться что PE-14 исп1 и PE-04 в будующем тоже получат новые прошивки с исправленной ошибкой, поэтому вместо варианта отличать новые платы от старых по исполнению, Саша предлагает универсальный вариант для всех трёх плат(PE-14 исп2, PE-14 исп1, PE-04) - отличать новую прошивку от старой по наличию переменной 13.0.
В таком случае в старые прошивки конфиг будет записан как раньше, а в новых прошивках мы избавимся от костыля, например в файле конфига будут адекватные значения настройки для портов а не 5f.
comment:30 by , 12 days ago
Replying to san:
В таком случае в старые прошивки конфиг будет записан как раньше, а в новых прошивках мы избавимся от костыля,
От костыля мы все равно не избавимся, так как уже выпущены платы, которые его требуют (PE-04 например). Добавление проверки на "новые" и "старые" платы в данном случае приведет только к усложнению кода (добавится дополнительное условие) и ухудшению его читаемости. Поэтому я принял решение оставить костыль как есть (в том числе для PE-14 исполнения 2) - пусть плата сама разбирается с полученной конфигурацией. Вопрос к разработчику из comment:28 снимается.
Потыкть плату можно в блоке 192.168.20.202