Hello community, here is the log from the commit of package biosdevname for openSUSE:Factory checked in at 2014-01-29 07:12:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/biosdevname (Old) and /work/SRC/openSUSE:Factory/.biosdevname.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "biosdevname" Changes: -------- --- /work/SRC/openSUSE:Factory/biosdevname/biosdevname.changes 2013-07-16 07:32:55.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.biosdevname.new/biosdevname.changes 2014-01-29 07:12:32.000000000 +0100 @@ -1,0 +2,11 @@ +Mon Jan 20 16:34:53 UTC 2014 - juw...@suse.com + +- Updated to version 0.5.0 + * Add version number to biosdevname + * Save off Secondary PCI bus for PCI tree traversal + * Change scan of SMBIOS slot <-> PCI mapping +- Drop: biosdevname-0.4.1.tar.gz +- Add: biosdevname-0.5.0.tar.bz2 +- Add biosdevname_git_v050_to_head.patch: Latest fixes from v0.5.0 to HEAD + +------------------------------------------------------------------- Old: ---- biosdevname-0.4.1.tar.gz New: ---- biosdevname-0.5.0.tar.bz2 biosdevname_git_v050_to_head.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ biosdevname.spec ++++++ --- /var/tmp/diff_new_pack.Iumvpm/_old 2014-01-29 07:12:33.000000000 +0100 +++ /var/tmp/diff_new_pack.Iumvpm/_new 2014-01-29 07:12:33.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package biosdevname # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: biosdevname -Version: 0.4.1 +Version: 0.5.0 Release: 0 Summary: Udev helper for naming devices per BIOS names License: GPL-2.0 @@ -28,12 +28,15 @@ # 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 +#Source0: http://linux.dell.com/files/%{name}/%{name}-%{version}/%{name}-%{version}.tar.gz +Source0: %{name}-%{version}.tar.bz2 Source1: setup-biosdevname.sh +Patch1: biosdevname_git_v050_to_head.patch Patch2: ignore-broken-BIOSes Patch3: whitelist-dell Patch4: udev-rule-path.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: automake BuildRequires: pciutils-devel BuildRequires: pkgconfig BuildRequires: zlib-devel @@ -58,12 +61,14 @@ %prep %setup -q +%patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %build # this is a udev rule, so it needs to live in / rather than /usr +./autogen.sh %configure --disable-rpath --prefix=/ --bindir=/bin --sbindir=/sbin make %{?_smp_mflags} cp %{S:1} . ++++++ biosdevname-0.4.1.tar.gz -> biosdevname-0.5.0.tar.bz2 ++++++ ++++ 16712 lines of diff (skipped) ++++++ biosdevname_git_v050_to_head.patch ++++++ diff --git a/Makefile.am b/Makefile.am index 28d3e8d..14d9a92 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,7 +6,7 @@ dist_noinst_DATA = biosdevname.rules.in biosdevname.spec.fedora biosdevname.spec -CLEANFILES = version src/version.h +CLEANFILES = version src/bios_dev_name.h install-data-local: mkdir -p $(DESTDIR)@RULEDIR@ $(INSTALL_DATA) $(top_srcdir)/biosdevname.rules.in $(DESTDIR)@RULEDEST@ diff --git a/biosdevname.1 b/biosdevname.1 index 7067a56..22a53bd 100644 --- a/biosdevname.1 +++ b/biosdevname.1 @@ -31,16 +31,16 @@ Treat [args] as ethernet devs .B \-d, \-\-debug Enable debugging .TP -.B \-\-policy \fI[physical|all_ethN] +.B \-p, \-\-policy \fI[physical|all_ethN] .TP -.B \-\-prefix \fI[string] +.B \-P, \-\-prefix \fI[string] string use for embedded NICs in the physical policy (default=em) .TP -.B \-\-nopirq +.B \-x, \-\-nopirq Do not use $PIR table for mapping PCI device to slot. Some BIOS have incorrect values. .TP -.B \-\-smbios \fI[x.y] +.B \-s, \-\-smbios \fI[x.y] Require minimum SMBIOS version x.y .SH POLICIES .br diff --git a/configure.ac b/configure.ac index e26ba98..e75e64a 100644 --- a/configure.ac +++ b/configure.ac @@ -88,5 +88,5 @@ echo "PACKAGE_NAME='$PACKAGE_NAME'" > version echo "PACKAGE_VERSION='$PACKAGE_VERSION'" >> version echo "PACKAGE_STRING='$PACKAGE_STRING'" >> version -AC_CONFIG_FILES([Makefile biosdevname.spec.fedora biosdevname.spec.suse src/version.h]) +AC_CONFIG_FILES([Makefile biosdevname.spec.fedora biosdevname.spec.suse src/bios_dev_name.h]) AC_OUTPUT diff --git a/src/bios_dev_name.c b/src/bios_dev_name.c index 7374f9b..d0a917a 100644 --- a/src/bios_dev_name.c +++ b/src/bios_dev_name.c @@ -10,8 +10,6 @@ #include <unistd.h> #include <sys/types.h> -#include "version.h" - #include "libbiosdevname.h" #include "bios_dev_name.h" @@ -27,11 +25,11 @@ static void usage(void) fprintf(stderr, " Options:\n"); fprintf(stderr, " -i or --interface treat [args] as ethernet devs\n"); 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, " --version Show biosdevname version\n"); + fprintf(stderr, " -p or --policy [physical | all_ethN ]\n"); + fprintf(stderr, " -P or --prefix [string] string use for embedded NICs (default='em')\n"); + fprintf(stderr, " -s or --smbios [x.y] Require SMBIOS x.y or greater\n"); + fprintf(stderr, " -x or --nopirq Don't use $PIR table for slot numbers\n"); + fprintf(stderr, " -v or --version Show biosdevname version\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"); @@ -70,7 +68,7 @@ parse_opts(int argc, char **argv) {0, 0, 0, 0} }; c = getopt_long(argc, argv, - "dinp:", + "dip:P:xs:v", long_options, &option_index); if (c == -1) break; diff --git a/src/bios_dev_name.h b/src/bios_dev_name.h deleted file mode 100644 index 636c5e1..0000000 --- a/src/bios_dev_name.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2006 Dell, Inc. - * by Matt Domsch <matt_dom...@dell.com> - * Licensed under the GNU General Public license, version 2. - */ -#ifndef GLUE_H_INCLUDED -#define GLUE_H_INCLUDED - -struct bios_dev_name_opts { - int argc; - char **argv; - int optind; - int sortroutine; - int namingpolicy; - const char *prefix; - unsigned int debug:1; - unsigned int interface:1; -}; - -#endif /* GLUE_H_INCLUDED */ diff --git a/src/bios_dev_name.h.in b/src/bios_dev_name.h.in new file mode 100644 index 0000000..444c5e5 --- /dev/null +++ b/src/bios_dev_name.h.in @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2006 Dell, Inc. + * by Matt Domsch <matt_dom...@dell.com> + * Licensed under the GNU General Public license, version 2. + */ +#ifndef GLUE_H_INCLUDED +#define GLUE_H_INCLUDED + +#define BIOSDEVNAME_VERSION "@PACKAGE_VERSION@" + +struct bios_dev_name_opts { + int argc; + char **argv; + int optind; + int sortroutine; + int namingpolicy; + const char *prefix; + unsigned int debug:1; + unsigned int interface:1; +}; + +#endif /* GLUE_H_INCLUDED */ diff --git a/src/bios_device.c b/src/bios_device.c index 9e319a3..132877e 100644 --- a/src/bios_device.c +++ b/src/bios_device.c @@ -217,32 +217,6 @@ static void match_pci_and_eth_devs(struct libbiosdevname_state *state) struct pci_device *p; struct bios_device *b; struct network_device *n; - - list_for_each_entry(n, &state->network_devices, node) { - p = find_dev_by_pci_name(state, n->drvinfo.bus_info); - if (!p) - continue; - - b = malloc(sizeof(*b)); - if (!b) - continue; - memset(b, 0, sizeof(*b)); - INIT_LIST_HEAD(&b->node); - b->pcidev = p; - b->netdev = n; - b->slot_num = -1; - b->port_num = -1; - claim_netdev(b->netdev); - list_add(&b->node, &state->bios_devices); - } -} - - -static void match_eth_and_pci_devs(struct libbiosdevname_state *state) -{ - struct pci_device *p; - struct bios_device *b; - struct network_device *n; char pci_name[40]; list_for_each_entry(p, &state->pci_devices, node) { @@ -261,8 +235,6 @@ static void match_eth_and_pci_devs(struct libbiosdevname_state *state) INIT_LIST_HEAD(&b->node); b->pcidev = p; b->netdev = n; - b->slot_num = -1; - b->port_num = -1; claim_netdev(b->netdev); list_add(&b->node, &state->bios_devices); } @@ -286,8 +258,6 @@ static void match_unknown_eths(struct libbiosdevname_state *state) memset(b, 0, sizeof(*b)); INIT_LIST_HEAD(&b->node); b->netdev = n; - b->slot_num = -1; - b->port_num = -1; list_add(&b->node, &state->bios_devices); } } @@ -355,26 +325,6 @@ static void find_duplicates(struct libbiosdevname_state *state) } } -extern int addslot(struct libbiosdevname_state *state, int slot); - -/* Fix for RHBZ 816536/757743/756164/: Cards with same PCI but multiple ports - * chelsio, mellanox */ -static void check_ports(struct libbiosdevname_state *state) -{ - struct pci_device *dev; - struct bios_device *a; - - list_for_each_entry(a, &state->bios_devices, node) { - dev = a->pcidev; - if (dev == NULL || dev->is_sriov_virtual_function || dev->vpd_port != INT_MAX) - continue; - if (dev->physical_slot != PHYSICAL_SLOT_UNKNOWN) { - a->slot_num = dev->physical_slot; - a->port_num = addslot(state, 0x1000 + dev->physical_slot); - } - } -} - void * setup_bios_devices(int namingpolicy, const char *prefix) { int rc=1; @@ -390,7 +340,6 @@ void * setup_bios_devices(int namingpolicy, const char *prefix) get_eths(state); match_all(state); sort_device_list(state); - check_ports(state); rc = assign_bios_network_names(state, namingpolicy, prefix); if (rc) goto out; diff --git a/src/bios_device.h b/src/bios_device.h index d1ef911..690ed6f 100644 --- a/src/bios_device.h +++ b/src/bios_device.h @@ -19,9 +19,6 @@ struct bios_device { struct pci_device *pcidev; char *bios_name; int duplicate; - - int slot_num; - int port_num; }; static inline int is_pci(const struct bios_device *dev) diff --git a/src/dmidecode/dmidecode.c b/src/dmidecode/dmidecode.c index 3f761a9..a7a60be 100644 --- a/src/dmidecode/dmidecode.c +++ b/src/dmidecode/dmidecode.c @@ -361,6 +361,57 @@ static int address_from_efi(size_t *address) static const char *devmem = "/dev/mem"; +int dmidecode_read_file(const struct libbiosdevname_state *state) +{ +#ifdef _JPH + FILE *fp; + const char *dmidecode_file = "dmidecode.txt"; + char line[128], *r; + int type = -1, eth=0,s,b,d,f,slot,i; + + if ((fp = fopen(dmidecode_file, "r")) == NULL) + return 0; + while ((fgets(line, sizeof(line), fp)) != NULL) { + if (strstr(line, " DMI type 41,") != NULL) { + type = 41; + eth = 0; + slot = -1; + } else if (strstr(line, " DMI type 9,") != NULL) { + type = 9; + } else if (strstr(line, " DMI type ") != NULL) { + type = -1; + } + if (type == 41) { + if ((r = strstr(line, "Type: Ethernet")) != NULL) { + eth = 1; + } + if ((r = strstr(line, "Type Instance: ")) != NULL) { + sscanf(r, "Type Instance: %d", &slot); + } + if ((r = strstr(line, "Bus Address: ")) != NULL && eth) { + sscanf(r, "Bus Address: %x:%x:%x.%x", &s,&b,&d,&f); + printf("bus: %.4x:%.2x:%.2x.%x\n", s, b, d, f); + smbios_setslot(state, s, b, d, f, 0x5, 0x00, slot, ""); + } + } + if (type == 9) { + /* System Slots */ + if ((r = strstr(line, "ID: ")) != NULL) { + sscanf(r, "ID: %d", &slot); + } + if ((r = strstr(line, "Bus Address: ")) != NULL) { + sscanf(r, "Bus Address: %x:%x:%x.%x", &s,&b,&d,&f); + printf("bus: %.4x:%.2x:%.2x.%x = %d\n", s, b, d, f, slot); + for (i=0; i<8; i++) + smbios_setslot(state, s, b, d, i, 0x00, slot, 0x00, ""); + } + } + } + return 1; +#endif + return 0; +} + int dmidecode_main(const struct libbiosdevname_state *state) { int ret=0; /* Returned value */ @@ -369,6 +420,9 @@ int dmidecode_main(const struct libbiosdevname_state *state) int efi; u8 *buf; + if (dmidecode_read_file(state)) + return 0; + /* First try EFI (ia64, Intel-based Mac) */ efi=address_from_efi(&fp); switch(efi) diff --git a/src/naming_policy.c b/src/naming_policy.c index fe7b934..4f2033c 100644 --- a/src/naming_policy.c +++ b/src/naming_policy.c @@ -59,8 +59,8 @@ static void use_physical(const struct libbiosdevname_state *state, const char *p portnum = vf->sysfs_index; else if (vf->uses_smbios & HAS_SMBIOS_INSTANCE && is_pci_smbios_type_ethernet(vf)) portnum = vf->smbios_instance; - else if (dev->port_num != -1) - portnum = dev->port_num; + else if (vf->embedded_index_valid) + portnum = vf->embedded_index; if (portnum != INT_MAX) { snprintf(location, sizeof(location), "%s%u", prefix, portnum); known=1; @@ -70,8 +70,6 @@ static void use_physical(const struct libbiosdevname_state *state, const char *p snprintf(location, sizeof(location), "p%u", dev->pcidev->physical_slot); if (dev->pcidev->vpd_port < INT_MAX) portnum = dev->pcidev->vpd_port; - else if (dev->port_num != -1) - portnum = dev->port_num; else if (!dev->pcidev->is_sriov_virtual_function) portnum = dev->pcidev->index_in_slot; else diff --git a/src/pci.c b/src/pci.c index d017c50..67ef464 100644 --- a/src/pci.c +++ b/src/pci.c @@ -30,6 +30,7 @@ extern int is_valid_smbios; /* Borrowed from kernel vpd code */ #define PCI_VPD_LRDT 0x80 #define PCI_VPD_SRDT_END 0x78 +#define PCI_VPDR_TAG 0x90 #define PCI_VPD_SRDT_LEN_MASK 0x7 #define PCI_VPD_LRDT_TAG_SIZE 3 @@ -71,7 +72,7 @@ static int pci_vpd_size(struct pci_device *pdev, int fd) 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) + if (tag == 0 || tag == 0xFF || tag == PCI_VPD_SRDT_END || tag == PCI_VPDR_TAG) break; } return off; @@ -125,7 +126,7 @@ static int parse_vpd(struct libbiosdevname_state *state, struct pci_device *pdev int i, j, k, isz, jsz, port, func, pfi; struct pci_device *vf; - i = pci_vpd_find_tag(vpd, 0, len, 0x90); + i = pci_vpd_find_tag(vpd, 0, len, PCI_VPDR_TAG); if (i < 0) return 1; isz = pci_vpd_lrdt_size(&vpd[i]); @@ -631,24 +632,6 @@ void free_pci_devices(struct libbiosdevname_state *state) } } -int addslot(struct libbiosdevname_state *state, int slot) -{ - struct slotlist *s; - - list_for_each_entry(s, &state->slots, node) { - if (s->slot == slot) { - return ++s->count; - } - } - s = malloc(sizeof(*s)); - INIT_LIST_HEAD(&s->node); - s->slot = slot; - s->count = 0; - list_add(&s->node, &state->slots); - - return ++s->count; -} - static void set_pci_slots(struct libbiosdevname_state *state) { struct pci_device *dev; @@ -656,21 +639,55 @@ static void set_pci_slots(struct libbiosdevname_state *state) list_for_each_entry(dev, &state->pci_devices, node) { dev_to_slot(state, dev); } +} - /* Get mapping for each slot */ - list_for_each_entry(dev, &state->pci_devices, node) { - if (dev->is_sriov_virtual_function || !is_pci_network(dev) || dev->vpd_port != INT_MAX) { +static int set_pci_slot_index(struct libbiosdevname_state *state) +{ + struct pci_device *pcidev; + int prevslot=-1; + int index=1; + + /* only iterate over the PCI devices, because the bios_device list may be incomplete due to renames happening in parallel */ + list_for_each_entry(pcidev, &state->pci_devices, node) { + if (pcidev->physical_slot == 0) /* skip embedded devices */ continue; + if (!is_pci_network(pcidev)) /* only look at PCI network devices */ + continue; + if (pcidev->is_sriov_virtual_function) /* skip sriov VFs, they're handled later */ + continue; + if (pcidev->physical_slot != prevslot) { + index=1; + prevslot = pcidev->physical_slot; } - if (dev->physical_slot == 0) { - dev->embedded_index_valid = 1; - dev->embedded_index = addslot(state, 0); - } else if (dev->physical_slot != PHYSICAL_SLOT_UNKNOWN) { - dev->index_in_slot = addslot(state, dev->physical_slot); - } + else + index++; + pcidev->index_in_slot = index; } + return 0; } +static int set_embedded_index(struct libbiosdevname_state *state) +{ + struct pci_device *pcidev; + int index=1; + + list_for_each_entry(pcidev, &state->pci_devices, node) { + if (pcidev->physical_slot != 0) /* skip non-embedded devices */ + continue; + if (!is_pci_network(pcidev)) /* only look at PCI network devices */ + 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++; + } + return 0; +} + + static void set_sriov_pf_vf(struct libbiosdevname_state *state) { struct pci_device *vf; @@ -755,6 +772,8 @@ int get_pci_devices(struct libbiosdevname_state *state) 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); return rc; diff --git a/src/pirq.c b/src/pirq.c index 6568c24..0aa4d0c 100644 --- a/src/pirq.c +++ b/src/pirq.c @@ -44,7 +44,53 @@ int pirq_pci_dev_to_slot(struct routing_table *table, int domain, int bus, int d return INT_MAX; } +struct routing_table *pirq_read_file() +{ +#ifdef _JPH + FILE *fp; + char line[128]; + struct routing_table *table; + char *r; + int count, bus, dev, slot; + const char *pirq_file = "biosdecode.txt"; + /* Get count of entries */ + if ((fp = fopen(pirq_file, "r")) == NULL) + return NULL; + count = 0; + while (fgets(line, sizeof(line), fp) != NULL) { + if (strstr(line, "Slot Entry") != NULL) + count++; + } + fclose(fp); + + /* Read table */ + table = malloc(sizeof(*table) + count * sizeof(struct slot_entry)); + table->size = 32 + (sizeof(struct slot_entry) * count); + if ((fp = fopen(pirq_file, "r")) == NULL) + return NULL; + count = 0; + while (fgets(line, sizeof(line), fp) != NULL) { + if ((r = strstr(line, "Slot Entry")) == NULL) + continue; + if (sscanf(r, "Slot Entry %*d: ID %x:%x", &bus, &dev) == 2) { + table->slot[count].bus = bus; + table->slot[count].device = dev << 3; + if ((r = strstr(line, "on-board")) != NULL) + table->slot[count].slot = 0; + else if ((r = strstr(line, "slot number ")) != NULL) { + sscanf(r, "slot number %d", &slot); + table->slot[count].slot = slot; + } + printf("%d = %.2x:%.2x = %d\n", count, bus, dev, table->slot[count].slot); + count++; + } + } + fclose(fp); + return table; +#endif + return NULL; +} struct routing_table * pirq_alloc_read_table() { @@ -60,6 +106,9 @@ struct routing_table * pirq_alloc_read_table() if (nopirq) { return NULL; } + if ((table = pirq_read_file()) != NULL) + return table; + fd = open("/dev/mem", O_RDONLY); if(fd==-1) return NULL; diff --git a/src/version.h.in b/src/version.h.in deleted file mode 100644 index bcc0fda..0000000 --- a/src/version.h.in +++ /dev/null @@ -1 +0,0 @@ -#define BIOSDEVNAME_VERSION "@PACKAGE_VERSION@" ++++++ udev-rule-path.patch ++++++ --- /var/tmp/diff_new_pack.Iumvpm/_old 2014-01-29 07:12:33.000000000 +0100 +++ /var/tmp/diff_new_pack.Iumvpm/_new 2014-01-29 07:12:33.000000000 +0100 @@ -1,7 +1,7 @@ -Index: biosdevname-0.4.1/configure.ac +Index: biosdevname-0.5.0/configure.ac =================================================================== ---- biosdevname-0.4.1.orig/configure.ac -+++ biosdevname-0.4.1/configure.ac +--- biosdevname-0.5.0.orig/configure.ac ++++ biosdevname-0.5.0/configure.ac @@ -70,7 +70,10 @@ AC_CHECK_FUNCS([dup2 gettimeofday memset # handles default udev rules as of udev 114 or thereabouts RULEDEST=/lib/udev/rules.d/71-biosdevname.rules @@ -9,24 +9,8 @@ -if [[ -e /etc/udev/rules.d/60-net.rules ]]; then +if [[ -e /usr/lib/udev/rules.d/99-systemd.rules ]]; then + # openSUSE 12.3+ -+ RULESDEST=/usr/lib/udev/rules.d/71-biosdevname.rules ++ RULEDEST=/usr/lib/udev/rules.d/71-biosdevname.rules +elif [[ -e /etc/udev/rules.d/60-net.rules ]]; then # RHEL 5 / Fedora RULEDEST=/etc/udev/rules.d/60-biosdevname.rules elif [[ -e /etc/udev/rules.d/31-network.rules ]]; then -Index: biosdevname-0.4.1/configure -=================================================================== ---- biosdevname-0.4.1.orig/configure -+++ biosdevname-0.4.1/configure -@@ -10473,7 +10473,10 @@ done - # handles default udev rules as of udev 114 or thereabouts - RULEDEST=/lib/udev/rules.d/71-biosdevname.rules - --if [ -e /etc/udev/rules.d/60-net.rules ]; then -+if [ -e /usr/lib/udev ]; then -+ # openSUSE 12.3+ -+ RULEDEST=/usr/lib/udev/rules.d/71-biosdevname.rules -+elif [ -e /etc/udev/rules.d/60-net.rules ]; then - # RHEL 5 / Fedora - RULEDEST=/etc/udev/rules.d/60-biosdevname.rules - elif [ -e /etc/udev/rules.d/31-network.rules ]; then -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org