import biosdevname-0.7.3-18.el10

i10c-beta changed/i10c-beta/biosdevname-0.7.3-18.el10
MSVSphere Packaging Team 3 months ago
commit f28546677d
Signed by: sys_gitsync
GPG Key ID: B2B0B9F29E528FE8

@ -0,0 +1 @@
a31985f5cc19bd0a2bed7a32567d06f5ec72c0af SOURCES/biosdevname-0.7.3.tar.gz

1
.gitignore vendored

@ -0,0 +1 @@
SOURCES/biosdevname-0.7.3.tar.gz

@ -0,0 +1,27 @@
From 7460046a5430e92cd6a4ef0c938f80e95669b5bc Mon Sep 17 00:00:00 2001
From: Ka-Shu Wong <31426385+kashuwong@users.noreply.github.com>
Date: Fri, 1 Sep 2017 15:33:56 +1000
Subject: [PATCH] Add support for ExaNIC network cards (#5)
ExaNIC cards have multiple physical ports on the same PCI function and
need to be numbered using the dev_port attribute.
---
src/bios_device.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/bios_device.c b/src/bios_device.c
index e9d5177..3cc528b 100644
--- a/src/bios_device.c
+++ b/src/bios_device.c
@@ -221,6 +221,8 @@ int ismultiport(const char *driver)
return 1;
if (!strncmp(driver, "cxgb", 4))
return 1;
+ if (!strncmp(driver, "exanic", 6))
+ return 1;
return 0;
}
--
2.44.0

@ -0,0 +1,33 @@
From db1371e4d22465c27b5ed8d851cea6e72f0176f7 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Wed, 21 Mar 2018 18:10:08 +0100
Subject: [PATCH 1/2] Disable biosdevname by default
---
biosdevname.rules.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/biosdevname.rules.in b/biosdevname.rules.in
index 0a32aa5..1dcca74 100644
--- a/biosdevname.rules.in
+++ b/biosdevname.rules.in
@@ -12,13 +12,13 @@ ENV{biosdevname}=="?*", ENV{UDEV_BIOSDEVNAME}="$env{biosdevname}"
ENV{UDEV_BIOSDEVNAME}=="0", GOTO="netdevicename_end"
ENV{UDEV_BIOSDEVNAME}=="1", GOTO="netdevicename_start"
-# uncomment the next line for biosdevname to be off by default
-# GOTO="netdevicename_end"
+# off by default
+GOTO="netdevicename_end"
LABEL="netdevicename_start"
# using NAME= instead of setting INTERFACE_NAME, so that persistent
# names aren't generated for these devices, they are "named" on each boot.
-SUBSYSTEMS=="pci", PROGRAM="/sbin/biosdevname --policy physical -i %k", NAME="%c", OPTIONS+="string_escape=replace"
+SUBSYSTEMS=="pci", PROGRAM="/sbin/biosdevname --smbios 2.6 --nopirq --policy physical -i %k", NAME="%c" OPTIONS+="string_escape=replace"
LABEL="netdevicename_end"
--
2.14.3

