/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma D depends_on library net.d #pragma D depends_on library scsi.d #pragma D depends_on module genunix #pragma D depends_on module fct /* * FC port information. */ typedef struct fc_port_info { string fcp_node_wwn; /* node WWN */ string fcp_sym_node_name; /* node symbolic name */ string fcp_sym_port_name; /* port symbolic name */ uint32_t fcp_port_hard_address; /* port hard address */ } fc_port_info_t; /* * FC transfer info (somewhat analogous to iscsiinfo_t) * Represents data transfer details. */ typedef struct fc_xferinfo { uint32_t fcx_len; uint32_t fcx_offset; uint16_t fcx_flags; /* db_flags as defined in sys/stmf.h */ } fc_xferinfo_t; /* * conninfo translators */ /* * Translator for conninfo, translating from the local port. */ #pragma D binding "1.5" translator translator conninfo_t < fct_local_port_t *P > { ci_local = P->port_pwwn_str[0] ? P->port_pwwn_str : ""; ci_remote = ""; ci_protocol = "fc"; }; /* * Translator for conninfo, translating from the local port implementation. */ #pragma D binding "1.5" translator translator conninfo_t < fct_i_local_port_t *P > { ci_local = P->iport_port->port_pwwn_str[0] ? P->iport_port->port_pwwn_str : ""; ci_remote = ""; ci_protocol = "fc"; }; /* * Translator for conninfo, translating from fct cmd struct. */ #pragma D binding "1.5" translator translator conninfo_t < fct_cmd_t *C > { ci_local = (C->cmd_port ? (C->cmd_port->port_pwwn_str[0] ? C->cmd_port->port_pwwn_str : "") : ""); ci_remote = (C->cmd_rp ? (C->cmd_rp->rp_pwwn_str[0] ? C->cmd_rp->rp_pwwn_str : "") : ""); ci_protocol = "fc"; }; /* * fc_port_info_t translators. */ /* * Translator for fc_port_info_t, translating from the local port. */ #pragma D binding "1.5" translator translator fc_port_info_t < fct_local_port_t *P > { /* node WWN */ fcp_node_wwn = P->port_nwwn_str[0] ? P->port_nwwn_str : ""; /* node symbolic name */ fcp_sym_node_name = P->port_sym_node_name ? P->port_sym_node_name : `utsname.nodename; /* port symbolic name */ fcp_sym_port_name = P->port_sym_port_name ? P->port_sym_port_name : ""; /* port hard address */ fcp_port_hard_address = P->port_hard_address; }; /* * Translator for fc_port_info_t, translating from the local port impl. */ #pragma D binding "1.5" translator translator fc_port_info_t < fct_i_local_port_t *P > { /* node WWN */ fcp_node_wwn = (P->iport_port ? (P->iport_port->port_nwwn_str[0] ? P->iport_port->port_nwwn_str : "") : ""); fcp_sym_node_name = (P->iport_port ? (P->iport_port->port_sym_node_name ? P->iport_port->port_sym_node_name : "") : ""); fcp_sym_port_name = (P->iport_port ? (P->iport_port->port_sym_port_name ? P->iport_port->port_sym_port_name : "") : ""); fcp_port_hard_address = (P->iport_port ? P->iport_port->port_hard_address : 0); }; /* * Translator for fc_port_info, translating from the remote port impl */ #pragma D binding "1.5" translator translator fc_port_info_t < fct_i_remote_port_t *P > { /* node WWN */ fcp_node_wwn = P->irp_rp ? (P->irp_rp->rp_nwwn_str[0] ? P->irp_rp->rp_nwwn_str : "") : ""; /* node symbolic name */ fcp_sym_node_name = P->irp_snn ? P->irp_snn : ""; /* port symbolic name */ fcp_sym_port_name = P->irp_spn ? P->irp_spn : ""; /* port hard address */ fcp_port_hard_address = P->irp_rp ? P->irp_rp->rp_id : 0; }; /* * Translator for fc_xferinfo, translating from stmf_data_buf_t. */ #pragma D binding "1.5" translator translator fc_xferinfo_t < stmf_data_buf_t *B > { fcx_len = B->db_data_size; fcx_offset = B->db_relative_offset; fcx_flags = B->db_flags; };