Возможно ли выполнить net_enable_timestamp() из пользовательского пространства в Linux?

#linux #network-programming #linux-kernel

#linux #сетевое программирование #linux-ядро

Вопрос:

Я хотел бы включить временную метку полученных сетевых пакетов. Я обнаружил, что функция net_enable_timestamp() должна выполнять это для меня, но я не могу найти ее ни в CentOS, ни в ArchLinux. Но когда я выполняю:

 # cat /proc/kallsyms | grep net_enable_timestamp
c126a330 T net_enable_timestamp
  

В исходном коде ядра из kernel.org он находится в linux / netdevice.h, но не в обоих дистрибутивах, упомянутых выше. Возможно ли это выполнить? Как?

Ответ №1:

Что плохого в включении SO_TIMESTAMP в сокете и доступе к временной метке последнего сообщения через вспомогательные данные?

В качестве альтернативы вы можете вызвать ioctl(socket, SIOCGSTAMP), как описано в socket(7)


Редактировать: глядя на исходный код ядра, кажется, что net_enable_timestamp() на самом деле вызывается косвенно, когда вы выполняете setsockopt(sock, SO_TIMESTAMP …

Итак, мой ответ отвечает на ваш вопрос 🙂

Комментарии:

1. да! вы правы! Я не знаю, почему я пропустил файлы .c, копаясь в исходном коде ядра и пытаясь решить свою проблему.