Чому * BSD використовує специфічні для драйвера імена для мережевих інтерфейсів? Чи передбачає це обмеження?


13

Я зауважую, що залежно від марки мережевої карти, назви інтерфейсів відрізняються (я думаю, залежить від драйвера).

  • Чому * BSD використовує специфічні для драйвера імена для мережевих інтерфейсів?
  • Чи означає це, що в ядрі відсутній шар абстракції, що описує "загальний мережевий інтерфейс", тож кожен драйвер буде внутрішньо адресований через власний API?
  • (як) це впливає на такі підсистеми, як агрегація зв’язків, формування трафіку, QoS ( ALTQ ), фільтрація та інші?

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

Це внутрішнє обмеження BSD через відсутність відповідного шару абстракції?

Відповіді:


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командою. Звичайно, основні механізми ядра абсолютно різні.
Warren Young

5

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

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

У FreeBSD операції з налаштування мережі працюють за допомогою виклику ioctlна сокет Unix. Цей ioctl обробляється за допомогою загального коду мереж і підключається до відповідного драйвера, якщо ioctl вимагає цього.

Я не знаю, як ALTQ взаємодіє з агрегацією посилань. Не забудьте скористатись останньою версією FreeBSD, оскільки ця система раніше не працювала, але зараз є .


3

Це полегшує визначити, з якою мережевою карткою ви розмовляєте.

Якщо у вас є Intel (igb0) та Realtek (rl0) nic, тепер ви можете негайно розказати їх.

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

eth це може мати сенс, якщо у вас було багато інших типів мережевих інтерфейсів, але ви рідко це робите.


+1, бо я знаю, хто ти. :) Дякую за подкаст !
Воррен Янг

1

Чому * BSD використовує специфічні для драйвера імена для мережевих інтерфейсів?

Щоб зробити прості речі. Якщо ви звернетесь до інтерфейсу з назвою bge0та ознайомтеся з посібниками або скористаєтеся мнемонічною системою зв’язків, ви швидко запам’ятаєте, що цей драйвер - це широкосмуговий гігабітний ефір . Цей документ також є корисним.

Чи означає це, що в ядрі відсутній шар абстракції, що описує "загальний мережевий інтерфейс", тож кожен драйвер буде внутрішньо адресований через власний API?

Правило тут:

  • Використовуйте ім'я драйвера, щоб створити ім'я пристрою;
  • Використовуйте найнижчий ідентифікатор PCI, щоб створити номер відразу після імені пристрою;

Шар абстракції не потрібен. Це просто.

(як) це впливає на такі підсистеми, як агрегація зв’язків, формування трафіку, QoS (ALTQ), фільтрація та інші?

Імена інтерфейсів не повинні перешкоджати формуванню трафіку.

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

Сьогодні це має працювати:

Це внутрішнє обмеження BSD через відсутність відповідного шару абстракції?

Справа не в тому, що не існує відповідного шару для цього. Це тому, що ви можете використовувати інші ресурси для обробки таких імен, як, наприклад, створення імен інтерфейсу ( /etc/rc.conf) або зміна ідентифікатора pci на налаштуваннях материнської плати. І, як говорять інші з цього питання, навіть Linux йде на цей шлях biosdevname.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.