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