как перехватить пакеты, отправленные программой пространства пользователя XDP - PullRequest
1 голос
/ 11 марта 2020

Скажем, у меня есть ядро ​​XDP и пользовательские программы. Код ядра проверяет входящие пакеты и «перенаправляет» их в программу пространства пользователя XDP. Затем программа пространства пользователя XDP выполняет некоторую обработку и отправляет пакеты (это может быть тот же NI C или другой). В целях контроля мы хотим проверить исходящие пакеты *1001*, отправленные кодом пространства пользователя XDP. Нашей первой идеей было использование t c и вставка кода BPF для исходящей части, явно не сработало.

Есть идеи?

EDIT1: выходная программа:

SEC("tx")
int track_tx(struct __sk_buff *skb)
{
    __u64 t2 = bpf_ktime_get_ns();
    void *data_end = (void *)(long)skb->data_end;
    void *data = (void *)(long)skb->data;
    bpf_custom_printk("\n__________send length %d\n", data_end-data); 
    return TC_ACT_OK;
}

пробег: sudo tc filter add dev ens13 egress bpf da obj layercoop.o sec tx

РЕДАКТИРОВАНИЕ2: код
ПОЛЬЗОВАТЕЛЬ: https://github.com/torvalds/linux/blob/master/samples/bpf/xdpsock_user.c
Ядро (не интересно): https://github.com/torvalds/linux/blob/master/samples/bpf/xdpsock_kern.c
Я хочу пересылать входящие пакеты, поэтому запустите его с make -j 4; sudo ./xdpsock -i ens13 -l

...