From cee3f7b101fb22540e2f92067a5c49d3f817e441 Mon Sep 17 00:00:00 2001 From: Jordan Hargrave Date: Tue, 25 Feb 2014 15:51:50 -0600 Subject: [PATCH] Scan for devid for Mellanox cards --- src/eths.c | 15 +++++++++++++++ src/eths.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/eths.c b/src/eths.c index bcd02e1..38bb7fe 100644 --- a/src/eths.c +++ b/src/eths.c @@ -34,6 +34,20 @@ char *pr_ether(char *buf, const int size, const unsigned char *s) return (buf); } +static int eths_get_devid(const char *devname, int *devid) +{ + char path[PATH_MAX]; + char *devidstr = NULL; + + *devid = -1; + snprintf(path, sizeof(path), "/sys/class/net/%s/dev_id", devname); + if (sysfs_read_file(path, &devidstr) == 0) { + sscanf(devidstr, "%i", devid); + free(devidstr); + } + return NULL; +} + static int eths_get_ifindex(const char *devname, int *ifindex) { int fd, err; @@ -149,6 +163,7 @@ static void fill_eth_dev(struct network_device *dev) eths_get_ifindex(dev->kernel_name, &dev->ifindex); eths_get_hwaddr(dev->kernel_name, dev->dev_addr, sizeof(dev->dev_addr), &dev->arphrd_type); eths_get_permaddr(dev->kernel_name, dev->perm_addr, sizeof(dev->perm_addr)); + eths_get_devid(dev->kernel_name, &dev->devid); rc = eths_get_info(dev->kernel_name, &dev->drvinfo); if (rc == 0) dev->drvinfo_valid = 1; diff --git a/src/eths.h b/src/eths.h index f686136..12c278b 100644 --- a/src/eths.h +++ b/src/eths.h @@ -27,6 +27,7 @@ struct network_device { int arphrd_type; /* e.g. ARPHDR_ETHER */ int hardware_claimed; /* true when recognized as PCI or PCMCIA and added to list of bios_devices */ int ifindex; + int devid; }; extern void get_eths(struct libbiosdevname_state *state); -- 1.8.4.2