@ -0,0 +1,26 @@
From 14a0cef248d2996cde90e64ae56d7bdb569b3995 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
Date: Mon, 23 Sep 2013 14:05:59 +0200
Subject: [PATCH] Place udev rules to /usr/lib
---
biosdevname.rules.in | 2 +-
configure.ac | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/biosdevname.rules.in b/biosdevname.rules.in
index e26ba98..8c12cb8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -68,7 +68,7 @@ AC_CHECK_FUNCS([dup2 gettimeofday memset munmap select socket strcasecmp strchr
# this is ugly, but accounts for SLES 10, Red Hat/Fedora, and Ubuntu
# handles default udev rules as of udev 114 or thereabouts
-RULEDEST=/lib/udev/rules.d/71-biosdevname.rules
+RULEDEST=${prefix}/lib/udev/rules.d/71-biosdevname.rules
if [[ -e /etc/udev/rules.d/60-net.rules ]]; then
# RHEL 5 / Fedora
--
1.8.3.1

@ -0,0 +1,29 @@
From d6fa84f8a80d5e1c526fe675c345f709a700e33e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20M=C3=B6llers?= <josef.moellers@suse.com>
Date: Fri, 20 Jul 2018 08:56:48 +0200
Subject: [PATCH] Prevent infinite recursion in dmidecode.c::smbios_setslot by
(#7)
Checking that subordinate bus has a number greater than the
current bus.
Fixes SUSE bug#1093625
---
src/dmidecode/dmidecode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c
index 1d805bb..a01a6ce 100644
--- a/src/dmidecode/dmidecode.c
+++ b/src/dmidecode/dmidecode.c
@@ -153,7 +153,7 @@ void smbios_setslot(const struct libbiosdevname_state *state,
}
/* Found a PDEV, now is it a bridge? */
- if (pdev->sbus != -1) {
+ if (pdev->sbus != -1 && pdev->sbus > bus) {
smbios_setslot(state, domain, pdev->sbus, -1, -1, type, slot, index, label);
}
}
--
2.44.0

@ -0,0 +1,187 @@
From 8f2d9991d50e09ba9af842fb592b37d0c2021a06 Mon Sep 17 00:00:00 2001
From: dirkjacobus <dirkjacobus@gmail.com>
Date: Sun, 11 Nov 2018 23:29:24 -0800
Subject: [PATCH] Netronome biosdevname support (#8)
* Add support for Netronome netdevices
Netronome netdevices also provide multiple ports through the same
function.
* Set devID with phys_port_name index for nfp devices
Netronome netdevices should rather use the index from the phys_port_name
attribute instead of the dev_port/dev_id
attributes.
* Exclude naming Netronome logical devices
Some drivers, like the Netronome nfp driver, expose logical devices such
as representors and switchdev uplink devices.
There isn't currently a naming scheme for such devices, so exclude them
from the biosdevname naming policy.
Split ports also don't have a naming scheme defined for biosdevname, so
its better to exclude them from naming.
Identification of such devices will always be driver dependent.
At the moment, only 'nfp' driver devices are considered for exclusion.
---
src/bios_device.c | 6 ++++-
src/eths.c | 65 ++++++++++++++++++++++++++++++++++++++++-------
src/eths.h | 6 +++++
3 files changed, 67 insertions(+), 10 deletions(-)
diff --git a/src/bios_device.c b/src/bios_device.c
index 3cc528b..4882513 100644
--- a/src/bios_device.c
+++ b/src/bios_device.c
@@ -214,7 +214,7 @@ static void sort_device_list(struct libbiosdevname_state *state)
list_splice(&sorted_devices, &state->bios_devices);
}
-/* Check for Mellanox/Chelsio drivers */
+/* Check for multiport drivers */
int ismultiport(const char *driver)
{
if (!strncmp(driver, "mlx4", 4))
@@ -223,6 +223,8 @@ int ismultiport(const char *driver)
return 1;
if (!strncmp(driver, "exanic", 6))
return 1;
+ if (!strncmp(driver, "nfp", 3))
+ return 1;
return 0;
}
@@ -248,6 +250,8 @@ static void match_pci_and_eth_devs(struct libbiosdevname_state *state)
/* Ignore if devtype is fcoe */
if (netdev_devtype_is_fcoe(n))
continue;
+ if (!netdev_is_eligible(n))
+ continue;
b = malloc(sizeof(*b));
if (!b)
continue;
diff --git a/src/eths.c b/src/eths.c
index d2c4d36..688c3af 100644
--- a/src/eths.c
+++ b/src/eths.c
@@ -35,21 +35,67 @@ char *pr_ether(char *buf, const int size, const unsigned char *s)
return (buf);
}
-static void eths_get_devid(const char *devname, int *devid)
+static int eths_get_phys_port_name_id(const char *devname)
+{
+ char *portstr = NULL;
+ char path[PATH_MAX];
+ int index = -1;
+
+ /* Only devices that have a phys_port_name of 'pX' are considered here,
+ * with the index 'X' extracted.
+ */
+ snprintf(path, sizeof(path), "/sys/class/net/%s/phys_port_name", devname);
+ if (sysfs_read_file(path, &portstr) == 0) {
+ char *res = NULL;
+
+ if (portstr[0] == 'p') {
+ index = strtol(&portstr[1], &res, 10);
+ /* Reset to invalid if the format is unexpected. */
+ if (*res)
+ index = -1;
+ }
+
+ free(portstr);
+ }
+
+ return index;
+}
+
+static void eths_get_dev_eligible(struct network_device *dev)
+{
+ /* By default, all network devices are eligible for naming. Some may
+ * opt-out explicitly below.
+ */
+ dev->is_eligible = 1;
+
+ if (dev->drvinfo_valid && strcmp(dev->drvinfo.driver, "nfp") == 0) {
+ dev->is_eligible = (eths_get_phys_port_name_id(dev->kernel_name) >= 0 ? 1 : 0);
+ }
+}
+
+static void eths_get_devid(struct network_device *dev)
{
char path[PATH_MAX];
char *devidstr = NULL;
- *devid = -1;
- snprintf(path, sizeof(path), "/sys/class/net/%s/dev_port", devname);
- if (sysfs_read_file(path, &devidstr) == 0) {
- sscanf(devidstr, "%i", devid);
- free(devidstr);
+ dev->devid = -1;
+
+ /* For some drivers, the phys_port_name index, e.g. pX, is the correct
+ * dev ID to use instead of the dev_port attribute.
+ */
+ if (dev->drvinfo_valid && strcmp(dev->drvinfo.driver, "nfp") == 0) {
+ dev->devid = eths_get_phys_port_name_id(dev->kernel_name);
} else {
- snprintf(path, sizeof(path), "/sys/class/net/%s/dev_id", devname);
+ snprintf(path, sizeof(path), "/sys/class/net/%s/dev_port", dev->kernel_name);
if (sysfs_read_file(path, &devidstr) == 0) {
- sscanf(devidstr, "%i", devid);
+ sscanf(devidstr, "%i", &dev->devid);
free(devidstr);
+ } else {
+ snprintf(path, sizeof(path), "/sys/class/net/%s/dev_id", dev->kernel_name);
+ if (sysfs_read_file(path, &devidstr) == 0) {
+ sscanf(devidstr, "%i", &dev->devid);
+ free(devidstr);
+ }
}
}
}
@@ -224,13 +270,14 @@ 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);
devtype = eths_get_devtype(dev);
if (devtype > 0)
dev->devtype_is_fcoe = 1;
rc = eths_get_info(dev->kernel_name, &dev->drvinfo);
if (rc == 0)
dev->drvinfo_valid = 1;
+ eths_get_devid(dev);
+ eths_get_dev_eligible(dev);
}
void free_eths(struct libbiosdevname_state *state)
diff --git a/src/eths.h b/src/eths.h
index b695d3d..49e399d 100644
--- a/src/eths.h
+++ b/src/eths.h
@@ -30,6 +30,7 @@ struct network_device {
int devid;
int devtype_is_fcoe;
char *devtype;
+ int is_eligible:1; /* not eligible for naming when 0 */
};
extern void get_eths(struct libbiosdevname_state *state);
@@ -68,4 +69,9 @@ static inline int netdev_arphrd_type_is_eth(const struct network_device *dev)
return (dev->arphrd_type == ARPHRD_ETHER);
}
+static inline int netdev_is_eligible(const struct network_device *dev)
+{
+ return (!!dev->is_eligible);
+}
+
#endif /* __ETHS_H_INCLUDED */
--
2.44.0

