c2d5d21256
minor context fixes after rebase of out-of-tree patches iscsiuio is merged upstream, remove old source archive and patches spec cleanups to fix rpmlint issues
113 lines
3.5 KiB
Diff
113 lines
3.5 KiB
Diff
From d86ca42685620ad3263da098923308a3a00ac55a Mon Sep 17 00:00:00 2001
|
|
From: Eddie Wai <eddie.wai@broadcom.com>
|
|
Date: Fri, 12 Apr 2013 10:41:16 -0700
|
|
Subject: ISCSID: Added the extraction of the session boot info
|
|
|
|
This patch does the work to extract the corresponding
|
|
<boot_root>->ethernetN net params as specified from the kernel
|
|
session boot_nic sysfs entry based on the transport param
|
|
use_boot_info.
|
|
|
|
This is only populated for iscsi_tcp and bnx2i.
|
|
|
|
Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
|
|
---
|
|
usr/iscsi_sysfs.c | 40 ++++++++++++++++++++++++++++++++++++++++
|
|
usr/transport.c | 2 ++
|
|
usr/transport.h | 1 +
|
|
3 files changed, 43 insertions(+)
|
|
|
|
diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c
|
|
index aed10a3..79ec79d 100644
|
|
--- a/usr/iscsi_sysfs.c
|
|
+++ b/usr/iscsi_sysfs.c
|
|
@@ -674,6 +674,43 @@ free_fnode:
|
|
return rc;
|
|
}
|
|
|
|
+static int iscsi_sysfs_read_boot(struct iface_rec *iface, char *session)
|
|
+{
|
|
+ char boot_root[BOOT_NAME_MAXLEN], boot_nic[BOOT_NAME_MAXLEN];
|
|
+ char boot_name[BOOT_NAME_MAXLEN], boot_content[BOOT_NAME_MAXLEN];
|
|
+
|
|
+ /* Extract boot info */
|
|
+ strlcpy(boot_name, "boot_target", sizeof(boot_name));
|
|
+ if (sysfs_get_str(session, ISCSI_SESSION_SUBSYS, boot_name,
|
|
+ boot_content, BOOT_NAME_MAXLEN))
|
|
+ return -1;
|
|
+ strlcpy(boot_name, "boot_nic", sizeof(boot_name));
|
|
+ if (sysfs_get_str(session, ISCSI_SESSION_SUBSYS, boot_name, boot_nic,
|
|
+ BOOT_NAME_MAXLEN))
|
|
+ return -1;
|
|
+ strlcpy(boot_name, "boot_root", sizeof(boot_name));
|
|
+ if (sysfs_get_str(session, ISCSI_SESSION_SUBSYS, boot_name, boot_root,
|
|
+ BOOT_NAME_MAXLEN))
|
|
+ return -1;
|
|
+
|
|
+ /* If all boot_root/boot_target/boot_nic exist, then extract the
|
|
+ info from the boot nic */
|
|
+ if (sysfs_get_str(boot_nic, boot_root, "vlan", boot_content,
|
|
+ BOOT_NAME_MAXLEN))
|
|
+ log_debug(5, "could not read %s/%s/vlan", boot_root, boot_nic);
|
|
+ else
|
|
+ iface->vlan_id = atoi(boot_content);
|
|
+
|
|
+ if (sysfs_get_str(boot_nic, boot_root, "subnet-mask",
|
|
+ iface->subnet_mask, NI_MAXHOST))
|
|
+ log_debug(5, "could not read %s/%s/subnet", boot_root,
|
|
+ boot_nic);
|
|
+
|
|
+ log_debug(5, "sysfs read boot returns %s/%s/ vlan = %d subnet = %s",
|
|
+ boot_root, boot_nic, iface->vlan_id, iface->subnet_mask);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
/*
|
|
* Read in iface settings based on host and session values. If
|
|
* session is not passed in, then the ifacename will not be set. And
|
|
@@ -802,6 +839,9 @@ static int iscsi_sysfs_read_iface(struct iface_rec *iface, int host_no,
|
|
}
|
|
}
|
|
|
|
+ if (t->template->use_boot_info)
|
|
+ iscsi_sysfs_read_boot(iface, session);
|
|
+
|
|
if (!iface_kern_id)
|
|
goto done;
|
|
|
|
diff --git a/usr/transport.c b/usr/transport.c
|
|
index 52b7674..4d030a8 100644
|
|
--- a/usr/transport.c
|
|
+++ b/usr/transport.c
|
|
@@ -42,6 +42,7 @@
|
|
|
|
struct iscsi_transport_template iscsi_tcp = {
|
|
.name = "tcp",
|
|
+ .use_boot_info = 1,
|
|
.ep_connect = iscsi_io_tcp_connect,
|
|
.ep_poll = iscsi_io_tcp_poll,
|
|
.ep_disconnect = iscsi_io_tcp_disconnect,
|
|
@@ -77,6 +78,7 @@ struct iscsi_transport_template cxgb4i = {
|
|
struct iscsi_transport_template bnx2i = {
|
|
.name = "bnx2i",
|
|
.set_host_ip = 1,
|
|
+ .use_boot_info = 1,
|
|
.ep_connect = ktransport_ep_connect,
|
|
.ep_poll = ktransport_ep_poll,
|
|
.ep_disconnect = ktransport_ep_disconnect,
|
|
diff --git a/usr/transport.h b/usr/transport.h
|
|
index 5dcf872..388e4b1 100644
|
|
--- a/usr/transport.h
|
|
+++ b/usr/transport.h
|
|
@@ -31,6 +31,7 @@ struct iscsi_transport_template {
|
|
* the host's ip address.
|
|
*/
|
|
uint8_t set_host_ip;
|
|
+ uint8_t use_boot_info;
|
|
int (*ep_connect) (struct iscsi_conn *conn, int non_blocking);
|
|
int (*ep_poll) (struct iscsi_conn *conn, int timeout_ms);
|
|
void (*ep_disconnect) (struct iscsi_conn *conn);
|
|
--
|
|
1.8.1.4
|
|
|