Aumenta o buffer de envio / taxa de injeção de pacotes em um dispositivo sem fio?

1

Escrevi um sistema / driver sem fio personalizado que funciona em cima de uma placa wifi com injeção de pacotes e está no modo monitor. Meu programa é baseado na libpcap e usa pcap_inject para enviar pacotes pelo dispositivo sem fio.

Funciona muito bem com qualquer quantidade de tráfego de entrada e com saída de 1-2 pacotes por segundo (ping ICMP). A questão, no entanto, é que quando eu começo a tentar transmitir muito mais rápido (TCP, mais protocolos úteis em 25+ pacotes por segundo) eu rapidamente pareço ficar sem buffer e meus erros de programa com Failed to inject packet: send: Resource temporarily unavailable .

Isso não faz sentido para mim. Eu sei de fato que minha placa wireless pode transmitir rápido o suficiente para lidar com TCP a taxas acima de 500Mb / s (por isso não está saturando o buffer de toque TX do dispositivo), então presumo que o problema esteja em outro lugar. A injeção de pacotes é de alguma forma menos otimizada em drivers / firmware? A libpcap está apenas contornando algum tipo de buffer importante e tentando transmitir exclusivamente a si mesmo?

    
por Sirens 02.01.2018 / 08:33

2 respostas

1

Este não foi um problema libpcap , mas sim um problema de engenharia sem fio. O canal em que estou trabalhando já é bastante barulhento, já que esta é uma malha não regulamentada (ou seja, ninguém coordena usando RTS / CTS) e então meu cartão wifi, no modo monitor, decidiu voltar para o "listen and wait for silence "abordagem que é obviamente mais lenta e mais propensa a erros. Isso significava que eu não podia transmitir muito rápido, o que significava que meu buffer TX enchia muito rapidamente, dando o erro Resource temporarily unavailable . Isso é um resultado da detecção de portadora física (CCA), que causa um backoff exponencial.

Mudei para um canal vazio (com apenas um pacote a cada dois segundos) e de repente consegui transmitir mais de mil pacotes por segundo, o que é muito melhor. Minha velocidade de transmissão ainda é muito ruim (no máximo em cerca de 600KB / s), mas é pelo menos rápido o suficiente para ser utilizável para mim. Este post parece sugerir que algumas placas simplesmente não podem injetar tão rápido

Infelizmente, com a placa sem fio e seus drivers, não há maneiras fáceis de desativar esse comportamento de transmissão muito tímido. Alguns drivers permitem que você mexa nos parâmetros de backoff, outros permitem desabilitar o CCA se você tiver um cartão Atheros.

    
por 07.01.2018 / 07:35
0

O envio de pacotes TCP em alta taxa via pcap_inject não parece uma batalha de desempenho que você provavelmente vencerá. Considere abusar do maquinário TCP de alto desempenho para enviar esses pacotes para um módulo de kernel personalizado, que ajusta a carga de acordo com suas necessidades e encaminha os pacotes para fora da interface de rede.

    
por 07.01.2018 / 00:23

Tags