diff options
Diffstat (limited to '')
-rw-r--r-- | src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d new file mode 100644 index 00000000..433e645c --- /dev/null +++ b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d @@ -0,0 +1,183 @@ +/* + * 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 : "<unknown>"; + ci_remote = "<unknown>"; + 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 : "<unknown>"; + ci_remote = "<unknown>"; + 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 : "<unknown>") : + "<unknown>"); + + ci_remote = (C->cmd_rp ? + (C->cmd_rp->rp_pwwn_str[0] ? + C->cmd_rp->rp_pwwn_str : "<unknown>") : + "<unknown>"); + + 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 : "<unknown>"; + + /* 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 : "<unknown>"; + + /* 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 : + "<unknown>") : + "<bad iport_port ptr>"); + + fcp_sym_node_name = + (P->iport_port ? + (P->iport_port->port_sym_node_name ? + P->iport_port->port_sym_node_name : "<unknown>") : + "<bad iport_port ptr>"); + + fcp_sym_port_name = + (P->iport_port ? + (P->iport_port->port_sym_port_name ? + P->iport_port->port_sym_port_name : "<unknown>") : + "<bad iport_port ptr>"); + + 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 : "<unknown>") : + "<unknown>"; + + /* node symbolic name */ + fcp_sym_node_name = P->irp_snn ? P->irp_snn : "<unknown>"; + + /* port symbolic name */ + fcp_sym_port_name = P->irp_spn ? P->irp_spn : "<unknown>"; + + /* 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; +}; |