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