--- open-iscsi-2.0-707/etc/initd/initd.suse	2007/11/15 13:42:43	1.37
+++ open-iscsi-2.0-707/etc/initd/initd.suse	2007/11/30 08:10:00
@@ -94,6 +94,38 @@
     done
 }
 
+iscsi_discover_all_targets()
+{
+	# Strip off any existing ID information
+	RAW_NODE_LIST=`iscsiadm -m node | sed -nre 's/^(\[[0-9a-f]*\] )?(.*)$/\2/p'`
+	# Obtain IPv4 list
+	IPV4_NODE_LIST=`echo "$RAW_NODE_LIST" | sed -nre 's/^([0-9]{1,3}(\.[0-9]{1,3}){3}):[^: ]* (.*)$/\1 \3/p'`
+	# Now obtain IPv6 list
+	IPV6_NODE_LIST=`echo "$RAW_NODE_LIST" | sed -nre 's/^([0-9a-f]{1,4}(:[0-9a-f]{0,4}){6}:[0-9a-f]{1,4}):[^: ]* (.*)$/\1 \3/p'`
+
+	DISC_TARGETS=""
+	while read NODE_ADDR NODE_NAME; do
+		[ -z "$NODE_ADDR" -a -z "$NODE_NAME" ] && continue
+		NODE_ATTRS=`iscsiadm -m node -p "$NODE_ADDR" -T "$NODE_NAME"`
+		NODE_STATUS=`echo "$NODE_ATTRS" | sed -nre 's/^.*node\.conn\[0\]\.startup = ([a-z]*).*$/\1/p'`
+
+		if [ "$NODE_STATUS" == 'automatic' ]; then
+			DISC_TARGETS=`echo "$DISC_TARGETS" | sed -re '/'"$NODE_ADDR"'/!{s/(.*)/\1 '"$NODE_ADDR"'/}'`
+		fi
+	done < <(echo "$IPV4_NODE_LIST"; echo "$IPV6_NODE_LIST")
+
+	for TARGET_ADDR in $DISC_TARGETS; do
+		echo -n "Attempting discovery on target at ${TARGET_ADDR}: "
+		iscsiadm -m discovery -t st -p "$TARGET_ADDR" > /dev/null 2>&1
+		if [ "$?" -ne 0 ]; then
+			rc_failed 1
+			rc_status -v
+			return 1
+		fi
+		rc_status -v
+	done
+}
+
 case "$1" in
     start)
 	[ ! -d /var/lib/iscsi ] && mkdir -p /var/lib/iscsi
@@ -108,6 +140,10 @@
 	    rc_status -v
 	fi
 	if [ "$RETVAL" == "0" ]; then
+	    iscsi_discover_all_targets
+	    RETVAL=$?
+	fi
+	if [ "$RETVAL" == "0" ]; then
 	    iscsi_login_all_nodes
 	fi
 	;;
