Почему *BSD использует специфические имена драйверов для сетевых интерфейсов? Означает ли это ограничения?

Почему *BSD использует специфические имена драйверов для сетевых интерфейсов? Означает ли это ограничения?

Я заметил, что в зависимости от марки сетевой карты названия интерфейсов различаются (полагаю, это зависит от драйвера).

  • Почему *BSD использует специфические имена драйверов для сетевых интерфейсов?
  • Означает ли это, что в ядре нет уровня абстракции, описывающего «общий сетевой интерфейс», поэтому к каждому драйверу будет осуществляться внутренняя адресация через его собственный API?
  • (как) это влияет на такие подсистемы, как агрегация каналов, формирование трафика, QoS (АЛЬТQ), фильтрация и т. д.?

Точнее, похоже, что в pfSense я не могу использовать ALTQ с виртуальным интерфейсом агрегации каналов (LAG).

Является ли это внутренним ограничением BSD из-за отсутствия соответствующего уровня абстракции?

решение1

Почему *BSD использует специфические имена драйверов для сетевых интерфейсов?

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

У этого есть одно практическое преимущество: в BSD сетевые драйверы имеют собственные страницы руководства в разделе 4. Итак,dc(4)расскажет вам о драйвере DEC 21143, который будет управлять dc0сетевым адаптером.

То же самое можно увидеть и в других частях BSD Unix, например, в жестких дисках.

Является ли это внутренним ограничением BSD из-за отсутствия соответствующего уровня абстракции?

Нет.

Как бы там ни было,Linux движется по схожему пути. Времена простых правил именования адаптеров Ethernet уходят в прошлое, поскольку сети становятся все сложнее.

решение2

Выбор использования общих или специфичных для драйвера имен не имеет ничего общего с какими-либо ограничениями драйвера.

Это в основном косметический выбор. Использование общих имен имеет преимущество в том, что скрывает информацию, которая почти всегда не имеет значения — сетевой интерфейс есть сетевой интерфейс, независимо от того, кто его создал. Возможности устройства зависят от конкретной модели и его конфигурации, а не от используемого драйвера. Преимущество конкретных имен для администратора: если в сообщении об ошибке упоминается eth0(хорошо, какой из них 0, а какой 1), это менее информативно, чем если бы упоминалось wlan0(ах, это интерфейс Wi-Fi) или bcm0(ах, это интерфейс Broadcom).

В FreeBSD операции по настройке сети выполняются путем вызоваioctlна сокете Unix. Этот ioctl обрабатывается общим сетевым кодом и передается соответствующему драйверу, если ioctl требует этого.

Я не знаю, как ALTQ взаимодействует с агрегацией ссылок. Убедитесь, что используете последнюю версию FreeBSD, так какРаньше это не работало, но теперь работает.

решение3

Это позволяет легче определить, с какой сетевой картой вы общаетесь.

Если у вас есть сетевые карты Intel (igb0) и Realtek (rl0), теперь вы можете сразу их отличить.

Кроме того, разные драйверы поддерживают разные функции. Некоторые драйверы поддерживают polling, а некоторые нет. Некоторые поддерживают LROи т. д. Проще отслеживать, какие поддерживают, когда они не все просто TSOназваны .RSSeth

ethЭто могло бы иметь смысл, если бы у вас было много других типов сетевых интерфейсов, но это случается редко.

решение4

Почему *BSD использует специфические имена драйверов для сетевых интерфейсов?

Чтобы упростить ситуацию. Если вы посмотрите на интерфейс под названиемbge0и взгляните на руководства или используйте свойсистема мнемонических связейвы быстро вспомните, что этот водитель -Broadcom Gigabit Ethernet.Этотдокумент также полезен.

Означает ли это, что в ядре нет уровня абстракции, описывающего «общий сетевой интерфейс», поэтому к каждому драйверу будет осуществляться внутренняя адресация через его собственный API?

Правило здесь такое:

  • Используйте имя драйвера для создания имени устройства;
  • Используйте наименьший идентификатор PCI для создания номера сразу после имени устройства;

Никакого уровня абстракции не требуется. Вот так просто.

(как) это влияет на такие подсистемы, как агрегация каналов, формирование трафика, QoS (ALTQ), фильтрация и другие?

Имена интерфейсов не должны мешать формированию трафика.

Точнее, похоже, что в pfSense я не могу использовать ALTQ с виртуальным интерфейсом агрегации каналов (LAG).

Сегодня это должно работать:

Является ли это внутренним ограничением BSD из-за отсутствия соответствующего уровня абстракции?

Это не значит, что нет соответствующего слоя для обработки этого. Это потому, что вы могли бы использовать другие ресурсы для обработки таких имен, каксоздание имен интерфейсов( /etc/rc.conf), илиизменение его PCI-идентификаторана настройке материнской платы. И как сказали другие по этому вопросу, даже Linux идет по этому пути с biosdevname.

Связанный контент