如何在运行时判断Linux系统不支持TX时间戳?
如何在不依赖ethtool的情况下判断Linux TX时间戳不可用?
我在测试Linux的TX时间戳功能时发现,没有简便的运行时方法能判断系统是否完全无法提供TX时间戳。哪怕是在完全不支持TX时间戳的系统上,调用setsockopt启用相关选项也不会报错:
int val = SOF_TIMESTAMPING_TX_SOFTWARE | SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID; int rc = setsockopt(fd, SOL_SOCKET, SO_TIMESTAMPING, &val, sizeof(val)); assert(rc == 0);
之后调用getsockopt重新检查选项,也会返回已应用的配置:
int val = 0; socklen_t len = sizeof(val); int rc = getsockopt(fd, SOL_SOCKET, SOF_TIMESTAMPING, &val, &len); assert(rc == 0); assert(val == SOF_TIMESTAMPING_TX_SOFTWARE | SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID);
但实际场景中,MSG_ERRQUEUE不会生成任何消息——而TX时间戳正是通过这个机制上报的。
我知道可以通过执行sudo ethtool -T IFNAME来查看系统的时间戳支持情况,比如某台系统的输出如下:
Time stamping parameters for lo: Capabilities: software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) PTP Hardware Clock: none Hardware Transmit Timestamp Modes: none Hardware Receive Filter Modes: none
但我的代码无法依赖ethtool,因为它需要sudo权限且是独立工具。请问有没有其他方法可以判断TX时间戳不可用?
内容的提问来源于stack exchange,提问作者NwMan
相关产品推荐
相关产品推荐

