(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:
parent
9d3323abff
commit
c8f2e33f57
@ -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
|
||||
|
@ -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
@ -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 */
|
Loading…
Reference in New Issue
Block a user