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