[freebsd] В releng-12 опять поломали lagg?

Yaroslav Shvets yaroslav at shvets.name
Wed Sep 25 05:00:04 EEST 2019


On Tue, 24 Sep 2019, 07:55, you wrote:

> On 24.09.2019 11:26, Eugene Grosbein wrote:
>
> Просьба отвечать в рассылку, а то я и сам не обратил внимания и свой ответ не продублировал сюда.
>
>> On 24.09.2019 06:50, Yaroslav Shvets wrote:
>>> Hello Eugene.
>>>
>>> On Mon, 23 Sep 2019, 08:51, you wrote:
>>>
>>>> 23.09.2019 8:46, Yaroslav Shvets пишет:
>>>>
>>>>> Сервер, к сожалению, рабочий, и экспериментировать часто не получается.
>>>>> Но обязательно попробую, как будет возможность.
>>>>>
>>>>> Пока выяснилось, что сам lagg работает с нетегированными пакетами.
>>>>> Проблема только - с тегированными. Т.е. не работает ни один
>>>>> из vlan'ов построенных на lagg, но сам lagg - рабочий.
>>>>
>>>> Очень может быть, что дело как раз в сломанном аппаратном offload для vlanhwtag/vlanhwfilter.
>>>> Более того, такое уже бывало в старых версиях, но с другими драйверами.
>>>>
>>>> Крайне желательно это выяснить побыстрей, пока ещё есть немного времени успеть починить к 12.1-RELEASE.
>>>> Но времени совсем немного.
>>>
>>> Сразу скажу: результаты экспериментов у меня странные.
>>>
>>> Последовательность 1:
>>> ---------------------
>>> Если делать все руками, то все работает.
>>> Примерно так:
>>> ifconfig em0 up
>>> ifconfig em1 up
>>> ifconfig lagg0 create
>>> ifconfig lagg0 laggproto lacp laggport em0 laggport em1 up
>>> ifconfig lagg0.11 create
>>> ifconfig lagg0.11 inet <ip/prefix>
>>> --> интерфейс lagg0.11 оказывается рабочим
>>> и это не зависит от -rxcsum -txcsum -tso4 -vlanmtu -vlanhwtag -vlanhwfilter
>>> -vlanhwcsum -vlanhwtso
>>> т.е. все работает в разных сочетаниях
>>>
>>> Последовательность 2:
>>> ---------------------
>>> Если разрешить часть работы проделать rc.conf'у, примерно так:
>>> -- rc.conf --
>>> ifconfig_em0="up"
>>> ifconfig_em1="up"
>>> cloned_interfaces="lagg0 lagg0.11"
>>> ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 up"
>>> ----------------
>>> А потом вручную доделать:
>>> ifconfig lagg0.11 inet <ip/prefix>
>>> --> интерфейс lagg0.11 оказывается нерабочим
>>> хотя выглядит абсолютно нормальным
>>>
>>> Последовательность 3:
>>> ---------------------
>>> Аналогично последовательности 2, но убираем из cloned_interfaces
>>> создание lagg0.11, предполагая сделать его руками:
>>> -- rc.conf --
>>> ifconfig_em0="up"
>>> ifconfig_em1="up"
>>> cloned_interfaces="lagg0"
>>> ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 up"
>>> ----------------
>>> А потом вручную доделать:
>>> ifconfig lagg0.11 create
>>> ifconfig lagg0.11 inet <ip/prefix>
>>> --> интерфейс lagg0.11 оказывается рабочим
>>> и выглядит абсолютно нормально
>>>
>>> Итого: руками все создаем - все работает,
>>> имеем cloned_interfaces="lagg0 lagg0.11" - не работает,
>>> имеем cloned_interfaces="lagg0", а потом руками досоздаем lagg0.11 -
>>> опять все работает.
>>>
>>> Создается впечатление, что в cloned_interfaces lagg0.11 как-то неправильно
>>> создается (или раньше чего-то), или как-то не так, как руками.
>>>
>>> Причем интересно, что если взять последовательность 2, при которой получился
>>> нерабочий интерфейс lagg0.11, удалить интерфейс, снова его создать:
>>> ifconfig lagg0.11 destroy
>>> ifconfig lagg0.11 create
>>> ifconfig lagg0.11 inet <ip/prefix>
>>> --> то все равно интерфейс получается нерабочий
>>>
>>> Последовательность 1 отличается от последовательности 2
>>> очередностью создания 11-го vlan'а и "собиранием" lagg'а
>>> 'ifconfig lagg0.11 create' и
>>> 'ifconfig lagg0 laggproto lacp laggport em0 laggport em1 up'.
>>> Но при ручном варианте (последовательность 1) очередность
>>> собирания lagg0 и создания lagg0.11 не имеет значения.
>>> Интерфейс lagg0.11 в любом случае оказывается рабочим.
>>>
>>> Вобщем, странные вещи происходят.
>>
>> Во-первых, чудес не бывает и нерабочий интерфейс наверняка можно отличить по его состоянию.
>> Покажи вывод ifconfig -v lagg0.11 в "нерабочем" виде и в "рабочем" для сравнения.
>>
>> Во-вторых: что будет, если во втором варианте удалить интерфейс и снова его создать,
>> но вместо новомодного синтаксиса lagg0.11 использовать старый синтаксис создания?
>>
>> ifconfig vlan11 create vlan 11 vlandev lagg0 up
>> # проверить работу интерфейса, а затем:
>> ifconfig vlan11 name lagg0.11
>> # и снова проверить работу интерфейса
>
> Только, конечно, не вручную, а через rc.conf:
>
> cloned_interfaces="lagg0 vlan11"
> ifconfig_vlan11="vlan 11 vlandev lagg0"
> #ifconfig_vlan11_name="lagg0.11"
>
> Сначала без смены имени.

А вот если пойти по второму варианту, потом удалить нерабочий интерфейс и снова
его создать через "ifconfig vlan11 create vlan 11 vlandev lagg0 up", то
он все равно получается нерабочим.

# ifconfig -v vlan11
vlan11: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=403<RXCSUM,TXCSUM,LRO>
         ether 00:e0:81:ba:ad:90
         inet xx.xx.170.82 netmask 0xfffffff0 broadcast xx.xx.170.95
         groups: vlan
         vlan: 11 vlanpcp: 0 parent interface: lagg0
         media: Ethernet autoselect
         status: active
         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Т.е. где-то внутри "таблицы интерфейсов системы" уже что-то поломано.
И удаление/пересоздание интерфейсов уже ничего не исправляет.

-- 
Yaroslav Shvets


More information about the freebsd mailing list