首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ethtool_drvinfo收集网络接口的驱动程序信息?

如何使用ethtool_drvinfo收集网络接口的驱动程序信息?
EN

Stack Overflow用户
提问于 2022-09-08 13:44:12
回答 1查看 62关注 0票数 1

我有一个网络接口,它显示数据如下:

代码语言:javascript
复制
driver: r8152 
version: v1.12.12
firmware-version: rtl8153a-4 v2 02/07/20
expansion-rom-version:
bus-info: usb-0000:00:14.0-9
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

然而,我无法通过这样的ioctl电话收集司机信息:

代码语言:javascript
复制
socketfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (socketfd == -1)
    printf ("error:socketfd no open");

struct ethtool_drvinfo drvrinfo = {0};
drvrinfo.cmd = ETHTOOL_GDRVINFO;
int x = ioctl(socketfd, SIOCETHTOOL, &drvrinfo);`

我不确定确切的流程,因为我是第一次使用它。请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 18:15:17

这个信息的简单Linux转储。将enp0s5更改为您的接口名称。

样本输出:

代码语言:javascript
复制
% ./get-driver-info
driver: virtio_net
version: 1.0.0
firmware-version:
expansion-rom-version:
bus-info: 0000:00:05.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-priv-flags: no

Linux源代码:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <linux/ethtool.h>
#include <linux/sockios.h>
#include <net/if.h>

int main() {
  char *devname = "enp0s5";
  struct ifreq sif;
  struct ethtool_drvinfo d;
  int ret;

  int sd = socket(AF_INET, SOCK_DGRAM, 0);

  if (sd < 0){
    printf("Error socket\n");
    exit(1);
  }

  memset(&sif, 0, sizeof(struct ifreq));
  strncpy(sif.ifr_name, devname, strlen(devname));

  d.cmd = ETHTOOL_GDRVINFO;
  sif.ifr_data = (caddr_t)&d;
  ret = ioctl(sd, SIOCETHTOOL, &sif);

  if(ret == -1){
    perror("ioctl");
    return 1;
  }

  printf("driver: %s\nversion: %s\n", d.driver, d.version);
  printf("firmware-version: %s\n", d.fw_version);
  printf("expansion-rom-version: %s\n", d.fw_version);
  printf("bus-info: %s\n", d.bus_info);
  printf("supports-statistics: %s\n", d.n_stats ? "yes" : "no");
  printf("supports-test: %s\n", d.testinfo_len ? "yes" : "no");
  printf("supports-eeprom-access: %s\n", d.eedump_len ? "yes" : "no");
  printf("supports-priv-flags: %s\n", d.n_priv_flags ? "yes" : "no");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73650069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档