2043c5a
diff -up open-iscsi-2.0-870.1/utils/fwparam_ibft/fwparam_ibft_sysfs.c~ open-iscsi-2.0-870.1/utils/fwparam_ibft/fwparam_ibft_sysfs.c
2043c5a
--- open-iscsi-2.0-870.1/utils/fwparam_ibft/fwparam_ibft_sysfs.c~	2009-01-28 22:09:21.000000000 +0100
2043c5a
+++ open-iscsi-2.0-870.1/utils/fwparam_ibft/fwparam_ibft_sysfs.c	2009-01-28 22:10:29.000000000 +0100
2043c5a
@@ -186,6 +186,40 @@ static int get_iface_from_device(const c
2043c5a
 		break;
2043c5a
 	}
2043c5a
 
2043c5a
+	closedir(dirfd);
2043c5a
+
2043c5a
+	if (rc != ENODEV)
2043c5a
+		return rc;
2043c5a
+
2043c5a
+	/* If not found try again with newer kernel networkdev sysfs layout */
2043c5a
+	strncat(dev_dir, "/net", FILENAMESZ);
2043c5a
+
2043c5a
+	if (!file_exist(dev_dir))
2043c5a
+		return rc;
2043c5a
+
2043c5a
+	dirfd = opendir(dev_dir);
2043c5a
+	if (!dirfd)
2043c5a
+		return errno;
2043c5a
+
2043c5a
+	while ((dent = readdir(dirfd))) {
2043c5a
+		if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, ".."))
2043c5a
+			continue;
2043c5a
+
2043c5a
+		/* Take the first "regular" directory entry */
2043c5a
+		if (strlen(dent->d_name) > (sizeof(context->iface) - 1)) {
2043c5a
+			rc = EINVAL;
2043c5a
+			printf("Net device %s too bug for iface buffer.\n",
2043c5a
+			       dent->d_name);
2043c5a
+			break;
2043c5a
+		}
2043c5a
+
2043c5a
+		strcpy(context->iface, dent->d_name);
2043c5a
+		rc = 0;
2043c5a
+		break;
2043c5a
+	}
2043c5a
+
2043c5a
+	closedir(dirfd);
2043c5a
+
2043c5a
 	return rc;
2043c5a
 }
2043c5a