Использует ли libpcap слой управления traffi c linux? - PullRequest
0 голосов
/ 20 февраля 2020

Я работал над созданием отдельного сетевого стека и использую libpcap или, в частности, функцию pcap_inject для отправки пакетов непосредственно на канальный уровень. Однако, когда я смотрю на команду tc -s qdisc show dev eth0, я вижу, что отправляемые мной пакеты считаются в пакетах, отправленных из очереди. Итак, мой вопрос, вызывает ли pcap_inject уровень управления traffi c для linux для отправки пакетов? Или он напрямую отправляет драйвер устройства?

Заранее спасибо

1 Ответ

1 голос
/ 28 февраля 2020

pcap_inject вызывает traffi c уровень управления linux для отправки пакетов? Или он напрямую отправляет драйвер устройства?

Он send() вызывает сокет PF_PACKET . По умолчанию пакеты, отправленные на эти сокеты go через уровень управления traffi c; процитировать справочную страницу сокета PF_PACKET :

   PACKET_QDISC_BYPASS (since Linux 3.14)
          By default, packets sent through packet sockets pass through
          the kernel's qdisc (traffic control) layer, which is fine for
          the vast majority of use cases.  For traffic generator appli‐
          ances using packet sockets that intend to brute-force flood
          the network—for example, to test devices under load in a simi‐
          lar fashion to pktgen—this layer can be bypassed by setting
          this integer option to 1.  A side effect is that packet
          buffering in the qdisc layer is avoided, which will lead to
          increased drops when network device transmit queues are busy;
          therefore, use at your own risk.

libpcap не включает эту опцию.

...