Mercurial > illumos > illumos-gate
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, \