xref: /titanic_50/usr/src/lib/libdtrace/common/srp.d (revision d6114e2d100d9ec3b45f9968d45ac2e3a0827af0)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #pragma	D depends_on library net.d
28 #pragma D depends_on library scsi.d
29 #pragma D depends_on module genunix
30 #pragma	D depends_on module srpt
31 
32 typedef struct srp_portinfo {
33 	/* initiator */
34 	string  pi_initiator;	/* Initiator: eui.xxxxxxxxxxxxxxx */
35 	string	pi_i_sid;	/* Initiator session id */
36 
37 	/* target */
38 	string	pi_target;	/* Target: eui.xxxxxxxxxxxxxxx */
39 	string  pi_t_sid;	/* Target session id */
40 
41 	uintptr_t pi_chan_id;	/* Channel identifier */
42 } srp_portinfo_t;
43 
44 #pragma D binding "1.5" translator
45 translator conninfo_t < srpt_session_t *P > {
46 	ci_local = P->ss_t_gid;
47 	ci_remote = P->ss_i_gid;
48 	ci_protocol = "ib";
49 };
50 
51 #pragma D binding "1.5" translator
52 translator srp_portinfo_t < srpt_session_t *P > {
53 	pi_initiator = P->ss_i_name;
54 	pi_i_sid = P->ss_i_alias;
55 	pi_target = P->ss_t_name;
56 	pi_t_sid = P->ss_t_alias;
57 	pi_chan_id = 0;
58 };
59 
60 #pragma D binding "1.5" translator
61 translator conninfo_t < srpt_channel_t *P > {
62 	ci_local = P->ch_session->ss_i_gid;
63 	ci_remote = P->ch_session->ss_t_gid;
64 };
65 
66 #pragma D binding "1.5" translator
67 translator srp_portinfo_t < srpt_channel_t *P > {
68 	pi_initiator = P->ch_session->ss_i_name;
69 	pi_i_sid = P->ch_session->ss_i_alias;
70 	pi_target = P->ch_session->ss_t_name;
71 	pi_t_sid = P->ch_session->ss_t_alias;
72 	pi_chan_id = (uintptr_t)P->ch_chan_hdl;
73 };
74 
75 typedef struct srp_logininfo {
76 	uint64_t li_task_tag;	   /* SRP task tag */
77 	uint32_t li_max_it_iu_len; /* Maximum iu length that initiator can
78 				      send to target */
79 	uint32_t li_max_ti_iu_len; /* Maximum iu length that target can
80 				      send to initiator */
81 	uint32_t li_request_limit; /* Maximun number of SRP requests
82 				      that initiator can send on a channel */
83 	uint32_t li_reason_code;   /* Reason code */
84 } srp_logininfo_t;
85 
86 #pragma D binding "1.5" translator
87 translator srp_logininfo_t < srp_login_req_t *P > {
88 	li_task_tag = P->lreq_tag;
89 	li_max_it_iu_len = ntohl(P->lreq_req_it_iu_len);
90 	li_max_ti_iu_len = 0;
91 	li_request_limit = 0;
92 	li_reason_code = 0;
93 };
94 
95 #pragma D binding "1.5" translator
96 translator srp_logininfo_t < srp_login_rsp_t *P > {
97 	li_task_tag = P->lrsp_tag;
98 	li_max_it_iu_len = ntohl(P->lrsp_max_it_iu_len);
99 	li_max_ti_iu_len = ntohl(P->lrsp_max_ti_iu_len);
100 	li_request_limit = ntohl(P->lrsp_req_limit_delta);
101 	li_reason_code = ntohl(((srp_login_rej_t *)arg2)->lrej_reason);
102 };
103 
104 typedef struct srp_taskinfo {
105 	uint64_t ti_task_tag;	/* SRP task tag */
106 	uint64_t ti_lun;	/* Target logical unit number */
107 	uint8_t  ti_function;	/* Task management function */
108 	uint32_t ti_req_limit_delta; /* Increment of channel's request limit */
109 	uint8_t  ti_flag;	     /* bit 2: DOOVER */
110 	                             /* bit 3: DOUNDER */
111 	                             /* bit 4: DIOVER */
112 	                             /* bit 5: DIUNDER */
113 	uint32_t ti_do_resid_cnt;    /* Data-out residual count */
114 	uint32_t ti_di_resid_cnt;    /* Data-in residual count */
115 	uint8_t  ti_status;     /* Status of this task */
116 } srp_taskinfo_t;
117 
118 #pragma D binding "1.5" translator
119 translator srp_taskinfo_t < srp_cmd_req_t *P > {
120 	ti_task_tag = P->cr_tag;
121 	ti_lun = (ntohl(*((uint32_t *)P->cr_lun)) << 32) +
122 	    ntohl(*((uint32_t *)&P->cr_lun[4]));
123 	ti_function = P->cr_type == 1 ?  /* 1: MGMT CMD 2: SRP CMD */
124 	    ((srp_tsk_mgmt_t *)P)->tm_function : 0;
125 	ti_req_limit_delta = 0;
126 	ti_flag = 0;
127 	ti_do_resid_cnt = 0;
128 	ti_di_resid_cnt = 0;
129 	ti_status = 0;
130 };
131 
132 #pragma D binding "1.5" translator
133 translator srp_taskinfo_t < srp_rsp_t *P > {
134 	ti_task_tag = P->rsp_tag;
135 	ti_lun = ntohll(*(uint64_t *)((scsi_task_t *)arg2)->task_lun_no);
136 	ti_function = ((scsi_task_t *)arg2)->task_mgmt_function;
137 	ti_req_limit_delta = ntohl(P->rsp_req_limit_delta);
138 	ti_flag = P->rsp_flags;
139 	ti_do_resid_cnt = ntohl(P->rsp_do_resid_cnt);
140 	ti_di_resid_cnt = ntohl(P->rsp_di_resid_cnt);
141 	ti_status = arg3;
142 };
143 
144 #pragma D binding "1.5" translator
145 translator srp_taskinfo_t < srpt_iu_t *P > {
146 	ti_task_tag = P->iu_tag;
147 	ti_lun = ntohll(*(uint64_t *)P->iu_stmf_task->task_lun_no);
148 	ti_function = 0;
149 	ti_req_limit_delta = 0;
150 	ti_flag = 0;
151 	ti_do_resid_cnt = 0;
152 	ti_di_resid_cnt = 0;
153 	ti_status = 0;
154 };
155 
156 #pragma D binding "1.5" translator
157 translator xferinfo_t < ibt_wr_ds_t *P > {
158 	xfer_laddr = P->ds_va + arg4;
159 	xfer_lkey = P->ds_key;
160 	xfer_raddr = (arg3 == 0) ? 0 :
161 	    ((ibt_send_wr_t *)arg3)->wr.rc.rcwr.rdma.rdma_raddr;
162 	xfer_rkey = (arg3 == 0) ? 0 :
163 	    ((ibt_send_wr_t *)arg3)->wr.rc.rcwr.rdma.rdma_rkey;
164 	xfer_len = arg4;
165 	xfer_loffset = arg5;
166 	xfer_roffset = arg6;
167 	xfer_type = arg7;
168 };
169