Как libpcap получает пакет от драйвера?

Может ли кто-нибудь указать мне хорошую отправную точку, чтобы узнать, как libpcap получает свои пакеты от сетевого драйвера? Я намерен заменить функцию получения быстрой реализацией.


person Patrick    schedule 21.04.2014    source источник
comment
Какая платформа? Основная идея заключается в том, что он вставляет собственный драйвер в стек протоколов. Детали зависят от платформы. Было бы удивительно, если бы вы могли радикально улучшить скорость чего-то, над чем работали столько времени, сколько существует эта штука.   -  person user207421    schedule 21.04.2014
comment
Это будет в Linux. По сути, я хотел бы заменить ixgbe драйвером Intel DPDK.   -  person Patrick    schedule 21.04.2014


Ответы (1)


«Функция приема»:

  • стандартная функция приема драйвера, ничем не отличающаяся от той, что используется для приема пакетов и передачи их в обычный сетевой стек;
  • часть «пакетного сокета» обычного сетевого стека.

Некоторые Слайды Intel по DPDK, по-видимому, указывают на то, что DPDK позволяет коду пользовательского пространства напрямую взаимодействовать с сетевым адаптером. Это означает, что правильным способом использования этого с libpcap было бы написать «модуль» libpcap, который использует DPDK.

Libpcap какое-то время поддерживал возможность иметь несколько «модулей» для захвата трафика. Это не подключаемые модули, которые можно загружать во время выполнения (это может случиться когда-нибудь, но, поскольку libpcap может потребовать дополнительных привилегий для захвата трафика, необходимо обеспечить поддержку сторонних подключаемых модулей ОЧЕНЬ осторожно, чтобы предотвратить запуск ненадежного кода с этими привилегиями!); они скомпилированы в libpcap.

Некоторые примеры модулей в исходном коде libpcap, отличные от модулей «по умолчанию» для различных ОС, это pcap-snf.c для сетевых карт Myricom и pcap-dag.c для плат Endace DAG.

Если вы хотите продолжить это, вероятно, было бы лучше, если бы вы подписались на tcpdump-workers. список рассылки и продолжил обсуждение там. (Это не очень посещаемый список, и, несмотря на его название, он предназначен как для пользователей, так и для разработчиков как libpcap, так и tcpdump; вы попадаете в категорию «разработчиков libpcap», поскольку кто-то пишет модуль захвата.)

person Community    schedule 21.04.2014