¿A dónde va mi paquete eBPF?

¿A dónde va mi paquete eBPF?

Tengo un caso de prueba que utiliza eBPF que configura un 'ping' entre 2 espacios de nombres. Mi programa eBPF intercepta el primer paquete de un flujo, lo envía al espacio del usuario, donde se utiliza para construir un mapa para que los paquetes posteriores del flujo pasen directamente desde el eth receptor al kernel donde se genera la respuesta de ping. Luego, el primer paquete se envía a una cola de transmisión eBPF donde espero que vaya al kernel y genere una respuesta de ping, pero de hecho no veo más rastros de este paquete; no en 'tcpdump' en las interfaces, ni en 'pwru'. ¿Alguien puede decirme qué estoy haciendo mal?

Mi caso de prueba está aquíhttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter; el script de ejecución está aquíhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run.sh.

El registro de la ejecución (incluidos los tcpdumps formateados) está aquíhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/runlog.txty el registro de pwruestá aquíhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/pwru.txt.

Estoy ejecutando Ubuntu 22.04 completamente actualizado.

Disculpas, el registro de ejecución anterior no tiene salida tcpdump. Aquíhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run2.txtes lo que pretendía publicar, con tcpdumps.

He agregado una prueba UDP en el directorio.https://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221212.1400/AF_XDP-filter(consulte los archivos udp-sender-count.c y udp-receiver.c, y ejecute scripts y archivos de registro en el directorio udp-namespace-direct-with-dummy). Este caso de prueba muestra que el primer paquete se redirige al espacio del usuario y luego se pierde, y el segundo paquete llega al escucha udp.

Respuesta1

información relacionada