summaryrefslogtreecommitdiffstats
path: root/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d')
-rw-r--r--src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/fc.d183
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;
+};