dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * CDDL HEADER START
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * The contents of this file are subject to the terms of the
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * Common Development and Distribution License (the "License").
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * You may not use this file except in compliance with the License.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * or http://www.opensolaris.org/os/licensing.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * See the License for the specific language governing permissions
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * and limitations under the License.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * When distributing Covered Code, include this CDDL HEADER in each
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * If applicable, add the following below this CDDL HEADER, with the
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * fields enclosed by brackets "[]" replaced with your own identifying
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * information: Portions Copyright [yyyy] [name of copyright owner]
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * CDDL HEADER END
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <sys/dditypes.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <sys/mdb_modapi.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <sys/modctl.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <sys/sunddi.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <lpif.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <stmf.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <stmf_ioctl.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <portif.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <stmf_sbd.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <sbd_impl.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#include <scsi/generic/persist.h>
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#define STMF_SBD_STR_MAX 2048
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan#define STMF_SBD_VERBOSE 0x00000001
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan#define ARRAY_SIZE(a) (sizeof (a) / sizeof (*a))
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/* structure to pass arguments to mdb_walker callback function */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyantypedef struct stmf_sbd_cb_s {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uint32_t flag;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan} stmf_sbd_cb_t;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstatic const char *stmf_protocol_str[] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "FIBRE_CHANNEL", /* PROTOCOL_FIBRE_CHANNEL 0 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "PARALLEL_SCSI", /* PROTOCOL_PARALLEL_SCSI 1 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SSA", /* PROTOCOL_SSA 2 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "IEEE_1394", /* PROTOCOL_IEEE_1394 3 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SRP", /* PROTOCOL_SRP 4 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "iSCSI", /* PROTOCOL_iSCSI 5 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SAS", /* PROTOCOL_SAS 6 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "ADT", /* PROTOCOL_ADT 7 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "ATAPI" /* PROTOCOL_ATAPI 8 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * Support functions.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstatic uint64_t
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyannhconvert_8bytes(const void *src) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan uint64_t dest;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_nhconvert(&dest, src, 8);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (dest);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan}
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * Variable 'bits' is a collection of flags for which a corresponding
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * description string is available at flag_ary.
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan * So flag_ary should be an ary of strings with total_bits strings.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic void
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstmf_sbd_print_bit_flags(const char *flag_ary[],
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan int total_bits, uint32_t bits) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uint32_t curbit = 0x01;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan int i, delim = 0;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan for (i = 0; i < total_bits; i++) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (bits & curbit) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("%s%s", (delim) ? " | " : "", flag_ary[i]);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan delim = 1;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan curbit <<= 1;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic void
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_print_pgr_info(sbd_pgr_t *pgr)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan static const char *pgr_flag_str[] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_PGR_APTPL", /* 0x01 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_PGR_RSVD_ONE", /* 0x02 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_PGR_RSVD_ALL_REGISTRANTS", /* 0x04 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_PGR_ALL_KEYS_HAS_IT" /* 0x08 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan };
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan static const char *pgr_type_desc[] = {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "ILLEGAL", /* 0x0 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Write Exclusive", /* 0x1 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "ILLEGAL", /* 0x2 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Exclusive Access", /* 0x3 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "ILLEGAL", /* 0x4 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Write Exclusive, Registrants Only", /* 0x5 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Exclusive Access, Registrants Only", /* 0x6 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Write Exclusive, All Registrants", /* 0x7 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "Exclusive Access, All Registrants" /* 0x8 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan };
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("PGR flags: ");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_sbd_print_bit_flags(pgr_flag_str, ARRAY_SIZE(pgr_flag_str),
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan pgr->pgr_flags);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (pgr->pgr_rsvholder || pgr->pgr_flags &
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan SBD_PGR_RSVD_ALL_REGISTRANTS) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("Reservation Details \n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tReservation holder: ");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (pgr->pgr_rsvholder)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("%p\n", pgr->pgr_rsvholder);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan else
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("All Registrants\n");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\t type : %d => %s\n",
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan pgr->pgr_rsv_type,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan (pgr->pgr_rsv_type < ARRAY_SIZE(pgr_type_desc)) ?
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan pgr_type_desc[pgr->pgr_rsv_type] : "ILLEGAL");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\t scope : %d\n", pgr->pgr_rsv_scope);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("No reservations.\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanvoid
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanprint_scsi_devid_desc(uintptr_t addr, uint16_t len, char *spacer)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan scsi_devid_desc_t *id;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (len < sizeof (*id)) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_warn("%sError: Devid Size = %d < sizeof(scsi_devid_desc_t)"
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "\n", spacer, len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan id = mdb_zalloc(len, UM_SLEEP);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(id, len, addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read scsi_devid_desc at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_free(id, len);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sTotal length:\t%d\n", spacer, len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sProtocol:\t%d => %-16s\n", spacer, id->protocol_id,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan (id->protocol_id < ARRAY_SIZE(stmf_protocol_str)) ?
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_protocol_str[id->protocol_id] : "");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sCode Set:\t%d\n", spacer, id->code_set);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sIdent Length:\t%d\n", spacer, id->ident_length);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (len < sizeof (*id) + id->ident_length - 1) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%s(Can not recognize ident data)\n", spacer);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan id->ident[id->ident_length] = '\0';
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sIdent:\t\t%s\n", spacer, id->ident);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_free(id, len);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan/*
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan * Decipher and print transport id which is pointed by addr variable.
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstatic int
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanprint_transport_id(uintptr_t addr, uint16_t tpd_len, char *spacer)
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan{
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan scsi_transport_id_t *tpd;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (tpd_len < sizeof (*tpd)) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_warn("%sError: Transport ID Size = %d < "
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "sizeof (scsi_transport_id_t)\n", spacer, tpd_len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (DCMD_ERR);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan tpd = mdb_zalloc(tpd_len, UM_SLEEP);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (mdb_vread(tpd, tpd_len, addr) == -1) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_warn("failed to read scsi_transport_id at %p\n", addr);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_free(tpd, tpd_len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (DCMD_ERR);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sTotal length:\t%d\n", spacer, tpd_len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sProtocol:\t%d => %16s\n", spacer, tpd->protocol_id,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan (tpd->protocol_id < ARRAY_SIZE(stmf_protocol_str)) ?
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_protocol_str[tpd->protocol_id] : "");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sFormat Code:\t0x%x\n", spacer, tpd->format_code);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan switch (tpd->protocol_id) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_FIBRE_CHANNEL:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan uint8_t *p = ((scsi_fc_transport_id_t *)tpd)->port_name;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sFC Port Name:\t%016llX\n", spacer,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan nhconvert_8bytes(p));
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan break;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_PARALLEL_SCSI:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_SSA:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_IEEE_1394:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan break;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_SRP:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan uint8_t *p = ((scsi_srp_transport_id_t *)tpd)->srp_name;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan /* Print 8 byte initiator extention and guid in order */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sSRP Name:\t%016llX:%016llX\n", spacer,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan nhconvert_8bytes(&p[8]), nhconvert_8bytes(&p[0]));
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan break;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_iSCSI:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("%sISCSI Name:\t%s\n", spacer,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan ((iscsi_transport_id_t *)tpd)->iscsi_name);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan break;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_SAS:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_ADT:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan case PROTOCOL_ATAPI:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan default:
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan break;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_free(tpd, tpd_len);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (DCMD_OK);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan}
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanvoid
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_pgr_key_dcmd_help(void)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf(
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "Prints info about pgr keys and reservations on the given lun.\n\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "Usage: <addr>::stmf_sbd_pgr_key [-akv]\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " where <addr> represent the address of\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " sbd_lu_t by default\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " or\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " sbd_pgr_key_t if '-a' option is specified.\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "Options:\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " -a if specified, <addr> represents address of sbd_pgr_key_t\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " -k if specified, only prints key information\n"
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan " -v verbose output\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * MDB WALKERS implementations
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_lu_walk_init(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_readvar(&wsp->walk_addr, "sbd_lu_list") == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu_list\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_lu_walk_step(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uintptr_t addr = wsp->walk_addr;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_lu_t slu;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_DONE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&slu, sizeof (sbd_lu_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu_t at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan wsp->walk_addr = (uintptr_t)slu.sl_next;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (wsp->walk_callback(addr, &slu, wsp->walk_cbdata));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanchar *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_getstr(uintptr_t addr, char *str) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if ((addr == 0) || (mdb_readstr(str, STMF_SBD_STR_MAX, addr) == -1))
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan str = NULL;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (str);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_lu_cb(uintptr_t addr, const sbd_lu_t *slu, stmf_sbd_cb_t *cb_st)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (cb_st->flag & STMF_SBD_VERBOSE) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan char str[STMF_SBD_STR_MAX];
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("\nsbd_lu - %p\n", addr);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan /* sl_device_id contains 4 bytes hdr + 16 bytes(GUID) */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("\tsl_deviceid: %-?p GUID => %016llX%016llX\n",
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan slu->sl_device_id, nhconvert_8bytes(&slu->sl_device_id[4]),
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan nhconvert_8bytes(&slu->sl_device_id[12]));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_name: %-?p %s\n", slu->sl_name,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_getstr((uintptr_t)slu->sl_name, str));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_alias: %-?p %s\n", slu->sl_alias,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_getstr((uintptr_t)slu->sl_alias, str));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_meta_filename: %-?p %s\n",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan slu->sl_meta_filename,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_getstr((uintptr_t)slu->sl_meta_filename, str));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_data_filename: %-?p %s\n",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan slu->sl_data_filename,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_getstr((uintptr_t)slu->sl_data_filename, str));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_mgmt_url: %-?p %s\n", slu->sl_mgmt_url,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_getstr((uintptr_t)slu->sl_mgmt_url, str));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_zfs_meta: %-?p\n", slu->sl_zfs_meta);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_it_list: %-?p\n", slu->sl_it_list);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tsl_pgr: %-?p\n", slu->sl_pgr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("%p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_pgr_key_walk_init(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("<pgr_key_list addr>::walk stmf_sbd_pgr_key\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_pgr_key_walk_step(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uintptr_t addr = wsp->walk_addr;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_pgr_key_t key;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_DONE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&key, sizeof (sbd_pgr_key_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_pgr_key_t at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan wsp->walk_addr = (uintptr_t)key.pgr_key_next;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (wsp->walk_callback(addr, &key, wsp->walk_cbdata));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_pgr_key_cb(uintptr_t addr, const sbd_pgr_key_t *key,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_cb_t *cb_st)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan static const char *key_flag_str [] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_PGR_KEY_ALL_TG_PT", /* 0x01 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "SBD_PGR_KEY_TPT_ID_FLAG" /* 0x02 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan };
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (cb_st->flag & STMF_SBD_VERBOSE) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("sbd_pgr_key - %p\n", addr);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("\tRegistered key: 0x%016llx\n", key->pgr_key);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tKey Flags: ");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_sbd_print_bit_flags(key_flag_str, ARRAY_SIZE(key_flag_str),
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan key->pgr_key_flags);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tpgr_key_it: %?-p\n", key->pgr_key_it);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tLocal Device ID: %?-p\n",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan key->pgr_key_lpt_id);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan print_scsi_devid_desc((uintptr_t)key->pgr_key_lpt_id,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan key->pgr_key_lpt_len, " ");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("\tRemote Transport ID: %?-p\n",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan key->pgr_key_rpt_id);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan print_transport_id((uintptr_t)key->pgr_key_rpt_id,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan key->pgr_key_rpt_len, " ");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("%p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_it_walk_init(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("<sbd_it_list addr>::walk stmf_sbd_pgr_key\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_it_walk_step(mdb_walk_state_t *wsp)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uintptr_t addr = wsp->walk_addr;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_it_data_t it;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (wsp->walk_addr == NULL)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_DONE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&it, sizeof (sbd_it_data_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_it_data_t at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan wsp->walk_addr = (uintptr_t)it.sbd_it_next;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (wsp->walk_callback(addr, &it, wsp->walk_cbdata));
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_it_cb(uintptr_t addr, const sbd_it_data_t *it, stmf_sbd_cb_t *cb_st)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan static const char *it_flag_str [] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_IT_HAS_SCSI2_RESERVATION", /* 0x0001 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_IT_PGR_REGISTERED", /* 0x0002 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan "SBD_IT_PGR_EXCLUSIVE_RSV_HOLDER", /* 0x0004 */
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan "SBD_IT_PGR_CHECK_FLAG" /* 0x0008 */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan };
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (cb_st->flag & STMF_SBD_VERBOSE) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("SBD IT DATA - %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tSession ID: 0x%0-lx\n", it->sbd_it_session_id);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tIT Flags: ");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_sbd_print_bit_flags(it_flag_str, ARRAY_SIZE(it_flag_str),
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan it->sbd_it_flags);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\tPGR Key: %-p\n", it->pgr_key_ptr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("%p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (WALK_NEXT);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * MDB DCMDS implementations.
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanint
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_lu(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uint_t verbose = FALSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_lu_t slu;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_cb_t cb_st = {0};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_getopts(argc, argv, 'v', MDB_OPT_SETBITS, TRUE, &verbose, NULL)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan != argc)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_USAGE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan cb_st.flag |= STMF_SBD_VERBOSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (flags & DCMD_ADDRSPEC) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan cb_st.flag |= STMF_SBD_VERBOSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&slu, sizeof (sbd_lu_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu_t at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (stmf_sbd_lu_cb(addr, &slu, &cb_st) == WALK_ERR)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_walk("stmf_sbd_lu", (mdb_walk_cb_t)stmf_sbd_lu_cb,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan &cb_st) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to walk sbd_lu_list\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_pgr_key(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uint_t verbose = FALSE, keyonly = FALSE, pgrkeyaddr = FALSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_lu_t slu;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_pgr_t pgr;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_pgr_key_t key;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_cb_t cb_st = {0};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (!(flags & DCMD_ADDRSPEC))
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_USAGE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_getopts(argc, argv,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan 'a', MDB_OPT_SETBITS, TRUE, &pgrkeyaddr,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan 'k', MDB_OPT_SETBITS, TRUE, &keyonly,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan 'v', MDB_OPT_SETBITS, TRUE, &verbose, NULL) != argc)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_USAGE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (pgrkeyaddr || verbose)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan cb_st.flag |= STMF_SBD_VERBOSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan /* If address of pgr_key is given, just print that key and return */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (pgrkeyaddr) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&key, sizeof (sbd_pgr_key_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_pgr_key at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (stmf_sbd_pgr_key_cb(addr, &key, &cb_st) == WALK_ERR) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&slu, sizeof (sbd_lu_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\nLU:- %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan /* Just a sanity check, not necessarily needed */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (slu.sl_pgr == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("pgr structure not found for lun %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&pgr, sizeof (sbd_pgr_t), (uintptr_t)slu.sl_pgr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu at %p\n", slu.sl_pgr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (!keyonly)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_print_pgr_info(&pgr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (pgr.pgr_keylist == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("No registered pgr keys found\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan } else {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (!keyonly)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_printf("\nKeys\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_pwalk("stmf_sbd_pgr_key", (mdb_walk_cb_t)stmf_sbd_pgr_key_cb,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan &cb_st, (uintptr_t)pgr.pgr_keylist) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to walk pgr_keylist\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan/*ARGSUSED*/
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstatic int
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyanstmf_remote_port(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan{
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_remote_port_t rpt;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan int ret = DCMD_OK;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (!(flags & DCMD_ADDRSPEC))
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (DCMD_USAGE);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan if (mdb_vread(&rpt, sizeof (stmf_remote_port_t), addr) == -1) {
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_warn("failed to read stmf_remote_port_t at %p\n", addr);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (DCMD_ERR);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan }
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan ret = print_transport_id((uintptr_t)rpt.rport_tptid,
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan rpt.rport_tptid_sz, " ");
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan return (ret);
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan}
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic int
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstmf_sbd_it(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan uint_t verbose = FALSE;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan sbd_lu_t slu;
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_cb_t cb_st = {0};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (!(flags & DCMD_ADDRSPEC))
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_USAGE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_getopts(argc, argv,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan 'v', MDB_OPT_SETBITS, TRUE, &verbose, NULL) != argc)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_USAGE);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan cb_st.flag |= STMF_SBD_VERBOSE;
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("\nLU:- %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan /* If address of pgr_key is given, just print that key and return */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_vread(&slu, sizeof (sbd_lu_t), addr) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to read sbd_lu at %p\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan /* Just a sanity check, not necessarily needed */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (slu.sl_it_list == NULL) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (verbose)
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan mdb_printf("sbd_it_list is empty\n", addr);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan if (mdb_pwalk("stmf_sbd_it", (mdb_walk_cb_t)stmf_sbd_it_cb, &cb_st,
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan (uintptr_t)slu.sl_it_list) == -1) {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan mdb_warn("failed to walk sbd_lu_it_list\n");
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_ERR);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (DCMD_OK);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan/*
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan * MDB dmcds and walkers definitions
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan */
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic const mdb_dcmd_t dcmds[] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_lu", "?[-v]", "Print the list of sbd_lu_t",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_lu, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_it", ":[-v]", "Print the list of sbd_it_data for given lu",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_it, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_pgr_key", ":[-kov]", "Print the list of pgr keys",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_pgr_key, stmf_sbd_pgr_key_dcmd_help },
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan { "stmf_remote_port", ":", "decipher info in a stmf_remote_port",
716c180559045549271833327182dc6a266134f1Nattuvetty Bhavyan stmf_remote_port, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { NULL }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic const mdb_walker_t walkers[] = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_lu", "walk list of stmf_sbd_lu structures",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_lu_walk_init, stmf_sbd_lu_walk_step, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_pgr_key", "walk the pgr keys of the given pgr key list",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_pgr_key_walk_init, stmf_sbd_pgr_key_walk_step, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { "stmf_sbd_it", "walk the sbd_it_data for the given it list",
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan stmf_sbd_it_walk_init, stmf_sbd_it_walk_step, NULL },
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan { NULL }
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanstatic const mdb_modinfo_t modinfo = {
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan MDB_API_VERSION, dcmds, walkers
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan};
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyanconst mdb_modinfo_t *
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan_mdb_init(void)
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan{
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan return (&modinfo);
dea05b66b1fa2d0242e78345542e72df4f14a55fNattuvetty Bhavyan}