@ -0,0 +1,26 @@
From 42abae6e56f22245ac8d693ab88ad1e3ea75a220 Mon Sep 17 00:00:00 2001
From: Dan Kenigsberg <danken@redhat.com>
Date: Sun, 27 Jan 2019 09:26:53 +0200
Subject: [PATCH] man: fix all_ethN indentation
all_ethN is not another .TP block under the physical policy, it is a paragraph of its own right.
---
biosdevname.1 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/biosdevname.1 b/biosdevname.1
index 22a53bd..643eae5 100644
--- a/biosdevname.1
+++ b/biosdevname.1
@@ -60,7 +60,7 @@ for embedded NICs
p<slot>p<port>[_<virtual instance>]
for cards in PCI slots
.br
-.TP
+.PP
The
.B all_ethN
policy makes a best guess at what the device order should be, with
--
2.44.0

@ -0,0 +1,168 @@
From f64c3f549eda36d11b5690117173b0847535ebbe Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Mon, 24 Aug 2020 14:40:17 +0200
Subject: [PATCH] Add buffer read helper using read explicitly
Since mmap can't work well with a sysfs file, we need to read the
contents explicitly via read, even if USE_MMAP is enabled.
Provide a new helper, __mem_cunk(), that does behave like mem_chunk()
but with the extra use_mmap argument to specify the method to read a
file.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
CC: Thomas Renninger <trenn@suse.de>
CC: Michal Suchanek <msuchanek@suse.com>
---
src/dmidecode/util.c | 82 ++++++++++++++++++++++++++++----------------
src/dmidecode/util.h | 1 +
2 files changed, 53 insertions(+), 30 deletions(-)
diff --git a/src/dmidecode/util.c b/src/dmidecode/util.c
index ea06663..09934ea 100644
--- a/src/dmidecode/util.c
+++ b/src/dmidecode/util.c
@@ -47,7 +47,6 @@
#include "types.h"
#include "util.h"
-#ifndef USE_MMAP
static int myread(int fd, u8 *buf, size_t count, const char *prefix)
{
ssize_t r=1;
@@ -78,7 +77,6 @@ static int myread(int fd, u8 *buf, size_t count, const char *prefix)
return 0;
}
-#endif
int checksum(const u8 *buf, size_t len)
{
@@ -94,28 +92,13 @@ int checksum(const u8 *buf, size_t len)
* Copy a physical memory chunk into a memory buffer.
* This function allocates memory.
*/
-void *mem_chunk(size_t base, size_t len, const char *devmem)
-{
- void *p;
- int fd;
#ifdef USE_MMAP
+static void *mem_chunk_mmap(size_t base, size_t len, const char *devmem,
+ int fd, void *p)
+{
size_t mmoffset;
void *mmp;
-#endif
-
- if((fd=open(devmem, O_RDONLY))==-1)
- {
- return NULL;
- }
-
- if((p=malloc(len))==NULL)
- {
- perror("malloc");
- close(fd);
- return NULL;
- }
-
-#ifdef USE_MMAP
+
#ifdef _SC_PAGESIZE
mmoffset=base%sysconf(_SC_PAGESIZE);
#else
@@ -129,8 +112,6 @@ void *mem_chunk(size_t base, size_t len, const char *devmem)
mmp=mmap(0, mmoffset+len, PROT_READ, MAP_SHARED, fd, base-mmoffset);
if(mmp==MAP_FAILED)
{
- free(p);
- close(fd);
return NULL;
}
@@ -141,26 +122,67 @@ void *mem_chunk(size_t base, size_t len, const char *devmem)
fprintf(stderr, "%s: ", devmem);
perror("munmap");
}
-#else /* USE_MMAP */
+
+ return p;
+}
+#endif /* USE_MMAP */
+
+static void *mem_chunk_read(size_t base, size_t len, const char *devmem,
+ int fd, void *p)
+{
if(lseek(fd, base, SEEK_SET)==-1)
{
fprintf(stderr, "%s: ", devmem);
perror("lseek");
- free(p);
- close(fd);
return NULL;
}
if(myread(fd, p, len, devmem)==-1)
{
- free(p);
- close(fd);
return NULL;
}
-#endif /* USE_MMAP */
+
+ return p;
+}
+
+void *__mem_chunk(size_t base, size_t len, const char *devmem, int use_mmap)
+{
+ void *ret;
+ void *p;
+ int fd;
+
+#ifndef USE_MMAP
+ use_mmap = 0;
+#endif
+
+ if((fd=open(devmem, O_RDONLY))==-1)
+ {
+ return NULL;
+ }
+ if((p=malloc(len))==NULL)
+ {
+ perror("malloc");
+ close(fd);
+ return NULL;
+ }
+
+#ifdef USE_MMAP
+ if (use_mmap)
+ ret = mem_chunk_mmap(base, len, devmem, fd, p);
+ else
+#endif
+ ret = mem_chunk_read(base, len, devmem, fd, p);
+
if(close(fd)==-1)
perror(devmem);
+ if (!ret)
+ free(p);
- return p;
+ return ret;
+}
+
+void *mem_chunk(size_t base, size_t len, const char *devmem)
+{
+ return __mem_chunk(base, len, devmem, 1);
}
diff --git a/src/dmidecode/util.h b/src/dmidecode/util.h
index b546f64..90c411e 100644
--- a/src/dmidecode/util.h
+++ b/src/dmidecode/util.h
@@ -6,3 +6,4 @@
int checksum(const u8 *buf, size_t len);
void *mem_chunk(size_t base, size_t len, const char *devmem);
+void *__mem_chunk(size_t base, size_t len, const char *devmem, int use_mmap);
--
2.44.0

@ -0,0 +1,145 @@
From b3bb4ed21e8802cb38eb693952da058f52cf76b0 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Mon, 24 Aug 2020 14:41:54 +0200
Subject: [PATCH] Read DMI entries from /sys/firmware/dmi/tables/DMI
A kernel with Secure Boot lockdown may prohibit reading the contents
of /dev/mem, hence biosdevname fails. The recent kernel provides the
DMI byte contents in /sys/firmware/dmi/tables/*, and we can use this
instead of poking /dev/mem.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
CC: Thomas Renninger <trenn@suse.de>
CC: Michal Suchanek <msuchanek@suse.com>
---
src/dmidecode/dmidecode.c | 54 +++++++++++++++++++++++++++++----------
1 file changed, 41 insertions(+), 13 deletions(-)
diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c
index a01a6ce..f4c1269 100644
--- a/src/dmidecode/dmidecode.c
+++ b/src/dmidecode/dmidecode.c
@@ -229,7 +229,7 @@ static int isvalidsmbios(int mjr, int mnr)
return 0;
}
-static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, const struct libbiosdevname_state *state)
+static int dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, const struct libbiosdevname_state *state, int sysfs)
{
u8 *buf;
u8 *data;
@@ -237,14 +237,19 @@ static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, c
/* Verify SMBIOS version */
if (!isvalidsmbios(ver >> 8, ver & 0xFF)) {
- return;
+ return 0;
}
- if((buf=mem_chunk(base, len, devmem))==NULL)
+
+ if (sysfs)
+ buf = __mem_chunk(0, len, devmem, 0);
+ else
+ buf = mem_chunk(base, len, devmem);
+ if(buf == NULL)
{
#ifndef USE_MMAP
printf("Table is unreachable, sorry. Try compiling dmidecode with -DUSE_MMAP.\n");
#endif
- return;
+ return 0;
}
data=buf;
@@ -280,18 +285,18 @@ static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, c
i++;
}
free(buf);
+ return 1;
}
-
-static int smbios_decode(u8 *buf, const char *devmem, const struct libbiosdevname_state *state)
+static int smbios_decode(u8 *buf, const char *devmem, const struct libbiosdevname_state *state, int sysfs)
{
if(checksum(buf, buf[0x05])
&& memcmp(buf+0x10, "_DMI_", 5)==0
&& checksum(buf+0x10, 0x0F))
{
- dmi_table(DWORD(buf+0x18), WORD(buf+0x16), WORD(buf+0x1C),
- (buf[0x06]<<8)+buf[0x07], devmem, state);
- return 1;
+ return dmi_table(DWORD(buf+0x18), WORD(buf+0x16), WORD(buf+0x1C),
+ (buf[0x06]<<8)+buf[0x07], devmem, state,
+ sysfs);
}
return 0;
@@ -302,13 +307,32 @@ static int legacy_decode(u8 *buf, const char *devmem, const struct libbiosdevnam
if(checksum(buf, 0x0F))
{
dmi_table(DWORD(buf+0x08), WORD(buf+0x06), WORD(buf+0x0C),
- ((buf[0x0E]&0xF0)<<4)+(buf[0x0E]&0x0F), devmem, state);
+ ((buf[0x0E]&0xF0)<<4)+(buf[0x0E]&0x0F), devmem, state, 0);
return 1;
}
return 0;
}
+#define SYSFS_TABLE_SMBIOS "/sys/firmware/dmi/tables/smbios_entry_point"
+#define SYSFS_TABLE_DMI "/sys/firmware/dmi/tables/DMI"
+
+static int smibios_decode_from_sysfs(const struct libbiosdevname_state *state)
+{
+ FILE *fp;
+ u8 buf[0x1f];
+ int len;
+
+ fp = fopen(SYSFS_TABLE_SMBIOS, "r");
+ if (!fp)
+ return 0;
+ len = fread(buf, 1, sizeof(buf), fp);
+ fclose(fp);
+ if (len == 0x1f && memcmp(buf, "_SM_", 4) == 0)
+ return smbios_decode(buf, SYSFS_TABLE_DMI, state, 1);
+ return 0;
+}
+
/*
* Probe for EFI interface
*/
@@ -417,7 +441,11 @@ int dmidecode_main(const struct libbiosdevname_state *state)
if (dmidecode_read_file(state))
return 0;
- /* First try EFI (ia64, Intel-based Mac) */
+ /* First try sysfs entries */
+ if (smibios_decode_from_sysfs(state))
+ return 0;
+
+ /* Next try EFI (ia64, Intel-based Mac) */
efi=address_from_efi(&fp);
switch(efi)
{
@@ -434,7 +462,7 @@ int dmidecode_main(const struct libbiosdevname_state *state)
goto exit_free;
}
- if(smbios_decode(buf, devmem, state))
+ if(smbios_decode(buf, devmem, state, 0))
found++;
goto done;
@@ -450,7 +478,7 @@ memory_scan:
{
if(memcmp(buf+fp, "_SM_", 4)==0 && fp<=0xFFE0)
{
- if(smbios_decode(buf+fp, devmem, state))
+ if(smbios_decode(buf+fp, devmem, state, 0))
{
found++;
fp+=16;
--
2.44.0

@ -0,0 +1,63 @@
From 495ab76e0d5f0eba83f9c86baf779a244ea1b60d Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Mon, 24 Aug 2020 14:42:44 +0200
Subject: [PATCH] Add SMBIOS 3.x support
Handle only the path from sysfs for now.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
CC: Thomas Renninger <trenn@suse.de>
CC: Michal Suchanek <msuchanek@suse.com>
---
src/dmidecode/dmidecode.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c
index f4c1269..f478cc5 100644
--- a/src/dmidecode/dmidecode.c
+++ b/src/dmidecode/dmidecode.c
@@ -236,7 +236,7 @@ static int dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, co
int i=0;
/* Verify SMBIOS version */
- if (!isvalidsmbios(ver >> 8, ver & 0xFF)) {
+ if (ver && !isvalidsmbios(ver >> 8, ver & 0xFF)) {
return 0;
}
@@ -253,7 +253,7 @@ static int dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, co
}
data=buf;
- while(i<num && data+4<=buf+len) /* 4 is the length of an SMBIOS structure header */
+ while((!num || i<num) && data+4<=buf+len) /* 4 is the length of an SMBIOS structure header */
{
u8 *next;
struct dmi_header h;
@@ -314,6 +314,14 @@ static int legacy_decode(u8 *buf, const char *devmem, const struct libbiosdevnam
return 0;
}
+/* only from sysfs, handle no base offset */
+static int smbios3_decode(u8 *buf, const char *devmem, const struct libbiosdevname_state *state)
+{
+ if (checksum(buf, 0x18))
+ return dmi_table(0, DWORD(buf + 0x0c), 0, 0, devmem, state, 1);
+ return 0;
+}
+
#define SYSFS_TABLE_SMBIOS "/sys/firmware/dmi/tables/smbios_entry_point"
#define SYSFS_TABLE_DMI "/sys/firmware/dmi/tables/DMI"
@@ -330,6 +338,8 @@ static int smibios_decode_from_sysfs(const struct libbiosdevname_state *state)
fclose(fp);
if (len == 0x1f && memcmp(buf, "_SM_", 4) == 0)
return smbios_decode(buf, SYSFS_TABLE_DMI, state, 1);
+ if (len >= 0x18 && memcmp(buf, "_SM3_", 5) == 0)
+ return smbios3_decode(buf, SYSFS_TABLE_DMI, state);
return 0;
}
--
2.44.0

@ -0,0 +1,309 @@
Name: biosdevname
Version: 0.7.3
Release: 18%{?dist}
Summary: Udev helper for naming devices per BIOS names
# * biosdevname is GPL-2.0-only
# * bundled dmidecode is GPL-2.0-or-later
License: GPL-2.0-only AND GPL-2.0-or-later
URL: http://linux.dell.com/files/%{name}
# SMBIOS only exists on these arches. It's also likely that other
# arches don't expect the PCI bus to be sorted breadth-first, or of
# so, there haven't been any comments about that on LKML.
ExclusiveArch: %{ix86} x86_64
Source0: http://linux.dell.com/files/%{name}/%{name}-%{version}/%{name}-%{version}.tar.gz
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: gcc
BuildRequires: pciutils-devel
BuildRequires: zlib-devel
BuildRequires: make
Patch1: 0001-Disable-biosdevname-by-default.patch
Patch2: 0002-Place-udev-rules-to-usr-lib.patch
Patch3: 0001-Add-support-for-ExaNIC-network-cards-5.patch
Patch4: 0002-Prevent-infinite-recursion-in-dmidecode.c-smbios_set.patch
Patch5: 0003-Netronome-biosdevname-support-8.patch
Patch6: 0004-man-fix-all_ethN-indentation.patch
Patch7: 0005-Add-buffer-read-helper-using-read-explicitly.patch
Patch8: 0006-Read-DMI-entries-from-sys-firmware-dmi-tables-DMI.patch
Patch9: 0007-Add-SMBIOS-3.x-support.patch
%description
biosdevname in its simplest form takes a kernel device name as an
argument, and returns the BIOS-given name it "should" be. This is necessary
on systems where the BIOS name for a given device (e.g. the label on
the chassis is "Gb1") doesn't map directly and obviously to the kernel
name (e.g. eth0).
%prep
%setup -q
%autopatch -p1
%build
autoreconf -fvi
%configure --prefix=%{_prefix}
make %{?_smp_mflags}
%install
make install install-data DESTDIR=%{buildroot}
%files
%doc COPYING README
%{_sbindir}/%{name}
%{_prefix}/lib/udev/rules.d/*.rules
%{_mandir}/man1/%{name}.1*
%changelog
* Tue Nov 26 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 0.7.3-18
- Rebuilt for MSVSphere 10
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 0.7.3-18
- Bump release for June 2024 mass rebuild
* Mon May 20 2024 Michal Sekletar <msekleta@redhat.com> - 0.7.3-17
- Pull down latest updates from upstream (RHEL-24108)
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Jul 27 2023 Lukáš Zaoral <lzaoral@redhat.com> - 0.7.3-14
- correct the License: field
* Wed Jul 26 2023 Lukáš Zaoral <lzaoral@redhat.com> - 0.7.3-13
- migrate to SPDX license format
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Mar 22 2018 Michal Sekletar <msekleta@redhat.com> - 0.7.3-1
- rebase to biosdevname-0.7.3
* Wed Mar 21 2018 Michal Sekletar <msekleta@redhat.com> - 0.7.2-1
- rebase to biosdevname-0.7.2
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 26 2015 Michal Sekletar <msekleta@redhat.com> - 0.6.2-1
- Rebase to 0.6.2
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Mon Sep 02 2013 Harald Hoyer <harald@redhat.com> 0.5.0-2
- not only NAME KERNEL=="eth*", but every ethernet device
* Tue Jul 30 2013 Václav Pavlín <vpavlin@redhat.com> - 0.5.0-1
- Updating the sources to 0.5.0 version. Following are the changes:
- Change scan of SMBIOS slot <-> PCI methods, recurse to set SMBIOS slot field
- Save off secondary bus of PCI device for PCI tree traversal
- Add version number to biosdevname
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Wed Nov 14 2012 Václav Pavlín <vpavlin@redhat.com> - 0.4.1-3
- Source link update
* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Wed Jul 18 2012 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.4.1-1
- Fix autoconfig for Fedora systems
- Make sure that vpd scan only runs on Dell systems, also blacklist Atheros
wireless cards which hang when vpd is read.
- Add fixes to biosdevname to support cards that export multiple network
ports per PCI device (chelsio/mellanox).
* Thu May 3 2012 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.4.0-1
- Create detached signature
- Fix man page to use new naming convention
- Remove unused variables from Stephen Hemminger [shemminger@vyatta.com]
- Use Physical device for slot numbering for embedded SR-IOV cards
- Add tracking of ifindex to eths structure
- Fix naming for add-in network adapters when SMBIOS version is invalid
- Read VPD-R on Dell systems only
* Thu Jan 12 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.11-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Tue Oct 4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-5
- Added automake as a build dependency
* Tue Oct 4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-4
- Added autoconf as a build dependency
* Tue Oct 4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-3
- Generating the configure script if it doesn't exist
* Tue Oct 4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-2
- Fixed the dir structure inside the archive
* Tue Oct 4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-1
- Updating the sources to 0.3.11 version. Following are the changes:
- Fix man page for PCI slot naming
- Fix clearing of buffer for NPAR/SRIOV naming
- Add --nopirq and --smbios options to manpage.
- Verify length of VPD on network device
- Close file handle on sysfs read
- Fix naming policy for NPAR devices.
Match each PCI device to its VPD 'physical' device to get correct index
- Exclude building on ia64 arch
- Add support functions for determining PCIE slot
- Scan full path to parent when getting PCIE slot
- Fix NPAR naming for add-in cards
- Don't display _vf suffix on NPAR devices with single function
- Fix PCIe/PIRQ slot mapping
<<<<<<< HEAD
=======
>>>>>>> f16
* Thu Apr 21 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.8-1
- Add changes to parse VPD structure for device mapping on NPAR devices
- Fix pathname
- Cleanup and comment NPAR code
- Fix debian packaging rules to regenerate configure script
- Change pciX to pX for shortened names for PCI add-on devices
- Fix manpage typo
- Delete CR-LF in script
- Change default signing key
- Add command line arguments for checking SMBIOS version and ignore $PIRQ.
* Thu Feb 17 2011 Matt Domsch <Matt_Domsch@dell.com> - 0.3.7-1
- drop dump_pirq, suggest use biosdecode instead
- don't use '#' in names, use 'p' instead, by popular demand
- properly look for SMBIOS, then $PIR, then recurse
- Add kernel command line parameter "biosdevname={0|1}" to turn off/on biosdevname
- Fix segfault when BIOS advertises zero sized PIRQ Routing Table
- Add 'bonding' and 'openvswitch' to the virtual devices list
- fail PIRQ lookups if device domain is not 0
- Don't suggest names if running in a virtual machine (Xen, KVM,
VMware tested, but should work on others)
- Typo fixes
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Tue Jan 25 2011 Matt Domsch <Matt_Domsch@dell.com> - 0.3.6-1
- drop biosdevnameS, it's unused and fails to build on F15
* Tue Jan 25 2011 Matt Domsch <Matt_Domsch@dell.com> - 0.3.5-1
- install dump_pirq into /usr/sbin
- fix udev rule, skip running if NAME is already set
- move udev rule to /lib/udev/rules.d by default
* Thu Dec 16 2010 Matt Domsch <mdomsch@fedoraproject.org> - 0.3.4-1
- drop unnecessary explicit version requirement on udev
- bugfix: start indices at 1 not 0, to match Dell and HP server port designations
- bugfix: don't assign names to unknown devices
- bugfix: don't assign duplicate names
* Thu Dec 9 2010 Matt Domsch <Matt_Domsch@dell.com> - 0.3.3-1
- add back in use of PCI IRQ Routing Table, if info is not provided by
sysfs or SMBIOS
* Thu Dec 2 2010 Matt Domsch <Matt_Domsch@dell.com> - 0.3.2-1
- fix for multi-port cards with bridges
- removal of code for seriously obsolete systems
* Sun Nov 28 2010 Matt Domsch <Matt_Domsch@dell.com> 0.3.1-1
- remove all policies except 'physical' and 'all_ethN'
- handle SR-IOV devices properly
* Wed Nov 10 2010 Matt Domsch <Matt_Domsch@dell.com> 0.3.0-1
- add --policy=loms, make it default
- read index and labels from sysfs if available
* Mon Jul 27 2009 Jordan Hargrave <Jordan_Hargrave@dell.com> 0.2.5-1
- fix mmap error checking
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.4-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.4-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Tue May 06 2008 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-5
- use policy=all_names to find breakage
* Sun Feb 10 2008 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-4
- rebuild for gcc43
* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-3
- fix manpage entry in files
* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-2
- rebuild with Requires: udev > 115-3.20070920git
* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-1
- coordinate udev rules usage with udev maintainer
- fix crashes in pcmcia search, in_ethernet(), and incorrect command
line parsing.
* Mon Aug 27 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.3-1
- eliminate libbiosdevname.*, pre and post scripts
* Fri Aug 24 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.2-1
- ExclusiveArch those arches with SMBIOS and PCI IRQ Routing tables
- eliminate libsysfs dependency, move app to / for use before /usr is mounted.
- build static
* Mon Aug 20 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.1-1
- initial release
Loading…
Cancel
Save