Listening on tap device para pacotes escritos através do descritor de arquivos

1

Eu tenho um problema em entender como usar os dispositivos de toque.

Eu criei um dispositivo de toque e o atualizei. Um programa de espaço do usuário abre seu descritor de arquivo e recebe os quadros Ethernet enviados para o dispositivo. O dispositivo de toque obtém o endereço IP e a máscara de rede 10.254.0.1/24. Isso funciona muito bem até este ponto. Eu faço um echo "test" | netcat -uq0 10.254.0.2 12345 , o programa recebe o pacote e o encaminha para outra máquina através de outro método de comunicação.

Mas o contrário não funciona: O programa userspace escreve um quadro ethernet válido para o descritor de arquivo do dispositivo de toque. Mas um netcat -ul 12345 não recebe nada. Mesmo com socat. Eu também tentei criar uma ponte e adicionar o dispositivo de toque a ela, o que também não funcionou.

Estou confuso porque, se eu monitorar o dispositivo de derivação com o Wireshark, posso ver cada pacote e cada pacote está correto. O contador tx packets: XY do comando ifconfig é aumentado em cada quadro que o programa userspace grava no dispositivo de toque. O ARP está desabilitado por ip link set dev tap0 arp off porque, por enquanto, somente os pacotes IP serão processados.

Você pode visualizar minha configuração da seguinte forma:

         host1              (some channel)               host2
netcat --> tap0 --> prog   --------------->    prog  -->  tap0  -->  netcat
<=============== works ========================================>| does not work

Tem alguma ideia de como posso receber um pacote "na outra extremidade" do dispositivo de toque? Ou onde eu posso ler mais?

EDIT2 : Edição removida. (Conclusão errada do teste errado. Houve um problema com uma soma de verificação. Agora os pacotes são válidos, mas também não são recebidos.)

Obrigado! Michael

    
por michz 08.04.2016 / 19:39

1 resposta

0

Algumas investigações adicionais através do netstat -s ajudaram-me a encontrar a causa: O Reverse Path Filter deixou cair meus pacotes. (Até agora eu não entendi completamente porque ...)

Definir o filtro no dispositivo de toque para um modo solto fez com que funcionasse:

sudo sysctl -w net.ipv4.conf.tap0.rp_filter=2

(Desabilitar isso definindo isso como 0 não não funcionou para mim.)

    
por 09.04.2016 / 19:53