(biosdevname_udevrule_rename_all_network_devices.patch)

OBS-URL: https://build.opensuse.org/package/show/Base:System/biosdevname?expand=0&rev=39
This commit is contained in:
Marcus Meissner 2015-02-21 22:56:04 +00:00 committed by Git OBS Bridge
parent 9d3323abff
commit c8f2e33f57
4 changed files with 1 additions and 1225 deletions

View File

@ -9,6 +9,7 @@ Thu Jan 22 13:02:08 UTC 2015 - trenn@suse.de
- Update to version 0.6.1
- Do not disable rule via perl script in .spec file, better use a patch
(biosdevname_udevrule_rename_all_network_devices.patch)
- Modify configure.ac via sed to make use of %{_udevruledir} from .spec file
- Remove already integrated patches in latest source code:
Delete biosdevname_v0.5.0_to_git_c140ce659a204d67e4cc.patch

View File

@ -1,47 +0,0 @@
From: Tom Gundersen <tgunders@redhat.com>
Subject: Fix double renaming of network interfaces on systems with systemd
References: bnc#869614
Patch-Mainline: yes
Git-commit: 6f7fbcc352aeae08b5cf2a8e608f92abf98529f8
Git-repo: linux.dell.com/biosdevname.git
Signed-off-by: Thomas Renninger <trenn@suse.de>
On systems with systemd, the network interfaces which are renamed by
biosdevname, could get renamed again by systemd. This happens because,
two ADD events get generated for every network interface and on the
second ADD event, the KERNEL!="eth*" check in 71-biosdevname.rules
matches as the interfaces will have em names. As a result, the NAME
gets unset and the interface will get renamed again by
80-net-name-slot.rules again to systemd naming scheme.
This patch addresses the issue by removing the KERNEL!="eth*" check.
Also, this patch enhances the 71-biosdevname.rules to
1. Check the interface type and run biosdevname if it matches ARPHRD_ETHER
2. Skip running biosdevname if the interface is a virtual device such
as vlan etc.
Index: biosdevname-0.5.0/biosdevname.rules.in
===================================================================
--- biosdevname-0.5.0.orig/biosdevname.rules.in
+++ biosdevname-0.5.0/biosdevname.rules.in
@@ -1,7 +1,8 @@
SUBSYSTEM!="net", GOTO="netdevicename_end"
-KERNEL!="eth*", GOTO="netdevicename_end"
ACTION!="add", GOTO="netdevicename_end"
NAME=="?*", GOTO="netdevicename_end"
+ATTR{type}!="1", GOTO="netdevicename_end"
+ENV{DEVTYPE}=="?*", GOTO="netdevicename_end"
# whitelist all Dell systems
ATTR{[dmi/id]sys_vendor}=="Dell*", ENV{UDEV_BIOSDEVNAME}="1"
@@ -21,6 +22,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 --smbios 2.6 --nopirq -i %k", NAME="%c", OPTIONS+="string_escape=replace"
+SUBSYSTEMS=="pci", PROGRAM="/sbin/biosdevname --policy physical --smbios 2.6 --nopirq -i %k", NAME="%c", OPTIONS+="string_escape=replace"
LABEL="netdevicename_end"

File diff suppressed because it is too large Load Diff

View File

