小编RK *_*han的帖子

Linux套接字的Linux时间戳

我正在一个项目中工作,以便从文件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)

sockets linux tcp timestamping linux-kernel

11
推荐指数
2
解决办法
3067
查看次数

标签 统计

linux ×1

linux-kernel ×1

sockets ×1

tcp ×1

timestamping ×1