forked from pool/biosdevname
Accepting request 97484 from home:a_jaeger:FactoryFix
Fix download URL. OBS-URL: https://build.opensuse.org/request/show/97484 OBS-URL: https://build.opensuse.org/package/show/Base:System/biosdevname?expand=0&rev=9
This commit is contained in:
parent
b14b5c861c
commit
730a4c33f4
@ -1,10 +0,0 @@
|
|||||||
--- src/Makefile.am.orig
|
|
||||||
+++ src/Makefile.am
|
|
||||||
@@ -21,7 +21,6 @@ src_biosdevname_SOURCES = \
|
|
||||||
src/dmidecode/util.c
|
|
||||||
|
|
||||||
src_biosdevnameS_SOURCES = $(src_biosdevname_SOURCES)
|
|
||||||
-src_biosdevnameS_LDFLAGS = -all-static
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
src/bios_dev_name.h \
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:62e39f11a7f969ca264a6634f11808e9f9eca2f95903bdb00f1c85546acc3a70
|
|
||||||
size 149684
|
|
3
biosdevname-0.3.8.tar.gz
Normal file
3
biosdevname-0.3.8.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f9bdfb1da4b9f93c28b8b53b5d8c6e572d2b21df2fa8e81d72191398f4e1ed60
|
||||||
|
size 189422
|
@ -1,50 +0,0 @@
|
|||||||
From: Bernhard Walle <bwalle@suse.de>
|
|
||||||
Subject: [PATCH] Delete unused function onboard_device_type()
|
|
||||||
References: bnc#433795
|
|
||||||
|
|
||||||
This patch deletes the unused function onboard_device_type(). That fixes
|
|
||||||
the compiler warning:
|
|
||||||
|
|
||||||
src/dmidecode/dmidecode.c:139: \
|
|
||||||
warning: no return statement in function returning non-void
|
|
||||||
|
|
||||||
Signed-off-by: Bernhard Walle <bwalle@suse.de>
|
|
||||||
|
|
||||||
---
|
|
||||||
src/dmidecode/dmidecode.c | 25 -------------------------
|
|
||||||
1 file changed, 25 deletions(-)
|
|
||||||
|
|
||||||
--- a/src/dmidecode/dmidecode.c
|
|
||||||
+++ b/src/dmidecode/dmidecode.c
|
|
||||||
@@ -113,31 +113,6 @@ static void dmi_slot_segment_bus_func(u1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static u8 onboard_device_type(u8 code, const char *prefix)
|
|
||||||
-{
|
|
||||||
- /* 3.3.x.2 */
|
|
||||||
- u8 e = (code & 0x80)>>7;
|
|
||||||
- static const char *type[]={
|
|
||||||
- "Other", /* 1 */
|
|
||||||
- "Unknown",
|
|
||||||
- "Video",
|
|
||||||
- "SCSI Controller",
|
|
||||||
- "Ethernet",
|
|
||||||
- "Token Ring",
|
|
||||||
- "Sound",
|
|
||||||
- "PATA Controller",
|
|
||||||
- "SATA Controller",
|
|
||||||
- "SAS Controller" /* 0x0A */
|
|
||||||
- };
|
|
||||||
- code = code & 0x7F;
|
|
||||||
- if(code>=0x01 && code<=0x0A) {
|
|
||||||
- printf("%sStatus: %s\n", prefix, e?"Enabled":"Disabled");
|
|
||||||
- printf("%sDevice Type: %s\n", prefix, type[code-0x01]);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- printf("%sDevice Type: %s\n", prefix, out_of_spec);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
* Main
|
|
||||||
*/
|
|
@ -1,23 +0,0 @@
|
|||||||
From: Bernhard Walle <bwalle@suse.de>
|
|
||||||
Subject: [PATCH] Change to --policy=all_names
|
|
||||||
References: bnc#441079
|
|
||||||
|
|
||||||
See the Bugzilla.
|
|
||||||
|
|
||||||
|
|
||||||
Signed-off-by: Bernhard Walle <bwalle@suse.de>
|
|
||||||
|
|
||||||
---
|
|
||||||
biosdevname.rules.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/biosdevname.rules.in
|
|
||||||
+++ b/biosdevname.rules.in
|
|
||||||
@@ -2,6 +2,6 @@ KERNEL!="eth*", GOTO="biosdevname_end"
|
|
||||||
ACTION!="add", GOTO="biosdevname_end"
|
|
||||||
NAME=="?*", GOTO="biosdevname_end"
|
|
||||||
|
|
||||||
-PROGRAM="/sbin/biosdevname --policy=all_ethN -i %k", ENV{INTERFACE_NAME}="%c"
|
|
||||||
+PROGRAM="/sbin/biosdevname --policy=all_names -i %k", ENV{INTERFACE_NAME}="%c"
|
|
||||||
|
|
||||||
LABEL="biosdevname_end"
|
|
@ -1,13 +1,59 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 21 09:04:06 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Fix download URL.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Nov 30 09:43:41 UTC 2011 - coolo@suse.com
|
Wed Nov 30 09:43:41 UTC 2011 - coolo@suse.com
|
||||||
|
|
||||||
- add automake as buildrequire to avoid implicit dependency
|
- add automake as buildrequire to avoid implicit dependency
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Sep 23 12:02:44 UTC 2011 - duwe@suse.com
|
||||||
|
|
||||||
|
- fix bnc#706505
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Sep 17 19:47:58 UTC 2011 - jengelh@medozas.de
|
Sat Sep 17 19:47:58 UTC 2011 - jengelh@medozas.de
|
||||||
|
|
||||||
- Remove redundant tags/sections from specfile
|
- Remove redundant tags/sections from specfile
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 7 14:50:24 UTC 2011 - duwe@suse.com
|
||||||
|
|
||||||
|
- Verify length of VPD on network device (bnc#711172)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 3 16:11:21 UTC 2011 - duwe@novell.com
|
||||||
|
|
||||||
|
- Enable on all Dell machines (bnc#705109)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 1 13:17:24 UTC 2011 - duwe@novell.com
|
||||||
|
|
||||||
|
- pull patch to restrict SMBIOS version and to disable PIRQ usage
|
||||||
|
from upstream.
|
||||||
|
- use the above to fix bnc#705162
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 19 10:45:45 UTC 2011 - duwe@novell.com
|
||||||
|
|
||||||
|
- version 0.3.8 contains unconditional asm inline, making it
|
||||||
|
x86-only (bnc#706622)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jul 7 18:38:07 UTC 2011 - duwe@novell.com
|
||||||
|
|
||||||
|
- fix bnc#704182
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jun 16 13:54:58 CEST 2011 - duwe@suse.de
|
||||||
|
|
||||||
|
- update to 0.3.8, disable rule by default (FATE#312154)
|
||||||
|
- remove now obsolete patches biosdevname-delete-unused-function.diff,
|
||||||
|
biosdevname-policy-all_names.diff and
|
||||||
|
biosdevname-0.2.4-wronglinking.patch.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Apr 30 15:55:06 UTC 2011 - crrodriguez@opensuse.org
|
Sat Apr 30 15:55:06 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: biosdevname
|
Name: biosdevname
|
||||||
Version: 0.2.4
|
Version: 0.3.8
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Udev helper for naming devices per BIOS names
|
Summary: Udev helper for naming devices per BIOS names
|
||||||
Group: System/Base
|
Group: System/Base
|
||||||
@ -28,20 +28,24 @@ Url: http://linux.dell.com/files/biosdevname/
|
|||||||
# also likely that other arches don't expect the PCI bus to be sorted
|
# 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
|
# breadth-first, or of so, there haven't been any comments about that
|
||||||
# on LKML.
|
# on LKML.
|
||||||
ExclusiveArch: %{ix86} x86_64 ia64
|
ExclusiveArch: %{ix86} x86_64
|
||||||
Source0: http://linux.dell.com/files/%{name}/%{name}-%{version}.tar.bz2
|
Source0: http://linux.dell.com/files/%{name}/%{name}-%{version}/%{name}-%{version}.tar.gz
|
||||||
Source1: setup-biosdevname.sh
|
Source1: setup-biosdevname.sh
|
||||||
|
Patch1: more-cmdline-args
|
||||||
|
Patch2: ignore-broken-BIOSes
|
||||||
|
Patch3: whitelist-dell
|
||||||
|
Patch4: verify-network-VPD
|
||||||
|
Patch5: bug-706505
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: automake pciutils-devel zlib-devel
|
BuildRequires: automake
|
||||||
|
BuildRequires: pciutils-devel
|
||||||
|
BuildRequires: zlib-devel
|
||||||
# to figure out how to name the rules file
|
# to figure out how to name the rules file
|
||||||
BuildRequires: udev
|
BuildRequires: udev
|
||||||
# because of mkinitrd_setup in %post and %postun
|
# because of mkinitrd_setup in %post and %postun
|
||||||
PreReq: mkinitrd
|
PreReq: mkinitrd
|
||||||
# for ownership of /etc/udev/rules.d
|
# for ownership of /lib/udev/rules.d
|
||||||
Requires: udev
|
Requires: udev
|
||||||
Patch0: %{name}-delete-unused-function.diff
|
|
||||||
Patch1: %{name}-policy-all_names.diff
|
|
||||||
Patch2: biosdevname-0.2.4-wronglinking.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
biosdevname in its simplest form takes an kernel name name as an
|
biosdevname in its simplest form takes an kernel name name as an
|
||||||
@ -50,14 +54,19 @@ 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
|
label on the chassis is "Gb1") doesn't map directly and obviously to
|
||||||
the kernel name (e.g. eth0).
|
the kernel name (e.g. eth0).
|
||||||
|
|
||||||
|
You can enable/disable usage of biosdevname with boot option
|
||||||
|
"biosdevname=[0|1]"
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -fiv
|
#autoreconf -fiv
|
||||||
# this is a udev rule, so it needs to live in / rather than /usr
|
# this is a udev rule, so it needs to live in / rather than /usr
|
||||||
%configure --disable-rpath --libdir=/%{_lib} --prefix=/ --bindir=/bin --sbindir=/sbin
|
%configure --disable-rpath --libdir=/%{_lib} --prefix=/ --bindir=/bin --sbindir=/sbin
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
@ -69,12 +78,15 @@ rm %{buildroot}/sbin/%{name}S || :
|
|||||||
mkdir -p $RPM_BUILD_ROOT/lib/mkinitrd/scripts
|
mkdir -p $RPM_BUILD_ROOT/lib/mkinitrd/scripts
|
||||||
install -m 0755 setup-biosdevname.sh \
|
install -m 0755 setup-biosdevname.sh \
|
||||||
$RPM_BUILD_ROOT/lib/mkinitrd/scripts/setup-biosdevname.sh
|
$RPM_BUILD_ROOT/lib/mkinitrd/scripts/setup-biosdevname.sh
|
||||||
|
# remain disabled by default
|
||||||
|
perl -pi -e 's,^# GOTO,GOTO,g;' \
|
||||||
|
$RPM_BUILD_ROOT/lib/udev/rules.d/*-biosdevname.rules
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%doc COPYING README
|
%doc COPYING README
|
||||||
/sbin/%{name}
|
/sbin/%{name}
|
||||||
%config(noreplace) %{_sysconfdir}/udev/rules.d/*%{name}.rules
|
%config(noreplace) /lib/udev/rules.d/*%{name}.rules
|
||||||
%{_mandir}/man1/*
|
%{_mandir}/man1/*
|
||||||
/lib/mkinitrd/scripts/setup-biosdevname.sh
|
/lib/mkinitrd/scripts/setup-biosdevname.sh
|
||||||
|
|
||||||
|
245
bug-706505
Normal file
245
bug-706505
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
diff -ur biosdevname-0.3.8.old/src/naming_policy.c biosdevname-0.3.8/src/naming_policy.c
|
||||||
|
--- biosdevname-0.3.8.old/src/naming_policy.c 2011-09-23 14:09:52.000000000 +0200
|
||||||
|
+++ biosdevname-0.3.8/src/naming_policy.c 2011-09-23 14:10:11.000000000 +0200
|
||||||
|
@@ -37,38 +37,39 @@
|
||||||
|
char interface[IFNAMSIZ];
|
||||||
|
unsigned int portnum=0;
|
||||||
|
int known=0;
|
||||||
|
-
|
||||||
|
- memset(buffer, 0, sizeof(buffer));
|
||||||
|
- memset(location, 0, sizeof(location));
|
||||||
|
- memset(port, 0, sizeof(port));
|
||||||
|
- memset(interface, 0, sizeof(interface));
|
||||||
|
+ struct pci_device *vf;
|
||||||
|
|
||||||
|
list_for_each_entry(dev, &state->bios_devices, node) {
|
||||||
|
known = 0;
|
||||||
|
+ memset(buffer, 0, sizeof(buffer));
|
||||||
|
+ memset(location, 0, sizeof(location));
|
||||||
|
+ memset(port, 0, sizeof(port));
|
||||||
|
+ memset(interface, 0, sizeof(interface));
|
||||||
|
+
|
||||||
|
if (is_pci(dev)) {
|
||||||
|
+ vf = dev->pcidev;
|
||||||
|
if (dev->pcidev->physical_slot == 0) { /* embedded devices only */
|
||||||
|
- if (dev->pcidev->uses_sysfs & HAS_SYSFS_INDEX) {
|
||||||
|
- portnum = dev->pcidev->sysfs_index;
|
||||||
|
- snprintf(location, sizeof(location), "%s%u", prefix, portnum);
|
||||||
|
- known=1;
|
||||||
|
- }
|
||||||
|
- else if (dev->pcidev->uses_smbios & HAS_SMBIOS_INSTANCE && is_pci_smbios_type_ethernet(dev->pcidev)) {
|
||||||
|
- portnum = dev->pcidev->smbios_instance;
|
||||||
|
- snprintf(location, sizeof(location), "%s%u", prefix, portnum);
|
||||||
|
- known=1;
|
||||||
|
- }
|
||||||
|
- else if (dev->pcidev->embedded_index_valid) {
|
||||||
|
- portnum = dev->pcidev->embedded_index;
|
||||||
|
+ portnum = INT_MAX;
|
||||||
|
+ /* Use master VPD device if available */
|
||||||
|
+ if (vf->vpd_pf)
|
||||||
|
+ vf = vf->vpd_pf;
|
||||||
|
+ if (vf->uses_sysfs & HAS_SYSFS_INDEX)
|
||||||
|
+ portnum = vf->sysfs_index;
|
||||||
|
+ else if (vf->uses_smbios & HAS_SMBIOS_INSTANCE && is_pci_smbios_type_ethernet(vf))
|
||||||
|
+ portnum = vf->smbios_instance;
|
||||||
|
+ else if (vf->embedded_index_valid)
|
||||||
|
+ portnum = vf->embedded_index;
|
||||||
|
+ if (portnum != INT_MAX) {
|
||||||
|
snprintf(location, sizeof(location), "%s%u", prefix, portnum);
|
||||||
|
known=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (dev->pcidev->physical_slot < PHYSICAL_SLOT_UNKNOWN) {
|
||||||
|
snprintf(location, sizeof(location), "p%u", dev->pcidev->physical_slot);
|
||||||
|
- if (!dev->pcidev->is_sriov_virtual_function)
|
||||||
|
- portnum = dev->pcidev->index_in_slot;
|
||||||
|
- else if (dev->pcidev->vpd_port < INT_MAX)
|
||||||
|
+ if (dev->pcidev->vpd_port < INT_MAX)
|
||||||
|
portnum = dev->pcidev->vpd_port;
|
||||||
|
+ else if (!dev->pcidev->is_sriov_virtual_function)
|
||||||
|
+ portnum = dev->pcidev->index_in_slot;
|
||||||
|
else
|
||||||
|
portnum = dev->pcidev->pf->index_in_slot;
|
||||||
|
snprintf(port, sizeof(port), "p%u", portnum);
|
||||||
|
diff -ur biosdevname-0.3.8.old/src/pci.c biosdevname-0.3.8/src/pci.c
|
||||||
|
--- biosdevname-0.3.8.old/src/pci.c 2011-09-23 14:09:52.000000000 +0200
|
||||||
|
+++ biosdevname-0.3.8/src/pci.c 2011-09-23 14:10:15.000000000 +0200
|
||||||
|
@@ -114,9 +114,10 @@
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int parse_vpd(struct pci_device *pdev, int len, unsigned char *vpd)
|
||||||
|
+static int parse_vpd(struct libbiosdevname_state *state, struct pci_device *pdev, int len, unsigned char *vpd)
|
||||||
|
{
|
||||||
|
int i, j, k, isz, jsz, port, func, pfi;
|
||||||
|
+ struct pci_device *vf;
|
||||||
|
|
||||||
|
i = pci_vpd_find_tag(vpd, 0, len, 0x90);
|
||||||
|
if (i < 0)
|
||||||
|
@@ -133,15 +134,6 @@
|
||||||
|
if (memcmp(vpd+j+3, "1028VPDR.VER1.0", 15))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
- /* Lookup NPY Num Ports */
|
||||||
|
- j = pci_vpd_find_info_subkey(vpd, i, isz, "**", "NPY");
|
||||||
|
- if (j < 0)
|
||||||
|
- return 1;
|
||||||
|
- jsz = pci_vpd_info_field_size(&vpd[j]);
|
||||||
|
- j += PCI_VPD_INFO_FLD_HDR_SIZE;
|
||||||
|
- sscanf((char *)vpd+j+3, "%1x", &port);
|
||||||
|
- pdev->vpd_nports = port;
|
||||||
|
-
|
||||||
|
/* Lookup Port Mappings */
|
||||||
|
j = pci_vpd_find_info_subkey(vpd, i, isz, "**", "DCM");
|
||||||
|
if (j < 0)
|
||||||
|
@@ -152,16 +144,21 @@
|
||||||
|
for (k=3; k<jsz; k+=10) {
|
||||||
|
/* Parse Port Info */
|
||||||
|
sscanf((char *)vpd+j+k, "%1x%1x%2x", &port, &func, &pfi);
|
||||||
|
- if (func == pdev->pci_dev->func) {
|
||||||
|
- pdev->vpd_port = port;
|
||||||
|
- pdev->vpd_pfi = pfi;
|
||||||
|
+ if ((vf = find_pci_dev_by_pci_addr(state, pdev->pci_dev->domain,
|
||||||
|
+ pdev->pci_dev->bus,
|
||||||
|
+ pdev->pci_dev->dev,
|
||||||
|
+ func)) != NULL) {
|
||||||
|
+ if (vf->vpd_port == INT_MAX) {
|
||||||
|
+ vf->vpd_port = port;
|
||||||
|
+ vf->vpd_pfi = pfi;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read and parse PCI VPD section if it exists */
|
||||||
|
-static int read_pci_vpd(struct pci_device *pdev)
|
||||||
|
+static int read_pci_vpd(struct libbiosdevname_state *state, struct pci_device *pdev)
|
||||||
|
{
|
||||||
|
char path[PATH_MAX];
|
||||||
|
char pci_name[16];
|
||||||
|
@@ -172,13 +169,13 @@
|
||||||
|
|
||||||
|
unparse_pci_name(pci_name, sizeof(pci_name), pdev->pci_dev);
|
||||||
|
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/vpd", pci_name);
|
||||||
|
- if ((fd = open(path, O_RDONLY)) >= 0) {
|
||||||
|
+ if ((fd = open(path, O_RDONLY|O_SYNC)) >= 0) {
|
||||||
|
size = pci_vpd_size(pdev, fd);
|
||||||
|
if (size > 0) {
|
||||||
|
vpd = malloc(size);
|
||||||
|
if (vpd != NULL) {
|
||||||
|
if ((nrd = pread(fd, vpd, size, 0)) > 0)
|
||||||
|
- rc = parse_vpd(pdev, nrd, vpd);
|
||||||
|
+ rc = parse_vpd(state, pdev, nrd, vpd);
|
||||||
|
free(vpd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -189,10 +186,36 @@
|
||||||
|
|
||||||
|
static void set_pci_vpd_instance(struct libbiosdevname_state *state)
|
||||||
|
{
|
||||||
|
- struct pci_device *dev;
|
||||||
|
+ struct pci_device *dev, *dev2;
|
||||||
|
+
|
||||||
|
+ /* Read VPD information for each device */
|
||||||
|
+ list_for_each_entry(dev, &state->pci_devices, node) {
|
||||||
|
+ read_pci_vpd(state, dev);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ /* Now match VPD master device */
|
||||||
|
list_for_each_entry(dev, &state->pci_devices, node) {
|
||||||
|
- read_pci_vpd(dev);
|
||||||
|
+ if (dev->vpd_port == INT_MAX)
|
||||||
|
+ continue;
|
||||||
|
+ list_for_each_entry(dev2, &state->pci_devices, node) {
|
||||||
|
+ if (dev2->pci_dev->domain == dev->pci_dev->domain &&
|
||||||
|
+ dev2->pci_dev->bus == dev->pci_dev->bus &&
|
||||||
|
+ dev2->pci_dev->dev == dev->pci_dev->dev &&
|
||||||
|
+ dev2->vpd_port == dev->vpd_port) {
|
||||||
|
+ dev2->vpd_count++;
|
||||||
|
+ dev->vpd_pf = dev2;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Delete all VPD devices with single function */
|
||||||
|
+ list_for_each_entry(dev, &state->pci_devices, node) {
|
||||||
|
+ if (dev->vpd_count == 1) {
|
||||||
|
+ dev->vpd_port = INT_MAX;
|
||||||
|
+ dev->vpd_pfi = INT_MAX;
|
||||||
|
+ dev->vpd_pf = NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -495,6 +518,7 @@
|
||||||
|
dev->vf_index = INT_MAX;
|
||||||
|
dev->vpd_port = INT_MAX;
|
||||||
|
dev->vpd_pfi = INT_MAX;
|
||||||
|
+ dev->vpd_pf = NULL;
|
||||||
|
fill_pci_dev_sysfs(dev, p);
|
||||||
|
list_add(&dev->node, &state->pci_devices);
|
||||||
|
}
|
||||||
|
@@ -559,6 +583,8 @@
|
||||||
|
continue;
|
||||||
|
if (pcidev->is_sriov_virtual_function) /* skip sriov VFs, they're handled later */
|
||||||
|
continue;
|
||||||
|
+ if (pcidev->vpd_port != INT_MAX)
|
||||||
|
+ continue;
|
||||||
|
pcidev->embedded_index = index;
|
||||||
|
pcidev->embedded_index_valid = 1;
|
||||||
|
index++;
|
||||||
|
@@ -644,11 +670,11 @@
|
||||||
|
/* ordering here is important */
|
||||||
|
dmidecode_main(state); /* this will fail on Xen guests, that's OK */
|
||||||
|
sort_device_list(state);
|
||||||
|
+ set_pci_vpd_instance(state);
|
||||||
|
set_pci_slots(state);
|
||||||
|
set_embedded_index(state);
|
||||||
|
set_pci_slot_index(state);
|
||||||
|
set_sriov_pf_vf(state);
|
||||||
|
- set_pci_vpd_instance(state);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
@@ -711,8 +737,8 @@
|
||||||
|
if (p->smbios_type) {
|
||||||
|
s += snprintf(s, size-(s-buf), "SMBIOS Device Type: ");
|
||||||
|
s += unparse_smbios_type41_type(s, size-(s-buf), p->smbios_type);
|
||||||
|
- s += snprintf(s, size-(s-buf), "SMBIOS Instance: %u\n", p->smbios_instance);
|
||||||
|
- s += snprintf(s, size-(s-buf), "SMBIOS Enabled: %s\n", p->smbios_instance?"True":"False");
|
||||||
|
+ if (p->smbios_instance)
|
||||||
|
+ s += snprintf(s, size-(s-buf), "SMBIOS Instance: %u\n", p->smbios_instance);
|
||||||
|
}
|
||||||
|
if (p->uses_smbios & HAS_SMBIOS_LABEL && p->smbios_label)
|
||||||
|
s += snprintf(s, size-(s-buf), "SMBIOS Label: %s\n", p->smbios_label);
|
||||||
|
@@ -727,7 +753,11 @@
|
||||||
|
if (p->vpd_port < INT_MAX) {
|
||||||
|
s += snprintf(s, size-(s-buf), "VPD Port: %u\n", p->vpd_port);
|
||||||
|
s += snprintf(s, size-(s-buf), "VPD Index: %u\n", p->vpd_pfi);
|
||||||
|
- s += snprintf(s, size-(s-buf), "VPD #Ports: %u\n", p->vpd_nports);
|
||||||
|
+ if (p->vpd_pf) {
|
||||||
|
+ s += snprintf(s, size-(s-buf), "VPD PCI master: ");
|
||||||
|
+ s += unparse_pci_name(s, size-(s-buf), p->vpd_pf->pci_dev);
|
||||||
|
+ s += snprintf(s, size-(s-buf), " count %d\n", p->vpd_pf->vpd_count);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
if (!list_empty(&p->vfs)) {
|
||||||
|
s += snprintf(s, size-(s-buf), "Virtual Functions:\n");
|
||||||
|
Only in biosdevname-0.3.8/src: pci.c.orig
|
||||||
|
diff -ur biosdevname-0.3.8.old/src/pci.h biosdevname-0.3.8/src/pci.h
|
||||||
|
--- biosdevname-0.3.8.old/src/pci.h 2011-09-23 14:09:52.000000000 +0200
|
||||||
|
+++ biosdevname-0.3.8/src/pci.h 2011-09-23 14:10:15.000000000 +0200
|
||||||
|
@@ -29,9 +29,10 @@
|
||||||
|
char * sysfs_label;
|
||||||
|
unsigned char uses_sysfs;
|
||||||
|
unsigned int vf_index;
|
||||||
|
+ unsigned int vpd_count;
|
||||||
|
unsigned int vpd_pfi;
|
||||||
|
- unsigned int vpd_nports;
|
||||||
|
unsigned int vpd_port;
|
||||||
|
+ struct pci_device *vpd_pf;
|
||||||
|
struct pci_device *pf;
|
||||||
|
struct list_head vfnode;
|
||||||
|
struct list_head vfs;
|
10
ignore-broken-BIOSes
Normal file
10
ignore-broken-BIOSes
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
--- biosdevname-0.3.8/biosdevname.rules.in.orig 2011-03-09 00:58:08.000000000 +0100
|
||||||
|
+++ biosdevname-0.3.8/biosdevname.rules.in 2011-08-01 15:13:10.000000000 +0200
|
||||||
|
@@ -18,6 +18,6 @@ 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.
|
||||||
|
-PROGRAM="/sbin/biosdevname --policy physical -i %k", NAME="%c", OPTIONS+="string_escape=replace"
|
||||||
|
+PROGRAM="/sbin/biosdevname --policy physical --smbios 2.6 --nopirq -i %k", NAME="%c", OPTIONS+="string_escape=replace"
|
||||||
|
|
||||||
|
LABEL="netdevicename_end"
|
122
more-cmdline-args
Normal file
122
more-cmdline-args
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
From: Jordan Hargrave <Jordan_Hargrave@dell.com>
|
||||||
|
Date: Thu, 31 Mar 2011 17:48:00 +0000 (-0500)
|
||||||
|
Subject: Add command line arguments for checking SMBIOS version and ignore $PIRQ.
|
||||||
|
X-Git-Url: http://linux.dell.com/cgi-bin/gitweb/gitweb.cgi?p=biosdevname.git;a=commitdiff_plain;h=8dde4129ab403f4df5f013209e5dd21d25b43f05
|
||||||
|
|
||||||
|
Add command line arguments for checking SMBIOS version and ignore $PIRQ.
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/bios_dev_name.c b/src/bios_dev_name.c
|
||||||
|
index 81e7620..e2f8454 100644
|
||||||
|
--- a/src/bios_dev_name.c
|
||||||
|
+++ b/src/bios_dev_name.c
|
||||||
|
@@ -14,6 +14,9 @@
|
||||||
|
#include "bios_dev_name.h"
|
||||||
|
|
||||||
|
static struct bios_dev_name_opts opts;
|
||||||
|
+int nopirq;
|
||||||
|
+int smver_mjr;
|
||||||
|
+int smver_mnr;
|
||||||
|
|
||||||
|
static void usage(void)
|
||||||
|
{
|
||||||
|
@@ -23,6 +26,8 @@ static void usage(void)
|
||||||
|
fprintf(stderr, " -d or --debug enable debugging\n");
|
||||||
|
fprintf(stderr, " --policy [physical | all_ethN ]\n");
|
||||||
|
fprintf(stderr, " --prefix [string] string use for embedded NICs (default='em')\n");
|
||||||
|
+ fprintf(stderr, " --smbios [x.y] Require SMBIOS x.y or greater\n");
|
||||||
|
+ fprintf(stderr, " --nopirq Don't use $PIR table for slot numbers\n");
|
||||||
|
fprintf(stderr, " Example: biosdevname -i eth0\n");
|
||||||
|
fprintf(stderr, " returns: em1\n");
|
||||||
|
fprintf(stderr, " when eth0 is an embedded NIC with label '1' on the chassis.\n");
|
||||||
|
@@ -55,6 +60,8 @@ parse_opts(int argc, char **argv)
|
||||||
|
{"interface", no_argument, 0, 'i'},
|
||||||
|
{"policy", required_argument, 0, 'p'},
|
||||||
|
{"prefix", required_argument, 0, 'P'},
|
||||||
|
+ {"nopirq", no_argument, 0, 'x'},
|
||||||
|
+ {"smbios", required_argument, 0, 's'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
c = getopt_long(argc, argv,
|
||||||
|
@@ -75,6 +82,12 @@ parse_opts(int argc, char **argv)
|
||||||
|
case 'P':
|
||||||
|
opts.prefix = optarg;
|
||||||
|
break;
|
||||||
|
+ case 's':
|
||||||
|
+ sscanf(optarg, "%u.%u", &smver_mjr, &smver_mnr);
|
||||||
|
+ break;
|
||||||
|
+ case 'x':
|
||||||
|
+ nopirq = 1;
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
exit(1);
|
||||||
|
diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c
|
||||||
|
index ec91305..7bedc3a 100644
|
||||||
|
--- a/src/dmidecode/dmidecode.c
|
||||||
|
+++ b/src/dmidecode/dmidecode.c
|
||||||
|
@@ -40,6 +40,8 @@
|
||||||
|
#include "../pci.h"
|
||||||
|
#include "../naming_policy.h"
|
||||||
|
|
||||||
|
+extern int smver_mjr, smver_mnr;
|
||||||
|
+
|
||||||
|
static const char *bad_index = "<BAD INDEX>";
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -176,12 +178,27 @@ static void to_dmi_header(struct dmi_header *h, u8 *data)
|
||||||
|
h->data=data;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int isvalidsmbios(int mjr, int mnr)
|
||||||
|
+{
|
||||||
|
+ if (!smver_mjr && !smver_mnr)
|
||||||
|
+ return 1;
|
||||||
|
+ if (mjr > smver_mjr)
|
||||||
|
+ return 1;
|
||||||
|
+ if ((mjr == smver_mjr) && (mnr >= smver_mnr))
|
||||||
|
+ return 1;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem, const struct libbiosdevname_state *state)
|
||||||
|
{
|
||||||
|
u8 *buf;
|
||||||
|
u8 *data;
|
||||||
|
int i=0;
|
||||||
|
|
||||||
|
+ /* Verify SMBIOS version */
|
||||||
|
+ if (!isvalidsmbios(ver >> 8, ver & 0xFF)) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if((buf=mem_chunk(base, len, devmem))==NULL)
|
||||||
|
{
|
||||||
|
#ifndef USE_MMAP
|
||||||
|
diff --git a/src/pirq.c b/src/pirq.c
|
||||||
|
index 14685bb..8eb4c97 100644
|
||||||
|
--- a/src/pirq.c
|
||||||
|
+++ b/src/pirq.c
|
||||||
|
@@ -18,6 +18,8 @@
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include "pirq.h"
|
||||||
|
|
||||||
|
+extern int nopirq;
|
||||||
|
+
|
||||||
|
/* If unknown, use INT_MAX so they get sorted last */
|
||||||
|
int pirq_pci_dev_to_slot(struct routing_table *table, int domain, int bus, int dev)
|
||||||
|
{
|
||||||
|
@@ -49,8 +51,13 @@ struct routing_table * pirq_alloc_read_table()
|
||||||
|
int i;
|
||||||
|
void *mem;
|
||||||
|
off_t offset=0L;
|
||||||
|
- int fd=open("/dev/mem", O_RDONLY);
|
||||||
|
+ int fd;
|
||||||
|
|
||||||
|
+ /* Skip PIRQ table parsing */
|
||||||
|
+ if (nopirq) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ fd = open("/dev/mem", O_RDONLY);
|
||||||
|
if(fd==-1)
|
||||||
|
return NULL;
|
||||||
|
|
@ -27,7 +27,7 @@ cp_bin /sbin/biosdevname "${tmp_mnt}/sbin/biosdevname"
|
|||||||
if ! [ -d "${tmp_mnt}/etc/udev/rules.d" ] ; then
|
if ! [ -d "${tmp_mnt}/etc/udev/rules.d" ] ; then
|
||||||
mkdir -p "${tmp_mnt}/etc/udev/rules.d"
|
mkdir -p "${tmp_mnt}/etc/udev/rules.d"
|
||||||
fi
|
fi
|
||||||
cp /etc/udev/rules.d/*-biosdevname.rules "${tmp_mnt}/etc/udev/rules.d"
|
cp /lib/udev/rules.d/*-biosdevname.rules "${tmp_mnt}/etc/udev/rules.d"
|
||||||
|
|
||||||
|
|
||||||
# vim: set sw=4 ts=4 et:
|
# vim: set sw=4 ts=4 et:
|
||||||
|
60
verify-network-VPD
Normal file
60
verify-network-VPD
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
X-Git-Url: http://linux.dell.com/cgi-bin/gitweb/gitweb.cgi?p=biosdevname.git;a=blobdiff_plain;f=src%2Fpci.c;h=2175c87f815b33af09bd00d00387d0cec22cd993;hp=7220afc24753c83152acf2ae13b8f1529505a18b;hb=199c98f7bf3ae05f3ecdefcaa776278e7c535cba;hpb=473634364dbc28573faff4ab27d637f7fc842e74
|
||||||
|
|
||||||
|
diff --git a/src/pci.c b/src/pci.c
|
||||||
|
index 7220afc..2175c87 100644
|
||||||
|
--- a/src/pci.c
|
||||||
|
+++ b/src/pci.c
|
||||||
|
@@ -45,6 +45,32 @@ static inline u8 pci_vpd_info_field_size(const u8 *info_field)
|
||||||
|
return info_field[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int pci_vpd_size(struct pci_device *pdev, int fd)
|
||||||
|
+{
|
||||||
|
+ uint8_t buf[3], tag;
|
||||||
|
+ int off;
|
||||||
|
+
|
||||||
|
+ if (!is_pci_network(pdev))
|
||||||
|
+ return 0;
|
||||||
|
+ off = 0;
|
||||||
|
+ for(;;) {
|
||||||
|
+ if (pread(fd, buf, 1, off) != 1)
|
||||||
|
+ break;
|
||||||
|
+ if (buf[0] & PCI_VPD_LRDT) {
|
||||||
|
+ tag = buf[0];
|
||||||
|
+ if (pread(fd, buf, 3, off) != 3)
|
||||||
|
+ break;
|
||||||
|
+ off += PCI_VPD_LRDT_TAG_SIZE + pci_vpd_lrdt_size(buf);
|
||||||
|
+ } else {
|
||||||
|
+ tag = buf[0] & ~PCI_VPD_SRDT_LEN_MASK;
|
||||||
|
+ off += PCI_VPD_SRDT_TAG_SIZE + pci_vpd_srdt_size(buf);
|
||||||
|
+ }
|
||||||
|
+ if (tag == 0 || tag == 0xFF || tag == PCI_VPD_SRDT_END)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ return off;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
@@ -147,12 +173,14 @@ static int read_pci_vpd(struct pci_device *pdev)
|
||||||
|
unparse_pci_name(pci_name, sizeof(pci_name), pdev->pci_dev);
|
||||||
|
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/vpd", pci_name);
|
||||||
|
if ((fd = open(path, O_RDONLY)) >= 0) {
|
||||||
|
- size = lseek(fd, 0, SEEK_END);
|
||||||
|
- vpd = malloc(size);
|
||||||
|
- if (vpd != NULL) {
|
||||||
|
- if ((nrd = pread(fd, vpd, size, 0)) > 0)
|
||||||
|
- rc = parse_vpd(pdev, nrd, vpd);
|
||||||
|
- free(vpd);
|
||||||
|
+ size = pci_vpd_size(pdev, fd);
|
||||||
|
+ if (size > 0) {
|
||||||
|
+ vpd = malloc(size);
|
||||||
|
+ if (vpd != NULL) {
|
||||||
|
+ if ((nrd = pread(fd, vpd, size, 0)) > 0)
|
||||||
|
+ rc = parse_vpd(pdev, nrd, vpd);
|
||||||
|
+ free(vpd);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
}
|
12
whitelist-dell
Normal file
12
whitelist-dell
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--- biosdevname-0.3.8/biosdevname.rules.in.orig 2011-08-03 18:06:57.000000000 +0200
|
||||||
|
+++ biosdevname-0.3.8/biosdevname.rules.in 2011-08-03 18:07:59.000000000 +0200
|
||||||
|
@@ -3,6 +3,9 @@
|
||||||
|
ACTION!="add", GOTO="netdevicename_end"
|
||||||
|
NAME=="?*", GOTO="netdevicename_end"
|
||||||
|
|
||||||
|
+# whitelist all Dell systems
|
||||||
|
+ATTR{[dmi/id]sys_vendor}=="Dell*", ENV{UDEV_BIOSDEVNAME}="1"
|
||||||
|
+
|
||||||
|
# kernel command line "biosdevname={0|1}" can turn off/on biosdevname
|
||||||
|
IMPORT{cmdline}="biosdevname"
|
||||||
|
ENV{biosdevname}=="?*", ENV{UDEV_BIOSDEVNAME}="$env{biosdevname}"
|
Loading…
x
Reference in New Issue
Block a user