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