]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
95iscsi: Fixup bnx2i offload booting
authorHannes Reinecke <hare@suse.de>
Thu, 25 Feb 2016 12:58:11 +0000 (20:58 +0800)
committerHarald Hoyer <harald@redhat.com>
Wed, 18 May 2016 12:44:16 +0000 (14:44 +0200)
bnx2i is using a separate iSCSI offload engine with a separate
MAC address. As a result, the iBFT information is displaying
a MAC address which does not relate to any MAC address from
the network interfaces.
In addition, the iSCSI offload engine works independently on
the NIC, so we do not need to enable the NIC for iSCSI offload
to work.
This patch modifies the automatic iBFT detection to not set
the 'ip=ibft' flag when bnx2i offload is detected.

References: bnc#855747

Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Thomas Renninger <trenn@suse.de>
modules.d/95iscsi/module-setup.sh

index 422bea725e993d611d8b6d8b9811ef2b6cedf6f3..181da3c78615be089e6623c4b21a07f67a07de4f 100755 (executable)
@@ -29,14 +29,38 @@ check() {
     return 0
 }
 
+get_ibft_mod() {
+    local ibft_mac=$1
+    # Return the iSCSI offload module for a given MAC address
+    iscsiadm -m iface | while read iface_name iface_desc ; do
+        IFS=$','
+        set -- $iface_desc
+        if [ "$ibft_mac" = "$2" ] ; then
+            echo $1
+            return 0
+        fi
+        unset IFS
+    done
+}
+
 install_ibft() {
     # When iBFT / iscsi_boot is detected:
     # - Use 'ip=ibft' to set up iBFT network interface
+    #   Note: bnx2i is using a different MAC address of iSCSI offloading
+    #         so the 'ip=ibft' parameter must not be set
     # - specify firmware booting cmdline parameter
 
     for d in /sys/firmware/* ; do
+        if [ -d ${d}/ethernet0 ] ; then
+            read ibft_mac < ${d}/ethernet0/mac
+            ibft_mod=$(get_ibft_mod $ibft_mac)
+        fi
+        if [ -z "$ibft_mod" ] && [ -d ${d}/ethernet1 ] ; then
+            read ibft_mac < ${d}/ethernet1/mac
+            ibft_mod=$(get_ibft_mod $ibft_mac)
+        fi
         if [ -d ${d}/initiator ] ; then
-            if [ ${d##*/} = "ibft" ] ; then
+            if [ ${d##*/} = "ibft" ] && [ "$ibft_mod" != "bnx2i" ] ; then
                 echo -n "ip=ibft "
             fi
             echo -n "rd.iscsi.firmware=1"