xref: /onnv-gate/usr/src/lib/libdtrace/common/fc.d (revision 9578:c4b38ec17f4e)
1*9578SSam.Cramer@Sun.COM /*
2*9578SSam.Cramer@Sun.COM  * CDDL HEADER START
3*9578SSam.Cramer@Sun.COM  *
4*9578SSam.Cramer@Sun.COM  * The contents of this file are subject to the terms of the
5*9578SSam.Cramer@Sun.COM  * Common Development and Distribution License (the "License").
6*9578SSam.Cramer@Sun.COM  * You may not use this file except in compliance with the License.
7*9578SSam.Cramer@Sun.COM  *
8*9578SSam.Cramer@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9578SSam.Cramer@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9578SSam.Cramer@Sun.COM  * See the License for the specific language governing permissions
11*9578SSam.Cramer@Sun.COM  * and limitations under the License.
12*9578SSam.Cramer@Sun.COM  *
13*9578SSam.Cramer@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9578SSam.Cramer@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9578SSam.Cramer@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9578SSam.Cramer@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9578SSam.Cramer@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9578SSam.Cramer@Sun.COM  *
19*9578SSam.Cramer@Sun.COM  * CDDL HEADER END
20*9578SSam.Cramer@Sun.COM  */
21*9578SSam.Cramer@Sun.COM 
22*9578SSam.Cramer@Sun.COM /*
23*9578SSam.Cramer@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*9578SSam.Cramer@Sun.COM  * Use is subject to license terms.
25*9578SSam.Cramer@Sun.COM  */
26*9578SSam.Cramer@Sun.COM 
27*9578SSam.Cramer@Sun.COM #pragma	D depends_on library net.d
28*9578SSam.Cramer@Sun.COM #pragma	D depends_on library scsi.d
29*9578SSam.Cramer@Sun.COM #pragma	D depends_on module genunix
30*9578SSam.Cramer@Sun.COM 
31*9578SSam.Cramer@Sun.COM /*
32*9578SSam.Cramer@Sun.COM  * FC port information.
33*9578SSam.Cramer@Sun.COM  */
34*9578SSam.Cramer@Sun.COM typedef struct fc_port_info {
35*9578SSam.Cramer@Sun.COM 	string fcp_node_wwn;		/* node WWN */
36*9578SSam.Cramer@Sun.COM 	string fcp_sym_node_name;	/* node symbolic name */
37*9578SSam.Cramer@Sun.COM 	string fcp_sym_port_name;	/* port symbolic name */
38*9578SSam.Cramer@Sun.COM 	uint32_t fcp_port_hard_address;	/* port hard address */
39*9578SSam.Cramer@Sun.COM } fc_port_info_t;
40*9578SSam.Cramer@Sun.COM 
41*9578SSam.Cramer@Sun.COM /*
42*9578SSam.Cramer@Sun.COM  * FC transfer info (somewhat analogous to iscsiinfo_t)
43*9578SSam.Cramer@Sun.COM  * Represents data transfer details.
44*9578SSam.Cramer@Sun.COM  */
45*9578SSam.Cramer@Sun.COM typedef struct fc_xferinfo {
46*9578SSam.Cramer@Sun.COM 	uint32_t fcx_len;
47*9578SSam.Cramer@Sun.COM 	uint32_t fcx_offset;
48*9578SSam.Cramer@Sun.COM 	uint16_t fcx_flags;	/* db_flags as defined in sys/stmf.h */
49*9578SSam.Cramer@Sun.COM } fc_xferinfo_t;
50*9578SSam.Cramer@Sun.COM 
51*9578SSam.Cramer@Sun.COM /*
52*9578SSam.Cramer@Sun.COM  * conninfo translators
53*9578SSam.Cramer@Sun.COM  */
54*9578SSam.Cramer@Sun.COM 
55*9578SSam.Cramer@Sun.COM /*
56*9578SSam.Cramer@Sun.COM  * Translator for conninfo, translating from the local port.
57*9578SSam.Cramer@Sun.COM  */
58*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
59*9578SSam.Cramer@Sun.COM translator conninfo_t < fct_local_port_t *P > {
60*9578SSam.Cramer@Sun.COM  	ci_local = P->port_pwwn_str[0] ?
61*9578SSam.Cramer@Sun.COM 	    P->port_pwwn_str : "<unknown>";
62*9578SSam.Cramer@Sun.COM  	ci_remote = "<unknown>";
63*9578SSam.Cramer@Sun.COM 	ci_protocol = "fc";
64*9578SSam.Cramer@Sun.COM };
65*9578SSam.Cramer@Sun.COM 
66*9578SSam.Cramer@Sun.COM /*
67*9578SSam.Cramer@Sun.COM  * Translator for conninfo, translating from the local port implementation.
68*9578SSam.Cramer@Sun.COM  */
69*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
70*9578SSam.Cramer@Sun.COM translator conninfo_t < fct_i_local_port_t *P > {
71*9578SSam.Cramer@Sun.COM  	ci_local = P->iport_port->port_pwwn_str[0] ?
72*9578SSam.Cramer@Sun.COM 		 P->iport_port->port_pwwn_str : "<unknown>";
73*9578SSam.Cramer@Sun.COM  	ci_remote = "<unknown>";
74*9578SSam.Cramer@Sun.COM 	ci_protocol = "fc";
75*9578SSam.Cramer@Sun.COM };
76*9578SSam.Cramer@Sun.COM 
77*9578SSam.Cramer@Sun.COM /*
78*9578SSam.Cramer@Sun.COM  * Translator for conninfo, translating from fct cmd struct.
79*9578SSam.Cramer@Sun.COM  */
80*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
81*9578SSam.Cramer@Sun.COM translator conninfo_t < fct_cmd_t *C > {
82*9578SSam.Cramer@Sun.COM  	ci_local = (C->cmd_port ?
83*9578SSam.Cramer@Sun.COM 		 (C->cmd_port->port_pwwn_str[0] ?
84*9578SSam.Cramer@Sun.COM 		  C->cmd_port->port_pwwn_str : "<unknown>") :
85*9578SSam.Cramer@Sun.COM 		 "<unknown>");
86*9578SSam.Cramer@Sun.COM 
87*9578SSam.Cramer@Sun.COM  	ci_remote = (C->cmd_rp ?
88*9578SSam.Cramer@Sun.COM 		 (C->cmd_rp->rp_pwwn_str[0] ?
89*9578SSam.Cramer@Sun.COM 		  C->cmd_rp->rp_pwwn_str : "<unknown>") :
90*9578SSam.Cramer@Sun.COM 		 "<unknown>");
91*9578SSam.Cramer@Sun.COM 
92*9578SSam.Cramer@Sun.COM 	ci_protocol = "fc";
93*9578SSam.Cramer@Sun.COM };
94*9578SSam.Cramer@Sun.COM 
95*9578SSam.Cramer@Sun.COM 
96*9578SSam.Cramer@Sun.COM /*
97*9578SSam.Cramer@Sun.COM  * fc_port_info_t translators.
98*9578SSam.Cramer@Sun.COM  */
99*9578SSam.Cramer@Sun.COM 
100*9578SSam.Cramer@Sun.COM /*
101*9578SSam.Cramer@Sun.COM  * Translator for fc_port_info_t, translating from the local port.
102*9578SSam.Cramer@Sun.COM  */
103*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
104*9578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_local_port_t *P > {
105*9578SSam.Cramer@Sun.COM         /* node WWN */
106*9578SSam.Cramer@Sun.COM 	fcp_node_wwn = P->port_nwwn_str[0] ?
107*9578SSam.Cramer@Sun.COM 		     P->port_nwwn_str : "<unknown>";
108*9578SSam.Cramer@Sun.COM 
109*9578SSam.Cramer@Sun.COM 	/* node symbolic name */
110*9578SSam.Cramer@Sun.COM 	fcp_sym_node_name = P->port_sym_node_name ?
111*9578SSam.Cramer@Sun.COM 		P->port_sym_node_name : `utsname.nodename;
112*9578SSam.Cramer@Sun.COM 
113*9578SSam.Cramer@Sun.COM 	/* port symbolic name */
114*9578SSam.Cramer@Sun.COM 	fcp_sym_port_name = P->port_sym_port_name ?
115*9578SSam.Cramer@Sun.COM 			P->port_sym_port_name : "<unknown>";
116*9578SSam.Cramer@Sun.COM 
117*9578SSam.Cramer@Sun.COM 	/* port hard address */
118*9578SSam.Cramer@Sun.COM 	fcp_port_hard_address = P->port_hard_address;
119*9578SSam.Cramer@Sun.COM };
120*9578SSam.Cramer@Sun.COM 
121*9578SSam.Cramer@Sun.COM 
122*9578SSam.Cramer@Sun.COM /*
123*9578SSam.Cramer@Sun.COM  * Translator for fc_port_info_t, translating from the local port impl.
124*9578SSam.Cramer@Sun.COM  */
125*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
126*9578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_i_local_port_t *P > {
127*9578SSam.Cramer@Sun.COM         /* node WWN */
128*9578SSam.Cramer@Sun.COM 
129*9578SSam.Cramer@Sun.COM 	fcp_node_wwn = (P->iport_port ?
130*9578SSam.Cramer@Sun.COM 			   (P->iport_port->port_nwwn_str[0] ?
131*9578SSam.Cramer@Sun.COM 		               P->iport_port->port_nwwn_str :
132*9578SSam.Cramer@Sun.COM 			       "<unknown>") :
133*9578SSam.Cramer@Sun.COM 		           "<bad iport_port ptr>");
134*9578SSam.Cramer@Sun.COM 
135*9578SSam.Cramer@Sun.COM 	fcp_sym_node_name =
136*9578SSam.Cramer@Sun.COM 			 (P->iport_port ?
137*9578SSam.Cramer@Sun.COM 			   (P->iport_port->port_sym_node_name ?
138*9578SSam.Cramer@Sun.COM 		            P->iport_port->port_sym_node_name : "<unknown>") :
139*9578SSam.Cramer@Sun.COM 		           "<bad iport_port ptr>");
140*9578SSam.Cramer@Sun.COM 
141*9578SSam.Cramer@Sun.COM 	fcp_sym_port_name =
142*9578SSam.Cramer@Sun.COM 			 (P->iport_port ?
143*9578SSam.Cramer@Sun.COM 			   (P->iport_port->port_sym_port_name ?
144*9578SSam.Cramer@Sun.COM 		            P->iport_port->port_sym_port_name : "<unknown>") :
145*9578SSam.Cramer@Sun.COM 		           "<bad iport_port ptr>");
146*9578SSam.Cramer@Sun.COM 
147*9578SSam.Cramer@Sun.COM 	fcp_port_hard_address =
148*9578SSam.Cramer@Sun.COM 			 (P->iport_port ?
149*9578SSam.Cramer@Sun.COM 			   P->iport_port->port_hard_address : 0);
150*9578SSam.Cramer@Sun.COM };
151*9578SSam.Cramer@Sun.COM 
152*9578SSam.Cramer@Sun.COM /*
153*9578SSam.Cramer@Sun.COM  * Translator for fc_port_info, translating from the remote port impl
154*9578SSam.Cramer@Sun.COM  */
155*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
156*9578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_i_remote_port_t *P > {
157*9578SSam.Cramer@Sun.COM 
158*9578SSam.Cramer@Sun.COM         /* node WWN */
159*9578SSam.Cramer@Sun.COM 	fcp_node_wwn = P->irp_rp ?
160*9578SSam.Cramer@Sun.COM 			   (P->irp_rp->rp_nwwn_str[0] ?
161*9578SSam.Cramer@Sun.COM 			     P->irp_rp->rp_nwwn_str : "<unknown>") :
162*9578SSam.Cramer@Sun.COM                            "<unknown>";
163*9578SSam.Cramer@Sun.COM 
164*9578SSam.Cramer@Sun.COM 	/* node symbolic name */
165*9578SSam.Cramer@Sun.COM 	fcp_sym_node_name = P->irp_snn ? P->irp_snn : "<unknown>";
166*9578SSam.Cramer@Sun.COM 
167*9578SSam.Cramer@Sun.COM 	/* port symbolic name */
168*9578SSam.Cramer@Sun.COM 	fcp_sym_port_name = P->irp_spn ? P->irp_spn : "<unknown>";
169*9578SSam.Cramer@Sun.COM 
170*9578SSam.Cramer@Sun.COM 	/* port hard address */
171*9578SSam.Cramer@Sun.COM 	fcp_port_hard_address = P->irp_rp ? P->irp_rp->rp_id : 0;
172*9578SSam.Cramer@Sun.COM };
173*9578SSam.Cramer@Sun.COM 
174*9578SSam.Cramer@Sun.COM /*
175*9578SSam.Cramer@Sun.COM  * Translator for fc_xferinfo, translating from stmf_data_buf_t.
176*9578SSam.Cramer@Sun.COM  */
177*9578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator
178*9578SSam.Cramer@Sun.COM translator fc_xferinfo_t < stmf_data_buf_t *B > {
179*9578SSam.Cramer@Sun.COM 	   fcx_len = B->db_data_size;
180*9578SSam.Cramer@Sun.COM 	   fcx_offset = B->db_relative_offset;
181*9578SSam.Cramer@Sun.COM 	   fcx_flags = B->db_flags;
182*9578SSam.Cramer@Sun.COM };
183