@ -1,143 +0,0 @@
From: Jordan Hargrave <Jordan_Hargrave@dell.com>
Subject: From Adrian Huang
References: bnc#890562
Patch-Mainline: yes
Git-commit: 51b8cdb0b60df3baa1be4ea3d8c303b0198465d3
Git-repo: linux.dell.com/biosdevname.git
Signed-off-by: Thomas Renninger <trenn@suse.de>
The command "biosdevname -d" shows the field "SMBIOS Lable" with "MEZZ2" for
all network interfaces when there are two or more PCI root ports in the same
Bus ID/Device ID.
With this patch, the info can be showed correctly if there are two or more PCI
root ports in the same Bus ID/Device ID. For example, the field of the
"p4p1" and "p4p2" would be showed as "MEZZ1".
This patch is based on v0.5.1.
Signed-off-by: Adrian Huang <ahuang12@lenovo.com>
diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c
index f766b8c..4acac01 100644
--- a/src/dmidecode/dmidecode.c
+++ b/src/dmidecode/dmidecode.c
@@ -48,6 +48,27 @@ extern int smver_mjr, smver_mnr, is_valid_smbios;
#define dprintf(a...)
#endif
+struct dmi_type9
+{
+ u8 hdrtype;
+ u8 hdrlength;
+ u16 hdrhandle;
+
+ u8 ref;
+ u8 type;
+ u8 buswidth;
+ u8 usage;
+ u8 length;
+ u16 id;
+ u8 flags1;
+ /* 2.1+ */
+ u8 flags2;
+ /* 2.6+ */
+ u16 segment;
+ u8 bus;
+ u8 devfn;
+} __attribute__((packed));
+
static const char *bad_index = "<BAD INDEX>";
/*
@@ -116,8 +137,7 @@ int smbios_setslot(const struct libbiosdevname_state *state,
int domain, int bus, int device, int func,
int type, int slot, int index, const char *label)
{
- struct pci_device *pdev, *n;
- int i;
+ struct pci_device *pdev;
dprintf("setslot: %.4x:%.2x:%.2x.%x = type:%x slot(%2d %2d) %s\n",
domain, bus, device, func, type, slot, index, label);
@@ -128,7 +148,7 @@ int smbios_setslot(const struct libbiosdevname_state *state,
(bus == 0xFF && device == 0x1F && func == 0x7))
{
dprintf(" disabled\n");
- return;
+ return -1;
}
list_for_each_entry(pdev, &state->pci_devices, node) {
@@ -164,7 +184,8 @@ int smbios_setslot(const struct libbiosdevname_state *state,
static void dmi_decode(struct dmi_header *h, u16 ver, const struct libbiosdevname_state *state)
{
u8 *data=h->data;
- int domain, bus, device, function, i;
+
+ int domain, bus, device, function;
switch(h->type)
{
case 9: /* 3.3.10 System Slots */
@@ -173,7 +194,11 @@ static void dmi_decode(struct dmi_header *h, u16 ver, const struct libbiosdevnam
bus = data[0x0F];
device = (data[0x10]>>3)&0x1F;
function = data[0x10] & 7;
- smbios_setslot(state, domain, bus, device, -1,
+
+ /* Root ports can be on multiport device.. scan single */
+ if (!is_root_port(state, domain, bus, device, function))
+ function = -1;
+ smbios_setslot(state, domain, bus, device, function,
0x00, WORD(data+0x09), 0x00,
dmi_string(h, data[0x04]));
}
diff --git a/src/pci.c b/src/pci.c
index 7a7cb36..168cd59 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -876,3 +876,31 @@ struct pci_device * find_dev_by_pci_name(const struct libbiosdevname_state *stat
return find_pci_dev_by_pci_addr(state, domain, bus, device, func);
}
+
+int is_root_port(const struct libbiosdevname_state *state,
+ int domain, int bus, int device, int func)
+{
+ struct pci_device *pdev;
+ int pos;
+ u16 flag;
+
+ pdev = find_pci_dev_by_pci_addr(state, domain, bus, device, func);
+
+ if (!pdev || !pdev->pci_dev)
+ return 0;
+
+ pos = pci_find_capability(pdev->pci_dev, PCI_CAP_ID_EXP);
+ if (pos != 0) {
+ u8 type;
+
+ flag = pci_read_word(pdev->pci_dev, pos + PCI_EXP_FLAGS);
+
+ type = (flag & PCI_EXP_FLAGS_TYPE) >> 4;
+
+ if (type == PCI_EXP_TYPE_ROOT_PORT)
+ return 1;
+ }
+
+ return 0;
+}
+
diff --git a/src/pci.h b/src/pci.h
index eacb539..ab2eb64 100644
--- a/src/pci.h
+++ b/src/pci.h
@@ -102,5 +102,7 @@ static inline int pci_domain_nr(const struct pci_dev *dev)
}
#endif
+int is_root_port(const struct libbiosdevname_state *state,
+ int domain, int bus, int device, int func);
#endif /* PCI_H_INCLUDED */