
Estoy tratando de establecer una comunicación bidireccional donde los paquetes Ethernet UDP ingresan a un sistema Linux (supongamos una Raspberry pi) desde la interfaz eth0 y se canalizan al hardware UART del sistema, luego los lee el segundo sistema Linux, se canalizan a la interfaz eth0 y transmitidos nuevamente como paquetes UDP a un sensor y viceversa.
En otras palabras, estoy intentando convertir paquetes UDP a serie y nuevamente a UDP sin problemas.
He logrado que los paquetes UDP desde la PC lleguen al segundo sistema Linux, pero no llegan al sensor que es su destino final.
Configuración: la PC está en la misma subred que el primer sistema Linux y envía paquetes constantemente en la dirección de transmisión, puerto 33000.
En el primer sistema Linux utilicé netcat para canalizar datos desde eth0 a UART usando estos comandos:stty -F /dev/ttyS0para establecer la velocidad en baudios del uart y luegonc -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0para canalizar datos desde eth0 al ttyS0 (uart). Los datos se transmiten con éxito al segundo sistema Linux donde puedo imprimir las cargas útiles. Pero a partir de ahí aparecen los problemas.
En el segundo sistema Linux utilicé los mismos comandos que el primero:stty -F /dev/ttyS0ync -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0. El problema es que los paquetes no llegan a su destino final que es el sensor. Superviso el tráfico en la interfaz eth0 del segundo sistema Linux con Wireshark y no se transmiten paquetes UDP.
Por extraño que parezca, con esta configuración, los paquetes de la PC (puerto 33000) no llegan al sensor, PERO, si cambio el puerto de escucha al 10021 (en ambos sistemas Linux), entonces el camino está abierto para los paquetes del sensor y llegan con éxito a la PC (software).
Estoy pensando que podría tener que ver con las funciones de servidor/cliente. La PC (a través del software especial del sensor) inicia la comunicación con el sensor enviando paquetes SYN en 33000 y espera una respuesta. Esos paquetes no llegan al sensor, pero el sensor envía datos de telemetría en el puerto 10021 y esos paquetes llegan exitosamente al software (PC).
Cualquier idea es bienvenida.