我正在一个项目中工作,以便从文件Linux时间戳记中提到的用于TCP套接字的NIC获取接收和传输 时间戳.但所有文档和测试编码都是针对UDP套接字完成的.但我正在获取NIC的传输时间戳,而不是获取接收TCP数据包的时间戳.
我的界面支持以下时间戳
Time stamping parameters for enp4s0:
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: 3
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
Run Code Online (Sandbox Code Playgroud)
我启用网卡时间戳后bind()用ioctl(sockfd, SIOCSHWTSTAMP, &net_device);用
memset(&net_device, 0, sizeof(net_device));
strncpy(net_device.ifr_name, interface_name, sizeof(net_device.ifr_name));
net_device.ifr_data = (void *)&tstconfig;
memset(&tstconfig, 0, sizeof(tstconfig));
tstconfig.tx_type = HWTSTAMP_TX_OFF;
tstconfig.rx_filter = HWTSTAMP_FILTER_ALL;
Run Code Online (Sandbox Code Playgroud)
然后启用NIC中的时间戳 setsockopt()
int opt= 0;
opt |= SOF_TIMESTAMPING_RX_HARDWARE;
opt |= …Run Code Online (Sandbox Code Playgroud)