Скажем, у меня есть ядро 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