Есть ли известная (или, возможно, неизвестная) ошибка, касающаяся размера пакетов в структуре сокетов AF-XDP (+ libbpf)?
Я испытываю странную потерю пакетов для своего приложения:
- Поток пакетов IPv4 / UDP / RTP со всеми пакетами одинакового размера (1442 байта): без потери пакетов
- Поток пакетов IPv4 / UDP / RTP, где почти все пакеты имеют одинаковый размер (1492 байта), за исключением специального "маркерного" пакета (всего 357 байтов, но они также являются IPv4 / UDP-пакетами): все маркерные пакеты теряются
Я добавил оператор bpf_printk
в своем XDP -Программа ядра:
const int len = bpf_ntohs(iph->tot_len);
if(len < 400) {
bpf_printk("FOUND PACKET LEN < 400: %d.\n", len);
}
Этот вывод никогда не наблюдается через sudo cat /sys/kernel/debug/tracing/trace_pipe
. Таким образом, эти маленькие пакеты RTP-маркера даже не принимаются моим фильтром ядра - не удивительно, почему я не получаю их в пользовательском пространстве.
ethtool -S <if>
показывает мне это число: rx_256_to_511_bytes_phy
. Это число увеличивается с той же скоростью, что и маркерные пакеты (около 30 / с). Таким образом, это означает, что мой NI C принимает пакеты, а моя XDP-программа - почему?
Есть идеи, что может быть причиной этой проблемы?