AF_XDP: установить `SO_TIMESTAMP` не поддерживается для` SO_XDP`: протокол недоступен - PullRequest
1 голос
/ 09 марта 2020

Почему настройка SO_TIMESTAMP не поддерживается для сокета AF_XDP? Руководство пользователя моего драйвера (mlnx 5.0) гласит, что

Входящие пакеты имеют временную отметку перед распределением по PCI в зависимости от перегрузки в буферах PCI.

Насколько мне известно, before distributed on the PCI означает, что Linux Ядро не задействовано (пока) - верно?

Я попытался установить его так:

int timestamp = SOF_TIMESTAMPING_RX_HARDWARE;
if(setsockopt(xsk_socket__fd(xsk_socket->xsk), SOL_XDP, SO_TIMESTAMP, (int*)&timestamp, sizeof(int)) < 0) {
    fprintf(stderr, "Failed to set `SO_TIMESTAMP`: %s\n", strerror(errno));
    return;
}

И получить :

Не удалось установить SO_TIMESTAMP: протокол недоступен

Я скопировал определение SO_XDP из xsk.c (https://github.com/libbpf/libbpf/blob/master/src/xsk.c):

#ifndef SOL_XDP
 #define SOL_XDP 283
#endif

Не понимаю, почему это не поддерживается ...

1 Ответ

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

Нет технической причины, по которой он не реализован.

Действительно, похоже, что он находится в списке дел команды разработчиков xdp.

Цитировать из здесь :

Важные среднесрочные задачи

...

Метаданные от оборудования

Существуют различные элементы метаданных оборудования это было бы полезно для доступа к программам XDP, чтобы уменьшить объем обработки, необходимой для eBPF. К ним относятся:

  • Контрольная сумма
  • Ха sh значение
  • Обозначение потока
  • Смещения заголовка протокола более высокого уровня
  • Отметки времени

Похоже, что это в To-Do с июня 2019 года, поэтому, вероятно, он не имеет высшего приоритета, иначе он уже был бы реализован.

...