commit f28546677df39f66bc49de9901d25ddb505f7b68 Author: MSVSphere Packaging Team Date: Tue Nov 26 15:37:27 2024 +0300 import biosdevname-0.7.3-18.el10 diff --git a/.biosdevname.metadata b/.biosdevname.metadata new file mode 100644 index 0000000..2dcba35 --- /dev/null +++ b/.biosdevname.metadata @@ -0,0 +1 @@ +a31985f5cc19bd0a2bed7a32567d06f5ec72c0af SOURCES/biosdevname-0.7.3.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c33c93d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/biosdevname-0.7.3.tar.gz diff --git a/SOURCES/0001-Add-support-for-ExaNIC-network-cards-5.patch b/SOURCES/0001-Add-support-for-ExaNIC-network-cards-5.patch new file mode 100644 index 0000000..05c2274 --- /dev/null +++ b/SOURCES/0001-Add-support-for-ExaNIC-network-cards-5.patch @@ -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 + diff --git a/SOURCES/0001-Disable-biosdevname-by-default.patch b/SOURCES/0001-Disable-biosdevname-by-default.patch new file mode 100644 index 0000000..0026ac7 --- /dev/null +++ b/SOURCES/0001-Disable-biosdevname-by-default.patch @@ -0,0 +1,33 @@ +From db1371e4d22465c27b5ed8d851cea6e72f0176f7 Mon Sep 17 00:00:00 2001 +From: 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 + diff --git a/SOURCES/0002-Place-udev-rules-to-usr-lib.patch b/SOURCES/0002-Place-udev-rules-to-usr-lib.patch new file mode 100644 index 0000000..8f7c721 --- /dev/null +++ b/SOURCES/0002-Place-udev-rules-to-usr-lib.patch @@ -0,0 +1,26 @@ +From 14a0cef248d2996cde90e64ae56d7bdb569b3995 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= +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 + diff --git a/SOURCES/0002-Prevent-infinite-recursion-in-dmidecode.c-smbios_set.patch b/SOURCES/0002-Prevent-infinite-recursion-in-dmidecode.c-smbios_set.patch new file mode 100644 index 0000000..0f48cfa --- /dev/null +++ b/SOURCES/0002-Prevent-infinite-recursion-in-dmidecode.c-smbios_set.patch @@ -0,0 +1,29 @@ +From d6fa84f8a80d5e1c526fe675c345f709a700e33e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Josef=20M=C3=B6llers?= +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 + diff --git a/SOURCES/0003-Netronome-biosdevname-support-8.patch b/SOURCES/0003-Netronome-biosdevname-support-8.patch new file mode 100644 index 0000000..aef4d71 --- /dev/null +++ b/SOURCES/0003-Netronome-biosdevname-support-8.patch @@ -0,0 +1,187 @@ +From 8f2d9991d50e09ba9af842fb592b37d0c2021a06 Mon Sep 17 00:00:00 2001 +From: dirkjacobus +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 + diff --git a/SOURCES/0004-man-fix-all_ethN-indentation.patch b/SOURCES/0004-man-fix-all_ethN-indentation.patch new file mode 100644 index 0000000..134ecd5 --- /dev/null +++ b/SOURCES/0004-man-fix-all_ethN-indentation.patch @@ -0,0 +1,26 @@ +From 42abae6e56f22245ac8d693ab88ad1e3ea75a220 Mon Sep 17 00:00:00 2001 +From: Dan Kenigsberg +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 + pp[_] + 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 + diff --git a/SOURCES/0005-Add-buffer-read-helper-using-read-explicitly.patch b/SOURCES/0005-Add-buffer-read-helper-using-read-explicitly.patch new file mode 100644 index 0000000..8416d72 --- /dev/null +++ b/SOURCES/0005-Add-buffer-read-helper-using-read-explicitly.patch @@ -0,0 +1,168 @@ +From f64c3f549eda36d11b5690117173b0847535ebbe Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +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 +CC: Thomas Renninger +CC: Michal Suchanek +--- + 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 + diff --git a/SOURCES/0006-Read-DMI-entries-from-sys-firmware-dmi-tables-DMI.patch b/SOURCES/0006-Read-DMI-entries-from-sys-firmware-dmi-tables-DMI.patch new file mode 100644 index 0000000..f8b0118 --- /dev/null +++ b/SOURCES/0006-Read-DMI-entries-from-sys-firmware-dmi-tables-DMI.patch @@ -0,0 +1,145 @@ +From b3bb4ed21e8802cb38eb693952da058f52cf76b0 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +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 +CC: Thomas Renninger +CC: Michal Suchanek +--- + 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 + diff --git a/SOURCES/0007-Add-SMBIOS-3.x-support.patch b/SOURCES/0007-Add-SMBIOS-3.x-support.patch new file mode 100644 index 0000000..57ce92f --- /dev/null +++ b/SOURCES/0007-Add-SMBIOS-3.x-support.patch @@ -0,0 +1,63 @@ +From 495ab76e0d5f0eba83f9c86baf779a244ea1b60d Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +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 +CC: Thomas Renninger +CC: Michal Suchanek +--- + 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= 0x18 && memcmp(buf, "_SM3_", 5) == 0) ++ return smbios3_decode(buf, SYSFS_TABLE_DMI, state); + return 0; + } + +-- +2.44.0 + diff --git a/SPECS/biosdevname.spec b/SPECS/biosdevname.spec new file mode 100644 index 0000000..4182223 --- /dev/null +++ b/SPECS/biosdevname.spec @@ -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 - 0.7.3-18 +- Rebuilt for MSVSphere 10 + +* Mon Jun 24 2024 Troy Dawson - 0.7.3-18 +- Bump release for June 2024 mass rebuild + +* Mon May 20 2024 Michal Sekletar - 0.7.3-17 +- Pull down latest updates from upstream (RHEL-24108) + +* Tue Jan 23 2024 Fedora Release Engineering - 0.7.3-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 0.7.3-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jul 27 2023 Lukáš Zaoral - 0.7.3-14 +- correct the License: field + +* Wed Jul 26 2023 Lukáš Zaoral - 0.7.3-13 +- migrate to SPDX license format + +* Wed Jul 19 2023 Fedora Release Engineering - 0.7.3-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jan 18 2023 Fedora Release Engineering - 0.7.3-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jul 20 2022 Fedora Release Engineering - 0.7.3-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 0.7.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jul 21 2021 Fedora Release Engineering - 0.7.3-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 0.7.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 0.7.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jan 28 2020 Fedora Release Engineering - 0.7.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jul 24 2019 Fedora Release Engineering - 0.7.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 0.7.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 12 2018 Fedora Release Engineering - 0.7.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Mar 22 2018 Michal Sekletar - 0.7.3-1 +- rebase to biosdevname-0.7.3 + +* Wed Mar 21 2018 Michal Sekletar - 0.7.2-1 +- rebase to biosdevname-0.7.2 + +* Wed Feb 07 2018 Fedora Release Engineering - 0.6.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Aug 02 2017 Fedora Release Engineering - 0.6.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.6.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 0.6.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Feb 03 2016 Fedora Release Engineering - 0.6.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 26 2015 Michal Sekletar - 0.6.2-1 +- Rebase to 0.6.2 + +* Wed Jun 17 2015 Fedora Release Engineering - 0.5.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Aug 15 2014 Fedora Release Engineering - 0.5.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 0.5.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Sep 02 2013 Harald Hoyer 0.5.0-2 +- not only NAME KERNEL=="eth*", but every ethernet device + +* Tue Jul 30 2013 Václav Pavlín - 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 - 0.4.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Nov 14 2012 Václav Pavlín - 0.4.1-3 +- Source link update + +* Wed Jul 18 2012 Fedora Release Engineering - 0.4.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jul 18 2012 Praveen K Paladugu - 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 - 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 - 0.3.11-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Oct 4 2011 Praveen K Paladugu - 0.3.11-5 +- Added automake as a build dependency + +* Tue Oct 4 2011 Praveen K Paladugu - 0.3.11-4 +- Added autoconf as a build dependency + +* Tue Oct 4 2011 Praveen K Paladugu - 0.3.11-3 +- Generating the configure script if it doesn't exist + +* Tue Oct 4 2011 Praveen K Paladugu - 0.3.11-2 +- Fixed the dir structure inside the archive + +* Tue Oct 4 2011 Praveen K Paladugu - 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 - 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 - 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 - 0.3.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 25 2011 Matt Domsch - 0.3.6-1 +- drop biosdevnameS, it's unused and fails to build on F15 + +* Tue Jan 25 2011 Matt Domsch - 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 - 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 - 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 - 0.3.2-1 +- fix for multi-port cards with bridges +- removal of code for seriously obsolete systems + +* Sun Nov 28 2010 Matt Domsch 0.3.1-1 +- remove all policies except 'physical' and 'all_ethN' +- handle SR-IOV devices properly + +* Wed Nov 10 2010 Matt Domsch 0.3.0-1 +- add --policy=loms, make it default +- read index and labels from sysfs if available + +* Mon Jul 27 2009 Jordan Hargrave 0.2.5-1 +- fix mmap error checking + +* Fri Jul 24 2009 Fedora Release Engineering - 0.2.4-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Feb 23 2009 Fedora Release Engineering - 0.2.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Tue May 06 2008 Matt Domsch 0.2.4-5 +- use policy=all_names to find breakage + +* Sun Feb 10 2008 Matt Domsch 0.2.4-4 +- rebuild for gcc43 + +* Fri Sep 21 2007 Matt Domsch 0.2.4-3 +- fix manpage entry in files + +* Fri Sep 21 2007 Matt Domsch 0.2.4-2 +- rebuild with Requires: udev > 115-3.20070920git + +* Fri Sep 21 2007 Matt Domsch 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 0.2.3-1 +- eliminate libbiosdevname.*, pre and post scripts + +* Fri Aug 24 2007 Matt Domsch 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 0.2.1-1 +- initial release