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