为什么AF_XDP
套接字不支持设置SO_TIMESTAMP
?我的驱动程序(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*)×tamp, sizeof(int)) < 0) {
fprintf(stderr, "Failed to set `SO_TIMESTAMP`: %sn", strerror(errno));
return;
}
获得:
设置
SO_TIMESTAMP
失败:协议不可用
我从xsk.c
复制了SO_XDP
的定义(https://github.com/libbpf/libbpf/blob/master/src/xsk.c):
#ifndef SOL_XDP
#define SOL_XDP 283
#endif
我不明白,为什么它不被支持。。。
没有任何技术原因可以解释为什么不实现它。
事实上,它看起来像是在xdp开发团队的待办事项列表中。
从这里引用:
重要的中期任务
来自硬件的元数据
有各种硬件元数据项可供XDP程序访问,以减少eBPF中需要进行的处理量。其中包括:
- 校验和
- 哈希值
- 流量指示器
- 更高级别的协议标头偏移
- 时间戳
看起来这是自2019年6月以来的待办事项,所以它可能没有最高优先级,否则它就已经实现了。