]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fcoe: add EDD parsing
authorHarald Hoyer <harald@redhat.com>
Mon, 7 Mar 2011 12:27:42 +0000 (13:27 +0100)
committerHarald Hoyer <harald@redhat.com>
Mon, 7 Mar 2011 12:37:21 +0000 (13:37 +0100)
[backport of 70dfe537]

dracut.kernel.7.xml
modules.d/95fcoe/module-setup.sh
modules.d/95fcoe/parse-fcoe.sh

index 32e73cf040a55288a600143fc04a248feec97d56..2b0d09c820fc3341f105e2ba13251aaa0bd5fbb7 100644 (file)
@@ -577,10 +577,10 @@ netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target1  </programlisting></par
       <title>FCoE</title>
       <variablelist>
         <varlistentry>
-          <term><envar>netroot=</envar><constant>fcoe</constant>:<replaceable>&lt;interface|MAC&gt;</replaceable>:<replaceable>{dcb|nodcb}</replaceable></term>
+          <term><envar>fcoe=</envar><replaceable>&lt;edd|interface|MAC&gt;</replaceable>:<replaceable>{dcb|nodcb}</replaceable></term>
           <listitem>
-            <para>Try to connect to a FCoE SAN through the NIC specified by <replaceable>&lt;interface&gt;</replaceable> or <replaceable>&lt;MAC&gt;</replaceable>,
-for the second argument, currently only nodcb is supported. <remark>Note: letters in the MAC-address must be lowercase!</remark></para>
+            <para>Try to connect to a FCoE SAN through the NIC specified by <replaceable>&lt;interface&gt;</replaceable> or <replaceable>&lt;MAC&gt;</replaceable> or EDD settings.
+For the second argument, currently only nodcb is supported. This parameter can be specified multiple times. <remark>Note: letters in the MAC-address must be lowercase!</remark></para>
           </listitem>
         </varlistentry>
       </variablelist>
index d5500bbfe1ec23c65fb0fafe60acdc6e27c60eb7..f07a9aefcf0c218016e5ef0157dd83efb61643de 100755 (executable)
@@ -17,7 +17,7 @@ depends() {
 }
 
 installkernel() {
-    instmods fcoe 8021q
+    instmods fcoe 8021q edd
 }
 
 install() {
@@ -29,6 +29,7 @@ install() {
     mkdir -p "$initdir/var/lib/lldpad"
 
     inst "$moddir/fcoe-up" "/sbin/fcoe-up"
+    inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh"
     inst_hook pre-udev 60 "$moddir/fcoe-genrules.sh"
     inst_hook cmdline 99 "$moddir/parse-fcoe.sh"
 }
index 492cca00ba94cd5d31e39004ab8ec6d46b4bb0c4..4576d68ac883667fdffb3d208b1ad50a7110138e 100755 (executable)
@@ -20,6 +20,9 @@
 # If it's not set we don't continue
 [ -z "$fcoe" ] && return
 
+# FCoE actually supported?
+[ -e /sys/module/fcoe/parameters/create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
+
 parse_fcoe_opts() {
     local IFS=:
     set $fcoe
@@ -28,22 +31,48 @@ parse_fcoe_opts() {
         2)
             fcoe_interface=$1
             fcoe_dcb=$2
+            return 0
             ;;
         7)
             fcoe_mac=$1:$2:$3:$4:$5:$6
             fcoe_dcb=$7
+            return 0
             ;;
         *)
-            die "Invalid arguments for fcoe="
+            warn "Invalid arguments for fcoe=$fcoe"
+            return 1
             ;;
     esac
 }
 
 parse_fcoe_opts
 
-if [ "$fcoe_dcb" != "nodcb" -a "$fcoe_dcb" != "dcb" ] ; then
-    die "Invalid FCoE DCB option: $fcoe_dcb"
-fi
-
-# FCoE actually supported?
-[ -e /sys/module/fcoe/parameters/create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
+if [ "$fcoe_interface" = "edd" ]; then
+    if [ "$fcoe_dcb" != "nodcb" -a "$fcoe_dcb" != "dcb" ] ; then
+        warn "Invalid FCoE DCB option: $fcoe_dcb"
+    fi
+    [ -d /sys/firmware/edd ] || modprobe edd
+    # parse edd interfaces
+    for disk in /sys/firmware/edd/int13_*; do
+        [ -d $disk ] || continue
+        for nic in ${disk}/pci_dev/net/*; do
+            [ -d $nic ] || continue
+            if [ -e ${nic}/address ]; then
+                unset fcoe_mac
+                unset fcoe_interface
+                fcoe_mac=$(cat ${nic}/address)
+                [ -n "$fcoe_mac" ] && source /sbin/fcoe-genrules.sh
+            fi
+        done
+    done
+else
+    for fcoe in $(getargs fcoe=); do
+        unset fcoe_mac
+        unset fcoe_interface
+        parse_fcoe_opts
+        if [ "$fcoe_dcb" != "nodcb" -a "$fcoe_dcb" != "dcb" ] ; then
+            warn "Invalid FCoE DCB option: $fcoe_dcb"
+        fi
+        source /sbin/fcoe-genrules.sh
+    done
+fi
\ No newline at end of file