changeset 9721:4f7e194c7c37

6809997 COMSTAR iscsi target DTrace Provider needed
author Priya Krishnan <Priya.Krishnan@Sun.COM>
date Tue, 26 May 2009 10:40:43 -0400
parents 9a7c48f95b4d
children e3866bad4e96
files usr/src/cmd/iscsi/iscsitgtd/iscsi.d usr/src/lib/libdtrace/Makefile.com usr/src/lib/libdtrace/common/iscsit.d usr/src/lib/libdtrace/common/scsi.d usr/src/pkgdefs/SUNWdtrc/prototype_com usr/src/uts/common/dtrace/sdt_subr.c usr/src/uts/common/io/comstar/port/iscsit/iscsit.c usr/src/uts/common/io/comstar/port/iscsit/iscsit_login.c usr/src/uts/common/io/ib/clients/iser/iser_cq.c usr/src/uts/common/io/ib/clients/iser/iser_xfer.c usr/src/uts/common/io/idm/idm.c usr/src/uts/common/io/idm/idm_impl.c usr/src/uts/common/io/idm/idm_so.c usr/src/uts/common/sys/idm/idm.h usr/src/uts/common/sys/idm/idm_impl.h usr/src/uts/common/sys/sdt.h
diffstat 16 files changed, 888 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/iscsi/iscsitgtd/iscsi.d	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/cmd/iscsi/iscsitgtd/iscsi.d	Tue May 26 10:40:43 2009 -0400
@@ -20,29 +20,31 @@
  */
 
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #pragma D depends_on library net.d
 #pragma D depends_on module genunix
 
 typedef struct iscsiinfo {
-	string ii_target;		/* target iqn */
-	string ii_initiator;		/* initiator iqn */
-	uint64_t ii_lun;		/* target logical unit number */
+	string ii_target;	/* target iqn */
+	string ii_initiator;	/* initiator iqn */
+	string ii_isid;         /* initiator session identifier */
+	string ii_tsih;         /* target session identifying handle */
+	string ii_transport;    /* transport type ("iser-ib", "sockets") */
 
-	uint32_t ii_itt;		/* initiator task tag */
-	uint32_t ii_ttt;		/* target transfer tag */
+	uint64_t ii_lun;	/* target logical unit number */
 
-	uint32_t ii_cmdsn;		/* command sequence number */
-	uint32_t ii_statsn;		/* status sequence number */
-	uint32_t ii_datasn;		/* data sequence number */
+	uint32_t ii_itt;	/* initiator task tag */
+	uint32_t ii_ttt;	/* target transfer tag */
 
-	uint32_t ii_datalen;		/* length of data payload */
-	uint32_t ii_flags;		/* probe-specific flags */
+	uint32_t ii_cmdsn;	/* command sequence number */
+	uint32_t ii_statsn;	/* status sequence number */
+	uint32_t ii_datasn;	/* data sequence number */
+
+	uint32_t ii_datalen;	/* length of data payload */
+	uint32_t ii_flags;	/* probe-specific flags */
 } iscsiinfo_t;
 
 typedef struct uiscsiproto uiscsiproto_t;
--- a/usr/src/lib/libdtrace/Makefile.com	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/lib/libdtrace/Makefile.com	Tue May 26 10:40:43 2009 -0400
@@ -77,6 +77,7 @@
 	fc.d \
 	io.d \
 	ip.d \
+	iscsit.d \
 	net.d \
 	nfs.d \
 	procfs.d \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/lib/libdtrace/common/iscsit.d	Tue May 26 10:40:43 2009 -0400
