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