Поддерживает ли мое ядро ​​Linux и драйвер NIC метки времени NIC RX? - PullRequest
3 голосов
/ 01 ноября 2019

Я хочу получить метки времени 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 не поддерживается в этом ядре

Под "ядром" подразумевается драйвер NIC или ядро ​​ОС?

Я скоро переключусь на использование NIC Solarflare, и я не уверен, решит ли это проблему, или еслипроблема с моим ядром Linux?

Если я взломаю его и #define SIOCHWTSTAMP сам, я получаю ошибки компиляции, не распознающие struct ifreq и struct hwtstamp_config

...