@@ -0,0 +1,456 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma D depends_on library ip.d
+#pragma D depends_on library net.d /* conninfo_t */
+#pragma D depends_on library scsi.d /* scsicmd_t */
+#pragma D depends_on module genunix
+#pragma D depends_on module iscsit
+#pragma D depends_on module idm
+#pragma D depends_on module iser
+
+
+#pragma D binding "1.5" translator
+translator conninfo_t < idm_conn_t *P > {
+	ci_local = (P->ic_laddr.ss_family == AF_INET) ?
+	    inet_ntoa((ipaddr_t *)
+	    &((struct sockaddr_in *)&P->ic_laddr)->sin_addr) :
+	    inet_ntoa6(&((struct sockaddr_in6 *)&P->ic_laddr)->sin6_addr);
+
+	ci_remote = (P->ic_raddr.ss_family == AF_INET) ?
+	    inet_ntoa((ipaddr_t *)
+	    &((struct sockaddr_in *)&P->ic_raddr)->sin_addr) :
+	    inet_ntoa6(&((struct sockaddr_in6 *)&P->ic_raddr)->sin6_addr);
+
+	ci_protocol = (P->ic_laddr.ss_family == AF_INET) ? "ipv4" : "ipv6";
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_async_evt_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = 0;
+	ii_ttt = 0;
+	ii_cmdsn = 0;
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_login_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_login_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_logout_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = 0;
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_logout_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = 0;
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = 0;
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_rtt_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = ntohl(P->rttsn);
+	ii_datalen = 0;
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_data_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+	    ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = ntohl(P->datasn);
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_data_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = 0;
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = ntohl(P->datasn);
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_nop_in_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_nop_out_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_scsi_cmd_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_scsi_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = 0xffffffff;
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = ntohl(P->expdatasn);
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_scsi_task_mgt_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = (((uint64_t)P->lun[0] << (64 - 0*8 - 8)) +
+            ((uint64_t)P->lun[1] << (64 - 1*8 - 8)) +
+            ((uint64_t)P->lun[2] << (64 - 2*8 - 8)) +
+            ((uint64_t)P->lun[3] << (64 - 3*8 - 8)) +
+            ((uint64_t)P->lun[4] << (64 - 4*8 - 8)) +
+            ((uint64_t)P->lun[5] << (64 - 5*8 - 8)) +
+            ((uint64_t)P->lun[6] << (64 - 6*8 - 8)) +
+            ((uint64_t)P->lun[7] << (64 - 7*8 - 8)));
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->rtt); 
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = 0;
+	ii_flags = 0;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_scsi_task_mgt_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->rtt);
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_text_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->cmdsn);
+	ii_statsn = ntohl(P->expstatsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < iscsi_text_rsp_hdr_t *P > {
+	ii_initiator = ((idm_conn_t *)arg0)->ic_initiator_name;
+	ii_target = ((idm_conn_t *)arg0)->ic_target_name;
+	ii_isid = ((idm_conn_t *)arg0)->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (((idm_conn_t *)arg0)->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0; /* NA */
+	ii_itt = ntohl(P->itt);
+	ii_ttt = ntohl(P->ttt);
+	ii_cmdsn = ntohl(P->expcmdsn);
+	ii_statsn = ntohl(P->statsn);
+	ii_datasn = 0;
+	ii_datalen = P->dlength[0] << 16 | P->dlength[1] << 8 | P->dlength[2];
+	ii_flags = P->flags;
+};
+
+#pragma D binding "1.5" translator
+translator iscsiinfo_t < idm_conn_t *P > {
+	ii_initiator = P->ic_initiator_name;
+	ii_target = P->ic_target_name;
+	ii_isid = P->ic_isid;
+	ii_tsih = ((idm_conn_t *)arg0)->ic_tsih;
+	ii_transport = (P->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_ISER) ? "iser-ib" :
+	    (P->ic_transport_type ==
+	    IDM_TRANSPORT_TYPE_SOCKETS) ? "sockets" : "Unknown";
+	ii_lun = 0;
+	ii_itt = 0;
+	ii_ttt = 0;
+	ii_cmdsn = 0;
+	ii_statsn = 0;
+	ii_datasn = 0;
+	ii_datalen = 0;
+	ii_flags = 0;
+};
+
+#pragma D binding "1.5" translator
+translator xferinfo_t < uintptr_t P > {
+	xfer_laddr = (arg1 == NULL) ? 0xffffffff : (uintptr_t)arg1;
+	xfer_loffset = arg2;
+	xfer_lkey = 0; /* not used */
+	xfer_len = arg6;
+	xfer_raddr = arg3;
+	xfer_roffset = arg4;
+	xfer_rkey = arg5;
+	xfer_type = arg7;
+};
+
+inline int IDM_TRANSPORT_TYPE_ISER = 0;
+#pragma D binding "1.5" IDM_TRANSPORT_TYPE_ISER
+inline int IDM_TRANSPORT_TYPE_SOCKETS = 1;
+#pragma D binding "1.5" IDM_TRANSPORT_TYPE_SOCKETS
+
--- a/usr/src/lib/libdtrace/common/scsi.d	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/lib/libdtrace/common/scsi.d	Tue May 26 10:40:43 2009 -0400
@@ -44,3 +44,21 @@
 	ic_len = T->task_cdb_length;
 	ic_cdb = T->task_cdb;
 };
+
+/*
+ * The xferinfo_t structure can be used by providers to
+ * represent transfer information related to a single
+ * buffer. The members describing the remote memory
+ * are only valid if the transport layer is an RDMA-
+ * capable transport like Infiniband
+ */
+typedef struct xferinfo {
+	uintptr_t xfer_laddr;   /* local buffer address */
+	uint32_t xfer_loffset;
+	uint32_t xfer_lkey;     /* access control to local memory */
+	uintptr_t xfer_raddr;   /* remote virtual address */
+	uint32_t xfer_roffset;  /* offset from the remote address */
+	uint32_t xfer_rkey;     /* access control to remote virtual address */
+	uint32_t xfer_len;      /* transfer length */
+	uint32_t xfer_type;     /* Read (0) or Write (1) */
+} xferinfo_t;
--- a/usr/src/pkgdefs/SUNWdtrc/prototype_com	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/pkgdefs/SUNWdtrc/prototype_com	Tue May 26 10:40:43 2009 -0400
@@ -56,6 +56,7 @@
 f none usr/lib/dtrace/regs.d 644 root bin
 f none usr/lib/dtrace/sched.d 644 root bin
 f none usr/lib/dtrace/scsi.d 644 root bin
+f none usr/lib/dtrace/iscsit.d 644 root bin
 f none usr/lib/dtrace/signal.d 644 root bin
 f none usr/lib/dtrace/sysevent.d 644 root bin
 f none usr/lib/dtrace/unistd.d 644 root bin
--- a/usr/src/uts/common/dtrace/sdt_subr.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/dtrace/sdt_subr.c	Tue May 26 10:40:43 2009 -0400
@@ -89,6 +89,14 @@
 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_PLATFORM },
 };
 
