diff --git a/.biosdevname.metadata b/.biosdevname.metadata
new file mode 100644
index 0000000..18c269f
--- /dev/null
+++ b/.biosdevname.metadata
@@ -0,0 +1 @@
+708ccec6a312869f5ebfb0dd393f3b218dd5d171 SOURCES/biosdevname-0.5.0.tar.gz
diff --git a/README.md b/README.md
deleted file mode 100644
index 0e7897f..0000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-The master branch has no content
- 
-Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6
- 
-If you find this file in a distro specific branch, it means that no content has been checked in yet
diff --git a/SOURCES/0001-CoverityScan-update.patch b/SOURCES/0001-CoverityScan-update.patch
new file mode 100644
index 0000000..8494f58
--- /dev/null
+++ b/SOURCES/0001-CoverityScan-update.patch
@@ -0,0 +1,199 @@
+From da98b8f43c74492c5471439d6ca20c15da5aeb45 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+Date: Thu, 15 Nov 2012 10:24:02 +0100
+Subject: [PATCH] CoverityScan update
+
+Resolves: #873636
+---
+ src/bios_device.c | 14 +++++++++++---
+ src/eths.c        |  2 +-
+ src/pci.c         | 38 +++++++++++++++++++++++++++++---------
+ 3 files changed, 41 insertions(+), 13 deletions(-)
+
+diff --git a/src/bios_device.c b/src/bios_device.c
+index 9e319a3..a8827ec 100644
+--- a/src/bios_device.c
++++ b/src/bios_device.c
+@@ -359,10 +359,11 @@ 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)
++static int check_ports(struct libbiosdevname_state *state)
+ {
+ 	struct pci_device *dev;
+ 	struct bios_device *a;
++        int slot = 0;
+ 
+ 	list_for_each_entry(a, &state->bios_devices, node) {
+ 		dev = a->pcidev;
+@@ -370,9 +371,14 @@ static void check_ports(struct libbiosdevname_state *state)
+ 			continue;
+ 		if (dev->physical_slot != PHYSICAL_SLOT_UNKNOWN) {
+ 			a->slot_num = dev->physical_slot;
+-			a->port_num = addslot(state, 0x1000 + dev->physical_slot);
++			slot = addslot(state, 0x1000 + dev->physical_slot);
++                        if (slot<0)
++                                return slot;
++                        a->port_num = slot;
+ 		}
+ 	}
++
++        return 0;
+ }
+ 
+ void * setup_bios_devices(int namingpolicy, const char *prefix)
+@@ -390,7 +396,9 @@ void * setup_bios_devices(int namingpolicy, const char *prefix)
+ 	get_eths(state);
+ 	match_all(state);
+ 	sort_device_list(state);
+-	check_ports(state);
++	rc = check_ports(state);
++        if (rc)
++                goto out;
+ 	rc = assign_bios_network_names(state, namingpolicy, prefix);
+ 	if (rc)
+ 		goto out;
+diff --git a/src/eths.c b/src/eths.c
+index bcd02e1..04db300 100644
+--- a/src/eths.c
++++ b/src/eths.c
+@@ -40,7 +40,7 @@ static int eths_get_ifindex(const char *devname, int *ifindex)
+ 	struct ifreq ifr;
+ 
+ 	memset(&ifr, 0, sizeof(ifr));
+-	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
++	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)-1);
+ 
+ 	/* Open control socket. */
+ 	fd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -63,7 +63,7 @@ static int eths_get_hwaddr(const char *devname, unsigned char *buf, int size, in
+ 	struct ifreq ifr;
+ 
+ 	memset(&ifr, 0, sizeof(ifr));
+-	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
++	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)-1);
+ 
+ 	/* Open control socket. */
+ 	fd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -88,7 +88,7 @@ static int eths_get_info(const char *devname, struct ethtool_drvinfo *drvinfo)
+ 
+ 	/* Setup our control structures. */
+ 	memset(&ifr, 0, sizeof(ifr));
+-	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
++	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)-1);
+ 
+ 	/* Open control socket. */
+ 	fd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -118,7 +118,7 @@ static int eths_get_permaddr(const char *devname, unsigned char *buf, int size)
+ 
+ 	/* Setup our control structures. */
+ 	memset(&ifr, 0, sizeof(ifr));
+-	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
++	strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)-1);
+ 
+ 
+ 
+diff --git a/src/pci.c b/src/pci.c
+index 75cf786..9bc0535 100644
+--- a/src/pci.c
++++ b/src/pci.c
+@@ -198,10 +198,14 @@ static void set_pci_vpd_instance(struct libbiosdevname_state *state)
+ 
+ 	/* Read VPD-R on Dell systems only */
+ 	if ((fd = open("/sys/devices/virtual/dmi/id/sys_vendor", O_RDONLY)) >= 0) {
+-		if (read(fd, sys_vendor, 9) != 9)
++		if (read(fd, sys_vendor, 9) != 9) {
++                        close(fd);
+ 			return;
+-		if (strncmp(sys_vendor, "Dell Inc.", 9)) 
++                }
++		if (strncmp(sys_vendor, "Dell Inc.", 9)) {
++                        close(fd);
+ 			return;
++                }
+ 	} else
+ 		return;
+ 
+@@ -238,6 +242,8 @@ static void set_pci_vpd_instance(struct libbiosdevname_state *state)
+ 			dev->vpd_pf = NULL;
+ 		}
+ 	}
++
++        close(fd);
+ }
+ 
+ static int pci_find_capability(struct pci_dev *p, int cap)
+@@ -628,6 +634,8 @@ int addslot(struct libbiosdevname_state *state, int slot)
+ 		}
+ 	}
+ 	s = malloc(sizeof(*s));
++        if(!s)
++                return -1;
+ 	INIT_LIST_HEAD(&s->node);
+ 	s->slot = slot;
+ 	s->count = 0;
+@@ -636,9 +644,10 @@ int addslot(struct libbiosdevname_state *state, int slot)
+ 	return ++s->count;
+ }
+ 
+-static void set_pci_slots(struct libbiosdevname_state *state)
++static int set_pci_slots(struct libbiosdevname_state *state)
+ {
+ 	struct pci_device *dev;
++        int slot = 0;
+ 
+ 	list_for_each_entry(dev, &state->pci_devices, node) {
+ 		dev_to_slot(state, dev);
+@@ -651,11 +660,19 @@ static void set_pci_slots(struct libbiosdevname_state *state)
+ 		}
+ 		if (dev->physical_slot == 0) {
+ 			dev->embedded_index_valid = 1;
+-			dev->embedded_index = addslot(state, 0);
++			slot = addslot(state, 0);
++                        if (slot<0)
++                                return slot;
++                        dev->embedded_index = slot;
+ 		} else if (dev->physical_slot != PHYSICAL_SLOT_UNKNOWN) {
+-			dev->index_in_slot = addslot(state, dev->physical_slot);
++			slot = addslot(state, dev->physical_slot);
++                        if (slot<0)
++                                return slot;
++                        dev->index_in_slot = slot;
+ 		}
+ 	}
++
++        return 0;
+ }
+ 
+ static void set_sriov_pf_vf(struct libbiosdevname_state *state)
+@@ -737,9 +754,12 @@ int get_pci_devices(struct libbiosdevname_state *state)
+ 	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);
++	rc = set_pci_slots(state);
++        if(rc)
++                goto out;
+ 	set_sriov_pf_vf(state);
+ 
++out:
+ 	return rc;
+ }
+ 
+diff --git a/src/read_proc.c b/src/read_proc.c
+index c89cb6d..eb988e9 100644
+--- a/src/read_proc.c
++++ b/src/read_proc.c
+@@ -25,7 +25,7 @@ static struct network_device *add_interface(struct libbiosdevname_state *state,
+ 		return NULL;
+ 	memset(i, 0, sizeof(*i));
+ 	INIT_LIST_HEAD(&i->node);
+-	strncpy(i->kernel_name, name, sizeof(i->kernel_name));
++	strncpy(i->kernel_name, name, sizeof(i->kernel_name)-1);
+ 	list_add_tail(&i->node, &state->network_devices);
+ 	return i;
+ }
+-- 
+1.7.11.7
+
diff --git a/SOURCES/0001-Fix-regression-introduced-by-the-addslot-function.patch b/SOURCES/0001-Fix-regression-introduced-by-the-addslot-function.patch
new file mode 100644
index 0000000..33173e2
--- /dev/null
+++ b/SOURCES/0001-Fix-regression-introduced-by-the-addslot-function.patch
@@ -0,0 +1,282 @@
+From 783de6c93b01fec3f3cb8682156a21417567db9f Mon Sep 17 00:00:00 2001
+From: Narendra K <narendra_k@dell.com>
+Date: Wed, 4 Sep 2013 20:32:14 +0530
+Subject: [PATCH] Fix regression introduced by the addslot function
+
+This patch reverts the following commits
+
+1452ea7125b5e713b80459f7b528d5562438f3d5
+0bb870f09a34b6c505fcefdbcf85cfcc1aa5ca97
+
+The commits introduced addslot function to implement naming for
+devices which have more than one physical port sharing the same
+PCI b/d/f. But the port determination logic in 'addslot' function
+could
+result in more than one interface on a given PCI slot getting same
+port number when renames are happening in parallel. This patch
+restores the logic that existed in version 0.3.11 to determine
+port number of an interface.
+
+Fixes Fedora bz-782145.
+---
+ src/bios_device.c   | 59 ------------------------------------
+ src/bios_device.h   |  3 --
+ src/naming_policy.c |  6 ++--
+ src/pci.c           | 86 ++++++++++++++++++++++++++++++-----------------------
+ 4 files changed, 50 insertions(+), 104 deletions(-)
+
+diff --git a/src/bios_device.c b/src/bios_device.c
+index a8827ec..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,32 +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 int check_ports(struct libbiosdevname_state *state)
+-{
+-	struct pci_device *dev;
+-	struct bios_device *a;
+-        int slot = 0;
+-
+-	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;
+-			slot = addslot(state, 0x1000 + dev->physical_slot);
+-                        if (slot<0)
+-                                return slot;
+-                        a->port_num = slot;
+-		}
+-	}
+-
+-        return 0;
+-}
+-
+ void * setup_bios_devices(int namingpolicy, const char *prefix)
+ {
+ 	int rc=1;
+@@ -396,9 +340,6 @@ void * setup_bios_devices(int namingpolicy, const char *prefix)
+ 	get_eths(state);
+ 	match_all(state);
+ 	sort_device_list(state);
+-	rc = check_ports(state);
+-        if (rc)
+-                goto out;
+ 	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/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 b64fc3f..7aa32fc 100644
+--- a/src/pci.c
++++ b/src/pci.c
+@@ -637,26 +637,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));
+-        if(!s)
+-                return -1;
+-	INIT_LIST_HEAD(&s->node);
+-	s->slot = slot;
+-	s->count = 0;
+-	list_add(&s->node, &state->slots);
+-
+-	return ++s->count;
+-}
+-
+ static int set_pci_slots(struct libbiosdevname_state *state)
+ {
+ 	struct pci_device *dev;
+@@ -665,29 +645,56 @@ static int 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 (dev->physical_slot == 0) {
+-			dev->embedded_index_valid = 1;
+-			slot = addslot(state, 0);
+-                        if (slot<0)
+-                                return slot;
+-                        dev->embedded_index = slot;
+-		} else if (dev->physical_slot != PHYSICAL_SLOT_UNKNOWN) {
+-			slot = addslot(state, dev->physical_slot);
+-                        if (slot<0)
+-                                return slot;
+-                        dev->index_in_slot = slot;
+-		}
+-	}
++		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;
++ 		}
++		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;
+ 
+-        return 0;
++	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;
+@@ -774,6 +781,9 @@ int get_pci_devices(struct libbiosdevname_state *state)
+ 	rc = set_pci_slots(state);
+         if(rc)
+                 goto out;
++
++        set_embedded_index(state);
++	set_pci_slot_index(state);
+ 	set_sriov_pf_vf(state);
+ 
+ out:
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0001-Place-udev-rules-to-usr-lib.patch b/SOURCES/0001-Place-udev-rules-to-usr-lib.patch
new file mode 100644
index 0000000..b25dc0e
--- /dev/null
+++ b/SOURCES/0001-Place-udev-rules-to-usr-lib.patch
@@ -0,0 +1,38 @@
+From 14a0cef248d2996cde90e64ae56d7bdb569b3995 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+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 0a32aa5..eb2ed3c 100644
+--- a/biosdevname.rules.in
++++ b/biosdevname.rules.in
+@@ -19,6 +19,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.
+-SUBSYSTEMS=="pci", PROGRAM="/sbin/biosdevname --policy physical -i %k", NAME="%c",  OPTIONS+="string_escape=replace"
++SUBSYSTEMS=="pci", PROGRAM="/usr/sbin/biosdevname --policy physical -i %k", NAME="%c",  OPTIONS+="string_escape=replace"
+ 
+ LABEL="netdevicename_end"
+diff --git a/configure.ac b/configure.ac
+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/0001-Update-help-and-man-to-cover-all-possible-arguments.patch b/SOURCES/0001-Update-help-and-man-to-cover-all-possible-arguments.patch
new file mode 100644
index 0000000..08c4f67
--- /dev/null
+++ b/SOURCES/0001-Update-help-and-man-to-cover-all-possible-arguments.patch
@@ -0,0 +1,68 @@
+From b02989fe9544311179cd9b333f9d9e450410c6bb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= <vpavlin@redhat.com>
+Date: Tue, 9 Apr 2013 14:25:14 +0200
+Subject: [PATCH] Update help and man to cover all possible arguments
+
+---
+ biosdevname.1       |  8 ++++----
+ src/bios_dev_name.c | 12 ++++++------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+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/src/bios_dev_name.c b/src/bios_dev_name.c
+index 6084d28..5001f85 100644
+--- a/src/bios_dev_name.c
++++ b/src/bios_dev_name.c
+@@ -25,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");
+@@ -68,7 +68,7 @@ parse_opts(int argc, char **argv)
+ 			{0, 0, 0, 0}
+ 		};
+ 		c = getopt_long(argc, argv,
+-				"dinp:",
++				"dip:",
+ 				long_options, &option_index);
+ 		if (c == -1)
+ 			break;
+-- 
+1.8.1.4
+
diff --git a/SOURCES/biosdevname-0.5.0-rules.patch b/SOURCES/biosdevname-0.5.0-rules.patch
new file mode 100644
index 0000000..61941c3
--- /dev/null
+++ b/SOURCES/biosdevname-0.5.0-rules.patch
@@ -0,0 +1,21 @@
+diff -up biosdevname-0.5.0/biosdevname.rules.in.new biosdevname-0.5.0/biosdevname.rules.in
+--- biosdevname-0.5.0/biosdevname.rules.in.new	2013-03-12 13:26:06.000000000 +0100
++++ biosdevname-0.5.0/biosdevname.rules.in	2013-09-02 19:07:01.953956219 +0200
+@@ -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"
+ 
+ # kernel command line "biosdevname={0|1}" can turn off/on biosdevname
+ IMPORT{cmdline}="biosdevname"
+@@ -18,6 +19,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"
++SUBSYSTEMS=="pci", PROGRAM="/sbin/biosdevname --policy physical -i %k", NAME="%c",  OPTIONS+="string_escape=replace"
+ 
+ LABEL="netdevicename_end"
diff --git a/SPECS/biosdevname.spec b/SPECS/biosdevname.spec
new file mode 100644
index 0000000..1a3d96a
--- /dev/null
+++ b/SPECS/biosdevname.spec
@@ -0,0 +1,237 @@
+Name:		biosdevname
+Version:	0.5.0
+Release:	5%{?dist}
+Summary:	Udev helper for naming devices per BIOS names
+
+Group:		System Environment/Base
+License:	GPLv2
+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 ia64
+Source0:	http://linux.dell.com/files/%{name}/%{name}-%{version}/%{name}-%{version}.tar.gz
+
+BuildRequires:	pciutils-devel, zlib-devel
+# to figure out how to name the rules file
+BuildRequires:	udev
+#To generate the configure script
+BuildRequires:	autoconf
+BuildRequires:	automake
+# for ownership of /etc/udev/rules.d
+Requires: udev
+
+Patch0: 0001-Update-help-and-man-to-cover-all-possible-arguments.patch
+Patch1: biosdevname-0.5.0-rules.patch
+Patch2: 0001-CoverityScan-update.patch
+Patch3: 0001-Fix-regression-introduced-by-the-addslot-function.patch
+Patch4: 0001-Place-udev-rules-to-usr-lib.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
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+
+
+%build
+autoreconf -iv
+#If configure script doesn't exist generate it with autogen script
+[ -e ./configure ] || ./autogen.sh --no-configure
+
+# this is a udev rule, so it needs to live in / rather than /usr
+%configure --disable-rpath --prefix=%{_prefix} --sbindir=%{_prefix}/sbin
+make %{?_smp_mflags}
+
+
+%install
+make install install-data DESTDIR=%{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%doc COPYING README
+%{_prefix}/sbin/%{name}
+# hack for either /etc or /lib rules location
+%{_prefix}/lib/udev/rules.d/*.rules
+%{_mandir}/man1/%{name}.1*
+
+
+%changelog
+* Fri Sep 20 2013 Václav Pavlín <vpavlin@redhat.com> - 0.5.0-5
+- Fix regression introduced by the addslot function
+- CoverityScan fixes
+- Place udev rules to /usr/lib rather than /lib
+Resolves: rhbz#1008899
+
+* Mon Sep 02 2013 Harald Hoyer <harald@redhat.com> 0.5.0-3
+- not only NAME KERNEL=="eth*", but every ethernet device
+
+* Tue Jul 30 2013 Václav Pavlín <vpavlin@redhat.com> - 0.5.0-2
+- Update help and man pages to cover all possible arguments
+Resolves: rhbz#949021
+
+* Tue Jul 30 2013 Václav Pavlín <vpavlin@redhat.com> - 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 <rel-eng@lists.fedoraproject.org> - 0.4.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Wed Nov 14 2012 Václav Pavlín <vpavlin@redhat.com> - 0.4.1-3
+- Source link update
+
+* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Wed Jul 18 2012 Praveen K Paladugu <praveen_paladugu@dell.com> - 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 <praveen_paladugu@dell.com> - 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 <rel-eng@lists.fedoraproject.org> - 0.3.11-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Tue Oct  4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-5
+- Added automake as a build dependency
+
+* Tue Oct  4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-4
+- Added autoconf as a build dependency
+
+* Tue Oct  4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-3
+- Generating the configure script if it doesn't exist
+
+* Tue Oct  4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 0.3.11-2
+- Fixed the dir structure inside the archive
+
+* Tue Oct  4 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 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
+
+* Thu Apr 21 2011 Praveen K Paladugu <praveen_paladugu@dell.com> - 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 <Matt_Domsch@dell.com> - 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 <rel-eng@lists.fedoraproject.org> - 0.3.6-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Tue Jan 25 2011 Matt Domsch <Matt_Domsch@dell.com> - 0.3.6-1
+- drop biosdevnameS, it's unused and fails to build on F15
+
+* Tue Jan 25 2011 Matt Domsch <Matt_Domsch@dell.com> - 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 <mdomsch@fedoraproject.org> - 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 <Matt_Domsch@dell.com> - 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 <Matt_Domsch@dell.com> - 0.3.2-1
+- fix for multi-port cards with bridges
+- removal of code for seriously obsolete systems
+
+* Sun Nov 28 2010 Matt Domsch <Matt_Domsch@dell.com> 0.3.1-1
+- remove all policies except 'physical' and 'all_ethN'
+- handle SR-IOV devices properly
+
+* Wed Nov 10 2010 Matt Domsch <Matt_Domsch@dell.com> 0.3.0-1
+- add --policy=loms, make it default
+- read index and labels from sysfs if available
+
+* Mon Jul 27 2009 Jordan Hargrave <Jordan_Hargrave@dell.com> 0.2.5-1
+- fix mmap error checking
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.4-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.4-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Tue May 06 2008 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-5
+- use policy=all_names to find breakage
+
+* Sun Feb 10 2008 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-4
+- rebuild for gcc43
+
+* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-3
+- fix manpage entry in files
+ 
+* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 0.2.4-2
+- rebuild with Requires: udev > 115-3.20070920git
+
+* Fri Sep 21 2007 Matt Domsch <Matt_Domsch@dell.com> 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 <Matt_Domsch@dell.com> 0.2.3-1
+- eliminate libbiosdevname.*, pre and post scripts
+
+* Fri Aug 24 2007 Matt Domsch <Matt_Domsch@dell.com> 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 <Matt_Domsch@dell.com> 0.2.1-1
+- initial release