Почему в /dev нет сетевых устройств?

у меня появился, может быть, для кого-то странный вопрос. Почему в Linux, в devfs нет сетевых устройств (сетевых интерфейсов)? Они же по логике вещей все равно устройства, хоть и тип их сетевой.


Ответы (2 шт):

Автор решения: Sergey

Они же по логике вещей все равно устройства

Нет. С точки зрения NIX* систем, утсройство - это файл. И как для любого другого файла, по отношению к нему должна быть возможность выполнить 5 операций:

  1. Открытие файла
  2. Запись в файл
  3. Чтение из файла
  4. IOCTL
  5. Закрытие файла.

Драйвер физической сетевой карточки этим требованиям не удовлетворяет никак. Зато они отлично подходят для логического понятия "сокет".

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

Но "железка" сетевой карточки в эту стройную картину не укладывается!

→ Ссылка
Автор решения: eri

Не соглашусь с Sergey.

Драйвер сетевой может прекрасно вписаться в файл. Примеры этому tun, macvtap сходу. Тут дело в том, что сетевой управляет одна подпрограмма - сетевой стек ОС и совместное использование невозможно. Нет смысла создавать файл, которым нельзя пользоваться. Файл создается для использования устройств именно из Userspace.

Также при использовании USB устройств напрямую, через libusb, файл устройства из dev пропадает.

ПС.

macvtap (используется в 99,9999999% случаев в виртуалках) добавляет ещё один мак адрес на физическую сетевую карту и символьное устройство в dev. Если сформировать вручную L2 пакет и записать его в /dev/tap5, то он выйдет из сетевушки, если читать это файл, то там будут прилетать пакеты адресованные назначенному MAC адресу.

modprobe macvtap
ip link add link enp5s0  name macvtap0 type macvtap
ls -la /dev/tap*

crw------- 1 root root 235, 1 окт 16 13:24 /dev/tap5

ППС. Linux это не UNIX. Нет необходимости отображать все устройства как файлы.

→ Ссылка