es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El programa XDP no captura todos los paquetes de ingreso.

El siguiente programa XDP no captura todos los paquetes XDP de entrada. Almaceno la IP de origen en una tabla hash como clave y el valor como el número de veces que se ha visto esa IP.

include <linux bpf.h="">
include <bpf bpf_helpers.h="">
include <linux if_ether.h="">
include <linux ip.h="">
include <linux tcp.h="">
include <arpa inet.h="">

struct addr_desc_struct {
    __u32 src_ip;
};

struct bpf_map_def SEC("maps") addr_map = {
    .type = BPF_MAP_TYPE_LRU_HASH,
    .key_size = sizeof(struct addr_desc_struct),
    .value_size = sizeof(long),
    .max_entries = 4096
};

SEC("collect_ips")
int xdp_ip_stats_prog(struct __sk_buff *ctx) {
    void *data_end = (void *)(long)ctx->data_end;
    void *data = (void *)(long)ctx->data;
    struct ethhdr *eth = data;
    struct iphdr *iph = data + sizeof(struct ethhdr);

    if (data_end >= (void *) (eth + sizeof(struct ethhdr))) {
        if (eth->h_proto == htons(ETH_P_IP)) {
            struct addr_desc_struct addr_desc = {.src_ip = iph->saddr};
            long init_val = 1;
            long *value = bpf_map_lookup_elem(&addr_map, &addr_desc);

            if (value) {
                __sync_fetch_and_add(value, 1);
            } else {
                bpf_map_update_elem(&addr_map, &addr_desc, &init_val, BPF_ANY);
            }
        }
    }

    return XDP_PASS;
}

char _license[] SEC("license") = "GPL";

Configuración:

Anfitrión macOS, invitado VirtualBox ejecutando Lubuntu. He creado un “adaptador solo para el host” en la máquina virtual. Tanto la máquina virtual como macOS tienen una interfaz en la red 192.168.56.x, con las direcciones IP 192.168.56.102 y 192.168.56.1, respectivamente. Este programa XDP se carga correctamente en la interfaz de la máquina virtual utilizando el programa xdp-loader.

Prueba #1:

Ejecutar un servidor HTTP en la máquina virtual con IP 192.168.56.102. Hacer una solicitud usando curl desde macOS.

Observación: El programa XDP no captura ningún paquete.

Prueba #2:

Ejecutar un servidor HTTP en macOS con IP 192.168.56.1. Hacer una solicitud desde la máquina virtual usando curl.

Observación: El programa XDP captura algunos paquetes enviados desde macOS a la máquina virtual. Wireshark indica que se deberían haber recibido más paquetes por parte del programa XDP.

Prueba #3:

Hacer SSH desde macOS a 192.168.56.102 en la máquina virtual.

Observación: El programa XDP no captura ningún paquete.

En todas las pruebas debería esperarse que el programa XDP procese los paquetes.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Problema con el programa XDP capturando paquetes

    El programa XDP proporcionado no está capturando todos los paquetes XDP de ingreso. Según el programa, almacena la IP de origen en una tabla hash como clave y el valor como el número de veces que se ha visto esa IP.

    Configuración

    El entorno de prueba consta de un host macOS y una máquina virtual VirtualBox con Lubuntu. Hay un “adaptador solo para host” en la máquina virtual, y tanto la máquina virtual como macOS tienen una interfaz en la red 192.168.56.x, con las IP 192.168.56.102 y 192.168.56.1 respectivamente. El programa XDP se carga correctamente en la interfaz de la máquina virtual utilizando el programa xdp-loader.

    Pruebas

    Se realizaron las siguientes pruebas para verificar el comportamiento del programa XDP:

    Prueba #1: Se ejecuta un servidor HTTP en la máquina virtual con la IP 192.168.56.102. Realizar una solicitud Curl a esta IP desde macOS.

    • Observación: El programa XDP no captura ningún paquete.

    Prueba #2: Se ejecuta un servidor HTTP en macOS con la IP 192.168.56.1. Realizar una solicitud Curl a esta IP desde la máquina virtual.

    • Observación: El programa XDP captura algunos de los paquetes enviados desde macOS a la máquina virtual. Wireshark indica que se deberían haber recibido más paquetes por XDP.

    Prueba #3: SSH desde macOS a 192.168.56.102 en la máquina virtual.

    • Observación: El programa XDP no captura ningún paquete.

    En todas las pruebas, se espera ver paquetes procesados por el programa XDP. Sin embargo, el programa XDP parece tener problemas para capturar todos los paquetes en el entorno dado. Se necesita una investigación adicional para identificar la causa raíz de este comportamiento.

Comments are closed.