
мы получили задание на работе, которое включает в себя портирование некоторого продукта с Windows на Linux. Часть функциональности этого продукта — сетевой адаптер NDIS6 miniport, который, по-видимому, проходит только через сетевые буферы. У него есть идентификатор и MAC-адрес. Отдельное приложение-служба активирует этот сетевой драйвер и запускает IP-службы, которые пропускают сетевой трафик через этот адаптер.
Мой вопрос: что могло бы стать функциональной заменой такого «фиктивного» сетевого драйвера в Linux?
решение1
Что такое замена сетевого адаптера Windows Miniport в Linux?
«Сетевой адаптер Miniport» мало что объясняет –драйвер минипортаявляется чем-то довольно специфичным для модели драйвера Windows и описывает, как был написан драйвер, но не то, что он делает.
Некая сущность (модуль?), которая будет вести себя как транзитная среда для пакетов Ethernet, и которую можно программно активировать и деактивировать, и которую можно программно использовать для настройки IP-сети через нее.
Если ваша цель — создать сетевой интерфейс, управляемый программным обеспечением (т. е. пакеты, отправляемые через интерфейс, принимаются программой через дескриптор файла, и наоборот), то вам следует использоватьtap
илиtun
Интерфейс. (Первый передает пакеты с заголовком Ethernet уровня 2, последний — без него, но в остальном они одинаковы.)
Официальная документация:
https://www.kernel.org/doc/Documentation/networking/tuntap.txt
(Эта документация довольно старая; во всех современных дистрибутивах Linux вам не нужно вручную создавать узлы устройств или загружать модули ядра. Однако раздел 3 «Программный интерфейс» и API на основе ioctl по-прежнему актуальны.)
Интерфейсы TUN/TAP используются большинством программ VPN и виртуальных машин в Linux; действительно, драйверы NDIS «TAP-Windows» и «Wintun», доступные в Windows, были написаны для их имитации.
Также можно написать свой собственный драйвер сетевого интерфейса, который будет делать то же самое (например, «vboxnetadp», используемый VirtualBox, и «sheep_net», используемый эмулятором SheepShaver Mac), но большинство системных администраторов будут вам благодарны, если вы этого не сделаете и вместо этого воспользуетесь стандартным tun/tap.