首页 > 解决方案 > 我的 Linux 内核和 NIC 驱动程序是否支持 NIC RX 时间戳?

问题描述

我想获得 NIC RX 时间戳。此示例显示如何获取它们:

https://github.com/majek/openonload/blob/master/src/tests/onload/hwtimestamping/rx_timestamping.c

它包含以下功能。运行时,我收到错误消息输出。

static void do_ioctl(struct configuration* cfg, int sock)
{
#ifdef SIOCSHWTSTAMP
  struct ifreq ifr;
  struct hwtstamp_config hwc;
#endif

  if( cfg->cfg_ioctl == NULL )
    return;

#ifdef SIOCSHWTSTAMP
  bzero(&ifr, sizeof(ifr));
  snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", cfg->cfg_ioctl);

  /* Standard kernel ioctl options */
  hwc.flags = 0;
  hwc.tx_type = 0;
  hwc.rx_filter = HWTSTAMP_FILTER_ALL;

  ifr.ifr_data = (char*)&hwc;

  TRY( ioctl(sock, SIOCSHWTSTAMP, &ifr) );
  return;
#else
  (void) sock;
  printf("SIOCHWTSTAMP ioctl not supported on this kernel.\n");     // I get this output
  exit(-ENOTSUP);
  return;
#endif
}

但是,当我运行代码时,我得到:

此内核不支持 SIOCHWTSTAMP ioctl

“内核”是指网卡驱动程序还是操作系统内核?

我很快就会改用 Solarflare NIC,但我不确定这是否能解决问题,或者问题是否出在我的 Linux 内核上?

如果我破解它和#define SIOCHWTSTAMP我自己,我会得到无法识别的编译错误struct ifreqstruct hwtstamp_config

标签: csocketslinux-kerneltimestampnetwork-programming

解决方案


推荐阅读