LINUX.ORG.RU

«вешается» сеть при установке платы видеозахвата

 ,


0

1

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

Есть две серверные ubuntu, одна 17.04 32 bit, вторая 20.04 64 bit.

На обоих сетевые карты видятся, адреса назначаются, друг друга компы «видят», пингуются, интернет шарится, но как только я в pci разъём вставляю карту orient hw-808 на обоих машинах глушится сеть напрочь, интернет перестает шариться, в общем сеть неработоспособна, но сетевые карты адреса им назначенные показывают.

Куда копать не понимаю.

Карта куплена от какой-то конторы, и, вроде, новая. Если предположить, что номер карты системе еще не подсунут, но, тогда, по смыслу, она просто не должна работать, а не вешать напрочь сеть. Видимо udev не может её правильно определить, её устройства…. А, так с отваленной сетью… что перебрать ~120 карт из cardlist?

Или всё-таки проблема в дефектной карте видеозахвата?


Ответ на: комментарий от chenbr0

Не могу подсказать, у меня, к сожалению, нет freebsd…, но у меня есть конструктивное предложение, давайте коллективным разумом попробуем победить сей баг на ubuntu-server 20.04.

mvt
() автор топика
Ответ на: комментарий от AS

На данной материнской плате ASUS M2N-E 3 слота PCI, два PCI-e 4x, 1 слот PCI-e 16x.

Плата видеозахвата ORIENT HW-808 с шиной PCI, сетевые карты по с шинами PCI и драйверами не 8169 проблем с установкой платы видеозахвата не испытывают.

Есть проблема с автоматическим переименованием сетевых карт на шине PCI-e 4x при установке вышеуказанной платы видеозахвата и возврата к прежним именам при её извлечении.

mvt
() автор топика
Ответ на: комментарий от mky

Что удалось выяснить:

При отсутствии ORIENT HW-808 cетевая карта enp3s0 имеет ip 172.18.0.1 и мак-адрес: 1c:61:b4:a6:a4:78.

При вставке ORIENT HW-808 cетевая карта enp3s0 меняет своё имя на enp4s0, при этом мак-адрес, естественно, остаётся 1c:61:b4:a6:a4:78.

При ручном назначении ip addr add 172.18.0.1/24 dev enp4s0 на карте загорается светодиод линка, поднимается сеть, сервер доступен по сети.

Вторая сетевая карта, во втором слоте PCI-e при отсутствии ORIENT HW-808 имеет название enp2s0.

При вставке ORIENT HW-808 cетевая карта enp2s0 меняет своё имя на enp3s0, при этом мак-адрес, естественно, остаётся a0:f3:c1:00:ae:e0.

Выхлоп (без ORIENT HW-808) команды sudo lspci -vvv -PP | tee /tmp/tmp-file я выложил на https://pastebin.com/R94S3HLN

Начальные номера этих PCI-e карт в файле:

00:06.0/01:07.0

00:0c.0/02:00.0

Вот если бы заставить систему не менять названия сетевых карт это было бы чудесно )))

mvt
() автор топика
Ответ на: комментарий от mvt

Если карты работают, но просто меняют название в системе, lspci смотреть смысла нет.

Что касается переименования, то либо вставить и не вытаскивать HW-808 (и назначить ip-адреса новым именам), либо настроить именование карт по MAC-адресам, но тогда при замене сетевой карты на другую нужно будет перенастраивать так как MAC-адрес изменится.

Заставить BIOS «заморозить» конфигурацию PCI и всегда считать что у вас в третьем PCI-слоте мост PCI-PCI невозможно.

mky ★★★★★
()
Ответ на: комментарий от mvt

А, так это известный косяк. Enjoy your «persistent» naming, lol. Можно попробовать задавать имена через правила udev, что-то типа:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="1c:61:b4:a6:a4:78", NAME:="eth0"

ну и, соответственно, в конфигах использовать заданные имена.

alegz ★★★★
()
Последнее исправление: alegz (всего исправлений: 1)
Ответ на: комментарий от mvt

Есть проблема с автоматическим переименованием сетевых карт на шине PCI-e 4x при установке вышеуказанной платы видеозахвата и возврата к прежним именам при её извлечении.

Это нормально: стабильность имён сетевых интерфейсов дутая во многом, в том числе и при изменении конфигурации железа. Надо через правила udev привязывать к mac-адресам всё равно.

AS ★★★★★
()
Ответ на: комментарий от alegz

Вот, уже несколько часов бьюсь, в ubuntu 20.04 сие не работает, или по крайней мере работает странно:

Пробовал так:

SUBSYSTEM==«net», ACTION==«add», ATTR{address}==«a0:f3:c1:00:ae:e0», NAME=«enp2s0»

SUBSYSTEM==«net», ACTION==«add», ATTR{address}==«1c:61:b4:a6:a4:78», NAME=«enp3s0»

