AF_XDP: нет пакетов для сокета с идентификатором очереди 0, хотя каждый пакет перенаправлен - PullRequest
0 голосов
/ 09 марта 2020

Я основан на этом уроке: https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP

Я создаю сокет с Queue-ID 0 в пространстве пользователя. В моей программе ядра af-xdp я фильтрую UDP-пакеты и перенаправляю их в сокет пространства пользователя через xskmap.

Поскольку я, очевидно, хочу, чтобы программа пользователя пространства принимала пакеты, я перенаправляю пакеты в Программа ядра для индексации 0:

int index = 0;
if (bpf_map_lookup_elem(&xsks_map, &index)) {
    return bpf_redirect_map(&xsks_map, index, 0);
} else {
    bpf_printk("Didn't find connected socket for index %d!\n", index);
}

Я не получает сообщение об ошибке Didn't find connected socket for index 0! через sudo cat /sys/kernel/debug/tracing/trace_pipe, но я не получаю никаких пакетов в пользовательском пространстве!

Если я просто продолжу запускать программу и одновременно добавлю правило ethtool, например:

sudo ethtool -N <eth> flow-type udp4 dst-ip <ip> action 0

, моя программа в пользовательском пространстве внезапно начнет получать пакеты, и сообщение об ошибке исчезнет.

Я думал, что программа ядра будет получать каждый пакет, отправленный на этот интерфейс, но почему-то это не так. Что я сделал не так?

1 Ответ

1 голос
/ 12 марта 2020

Итак, это обсуждалось на IR C (#xdp, Freenode) и списке рассылки xdp-newbies. Сообщите здесь для записи.

Ответ таков: вы не сделали ничего плохого: С AF_XDP сокет получает пакеты из одной аппаратной очереди . У вас может быть несколько сокетов, получающих пакеты из одной очереди, но на момент написания этой статьи вы не можете иметь один сокет, получающий более одной очереди. Это специально.

В вашем случае Queue-ID: 0, который вы ассоциируете с вашим сокетом, означает, что он будет получать пакет из очереди 0. Вот почему вы не видите все пакеты, полученные NI C перед маршрутизацией всех потоков в очередь 0.

Ссылка для обсуждения ML: ссылка . Кредиты Бьёрну и Токе.

...