aboutsummaryrefslogtreecommitdiff
path: root/sys/cam
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2014-07-05 21:18:33 +0000
committerAlexander Motin <mav@FreeBSD.org>2014-07-05 21:18:33 +0000
commit6d81c129dd2062b6ca47d4f9682030affb5020ca (patch)
tree8dd744dc9abb3eaabb01ff17f89d2e955135dc9c /sys/cam
parenta48d677f268433a839407df83dea02c34f221f05 (diff)
downloadsrc-6d81c129dd2062b6ca47d4f9682030affb5020ca.tar.gz
src-6d81c129dd2062b6ca47d4f9682030affb5020ca.zip
Pass through iSCSI session ISID from LOGIN request to the CTL frontend.
ISID is an important part of initiator transport ID for iSCSI. It is not used now, but should be to properly implement persistent reservation.
Notes
Notes: svn path=/head/; revision=268302
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.c7
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.h2
-rw-r--r--sys/cam/ctl/ctl_ioctl.h1
3 files changed, 10 insertions, 0 deletions
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.c b/sys/cam/ctl/ctl_frontend_iscsi.c
index da2ba3f927eb..31f914b12107 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.c
+++ b/sys/cam/ctl/ctl_frontend_iscsi.c
@@ -1507,6 +1507,13 @@ cfiscsi_ioctl_handoff(struct ctl_iscsi *ci)
cihp->initiator_addr, sizeof(cs->cs_initiator_addr));
strlcpy(cs->cs_initiator_alias,
cihp->initiator_alias, sizeof(cs->cs_initiator_alias));
+ memcpy(cs->cs_initiator_isid,
+ cihp->initiator_isid, sizeof(cs->cs_initiator_isid));
+ snprintf(cs->cs_initiator_id, sizeof(cs->cs_initiator_id),
+ "%s,i,0x%02x%02x%02x%02x%02x%02x", cs->cs_initiator_name,
+ cihp->initiator_isid[0], cihp->initiator_isid[1],
+ cihp->initiator_isid[2], cihp->initiator_isid[3],
+ cihp->initiator_isid[4], cihp->initiator_isid[5]);
#ifdef ICL_KERNEL_PROXY
if (cihp->socket > 0) {
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.h b/sys/cam/ctl/ctl_frontend_iscsi.h
index 887576ad12e7..886e8acd361d 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.h
+++ b/sys/cam/ctl/ctl_frontend_iscsi.h
@@ -86,6 +86,8 @@ struct cfiscsi_session {
char cs_initiator_name[CTL_ISCSI_NAME_LEN];
char cs_initiator_addr[CTL_ISCSI_ADDR_LEN];
char cs_initiator_alias[CTL_ISCSI_ALIAS_LEN];
+ char cs_initiator_isid[6];
+ char cs_initiator_id[CTL_ISCSI_NAME_LEN + 5 + 6 + 1];
unsigned int cs_id;
int cs_ctl_initid;
#ifdef ICL_KERNEL_PROXY
diff --git a/sys/cam/ctl/ctl_ioctl.h b/sys/cam/ctl/ctl_ioctl.h
index 06ff93682b6c..94a7cc8f3985 100644
--- a/sys/cam/ctl/ctl_ioctl.h
+++ b/sys/cam/ctl/ctl_ioctl.h
@@ -681,6 +681,7 @@ struct ctl_iscsi_handoff_params {
char initiator_name[CTL_ISCSI_NAME_LEN];
char initiator_addr[CTL_ISCSI_ADDR_LEN];
char initiator_alias[CTL_ISCSI_ALIAS_LEN];
+ uint8_t initiator_isid[6];
char target_name[CTL_ISCSI_NAME_LEN];
int socket;
int portal_group_tag;