+static dtrace_pattr_t iscsi_attr = {
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+};
+
 sdt_provider_t sdt_providers[] = {
 	{ "vtrace", "__vtrace_", &vtrace_attr, 0 },
 	{ "sysinfo", "__cpu_sysinfo_", &info_attr, 0 },
@@ -100,6 +108,7 @@
 	{ "ip", "__ip_", &stab_attr, 0 },
 	{ "mib", "__mib_", &stab_attr, 0 },
 	{ "fsinfo", "__fsinfo_", &fsinfo_attr, 0 },
+	{ "iscsi", "__iscsi_", &iscsi_attr, 0 },
 	{ "nfsv3", "__nfsv3_", &stab_attr, 0 },
 	{ "nfsv4", "__nfsv4_", &stab_attr, 0 },
 	{ "xpv", "__xpv_", &xpv_attr, 0 },
@@ -177,6 +186,73 @@
 	{ "fsinfo", NULL, 0, 0, "vnode_t *", "fileinfo_t *" },
 	{ "fsinfo", NULL, 1, 1, "int", "int" },
 
+	{ "iscsi", "async-send", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "async-send", 1, 1, "iscsi_async_evt_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "login-command", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "login-command", 1, 1, "iscsi_login_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "login-response", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "login-response", 1, 1, "iscsi_login_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "logout-command", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "logout-command", 1, 1, "iscsi_logout_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "logout-response", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "logout-response", 1, 1, "iscsi_logout_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "data-request", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "data-request", 1, 1, "iscsi_rtt_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "data-send", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "data-send", 1, 1, "iscsi_data_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "data-receive", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "data-receive", 1, 1, "iscsi_data_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "nop-send", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "nop-send", 1, 1, "iscsi_nop_in_hdr_t *", "iscsiinfo_t *" },
+	{ "iscsi", "nop-receive", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "nop-receive", 1, 1, "iscsi_nop_out_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "scsi-command", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "scsi-command", 1, 1, "iscsi_scsi_cmd_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "scsi-command", 2, 2, "scsi_task_t *", "scsicmd_t *" },
+	{ "iscsi", "scsi-response", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "scsi-response", 1, 1, "iscsi_scsi_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "task-command", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "task-command", 1, 1, "iscsi_scsi_task_mgt_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "task-response", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "task-response", 1, 1, "iscsi_scsi_task_mgt_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "text-command", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "text-command", 1, 1, "iscsi_text_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "text-response", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "text-response", 1, 1, "iscsi_text_rsp_hdr_t *",
+	    "iscsiinfo_t *" },
+	{ "iscsi", "xfer-start", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "xfer-start", 1, 0, "idm_conn_t *", "iscsiinfo_t *" },
+	{ "iscsi", "xfer-start", 2, 1, "uintptr_t", "xferinfo_t *" },
+	{ "iscsi", "xfer-start", 3, 2, "uint32_t"},
+	{ "iscsi", "xfer-start", 4, 3, "uintptr_t"},
+	{ "iscsi", "xfer-start", 5, 4, "uint32_t"},
+	{ "iscsi", "xfer-start", 6, 5, "uint32_t"},
+	{ "iscsi", "xfer-start", 7, 6, "uint32_t"},
+	{ "iscsi", "xfer-start", 8, 7, "int"},
+	{ "iscsi", "xfer-done", 0, 0, "idm_conn_t *", "conninfo_t *" },
+	{ "iscsi", "xfer-done", 1, 0, "idm_conn_t *", "iscsiinfo_t *" },
+	{ "iscsi", "xfer-done", 2, 1, "uintptr_t", "xferinfo_t *" },
+	{ "iscsi", "xfer-done", 3, 2, "uint32_t"},
+	{ "iscsi", "xfer-done", 4, 3, "uintptr_t"},
+	{ "iscsi", "xfer-done", 5, 4, "uint32_t"},
+	{ "iscsi", "xfer-done", 6, 5, "uint32_t"},
+	{ "iscsi", "xfer-done", 7, 6, "uint32_t"},
+	{ "iscsi", "xfer-done", 8, 7, "int"},
+
 	{ "nfsv3", "op-getattr-start", 0, 0, "struct svc_req *",
 	    "conninfo_t *" },
 	{ "nfsv3", "op-getattr-start", 1, 1, "nfsv3oparg_t *",
--- a/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c	Tue May 26 10:40:43 2009 -0400
@@ -1318,7 +1318,6 @@
 	 */
 	ASSERT(ibuf->ibuf_is_immed == B_FALSE);
 	if (dbuf->db_flags & DB_DIRECTION_TO_RPORT) {
-
 		/*
 		 * IDM will call iscsit_build_hdr so lock now to serialize
 		 * access to the SN values.  We need to lock here to enforce
@@ -1851,6 +1850,10 @@
 		bcopy(ahs_hdr->ahs_extscb, task->task_cdb + 16, addl_cdb_len);
 	}
 
+	DTRACE_ISCSI_3(scsi__command, idm_conn_t *, ic,
+	    iscsi_scsi_cmd_hdr_t *, (iscsi_scsi_cmd_hdr_t *)rx_pdu->isp_hdr,
+	    scsi_task_t *, task);
+
 	/*
 	 * Copy the transport header into the task handle from the PDU
 	 * handle. The transport header describes this task's remote tagged
@@ -1881,7 +1884,19 @@
 		    rx_pdu->isp_datalen;
 		ibuf->ibuf_stmf_buf->db_sglist[0].seg_addr = rx_pdu->isp_data;
 
+		DTRACE_ISCSI_8(xfer__start, idm_conn_t *, ic,
+		    uintptr_t, ibuf->ibuf_stmf_buf->db_sglist[0].seg_addr,
+		    uint32_t, ibuf->ibuf_stmf_buf->db_relative_offset,
+		    uint64_t, 0, uint32_t, 0, uint32_t, 0, /* no raddr */
+		    uint32_t, rx_pdu->isp_datalen, int, XFER_BUF_TX_TO_INI);
+
 		stmf_post_task(task, ibuf->ibuf_stmf_buf);
+
+		DTRACE_ISCSI_8(xfer__done, idm_conn_t *, ic,
+		    uintptr_t, ibuf->ibuf_stmf_buf->db_sglist[0].seg_addr,
+		    uint32_t, ibuf->ibuf_stmf_buf->db_relative_offset,
+		    uint64_t, 0, uint32_t, 0, uint32_t, 0, /* no raddr */
+		    uint32_t, rx_pdu->isp_datalen, int, XFER_BUF_TX_TO_INI);
 	} else {
 		stmf_post_task(task, NULL);
 		idm_pdu_complete(rx_pdu, IDM_STATUS_SUCCESS);
--- a/usr/src/uts/common/io/comstar/port/iscsit/iscsit_login.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/comstar/port/iscsit/iscsit_login.c	Tue May 26 10:40:43 2009 -0400
@@ -1092,6 +1092,7 @@
 		goto initial_params_done;
 	}
 	lsm->icl_initiator_name = string_val;
+	idm_conn_set_initiator_name(ict->ict_ic, lsm->icl_initiator_name);
 	if ((nvrc = nvlist_remove(lsm->icl_request_nvlist,
 	    "InitiatorName", DATA_TYPE_STRING)) != 0) {
 		goto initial_params_done;
@@ -1141,6 +1142,7 @@
 			goto initial_params_done;
 		}
 		lsm->icl_target_name = string_val;
+		idm_conn_set_target_name(ict->ict_ic, lsm->icl_target_name);
 		if ((nvrc = nvlist_remove(lsm->icl_request_nvlist,
 		    "TargetName", DATA_TYPE_STRING)) != 0) {
 			goto initial_params_done;
@@ -1152,6 +1154,10 @@
 		goto initial_params_done;
 	}
 
+	idm_conn_set_isid(ict->ict_ic, lsm->icl_isid);
+	(void) snprintf(ict->ict_ic->ic_tsih, ISCSI_MAX_TSIH_LEN + 1, "0x%04x",
+	    lsm->icl_tsih);
+
 	IDM_SM_LOG(CE_NOTE, "conn %p: initiator=%s", (void *)ict->ict_ic,
 	    (lsm->icl_initiator_name == NULL) ? "N/A" :
 	    lsm->icl_initiator_name);
--- a/usr/src/uts/common/io/ib/clients/iser/iser_cq.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/ib/clients/iser/iser_cq.c	Tue May 26 10:40:43 2009 -0400
@@ -87,6 +87,7 @@
 	ibt_status_t	status;
 	iser_conn_t	*iser_conn;
 	idm_status_t	idm_status;
+	iser_mr_t	*mr;
 
 	iser_conn = iser_chan->ic_conn;
 
@@ -155,6 +156,8 @@
 			if (wr->iw_buf != NULL) {
 				/* Invoke buffer callback */
 				idb = wr->iw_buf;
+				mr = ((iser_buf_t *)
+				    idb->idb_buf_private)->iser_mr;
 #ifdef DEBUG
 				bcopy(&wc[i],
 				    &((iser_buf_t *)idb->idb_buf_private)->
@@ -163,9 +166,25 @@
 				idt = idb->idb_task_binding;
 				mutex_enter(&idt->idt_mutex);
 				if (wr->iw_type == ISER_WR_RDMAW) {
+					DTRACE_ISCSI_8(xfer__done,
+					    idm_conn_t *, idt->idt_ic,
+					    uintptr_t, idb->idb_buf,
+					    uint32_t, idb->idb_bufoffset,
+					    uint64_t, mr->is_mrva, uint32_t, 0,
+					    uint32_t, mr->is_mrrkey,
+					    uint32_t, idb->idb_xfer_len,
+					    int, XFER_BUF_TX_TO_INI);
 					idm_buf_tx_to_ini_done(idt, idb,
 					    IDM_STATUS_FAIL);
 				} else { /* ISER_WR_RDMAR */
+					DTRACE_ISCSI_8(xfer__done,
+					    idm_conn_t *, idt->idt_ic,
+					    uintptr_t, idb->idb_buf,
+					    uint32_t, idb->idb_bufoffset,
+					    uint64_t, mr->is_mrva, uint32_t, 0,
+					    uint32_t, mr->is_mrrkey,
+					    uint32_t, idb->idb_xfer_len,
+					    int, XFER_BUF_RX_FROM_INI);
 					idm_buf_rx_from_ini_done(idt, idb,
 					    IDM_STATUS_FAIL);
 				}
@@ -241,6 +260,7 @@
 			 * the buffer will be freed there.
 			 */
 			idb = wr->iw_buf;
+			mr = ((iser_buf_t *)idb->idb_buf_private)->iser_mr;
 #ifdef DEBUG
 			bcopy(&wc[i],
 			    &((iser_buf_t *)idb->idb_buf_private)->buf_wc,
@@ -250,8 +270,24 @@
 
 			mutex_enter(&idt->idt_mutex);
 			if (wr->iw_type == ISER_WR_RDMAW) {
+				DTRACE_ISCSI_8(xfer__done,
+				    idm_conn_t *, idt->idt_ic,
+				    uintptr_t, idb->idb_buf,
+				    uint32_t, idb->idb_bufoffset,
+				    uint64_t, mr->is_mrva, uint32_t, 0,
+				    uint32_t, mr->is_mrrkey,
+				    uint32_t, idb->idb_xfer_len,
+				    int, XFER_BUF_TX_TO_INI);
 				idm_buf_tx_to_ini_done(idt, idb, idm_status);
 			} else {
+				DTRACE_ISCSI_8(xfer__done,
+				    idm_conn_t *, idt->idt_ic,
+				    uintptr_t, idb->idb_buf,
+				    uint32_t, idb->idb_bufoffset,
+				    uint64_t, mr->is_mrva, uint32_t, 0,
+				    uint32_t, mr->is_mrrkey,
+				    uint32_t, idb->idb_xfer_len,
+				    int, XFER_BUF_RX_FROM_INI);
 				idm_buf_rx_from_ini_done(idt, idb, idm_status);
 			}
 
--- a/usr/src/uts/common/io/ib/clients/iser/iser_xfer.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/ib/clients/iser/iser_xfer.c	Tue May 26 10:40:43 2009 -0400
@@ -30,6 +30,7 @@
 #include <sys/sunddi.h>
 #include <sys/modctl.h>
 #include <sys/byteorder.h>
+#include <sys/sdt.h>
 
 #include <sys/ib/clients/iser/iser.h>
 
@@ -426,6 +427,12 @@
 	bcopy(&wr, &iser_buf->buf_wr, sizeof (ibt_send_wr_t));
 #endif
 
+	DTRACE_ISCSI_8(xfer__start, idm_conn_t *, idt->idt_ic,
+	    uintptr_t, buf->idb_buf, uint32_t, buf->idb_bufoffset,
+	    uint64_t, reg_raddr, uint32_t, buf->idb_bufoffset,
+	    uint32_t,  reg_rkey,
+	    uint32_t, buf->idb_xfer_len, int, XFER_BUF_TX_TO_INI);
+
 	status = ibt_post_send(iser_chan->ic_chanhdl, &wr, 1, NULL);
 	if (status != IBT_SUCCESS) {
 		ISER_LOG(CE_NOTE, "iser_xfer_buf_to_ini: ibt_post_send "
@@ -506,6 +513,12 @@
 	bcopy(&wr, &iser_buf->buf_wr, sizeof (ibt_send_wr_t));
 #endif
 
+	DTRACE_ISCSI_8(xfer__start, idm_conn_t *, idt->idt_ic,
+	    uintptr_t, buf->idb_buf, uint32_t, buf->idb_bufoffset,
+	    uint64_t, reg_raddr, uint32_t, buf->idb_bufoffset,
+	    uint32_t,  reg_rkey,
+	    uint32_t, buf->idb_xfer_len, int, XFER_BUF_RX_FROM_INI);
+
 	status = ibt_post_send(iser_chan->ic_chanhdl, &wr, 1, NULL);
 	if (status != IBT_SUCCESS) {
 		ISER_LOG(CE_NOTE, "iser_xfer_buf_from_ini: ibt_post_send "
--- a/usr/src/uts/common/io/idm/idm.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/idm/idm.c	Tue May 26 10:40:43 2009 -0400
@@ -1773,26 +1773,44 @@
 		switch (IDM_PDU_OPCODE(pdu)) {
 		case ISCSI_OP_SCSI_RSP:
 			/* Target only */
+			DTRACE_ISCSI_2(scsi__response, idm_conn_t *, ic,
+			    iscsi_scsi_rsp_hdr_t *,
+			    (iscsi_scsi_rsp_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_SCSI_TASK_MGT_RSP:
 			/* Target only */
+			DTRACE_ISCSI_2(task__response, idm_conn_t *, ic,
+			    iscsi_text_rsp_hdr_t *,
+			    (iscsi_text_rsp_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_SCSI_DATA_RSP:
 			/* Target only */
+			DTRACE_ISCSI_2(data__send, idm_conn_t *, ic,
+			    iscsi_data_rsp_hdr_t *,
+			    (iscsi_data_rsp_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_RTT_RSP:
 			/* Target only */
+			DTRACE_ISCSI_2(data__request, idm_conn_t *, ic,
+			    iscsi_rtt_hdr_t *,
+			    (iscsi_rtt_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_NOOP_IN:
 			/* Target only */
+			DTRACE_ISCSI_2(nop__send, idm_conn_t *, ic,
+			    iscsi_nop_in_hdr_t *,
+			    (iscsi_nop_in_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_TEXT_RSP:
 			/* Target only */
+			DTRACE_ISCSI_2(text__response, idm_conn_t *, ic,
+			    iscsi_text_rsp_hdr_t *,
+			    (iscsi_text_rsp_hdr_t *)pdu->isp_hdr);
 			idm_pdu_tx_forward(ic, pdu);
 			return;
 		case ISCSI_OP_TEXT_CMD:
@@ -1827,15 +1845,24 @@
 		idm_conn_tx_pdu_event(ic, CE_LOGIN_SND, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_LOGIN_RSP:
+		DTRACE_ISCSI_2(login__response, idm_conn_t *, ic,
+		    iscsi_login_rsp_hdr_t *,
+		    (iscsi_login_rsp_hdr_t *)pdu->isp_hdr);
 		idm_parse_login_rsp(ic, pdu, /* Is RX */ B_FALSE);
 		break;
 	case ISCSI_OP_LOGOUT_CMD:
 		idm_parse_logout_req(ic, pdu, /* Is RX */ B_FALSE);
 		break;
 	case ISCSI_OP_LOGOUT_RSP:
+		DTRACE_ISCSI_2(logout__response, idm_conn_t *, ic,
+		    iscsi_logout_rsp_hdr_t *,
+		    (iscsi_logout_rsp_hdr_t *)pdu->isp_hdr);
 		idm_parse_logout_rsp(ic, pdu, /* Is RX */ B_FALSE);
 		break;
 	case ISCSI_OP_ASYNC_EVENT:
+		DTRACE_ISCSI_2(async__send, idm_conn_t *, ic,
+		    iscsi_async_evt_hdr_t *,
+		    (iscsi_async_evt_hdr_t *)pdu->isp_hdr);
 		async_evt = (iscsi_async_evt_hdr_t *)pdu->isp_hdr;
 		switch (async_evt->async_event) {
 		case ISCSI_ASYNC_EVENT_REQUEST_LOGOUT:
@@ -1860,26 +1887,44 @@
 		break;
 	case ISCSI_OP_SCSI_RSP:
 		/* Target only */
+		DTRACE_ISCSI_2(scsi__response, idm_conn_t *, ic,
+		    iscsi_scsi_rsp_hdr_t *,
+		    (iscsi_scsi_rsp_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_SCSI_TASK_MGT_RSP:
 		/* Target only */
+		DTRACE_ISCSI_2(task__response, idm_conn_t *, ic,
+		    iscsi_scsi_task_mgt_rsp_hdr_t *,
+		    (iscsi_scsi_task_mgt_rsp_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_SCSI_DATA_RSP:
 		/* Target only */
+		DTRACE_ISCSI_2(data__send, idm_conn_t *, ic,
+		    iscsi_data_rsp_hdr_t *,
+		    (iscsi_data_rsp_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_RTT_RSP:
 		/* Target only */
+		DTRACE_ISCSI_2(data__request, idm_conn_t *, ic,
+		    iscsi_rtt_hdr_t *,
+		    (iscsi_rtt_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_NOOP_IN:
 		/* Target only */
+		DTRACE_ISCSI_2(nop__send, idm_conn_t *, ic,
+		    iscsi_nop_in_hdr_t *,
+		    (iscsi_nop_in_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_TEXT_RSP:
 		/* Target only */
+		DTRACE_ISCSI_2(text__response, idm_conn_t *, ic,
+		    iscsi_text_rsp_hdr_t *,
+		    (iscsi_text_rsp_hdr_t *)pdu->isp_hdr);
 		idm_conn_tx_pdu_event(ic, CE_MISC_TX, (uintptr_t)pdu);
 		break;
 		/* Initiator only */
@@ -2261,6 +2306,26 @@
 	idm_refcnt_rele(&ic->ic_refcnt);
 }
 
+void
+idm_conn_set_target_name(idm_conn_t *ic, char *target_name)
+{
+	(void) strlcpy(ic->ic_target_name, target_name, ISCSI_MAX_NAME_LEN + 1);
+}
+
+void
+idm_conn_set_initiator_name(idm_conn_t *ic, char *initiator_name)
+{
+	(void) strlcpy(ic->ic_initiator_name, initiator_name,
+	    ISCSI_MAX_NAME_LEN + 1);
+}
+
+void
+idm_conn_set_isid(idm_conn_t *ic, uint8_t isid[ISCSI_ISID_LEN])
+{
+	(void) snprintf(ic->ic_isid, ISCSI_MAX_ISID_LEN + 1,
+	    "%02x%02x%02x%02x%02x%02x",
+	    isid[0], isid[1], isid[2], isid[3], isid[4], isid[5]);
+}
 
 static int
 _idm_init(void)
--- a/usr/src/uts/common/io/idm/idm_impl.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/idm/idm_impl.c	Tue May 26 10:40:43 2009 -0400
@@ -29,6 +29,7 @@
 #include <sys/ddi.h>
 #include <sys/sunddi.h>
 #include <sys/cpuvar.h>
+#include <sys/sdt.h>
 
 #include <sys/socket.h>
 #include <sys/strsubr.h>
@@ -77,12 +78,17 @@
 	 */
 	switch (IDM_PDU_OPCODE(pdu)) {
 	case ISCSI_OP_LOGIN_CMD:
+		DTRACE_ISCSI_2(login__command, idm_conn_t *, ic,
+		    iscsi_login_hdr_t *, (iscsi_login_hdr_t *)pdu->isp_hdr);
 		idm_conn_rx_pdu_event(ic, CE_LOGIN_RCV, (uintptr_t)pdu);
 		break;
 	case ISCSI_OP_LOGIN_RSP:
 		idm_parse_login_rsp(ic, pdu, /* RX */ B_TRUE);
 		break;
 	case ISCSI_OP_LOGOUT_CMD:
+		DTRACE_ISCSI_2(logout__command, idm_conn_t *, ic,
+		    iscsi_logout_hdr_t *,
+		    (iscsi_logout_hdr_t *)pdu->isp_hdr);
 		idm_parse_logout_req(ic, pdu, /* RX */ B_TRUE);
 		break;
 	case ISCSI_OP_LOGOUT_RSP:
@@ -127,17 +133,43 @@
 		 * we can reject the SCSI command with a protocol error.
 		 *
 		 * This scenario only applies to the target.
+		 *
+		 * Handle dtrace probe in iscsit so we can find all the
+		 * pieces of the CDB
 		 */
+		idm_conn_rx_pdu_event(ic, CE_MISC_RX, (uintptr_t)pdu);
+		break;
 	case ISCSI_OP_SCSI_DATA:
+		DTRACE_ISCSI_2(data__receive, idm_conn_t *, ic,
+		    iscsi_data_hdr_t *,
+		    (iscsi_data_hdr_t *)pdu->isp_hdr);
+		idm_conn_rx_pdu_event(ic, CE_MISC_RX, (uintptr_t)pdu);
+		break;
+	case ISCSI_OP_SCSI_TASK_MGT_MSG:
+		DTRACE_ISCSI_2(task__command, idm_conn_t *, ic,
+		    iscsi_scsi_task_mgt_hdr_t *,
+		    (iscsi_scsi_task_mgt_hdr_t *)pdu->isp_hdr);
+		idm_conn_rx_pdu_event(ic, CE_MISC_RX, (uintptr_t)pdu);
+		break;
+	case ISCSI_OP_NOOP_OUT:
+		DTRACE_ISCSI_2(nop__receive, idm_conn_t *, ic,
+		    iscsi_nop_out_hdr_t *,
+		    (iscsi_nop_out_hdr_t *)pdu->isp_hdr);
+		idm_conn_rx_pdu_event(ic, CE_MISC_RX, (uintptr_t)pdu);
+		break;
+	case ISCSI_OP_TEXT_CMD:
+		DTRACE_ISCSI_2(text__command, idm_conn_t *, ic,
+		    iscsi_text_hdr_t *,
+		    (iscsi_text_hdr_t *)pdu->isp_hdr);
+		idm_conn_rx_pdu_event(ic, CE_MISC_RX, (uintptr_t)pdu);
+		break;
+	/* Initiator PDU's */
 	case ISCSI_OP_SCSI_DATA_RSP:
 	case ISCSI_OP_RTT_RSP:
 	case ISCSI_OP_SNACK_CMD:
 	case ISCSI_OP_NOOP_IN:
-	case ISCSI_OP_NOOP_OUT:
-	case ISCSI_OP_TEXT_CMD:
 	case ISCSI_OP_TEXT_RSP:
 	case ISCSI_OP_REJECT_MSG:
-	case ISCSI_OP_SCSI_TASK_MGT_MSG:
 	case ISCSI_OP_SCSI_TASK_MGT_RSP:
 		/* Validate received PDU against current state */
 		idm_conn_rx_pdu_event(ic, CE_MISC_RX,
@@ -164,23 +196,42 @@
 	case ISCSI_OP_SCSI_CMD:
 		(*ic->ic_conn_ops.icb_rx_scsi_cmd)(ic, pdu);
 		return (B_TRUE);
+	case ISCSI_OP_SCSI_DATA:
+		DTRACE_ISCSI_2(data__receive, idm_conn_t *, ic,
+		    iscsi_data_hdr_t *,
+		    (iscsi_data_hdr_t *)pdu->isp_hdr);
+		(*ic->ic_transport_ops->it_rx_dataout)(ic, pdu);
+		return (B_TRUE);
+	case ISCSI_OP_SCSI_TASK_MGT_MSG:
+		DTRACE_ISCSI_2(task__command, idm_conn_t *, ic,
+		    iscsi_scsi_task_mgt_hdr_t *,
+		    (iscsi_scsi_task_mgt_hdr_t *)pdu->isp_hdr);
+		(*ic->ic_conn_ops.icb_rx_misc)(ic, pdu);
+		return (B_TRUE);
+	case ISCSI_OP_NOOP_OUT:
+		DTRACE_ISCSI_2(nop__receive, idm_conn_t *, ic,
+		    iscsi_nop_out_hdr_t *,
+		    (iscsi_nop_out_hdr_t *)pdu->isp_hdr);
+		(*ic->ic_conn_ops.icb_rx_misc)(ic, pdu);
+		return (B_TRUE);
+	case ISCSI_OP_TEXT_CMD:
+		DTRACE_ISCSI_2(text__command, idm_conn_t *, ic,
+		    iscsi_text_hdr_t *,
+		    (iscsi_text_hdr_t *)pdu->isp_hdr);
+		(*ic->ic_conn_ops.icb_rx_misc)(ic, pdu);
+		return (B_TRUE);
+		/* Initiator only */
 	case ISCSI_OP_SCSI_RSP:
 		(*ic->ic_conn_ops.icb_rx_scsi_rsp)(ic, pdu);
 		return (B_TRUE);
-	case ISCSI_OP_SCSI_DATA:
-		(*ic->ic_transport_ops->it_rx_dataout)(ic, pdu);
-		return (B_TRUE);
 	case ISCSI_OP_SCSI_DATA_RSP:
 		(*ic->ic_transport_ops->it_rx_datain)(ic, pdu);
 		return (B_TRUE);
 	case ISCSI_OP_RTT_RSP:
 		(*ic->ic_transport_ops->it_rx_rtt)(ic, pdu);
 		return (B_TRUE);
-	case ISCSI_OP_SCSI_TASK_MGT_MSG:
 	case ISCSI_OP_SCSI_TASK_MGT_RSP:
-	case ISCSI_OP_TEXT_CMD:
 	case ISCSI_OP_TEXT_RSP:
-	case ISCSI_OP_NOOP_OUT:
 	case ISCSI_OP_NOOP_IN:
 		(*ic->ic_conn_ops.icb_rx_misc)(ic, pdu);
 		return (B_TRUE);
@@ -400,6 +451,10 @@
 	ic = kmem_zalloc(sizeof (idm_conn_t), KM_SLEEP);
 
 	/* Initialize data */
+	ic->ic_target_name[0] = '\0';
+	ic->ic_initiator_name[0] = '\0';
+	ic->ic_isid[0] = '\0';
+	ic->ic_tsih[0] = '\0';
 	ic->ic_conn_type = conn_type;
 	ic->ic_conn_ops = *conn_ops;
 	ic->ic_transport_ops = it->it_ops;
--- a/usr/src/uts/common/io/idm/idm_so.c	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/io/idm/idm_so.c	Tue May 26 10:40:43 2009 -0400
@@ -1256,6 +1256,12 @@
 			/*
 			 * idm_buf_rx_from_ini_done releases idt->idt_mutex
 			 */
+			DTRACE_ISCSI_8(xfer__done, idm_conn_t *, idt->idt_ic,
+			    uintptr_t, idb->idb_buf,
+			    uint32_t, idb->idb_bufoffset,
+			    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+			    uint32_t, idb->idb_xfer_len,
+			    int, XFER_BUF_RX_FROM_INI);
 			idm_buf_rx_from_ini_done(idt, idb, IDM_STATUS_ABORTED);
 			mutex_enter(&idt->idt_mutex);
 		}
@@ -1273,6 +1279,12 @@
 			/*
 			 * idm_buf_tx_to_ini_done releases idt->idt_mutex
 			 */
+			DTRACE_ISCSI_8(xfer__done, idm_conn_t *, idt->idt_ic,
+			    uintptr_t, idb->idb_buf,
+			    uint32_t, idb->idb_bufoffset,
+			    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+			    uint32_t, idb->idb_xfer_len,
+			    int, XFER_BUF_TX_TO_INI);
 			idm_buf_tx_to_ini_done(idt, idb, IDM_STATUS_ABORTED);
 			mutex_enter(&idt->idt_mutex);
 		}
@@ -1566,6 +1578,11 @@
 		/*
 		 * idm_buf_rx_from_ini_done releases idt->idt_mutex
 		 */
+		DTRACE_ISCSI_8(xfer__done, idm_conn_t *, idt->idt_ic,
+		    uintptr_t, idb->idb_buf, uint32_t, idb->idb_bufoffset,
+		    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+		    uint32_t, idb->idb_xfer_len,
+		    int, XFER_BUF_RX_FROM_INI);
 		idm_buf_rx_from_ini_done(idt, idb, IDM_STATUS_SUCCESS);
 		idm_pdu_complete(pdu, IDM_STATUS_SUCCESS);
 		return;
@@ -2164,12 +2181,22 @@
 	 */
 	mutex_enter(&so_conn->ic_tx_mutex);
 
+	DTRACE_ISCSI_8(xfer__start, idm_conn_t *, idt->idt_ic,
+	    uintptr_t, idb->idb_buf, uint32_t, idb->idb_bufoffset,
+	    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+	    uint32_t, idb->idb_xfer_len, int, XFER_BUF_TX_TO_INI);
+
 	if (!so_conn->ic_tx_thread_running) {
 		mutex_exit(&so_conn->ic_tx_mutex);
 		/*
 		 * Don't release idt->idt_mutex since we're supposed to hold
 		 * in when calling idm_buf_tx_to_ini_done
 		 */
+		DTRACE_ISCSI_8(xfer__done, idm_conn_t *, idt->idt_ic,
+		    uintptr_t, idb->idb_buf, uint32_t, idb->idb_bufoffset,
+		    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+		    uint32_t, idb->idb_xfer_len,
+		    int, XFER_BUF_TX_TO_INI);
 		idm_buf_tx_to_ini_done(idt, idb, IDM_STATUS_ABORTED);
 		return (IDM_STATUS_FAIL);
 	}
@@ -2218,6 +2245,11 @@
 
 	ASSERT(mutex_owned(&idt->idt_mutex));
 
+	DTRACE_ISCSI_8(xfer__start, idm_conn_t *, idt->idt_ic,
+	    uintptr_t, idb->idb_buf, uint32_t, idb->idb_bufoffset,
+	    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+	    uint32_t, idb->idb_xfer_len, int, XFER_BUF_RX_FROM_INI);
+
 	pdu = kmem_cache_alloc(idm.idm_sotx_pdu_cache, KM_SLEEP);
 	pdu->isp_ic = idt->idt_ic;
 	bzero(pdu->isp_hdr, sizeof (iscsi_rtt_hdr_t));
@@ -2442,6 +2474,13 @@
 			bhs->flags = ISCSI_FLAG_FINAL; /* F bit set to 1 */
 		}
 
+		/* Instrument the data-send DTrace probe. */
+		if (IDM_PDU_OPCODE(pdu) == ISCSI_OP_SCSI_DATA_RSP) {
+			DTRACE_ISCSI_2(data__send,
+			    idm_conn_t *, idt->idt_ic,
+			    iscsi_data_rsp_hdr_t *,
+			    (iscsi_data_rsp_hdr_t *)pdu->isp_hdr);
+		}
 		/* setup data */
 		pdu->isp_data	=  (uint8_t *)idb->idb_buf + data_offset;
 		pdu->isp_datalen = (uint_t)chunk;
@@ -2617,6 +2656,13 @@
 				 * idm_buf_tx_to_ini_done releases
 				 * idt->idt_mutex
 				 */
+				DTRACE_ISCSI_8(xfer__done,
+				    idm_conn_t *, idt->idt_ic,
+				    uintptr_t, idb->idb_buf,
+				    uint32_t, idb->idb_bufoffset,
+				    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+				    uint32_t, idb->idb_xfer_len,
+				    int, XFER_BUF_TX_TO_INI);
 				idm_buf_tx_to_ini_done(idt, idb, status);
 			} else {
 				idm_so_send_rtt_data_done(idt, idb);
@@ -2672,6 +2718,13 @@
 				 * idm_buf_tx_to_ini_done releases
 				 * idt->idt_mutex
 				 */
+				DTRACE_ISCSI_8(xfer__done,
+				    idm_conn_t *, idt->idt_ic,
+				    uintptr_t, idb->idb_buf,
+				    uint32_t, idb->idb_bufoffset,
+				    uint64_t, 0, uint32_t, 0, uint32_t, 0,
+				    uint32_t, idb->idb_xfer_len,
+				    int, XFER_BUF_TX_TO_INI);
 				idm_buf_tx_to_ini_done(idt, idb,
 				    IDM_STATUS_ABORTED);
 			} else {
--- a/usr/src/uts/common/sys/idm/idm.h	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/sys/idm/idm.h	Tue May 26 10:40:43 2009 -0400
@@ -340,6 +340,15 @@
 void
 idm_conn_rele(idm_conn_t *ic);
 
+void
+idm_conn_set_target_name(idm_conn_t *ic, char *target_name);
+
+void
+idm_conn_set_initiator_name(idm_conn_t *ic, char *initiator_name);
+
+void
+idm_conn_set_isid(idm_conn_t *ic, uint8_t isid[ISCSI_ISID_LEN]);
+
 /*
  * Target data transfer services
  */
@@ -359,6 +368,8 @@
 void
 idm_buf_rx_from_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status);
 
+#define	XFER_BUF_TX_TO_INI	0
+#define	XFER_BUF_RX_FROM_INI	1
 /*
  * Shared Initiator/Target Services
  */
--- a/usr/src/uts/common/sys/idm/idm_impl.h	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/sys/idm/idm_impl.h	Tue May 26 10:40:43 2009 -0400
@@ -139,6 +139,9 @@
 	idm_svc_req_t		is_svc_req;
 } idm_svc_t;
 
+#define	ISCSI_MAX_TSIH_LEN	6	/* 0x%04x */
+#define	ISCSI_MAX_ISID_LEN	ISCSI_ISID_LEN * 2
+
 typedef struct idm_conn_s {
 	list_node_t		ic_list_node;
 	void			*ic_handle;
@@ -147,6 +150,16 @@
 	idm_sockaddr_t 		ic_ini_dst_addr;
 	struct sockaddr_storage	ic_laddr;	/* conn local address */
 	struct sockaddr_storage	ic_raddr;	/* conn remote address */
+
+	/*
+	 * the target_name, initiator_name, initiator session
+	 * identifier and target session identifying handle
+	 * are only used for target connections.
+	 */
+	char			ic_target_name[ISCSI_MAX_NAME_LEN + 1];
+	char			ic_initiator_name[ISCSI_MAX_NAME_LEN + 1];
+	char			ic_tsih[ISCSI_MAX_TSIH_LEN + 1];
+	char			ic_isid[ISCSI_MAX_ISID_LEN + 1];
 	idm_conn_state_t	ic_state;
 	idm_conn_state_t	ic_last_state;
 	sm_audit_buf_t		ic_state_audit;
--- a/usr/src/uts/common/sys/sdt.h	Tue May 26 12:26:11 2009 +0530
+++ b/usr/src/uts/common/sys/sdt.h	Tue May 26 10:40:43 2009 -0400
@@ -129,6 +129,16 @@
 	    (uintptr_t)(arg6), (uintptr_t)(arg7));			\
 }
 
+#define	DTRACE_PROBE8(name, type1, arg1, type2, arg2, type3, arg3,	\
+    type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) {	\
+	extern void __dtrace_probe_##name(uintptr_t, uintptr_t,		\
+	    uintptr_t, uintptr_t, uintptr_t, uintptr_t,			\
+	    uintptr_t, uintptr_t);					\
+	__dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2),	\
+	    (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5),	\
+	    (uintptr_t)(arg6), (uintptr_t)(arg7), (uintptr_t)(arg8));	\
+}
+
 #define	DTRACE_SCHED(name)						\
 	DTRACE_PROBE(__sched_##name);
 
@@ -180,6 +190,40 @@
 	DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2, 		\
 	    type3, arg3, type4, arg4);
 
+#define	DTRACE_ISCSI_2(name, type1, arg1, type2, arg2)			\
+	DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2);
+
+#define	DTRACE_ISCSI_3(name, type1, arg1, type2, arg2, type3, arg3)	\
+	DTRACE_PROBE3(__iscsi_##name, type1, arg1, type2, arg2, type3, arg3);
+
+#define	DTRACE_ISCSI_4(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4)						\
+	DTRACE_PROBE4(__iscsi_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4);
+
+#define	DTRACE_ISCSI_5(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4, type5, arg5)				\
+	DTRACE_PROBE5(__iscsi_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4, type5, arg5);
+
+#define	DTRACE_ISCSI_6(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4, type5, arg5, type6, arg6)			\
+	DTRACE_PROBE6(__iscsi_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4, type5, arg5, type6, arg6);
+
+#define	DTRACE_ISCSI_7(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7)	\
+	DTRACE_PROBE7(__iscsi_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4, type5, arg5, type6, arg6,		\
+	    type7, arg7);
+
+#define	DTRACE_ISCSI_8(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4, type5, arg5, type6, arg6,			\
+    type7, arg7, type8, arg8)						\
+	DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4, type5, arg5, type6, arg6,		\
+	    type7, arg7, type8, arg8);
+
 #define	DTRACE_NFSV3_3(name, type1, arg1, type2, arg2, 			\
     type3, arg3)							\
 	DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2,		\