Я заметил, что в зависимости от марки сетевой карты названия интерфейсов различаются (полагаю, это зависит от драйвера).
- Почему *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
названы .RSS
eth
eth
Это могло бы иметь смысл, если бы у вас было много других типов сетевых интерфейсов, но это случается редко.
решение4
Почему *BSD использует специфические имена драйверов для сетевых интерфейсов?
Чтобы упростить ситуацию. Если вы посмотрите на интерфейс под названиемbge0
и взгляните на руководства или используйте свойсистема мнемонических связейвы быстро вспомните, что этот водитель -Broadcom Gigabit Ethernet.Этотдокумент также полезен.
Означает ли это, что в ядре нет уровня абстракции, описывающего «общий сетевой интерфейс», поэтому к каждому драйверу будет осуществляться внутренняя адресация через его собственный API?
Правило здесь такое:
- Используйте имя драйвера для создания имени устройства;
- Используйте наименьший идентификатор PCI для создания номера сразу после имени устройства;
Никакого уровня абстракции не требуется. Вот так просто.
(как) это влияет на такие подсистемы, как агрегация каналов, формирование трафика, QoS (ALTQ), фильтрация и другие?
Имена интерфейсов не должны мешать формированию трафика.
Точнее, похоже, что в pfSense я не могу использовать ALTQ с виртуальным интерфейсом агрегации каналов (LAG).
Сегодня это должно работать:
Является ли это внутренним ограничением BSD из-за отсутствия соответствующего уровня абстракции?
Это не значит, что нет соответствующего слоя для обработки этого. Это потому, что вы могли бы использовать другие ресурсы для обработки таких имен, каксоздание имен интерфейсов( /etc/rc.conf
), илиизменение его PCI-идентификаторана настройке материнской платы. И как сказали другие по этому вопросу, даже Linux идет по этому пути с biosdevname
.