19578SSam.Cramer@Sun.COM /* 29578SSam.Cramer@Sun.COM * CDDL HEADER START 39578SSam.Cramer@Sun.COM * 49578SSam.Cramer@Sun.COM * The contents of this file are subject to the terms of the 59578SSam.Cramer@Sun.COM * Common Development and Distribution License (the "License"). 69578SSam.Cramer@Sun.COM * You may not use this file except in compliance with the License. 79578SSam.Cramer@Sun.COM * 89578SSam.Cramer@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 99578SSam.Cramer@Sun.COM * or http://www.opensolaris.org/os/licensing. 109578SSam.Cramer@Sun.COM * See the License for the specific language governing permissions 119578SSam.Cramer@Sun.COM * and limitations under the License. 129578SSam.Cramer@Sun.COM * 139578SSam.Cramer@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 149578SSam.Cramer@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 159578SSam.Cramer@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 169578SSam.Cramer@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 179578SSam.Cramer@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 189578SSam.Cramer@Sun.COM * 199578SSam.Cramer@Sun.COM * CDDL HEADER END 209578SSam.Cramer@Sun.COM */ 219578SSam.Cramer@Sun.COM 229578SSam.Cramer@Sun.COM /* 239578SSam.Cramer@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 249578SSam.Cramer@Sun.COM * Use is subject to license terms. 259578SSam.Cramer@Sun.COM */ 269578SSam.Cramer@Sun.COM 279578SSam.Cramer@Sun.COM #pragma D depends_on library net.d 289578SSam.Cramer@Sun.COM #pragma D depends_on library scsi.d 299578SSam.Cramer@Sun.COM #pragma D depends_on module genunix 30*9625SSam.Cramer@Sun.COM #pragma D depends_on module fct 319578SSam.Cramer@Sun.COM 329578SSam.Cramer@Sun.COM /* 339578SSam.Cramer@Sun.COM * FC port information. 349578SSam.Cramer@Sun.COM */ 359578SSam.Cramer@Sun.COM typedef struct fc_port_info { 369578SSam.Cramer@Sun.COM string fcp_node_wwn; /* node WWN */ 379578SSam.Cramer@Sun.COM string fcp_sym_node_name; /* node symbolic name */ 389578SSam.Cramer@Sun.COM string fcp_sym_port_name; /* port symbolic name */ 399578SSam.Cramer@Sun.COM uint32_t fcp_port_hard_address; /* port hard address */ 409578SSam.Cramer@Sun.COM } fc_port_info_t; 419578SSam.Cramer@Sun.COM 429578SSam.Cramer@Sun.COM /* 439578SSam.Cramer@Sun.COM * FC transfer info (somewhat analogous to iscsiinfo_t) 449578SSam.Cramer@Sun.COM * Represents data transfer details. 459578SSam.Cramer@Sun.COM */ 469578SSam.Cramer@Sun.COM typedef struct fc_xferinfo { 479578SSam.Cramer@Sun.COM uint32_t fcx_len; 489578SSam.Cramer@Sun.COM uint32_t fcx_offset; 499578SSam.Cramer@Sun.COM uint16_t fcx_flags; /* db_flags as defined in sys/stmf.h */ 509578SSam.Cramer@Sun.COM } fc_xferinfo_t; 519578SSam.Cramer@Sun.COM 529578SSam.Cramer@Sun.COM /* 539578SSam.Cramer@Sun.COM * conninfo translators 549578SSam.Cramer@Sun.COM */ 559578SSam.Cramer@Sun.COM 569578SSam.Cramer@Sun.COM /* 579578SSam.Cramer@Sun.COM * Translator for conninfo, translating from the local port. 589578SSam.Cramer@Sun.COM */ 599578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 609578SSam.Cramer@Sun.COM translator conninfo_t < fct_local_port_t *P > { 619578SSam.Cramer@Sun.COM ci_local = P->port_pwwn_str[0] ? 629578SSam.Cramer@Sun.COM P->port_pwwn_str : "<unknown>"; 639578SSam.Cramer@Sun.COM ci_remote = "<unknown>"; 649578SSam.Cramer@Sun.COM ci_protocol = "fc"; 659578SSam.Cramer@Sun.COM }; 669578SSam.Cramer@Sun.COM 679578SSam.Cramer@Sun.COM /* 689578SSam.Cramer@Sun.COM * Translator for conninfo, translating from the local port implementation. 699578SSam.Cramer@Sun.COM */ 709578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 719578SSam.Cramer@Sun.COM translator conninfo_t < fct_i_local_port_t *P > { 729578SSam.Cramer@Sun.COM ci_local = P->iport_port->port_pwwn_str[0] ? 739578SSam.Cramer@Sun.COM P->iport_port->port_pwwn_str : "<unknown>"; 749578SSam.Cramer@Sun.COM ci_remote = "<unknown>"; 759578SSam.Cramer@Sun.COM ci_protocol = "fc"; 769578SSam.Cramer@Sun.COM }; 779578SSam.Cramer@Sun.COM 789578SSam.Cramer@Sun.COM /* 799578SSam.Cramer@Sun.COM * Translator for conninfo, translating from fct cmd struct. 809578SSam.Cramer@Sun.COM */ 819578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 829578SSam.Cramer@Sun.COM translator conninfo_t < fct_cmd_t *C > { 839578SSam.Cramer@Sun.COM ci_local = (C->cmd_port ? 849578SSam.Cramer@Sun.COM (C->cmd_port->port_pwwn_str[0] ? 859578SSam.Cramer@Sun.COM C->cmd_port->port_pwwn_str : "<unknown>") : 869578SSam.Cramer@Sun.COM "<unknown>"); 879578SSam.Cramer@Sun.COM 889578SSam.Cramer@Sun.COM ci_remote = (C->cmd_rp ? 899578SSam.Cramer@Sun.COM (C->cmd_rp->rp_pwwn_str[0] ? 909578SSam.Cramer@Sun.COM C->cmd_rp->rp_pwwn_str : "<unknown>") : 919578SSam.Cramer@Sun.COM "<unknown>"); 929578SSam.Cramer@Sun.COM 939578SSam.Cramer@Sun.COM ci_protocol = "fc"; 949578SSam.Cramer@Sun.COM }; 959578SSam.Cramer@Sun.COM 969578SSam.Cramer@Sun.COM 979578SSam.Cramer@Sun.COM /* 989578SSam.Cramer@Sun.COM * fc_port_info_t translators. 999578SSam.Cramer@Sun.COM */ 1009578SSam.Cramer@Sun.COM 1019578SSam.Cramer@Sun.COM /* 1029578SSam.Cramer@Sun.COM * Translator for fc_port_info_t, translating from the local port. 1039578SSam.Cramer@Sun.COM */ 1049578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 1059578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_local_port_t *P > { 1069578SSam.Cramer@Sun.COM /* node WWN */ 1079578SSam.Cramer@Sun.COM fcp_node_wwn = P->port_nwwn_str[0] ? 1089578SSam.Cramer@Sun.COM P->port_nwwn_str : "<unknown>"; 1099578SSam.Cramer@Sun.COM 1109578SSam.Cramer@Sun.COM /* node symbolic name */ 1119578SSam.Cramer@Sun.COM fcp_sym_node_name = P->port_sym_node_name ? 1129578SSam.Cramer@Sun.COM P->port_sym_node_name : `utsname.nodename; 1139578SSam.Cramer@Sun.COM 1149578SSam.Cramer@Sun.COM /* port symbolic name */ 1159578SSam.Cramer@Sun.COM fcp_sym_port_name = P->port_sym_port_name ? 1169578SSam.Cramer@Sun.COM P->port_sym_port_name : "<unknown>"; 1179578SSam.Cramer@Sun.COM 1189578SSam.Cramer@Sun.COM /* port hard address */ 1199578SSam.Cramer@Sun.COM fcp_port_hard_address = P->port_hard_address; 1209578SSam.Cramer@Sun.COM }; 1219578SSam.Cramer@Sun.COM 1229578SSam.Cramer@Sun.COM 1239578SSam.Cramer@Sun.COM /* 1249578SSam.Cramer@Sun.COM * Translator for fc_port_info_t, translating from the local port impl. 1259578SSam.Cramer@Sun.COM */ 1269578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 1279578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_i_local_port_t *P > { 1289578SSam.Cramer@Sun.COM /* node WWN */ 1299578SSam.Cramer@Sun.COM 1309578SSam.Cramer@Sun.COM fcp_node_wwn = (P->iport_port ? 1319578SSam.Cramer@Sun.COM (P->iport_port->port_nwwn_str[0] ? 1329578SSam.Cramer@Sun.COM P->iport_port->port_nwwn_str : 1339578SSam.Cramer@Sun.COM "<unknown>") : 1349578SSam.Cramer@Sun.COM "<bad iport_port ptr>"); 1359578SSam.Cramer@Sun.COM 1369578SSam.Cramer@Sun.COM fcp_sym_node_name = 1379578SSam.Cramer@Sun.COM (P->iport_port ? 1389578SSam.Cramer@Sun.COM (P->iport_port->port_sym_node_name ? 1399578SSam.Cramer@Sun.COM P->iport_port->port_sym_node_name : "<unknown>") : 1409578SSam.Cramer@Sun.COM "<bad iport_port ptr>"); 1419578SSam.Cramer@Sun.COM 1429578SSam.Cramer@Sun.COM fcp_sym_port_name = 1439578SSam.Cramer@Sun.COM (P->iport_port ? 1449578SSam.Cramer@Sun.COM (P->iport_port->port_sym_port_name ? 1459578SSam.Cramer@Sun.COM P->iport_port->port_sym_port_name : "<unknown>") : 1469578SSam.Cramer@Sun.COM "<bad iport_port ptr>"); 1479578SSam.Cramer@Sun.COM 1489578SSam.Cramer@Sun.COM fcp_port_hard_address = 1499578SSam.Cramer@Sun.COM (P->iport_port ? 1509578SSam.Cramer@Sun.COM P->iport_port->port_hard_address : 0); 1519578SSam.Cramer@Sun.COM }; 1529578SSam.Cramer@Sun.COM 1539578SSam.Cramer@Sun.COM /* 1549578SSam.Cramer@Sun.COM * Translator for fc_port_info, translating from the remote port impl 1559578SSam.Cramer@Sun.COM */ 1569578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 1579578SSam.Cramer@Sun.COM translator fc_port_info_t < fct_i_remote_port_t *P > { 1589578SSam.Cramer@Sun.COM 1599578SSam.Cramer@Sun.COM /* node WWN */ 1609578SSam.Cramer@Sun.COM fcp_node_wwn = P->irp_rp ? 1619578SSam.Cramer@Sun.COM (P->irp_rp->rp_nwwn_str[0] ? 1629578SSam.Cramer@Sun.COM P->irp_rp->rp_nwwn_str : "<unknown>") : 1639578SSam.Cramer@Sun.COM "<unknown>"; 1649578SSam.Cramer@Sun.COM 1659578SSam.Cramer@Sun.COM /* node symbolic name */ 1669578SSam.Cramer@Sun.COM fcp_sym_node_name = P->irp_snn ? P->irp_snn : "<unknown>"; 1679578SSam.Cramer@Sun.COM 1689578SSam.Cramer@Sun.COM /* port symbolic name */ 1699578SSam.Cramer@Sun.COM fcp_sym_port_name = P->irp_spn ? P->irp_spn : "<unknown>"; 1709578SSam.Cramer@Sun.COM 1719578SSam.Cramer@Sun.COM /* port hard address */ 1729578SSam.Cramer@Sun.COM fcp_port_hard_address = P->irp_rp ? P->irp_rp->rp_id : 0; 1739578SSam.Cramer@Sun.COM }; 1749578SSam.Cramer@Sun.COM 1759578SSam.Cramer@Sun.COM /* 1769578SSam.Cramer@Sun.COM * Translator for fc_xferinfo, translating from stmf_data_buf_t. 1779578SSam.Cramer@Sun.COM */ 1789578SSam.Cramer@Sun.COM #pragma D binding "1.5" translator 1799578SSam.Cramer@Sun.COM translator fc_xferinfo_t < stmf_data_buf_t *B > { 1809578SSam.Cramer@Sun.COM fcx_len = B->db_data_size; 1819578SSam.Cramer@Sun.COM fcx_offset = B->db_relative_offset; 1829578SSam.Cramer@Sun.COM fcx_flags = B->db_flags; 1839578SSam.Cramer@Sun.COM }; 184