summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2014-07-01 11:14:57 +0200
committerMike Christie <michaelc@cs.wisc.edu>2014-09-04 18:15:21 -0500
commit78e24f50ab754f35f4aa208ade7c9fd794d82036 (patch)
treeddbb9045d87af699f0705e5610d99990c2f45ac9
parent21a7923de5b2f968643c2ffd96e5c9fb1b201fa3 (diff)
downloadopen-iscsi-78e24f50ab754f35f4aa208ade7c9fd794d82036.tar.gz
Parse 'origin' value from iBFT
iBFT has an 'origin' field which indicates the origin of the network address. If that is set to '3' it indicates that DHCP has been used; there is no need to evaluate the 'dhcp' field here. In fact. latest iPXE sets the 'origin' field, but not the 'dhcp' field. Signed-off-by: Hannes Reinecke <hare@suse.de>
-rw-r--r--include/fw_context.h1
-rw-r--r--utils/fwparam_ibft/fw_entry.c8
-rw-r--r--utils/fwparam_ibft/fwparam_ibft_sysfs.c2
-rw-r--r--utils/fwparam_ibft/fwparam_sysfs.c2
4 files changed, 10 insertions, 3 deletions
diff --git a/include/fw_context.h b/include/fw_context.h
index 6563d68..295b54d 100644
--- a/include/fw_context.h
+++ b/include/fw_context.h
@@ -48,6 +48,7 @@ struct boot_context {
char initiatorname[TARGET_NAME_MAXLEN + 1];
/* network settings */
+ char origin[2];
char dhcp[NI_MAXHOST];
char iface[IF_NAMESIZE];
char mac[18];
diff --git a/utils/fwparam_ibft/fw_entry.c b/utils/fwparam_ibft/fw_entry.c
index b6f05c1..295e905 100644
--- a/utils/fwparam_ibft/fw_entry.c
+++ b/utils/fwparam_ibft/fw_entry.c
@@ -192,10 +192,12 @@ static void dump_network(struct boot_context *context)
if (strlen(context->mac))
printf("%s = %s\n", IFACE_HWADDR, context->mac);
/*
- * If this has a valid address then DHCP was used (broadcom sends
- * 0.0.0.0).
+ * If the 'origin' field is '3' then DHCP is used.
+ * Otherwise evaluate the 'dhcp' field, if this has a valid
+ * address then DHCP was used (broadcom sends 0.0.0.0).
*/
- if (strlen(context->dhcp) && strcmp(context->dhcp, "0.0.0.0"))
+ if ((strlen(context->origin) && !strcmp(context->origin, "3")) ||
+ (strlen(context->dhcp) && strcmp(context->dhcp, "0.0.0.0")))
printf("%s = DHCP\n", IFACE_BOOT_PROTO);
else
printf("%s = STATIC\n", IFACE_BOOT_PROTO);
diff --git a/utils/fwparam_ibft/fwparam_ibft_sysfs.c b/utils/fwparam_ibft/fwparam_ibft_sysfs.c
index 9185c85..2dc6f6d 100644
--- a/utils/fwparam_ibft/fwparam_ibft_sysfs.c
+++ b/utils/fwparam_ibft/fwparam_ibft_sysfs.c
@@ -201,6 +201,8 @@ static int fill_nic_context(char *id, struct boot_context *context)
sizeof(context->secondary_dns));
sysfs_get_str(id, IBFT_SUBSYS, "dhcp", context->dhcp,
sizeof(context->dhcp));
+ sysfs_get_str(id, IBFT_SUBSYS, "origin", context->origin,
+ sizeof(context->origin));
return 0;
}
diff --git a/utils/fwparam_ibft/fwparam_sysfs.c b/utils/fwparam_ibft/fwparam_sysfs.c
index 2f37b59..09dd9fd 100644
--- a/utils/fwparam_ibft/fwparam_sysfs.c
+++ b/utils/fwparam_ibft/fwparam_sysfs.c
@@ -217,6 +217,8 @@ static int fill_nic_context(char *subsys, char *id,
sizeof(context->secondary_dns));
sysfs_get_str(id, subsys, "dhcp", context->dhcp,
sizeof(context->dhcp));
+ sysfs_get_str(id, subsys, "origin", context->origin,
+ sizeof(context->origin));
return 0;
}