#ebpf #xdp-bpf
#ebpf #xdp-bpf
Вопрос:
у меня есть вопрос о том, как именно перенаправление bpf работает с массивом BPF_MAP_TYPE_CPUMAP, я увидел, что это новая выборка в репозитории xdp-project, и чтение добавляет возможность запуска другой (2-й) XDP-программы на удаленном процессоре, на который перенаправляются пакеты XDP, я прочитал код пользовательского пространства, и я довольносмущен, потому что я вижу, что требуется интерфейс перенаправления, поэтому в этом случае эта новая функция позволяет xdp на интерфейсе A выполнять другой xdp на интерфейсе B, который получает «перенаправленные» пакеты из интерфейса A, верно? если я не прав, заранее спасибо, чтобы прояснить картину.
Ответ №1:
Это немного сбивает с толку, исходная функция CPUMAP предназначалась только для перенаправления пакетов на другой процессор при передаче пакетов ядру для выделения SKB: https://lwn.net/Articles/735193 /.
В этом патче была добавлена возможность, позволяющая выполнять вторую программу XDP на целевом процессоре для оборудования без поддержки RSS.
Таким образом, вам вообще не нужна вторая программа для использования CPUMAP, а если и нужна, вам не нужен интерфейс.
«Образец» в ядре был изменен несколько раз и имеет много флагов, что отлично подходит для демонстрации всех различных вариантов использования, но также затрудняет понимание. На данный момент это больше похоже на тестовую команду для разработчиков ядра, чем на краткий пример. Эти параметры интерфейса, вероятно, добавлены, чтобы продемонстрировать, что вы все еще можете перенаправлять на интерфейсы из этой второй программы XDP.
Исходная версия примера намного проще:
- https://github.com/torvalds/linux/blob/fad3917e361b115f776563366415ffb2fc706bf1/samples/bpf/xdp_redirect_cpu_user.c
- https://github.com/torvalds/linux/blob/fad3917e361b115f776563366415ffb2fc706bf1/samples/bpf/xdp_redirect_cpu_kern.c
Это первая версия примера, в которой есть перенаправление интерфейса, в этой версии легче увидеть, что интерфейсы program и redirect являются необязательными:
Комментарии:
1. спасибо за ваш ответ, он не был прямым к сути моего вопроса, но эти версии, которые вы опубликовали, проясняют для меня, еще раз спасибо