Если enp2s0 «держит», то enp3s0 не хочет «рисовать», стабильно выдаёт enp4s0 (((…

Файл в /etc/udev/rules.d/70-persistent-net.rules отсутствует, я его создал, в debian 9-10 этот файл системой понимался и принимался, а в 11 вроде хрен, но это не точно….

Такая метода, как я понял является устаревшей, но ИМХО, вполне себе эффективной и простой, а тут, на осваивай новИе технологии…(((

Можно, конечно удариться во все «тяжкие» и залезть в в grub и к параметрам ядра добавить, параметр, сейчас не скажу какой, но, отменяющий все эти enp… и возвращающий в пещеру с горой eth…

Но, я в темноту очень не хочу, я её «БОЮС»….ретроградством не страдаю… я за прогресс, стабильность, мир и работоспособность всех систем со всеми системами, а потому приемлю новейшие стратегии привязки сетевых карт к их mac-адресам и назначению им необходимых наименований-псевдонимов…

Но, пока как-то не получается….

Если есть возможность, подскажите, пожалуйста, как мне их переименовать привязав их к их mac-адресам в ubuntu-server 20.04?!

mvt
() автор топика
Ответ на: комментарий от mky

Что-то не получается их переименовать старым способом… Подробнее я ответил на комментарий alegz (выше).

И, снова на старте стал загораться светодиод enp3s0, я отловил момент погасания, есть скриншоты, единственное, что я там нашёл это сообщение «can’t disable aspm os doesn’t have aspm control», но как я понял оно отношения к моей проблеме не имеет, а имеет отношение к энергосбережению.

А, при вставке ORIENT HW-808 стабильно выплывает сообщение (есть скриншот) «Failed to start udev Wait for Complete Device Initialization». И, предлагает его посмотреть, я посмотрел, увидел, что у него статус «устаревшего», а так он в активном статусе…

https://pastebin.com/2gLZicq7

mvt
() автор топика
Ответ на: комментарий от mvt

У тебя драйвер bttv долго тупит судя по таймстемпам сообщений в dmesg. http://avreg.net/howto_linux-capture-cards.html тут советуют добавить опции загрузки модуля bttv:

При долгой загрузке модуля bttv (более 5 сек., обычно сопровождается выводом строк типа »I2C detect»), попробуйте добавить следующие опции: options bttv … i2c_scan=0 i2c_hw=-1

А переименовывать сетевые интерфейсы нет смысла. Надо просто конфигурацию привязать не к именам интерфейсов, а к MAC адресам. И systemd-networkd и NetworkManager позволяют это сделать.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Да, спасибо большое, я вчера эту страницу читал, закралась у меня такая мысль добавить эту строчку, но Вы обосновали это с технической т.з.

Действительно комп долго грузится при этой карте захвата, я добавил её и всё исправилось.

И, всё же может я не прав, и, то, что я делаю это неправильно, но я создал файл в /etc/udev/rules.d/70-persistent-net.rules, внёс в него:

SUBSYSTEM==«net», ACTION==«add», ATTR{address}==«a0:f3:c1:00:ae:e0», NAME=«enp2s0»

(это карта второго слота PCIEX1_2, именно так он именуется на мат. плате)

И, если без этой строчки этот сетевой интерфейс, при вставленной плате видеозахвата, получал название enp3s0, то теперь он именуется как прежде, без платы видеозахвата Orient HW-808, enp2s0, а тот, что получал enp4s0 (слот PCIEX1_1) стал, как прежде, enp3s0 и на нём загорелся светодиод линка, что и требовалось изначально.

Предположу, что без создания файла 70-persistent-net.rules происходило смещение названия по первому (PCIEX1_1) PCI-e слоту и далее по второму (PCIEX1_2) PCI-e слоту на +1 при наличии платы видеозахвата в третьем слоте PCI, а при её отсутствии смещение по их названиям было на -1.

Я так и не понял откуда такая зависимость, все, уважаемые, граждане, что приняли деятельное соучастие в моей проблеме, мне кажется, так и не смогли прояснить такое поведение железа, хотя я всё еще не теряю на это надежды, но справедливости ради я от них этого, вроде и не просил.

P.S. Если вытащить плату видеозахвата, то сетевая карта в слоте PCIEX1_1 не меняет своё название на enp4s0, остаётся с названием enp3s0 и адресом 172.18.0.1. А, сетевая карта в слоте PCIEX1_2 имеет прежнее имя enp2s0, что хорошо. А, если вытащить сетевую карту из слота PCIEX1_2, при вставленной ORIENT HW-808, то сетевая карта в слоте PCIEX1_1 меняет своё имя на enp2s0 и сеть 172.18.0.1, разумеется, перестаёт работать.

Такая, вот, зависимость….

Затем, по неизвестной причине, от меня совсем не зависящей, я ничего не менял, всё вернулось к прежним наименованиям карт enp2s0-enp3s0, а enp3s0-enp4s0 при вставленной Orient HW-808.

Сейчас опять вставил ORIENT HW-808, и снова стало как в абз. 3-7 PCIEX1_2 - enp2s0, а PCIEX1_1 - enp3s0.

Далее, попробовал получить картинку с /dev/video0 - получил.

Но, одно остаётся непонятным, почему слот PCIEX1_1 «прыгает» с enp3s0 на enp4s0 и как это поведение победить?

Спасибо Вам и остальным.

mvt
() автор топика
Ответ на: комментарий от mvt

Имя интерфейса enp<bus>s<slot>. Плата видеозахвата содержит pci мост. Поэтому при добавлении платы увеличивается количество шин. Энумерация pci на многопроцессорной системе идёт в несколько параллельных потоков, порядок назначения номеров шинам из-за этого случайный. Не надо завязываться на имена интерфейсов. Надо привязываться к их MAC адресам.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Хорошо, спасибо, стало понятнее, но если я правильно понимаю вот этим я и привязываюсь к mac-адресу:

SUBSYSTEM==«net», ACTION==«add», DRIVERS==«?*», ATTR{address}==«a0:f3:c1:00:ae:e0», ATTR{dev_id}==«0x0», ATTR{type}==«1», KERNEL==«eth*», NAME=«enp2s0»

SUBSYSTEM==«net», ACTION==«add», DRIVERS==«?*», ATTR{address}==«1c:61:b4:a6:a4:78», ATTR{dev_id}==«0x0», ATTR{type}==«1», KERNEL==«eth*», NAME=«enp3s0»

Если я всё правильно делаю, то это не работает, а если неправильно, то как правильно, можно подсказку?

Весь «Интернет» в этих привязках…

mvt
() автор топика
Ответ на: комментарий от mvt

По-моему матчинг по DRIVERS, KERNEL, ATTR{dev_id} и ATTR{type} излишний. Может быть правило не срабатывает из-за этих излишних проверок. У меня срабатывает правило

ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="84:a9:38:73:25:7e", NAME="lan"

Проверяю так. Сначала запускаю в отдельном терминале udevadm monitor -k. Затем иду в /sys/bus/pci/drivers/e1000e и смотрю какие устройства он обслуживает:

# ls
0000:00:1f.6  bind  module  new_id  remove_id  uevent  unbind

Отцепляю дравер от сетевухи:

# echo 0000:00:1f.6 > unbind

Вижу события:

KERNEL[21412.083920] remove   /devices/pci0000:00/0000:00:1f.6/ptp/ptp0 (ptp)
KERNEL[21412.084142] remove   /devices/pci0000:00/0000:00:1f.6/net/enp0s31f6/queues/rx-0 (queues)
KERNEL[21412.084181] remove   /devices/pci0000:00/0000:00:1f.6/net/enp0s31f6/queues/tx-0 (queues)
KERNEL[21412.084228] remove   /devices/pci0000:00/0000:00:1f.6/net/enp0s31f6 (net)
KERNEL[21412.102686] unbind   /devices/pci0000:00/0000:00:1f.6 (pci)

Прицепляю драйвер обратно:

# echo 0000:00:1f.6 > bind

Вижу события:

KERNEL[21426.359562] add      /devices/pci0000:00/0000:00:1f.6/wakeup/wakeup68 (wakeup)
KERNEL[21426.359606] remove   /devices/pci0000:00/0000:00:1f.6/wakeup/wakeup68 (wakeup)
KERNEL[21426.360330] add      /devices/pci0000:00/0000:00:1f.6/ptp/ptp0 (ptp)
KERNEL[21426.427520] add      /devices/pci0000:00/0000:00:1f.6/net/eth0 (net)
KERNEL[21426.427558] add      /devices/pci0000:00/0000:00:1f.6/net/eth0/queues/rx-0 (queues)
KERNEL[21426.427572] add      /devices/pci0000:00/0000:00:1f.6/net/eth0/queues/tx-0 (queues)
KERNEL[21426.427877] bind     /devices/pci0000:00/0000:00:1f.6 (pci)
KERNEL[21426.433323] move     /devices/pci0000:00/0000:00:1f.6/net/lan (net)

Последнее событие типа move это и есть переименование интерфейса.

Файл с моими правилами переименования должен быть лексиграфически до 80-net-setup-link.rules.

Если драйвер сетевухи в initramfs, то файл с правилами тоже должен быть в initramfs.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Да, действительно, всё, что Вы указали именно так и работает и у меня.

Разница между тем, что в «Интернетах» и Вашим подходом ощутима и профессиональна с т.з. технической реализации, поскольку не требует перезагрузки и даёт понять как работает «отцепка/прицепка» драйвера сетевой карты.

Я проверил

SUBSYSTEM==«net», ACTION==«add», ATTR{address}==«a0:f3:c1:00:ae:e0», NAME=«enp5s0»

SUBSYSTEM==«net», ACTION==«add», ATTR{address}==«1c:61:b4:a6:a4:78», NAME=«enp9s0»

Всё переименовано, работает, зависимые вещи - шлюз, SNAT, dhcp я исправил.

Плата видеозахвата ORIENT HW-808 работает.

Я пытался переименовать и раньше, но думал, что если я укажу mac-address(а) в 70-persistent-net.rules, а имена (enp2s0 и enp3s0) оставлю, то это будет работать, но enp3s0 упорно именовала себя как enp4s0.

Большое спасибо!

mvt
() автор топика