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

12

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

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

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

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

Totor
источник

Ответы:

7

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

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

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

Вы видите это и в других частях BSD Unix, таких как жесткие диски.

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

Нет.

Что бы ни стоило, Linux идет по тому же пути . Дни простых правил именования для адаптеров Ethernet исчезают, так как работа в сети усложняется.

Уоррен Янг
источник
Спасибо. Знаете ли вы, почему я не могу использовать ALTQ с агрегацией ссылок?
Тотор
Один вопрос на вопрос, пожалуйста. Давайте сосредоточимся на именовании устройств BSD.
Уоррен Янг
Я бы не назвал новое сетевое устройство udev с именем, аналогичным BSD. Насколько я знаю, по умолчанию используется какой-либо путь шины для идентификации устройств, а не имя драйвера со схемой случайной нумерации.
Павел Шимерда
@ PavelŠimerda: Я просто имел в виду , что системы Linux , которые используют эту схему больше не использовать eth0через ethINFINITY. Вы больше не сможете просто печатать ifconfig eth0и ожидать, что вы будете смотреть на первый интерфейс Ethernet, который делает такие системы Linux функционально похожими с точки зрения пользовательского интерфейса на FreeBSD, где вам нужно либо априори знать имена интерфейсы в системе, или вам нужно сначала получить список с неквалифицированной ifconfigкомандой. Основные механизмы ядра, конечно, совершенно разные.
Уоррен Янг
5

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

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

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

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

Жиль "ТАК - перестань быть злым"
источник
3

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

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

Также разные драйверы поддерживают разные функции. Некоторые драйверы поддерживают, pollingа некоторые нет. Некоторая поддержка LRO, TSOи RSSт.д. легче отслеживать , какие поддержки , которые , когда они не являются всего лишь по имени eth.

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

Аллан Джуд
источник
+1, потому что я знаю кто ты. :) Спасибо за подкаст !
Уоррен Янг
1

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

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

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

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

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

Слой абстракции не требуется. Так просто.

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

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

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

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

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

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


источник