Estoy comenzando con mapas XDP y BPF.
Entiendo que para acceder a un mapa BPF desde el espacio de usuario, usamos llamadas al sistema bpf_* . Por ejemplo, bpf_map_lookup_elem() se usa para buscar un elemento de un mapa BPF en el programa de espacio de usuario. Sin embargo, noté que las mismas llamadas al sistema también se usan para acceder a los mapas en los programas XDP cargados en el kernel (ref. aquí ).
Supuse que dichos programas deberían ejecutarse en el espacio del kernel y, por lo tanto, ¿hay alguna otra forma en que se deba acceder a estos mapas BPF desde el espacio del kernel? ¿O el programa cargado con XDP también forma parte del espacio de usuario pero solo se ejecuta dentro del kernel?
Para buscar elementos del mapa desde el espacio de usuario, debe usar bpf(2) syscall , con el comando BPF_MAP_LOOKUP_ELEM . La biblioteca de espacio de usuario principal para BPF expone este comando syscall como bpf_map_lookup_elem() .
Para buscar elementos de mapa de programas BPF, de hecho necesita usar el asistente BPF bpf_map_lookup_elem . En pocas palabras, los ayudantes de BPF son funciones del núcleo a las que puede llamar desde el código de bytes de BPF con call de instrucción.
A pesar de tener el mismo nombre, son cosas diferentes: la primera es una función de biblioteca, mientras que la segunda es un ayudante de BPF.