我想使用 tcpdump 捕获数据包并获得尽可能精确的时间戳。最新版本的 tcpdump 具有-j adapter
命令行选项,可用于此目的。
我在虚拟机中测试了该选项(它绝对没有硬件时间戳;-)),但没有错误消息。
在线研究没有产生任何可用于检查某些卡是否支持它的关键字或短语。典型的 NIC 数据表中没有任何指示时间戳精度或对此类内容的一般支持的内容。
如何检查我的实际网卡是否支持硬件时间戳?
我想使用 tcpdump 捕获数据包并获得尽可能精确的时间戳。最新版本的 tcpdump 具有-j adapter
命令行选项,可用于此目的。
我在虚拟机中测试了该选项(它绝对没有硬件时间戳;-)),但没有错误消息。
在线研究没有产生任何可用于检查某些卡是否支持它的关键字或短语。典型的 NIC 数据表中没有任何指示时间戳精度或对此类内容的一般支持的内容。
如何检查我的实际网卡是否支持硬件时间戳?
我猜你可以运行下面的命令,它会描述你的软件和硬件网络所具有的每一个功能,
sudo ethtool -T <interface>
可以通过以下方式访问接口信息,例如名称 ifconfig
例如这是我的网络系统输出:
Time stamping parameters for eth0:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
ptpv2-l2-sync (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
ptpv2-l2-delay-req (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT)
ptpv2-sync (HWTSTAMP_FILTER_PTP_V2_SYNC)
ptpv2-delay-req (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
如果您想查看有关标志的更多信息,内核源代码中还有一个文档!这里
我希望它有帮助。
我发现了这个简单的 C 程序,它可用于使用 Linux 套接字的不同时间戳选项进行捕获:
https://www.kernel.org/doc/Documentation/networking/timestamping/timestamping.c
调用它interface SOF_TIMESTAMPING_RX_HARDWARE
会给出类似的输出SIOCSHWTSTAMP: Operation not supported
。
不幸的是,我显然没有能够提供硬件时间戳的可用硬件,所以我不确定对于具有 hardstamp 功能的 NIC 是否也能成功测试。