1*2654012fSReza Sabdar /* 2*2654012fSReza Sabdar * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3*2654012fSReza Sabdar * Use is subject to license terms. 4*2654012fSReza Sabdar */ 5*2654012fSReza Sabdar 6*2654012fSReza Sabdar /* 7*2654012fSReza Sabdar * BSD 3 Clause License 8*2654012fSReza Sabdar * 9*2654012fSReza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association. 10*2654012fSReza Sabdar * 11*2654012fSReza Sabdar * Redistribution and use in source and binary forms, with or without 12*2654012fSReza Sabdar * modification, are permitted provided that the following conditions 13*2654012fSReza Sabdar * are met: 14*2654012fSReza Sabdar * - Redistributions of source code must retain the above copyright 15*2654012fSReza Sabdar * notice, this list of conditions and the following disclaimer. 16*2654012fSReza Sabdar * 17*2654012fSReza Sabdar * - Redistributions in binary form must reproduce the above copyright 18*2654012fSReza Sabdar * notice, this list of conditions and the following disclaimer in 19*2654012fSReza Sabdar * the documentation and/or other materials provided with the 20*2654012fSReza Sabdar * distribution. 21*2654012fSReza Sabdar * 22*2654012fSReza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA) 23*2654012fSReza Sabdar * nor the names of its contributors may be used to endorse or promote 24*2654012fSReza Sabdar * products derived from this software without specific prior written 25*2654012fSReza Sabdar * permission. 26*2654012fSReza Sabdar * 27*2654012fSReza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 28*2654012fSReza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29*2654012fSReza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30*2654012fSReza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 31*2654012fSReza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32*2654012fSReza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33*2654012fSReza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34*2654012fSReza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35*2654012fSReza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36*2654012fSReza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37*2654012fSReza Sabdar * POSSIBILITY OF SUCH DAMAGE. 38*2654012fSReza Sabdar */ 39*2654012fSReza Sabdar #include <stdio.h> 40*2654012fSReza Sabdar #include <locale.h> 41*2654012fSReza Sabdar #include <libndmp.h> 42*2654012fSReza Sabdar #include "ndmpadm.h" 43*2654012fSReza Sabdar 44*2654012fSReza Sabdar /* static functions prototype */ 45*2654012fSReza Sabdar static void ndmp_tprint_addr(char *, ndmp_ad_type_t, char *); 46*2654012fSReza Sabdar static void ndmp_print_env(ndmp_session_info_t *); 47*2654012fSReza Sabdar static void ndmp_connect_print_conn(ndmp_session_info_t *); 48*2654012fSReza Sabdar static void ndmp_connect_print_scsi_v2(ndmp_session_info_t *); 49*2654012fSReza Sabdar static void ndmp_connect_print_tape_v2(ndmp_session_info_t *); 50*2654012fSReza Sabdar static void ndmp_connect_print_mover_v2(ndmp_session_info_t *); 51*2654012fSReza Sabdar static void ndmp_connect_print_data_v2(ndmp_session_info_t *); 52*2654012fSReza Sabdar static void ndmp_connect_print_v2(int, ndmp_session_info_t *); 53*2654012fSReza Sabdar static void ndmp_connect_print_mover_v3(ndmp_session_info_t *); 54*2654012fSReza Sabdar static void ndmp_connect_print_data_v3(ndmp_session_info_t *); 55*2654012fSReza Sabdar static void ndmp_connect_print_v3(int, ndmp_session_info_t *); 56*2654012fSReza Sabdar static void ndmp_connection_print(int, ndmp_session_info_t *); 57*2654012fSReza Sabdar 58*2654012fSReza Sabdar /* Boolean to string. */ 59*2654012fSReza Sabdar #define B2S(b) ((b) ? "Yes" : "No") 60*2654012fSReza Sabdar 61*2654012fSReza Sabdar /* 62*2654012fSReza Sabdar * Print the address type and IP address if the address type is tcp 63*2654012fSReza Sabdar */ 64*2654012fSReza Sabdar static void 65*2654012fSReza Sabdar ndmp_tprint_addr(char *label, ndmp_ad_type_t addr_type, char *tcp_addr) 66*2654012fSReza Sabdar { 67*2654012fSReza Sabdar if ((label == NULL) || (tcp_addr == NULL)) 68*2654012fSReza Sabdar return; 69*2654012fSReza Sabdar 70*2654012fSReza Sabdar switch (addr_type) { 71*2654012fSReza Sabdar case NDMP_AD_LOCAL: 72*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tLocal\n"), label); 73*2654012fSReza Sabdar break; 74*2654012fSReza Sabdar case NDMP_AD_TCP: 75*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tTCP\n"), label); 76*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s address:\t%s\n"), 77*2654012fSReza Sabdar label, tcp_addr); 78*2654012fSReza Sabdar break; 79*2654012fSReza Sabdar case NDMP_AD_FC: 80*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tFC\n"), label); 81*2654012fSReza Sabdar break; 82*2654012fSReza Sabdar case NDMP_AD_IPC: 83*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tIPC\n"), label); 84*2654012fSReza Sabdar break; 85*2654012fSReza Sabdar default: 86*2654012fSReza Sabdar (void) fprintf(stdout, 87*2654012fSReza Sabdar gettext("\t%s addr type unknown (0x%x)\n"), 88*2654012fSReza Sabdar label, addr_type); 89*2654012fSReza Sabdar } 90*2654012fSReza Sabdar } 91*2654012fSReza Sabdar 92*2654012fSReza Sabdar /* 93*2654012fSReza Sabdar * Print all the data environment variables for the active session 94*2654012fSReza Sabdar */ 95*2654012fSReza Sabdar static void 96*2654012fSReza Sabdar ndmp_print_env(ndmp_session_info_t *si) 97*2654012fSReza Sabdar { 98*2654012fSReza Sabdar int i, n; 99*2654012fSReza Sabdar ndmp_dt_pval_t *ep; 100*2654012fSReza Sabdar 101*2654012fSReza Sabdar n = si->nsi_data.nd_env_len; 102*2654012fSReza Sabdar ep = si->nsi_data.nd_env; 103*2654012fSReza Sabdar for (i = 0; ep && i < n; i++, ep++) { 104*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.env[%d]:\t%s: "), 105*2654012fSReza Sabdar i, ep->np_name); 106*2654012fSReza Sabdar if ((ep->np_value != NULL) && (*ep->np_value != NULL)) 107*2654012fSReza Sabdar (void) fprintf(stdout, "\"%s\"\n", ep->np_value); 108*2654012fSReza Sabdar } 109*2654012fSReza Sabdar } 110*2654012fSReza Sabdar 111*2654012fSReza Sabdar /* 112*2654012fSReza Sabdar * Print common fields of the active connection. 113*2654012fSReza Sabdar */ 114*2654012fSReza Sabdar static void 115*2654012fSReza Sabdar ndmp_connect_print_conn(ndmp_session_info_t *si) 116*2654012fSReza Sabdar { 117*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tSession Id:\t%d\n"), si->nsi_sid); 118*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tProtocol version:\t%d\n"), 119*2654012fSReza Sabdar si->nsi_pver); 120*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tAuthenticated:\t\t%s\n"), 121*2654012fSReza Sabdar B2S(si->nsi_auth)); 122*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tEOF:\t\t\t%s\n"), B2S(si->nsi_eof)); 123*2654012fSReza Sabdar if (si->nsi_cl_addr != NULL) 124*2654012fSReza Sabdar (void) fprintf(stdout, 125*2654012fSReza Sabdar gettext("\tClient address:\t\t%s\n"), si->nsi_cl_addr); 126*2654012fSReza Sabdar } 127*2654012fSReza Sabdar 128*2654012fSReza Sabdar /* 129*2654012fSReza Sabdar * Print the connection SCSI info. 130*2654012fSReza Sabdar */ 131*2654012fSReza Sabdar static void 132*2654012fSReza Sabdar ndmp_connect_print_scsi_v2(ndmp_session_info_t *si) 133*2654012fSReza Sabdar { 134*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.open:\t\t%s\n"), 135*2654012fSReza Sabdar B2S(si->nsi_scsi.ns_scsi_open != -1)); 136*2654012fSReza Sabdar if (si->nsi_scsi.ns_adapter_name) 137*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.adapter:\t\t\"%s\"\n"), 138*2654012fSReza Sabdar si->nsi_scsi.ns_adapter_name); 139*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.valid target:\t%s\n"), 140*2654012fSReza Sabdar B2S(si->nsi_scsi.ns_valid_target_set)); 141*2654012fSReza Sabdar if (si->nsi_scsi.ns_valid_target_set) { 142*2654012fSReza Sabdar (void) fprintf(stdout, 143*2654012fSReza Sabdar gettext("\tscsi.SID:\t\t%d\n"), si->nsi_scsi.ns_scsi_id); 144*2654012fSReza Sabdar (void) fprintf(stdout, 145*2654012fSReza Sabdar gettext("\tscsi.LUN:\t\t%d\n"), si->nsi_scsi.ns_lun); 146*2654012fSReza Sabdar } 147*2654012fSReza Sabdar } 148*2654012fSReza Sabdar 149*2654012fSReza Sabdar /* 150*2654012fSReza Sabdar * Print the connection tape info. 151*2654012fSReza Sabdar */ 152*2654012fSReza Sabdar static void 153*2654012fSReza Sabdar ndmp_connect_print_tape_v2(ndmp_session_info_t *si) 154*2654012fSReza Sabdar { 155*2654012fSReza Sabdar if (si->nsi_tape.nt_fd != -1) { 156*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.fd:\t\t%d\n"), 157*2654012fSReza Sabdar si->nsi_tape.nt_fd); 158*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.record count:\t%d\n"), 159*2654012fSReza Sabdar (int)si->nsi_tape.nt_rec_count); 160*2654012fSReza Sabdar 161*2654012fSReza Sabdar switch (si->nsi_tape.nt_mode) { 162*2654012fSReza Sabdar case NDMP_TP_READ_MODE: 163*2654012fSReza Sabdar (void) fprintf(stdout, 164*2654012fSReza Sabdar gettext("\ttape.mode:\t\tRead-only\n")); 165*2654012fSReza Sabdar break; 166*2654012fSReza Sabdar case NDMP_TP_WRITE_MODE: 167*2654012fSReza Sabdar (void) fprintf(stdout, 168*2654012fSReza Sabdar gettext("\ttape.mode:\t\tRead/Write\n")); 169*2654012fSReza Sabdar break; 170*2654012fSReza Sabdar case NDMP_TP_RAW1_MODE: 171*2654012fSReza Sabdar (void) fprintf(stdout, 172*2654012fSReza Sabdar gettext("\ttape.mode:\t\tRaw\n")); 173*2654012fSReza Sabdar break; 174*2654012fSReza Sabdar default: 175*2654012fSReza Sabdar (void) fprintf(stdout, 176*2654012fSReza Sabdar gettext("\ttape.mode:\t\tUnknown (0x%x)\n"), 177*2654012fSReza Sabdar si->nsi_tape.nt_mode); 178*2654012fSReza Sabdar } 179*2654012fSReza Sabdar 180*2654012fSReza Sabdar if (si->nsi_tape.nt_dev_name) 181*2654012fSReza Sabdar (void) fprintf(stdout, 182*2654012fSReza Sabdar gettext("\ttape.device name:\t%s\n"), 183*2654012fSReza Sabdar si->nsi_tape.nt_dev_name); 184*2654012fSReza Sabdar if (si->nsi_tape.nt_adapter_name) 185*2654012fSReza Sabdar (void) fprintf(stdout, 186*2654012fSReza Sabdar gettext("\ttape.adapter name:\t\"%s\"\n"), 187*2654012fSReza Sabdar si->nsi_tape.nt_adapter_name); 188*2654012fSReza Sabdar (void) fprintf(stdout, 189*2654012fSReza Sabdar gettext("\ttape.SID:\t\t%d\n"), si->nsi_tape.nt_sid); 190*2654012fSReza Sabdar (void) fprintf(stdout, 191*2654012fSReza Sabdar gettext("\ttape.LUN:\t\t%d\n"), si->nsi_tape.nt_lun); 192*2654012fSReza Sabdar } else 193*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.device:\t\tNot open\n")); 194*2654012fSReza Sabdar } 195*2654012fSReza Sabdar 196*2654012fSReza Sabdar /* 197*2654012fSReza Sabdar * Print the connection mover info. 198*2654012fSReza Sabdar */ 199*2654012fSReza Sabdar static void 200*2654012fSReza Sabdar ndmp_connect_print_mover_v2(ndmp_session_info_t *si) 201*2654012fSReza Sabdar { 202*2654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 203*2654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 204*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 205*2654012fSReza Sabdar break; 206*2654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 207*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 208*2654012fSReza Sabdar break; 209*2654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 210*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 211*2654012fSReza Sabdar break; 212*2654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 213*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 214*2654012fSReza Sabdar break; 215*2654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 216*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 217*2654012fSReza Sabdar break; 218*2654012fSReza Sabdar default: 219*2654012fSReza Sabdar (void) fprintf(stdout, 220*2654012fSReza Sabdar gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 221*2654012fSReza Sabdar si->nsi_mover.nm_state); 222*2654012fSReza Sabdar } 223*2654012fSReza Sabdar 224*2654012fSReza Sabdar switch (si->nsi_mover.nm_mode) { 225*2654012fSReza Sabdar case NDMP_MV_MODE_READ: 226*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 227*2654012fSReza Sabdar break; 228*2654012fSReza Sabdar case NDMP_MV_MODE_WRITE: 229*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 230*2654012fSReza Sabdar break; 231*2654012fSReza Sabdar default: 232*2654012fSReza Sabdar (void) fprintf(stdout, 233*2654012fSReza Sabdar gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 234*2654012fSReza Sabdar si->nsi_mover.nm_mode); 235*2654012fSReza Sabdar } 236*2654012fSReza Sabdar 237*2654012fSReza Sabdar switch (si->nsi_mover.nm_pause_reason) { 238*2654012fSReza Sabdar case NDMP_MV_PAUSE_NA: 239*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 240*2654012fSReza Sabdar break; 241*2654012fSReza Sabdar case NDMP_MV_PAUSE_EOM: 242*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 243*2654012fSReza Sabdar break; 244*2654012fSReza Sabdar case NDMP_MV_PAUSE_EOF: 245*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 246*2654012fSReza Sabdar break; 247*2654012fSReza Sabdar case NDMP_MV_PAUSE_SEEK: 248*2654012fSReza Sabdar (void) fprintf(stdout, 249*2654012fSReza Sabdar gettext("\tmover.pause reason:\tSeek\n")); 250*2654012fSReza Sabdar break; 251*2654012fSReza Sabdar case NDMP_MV_PAUSE_MEDIA_ERROR: 252*2654012fSReza Sabdar (void) fprintf(stdout, 253*2654012fSReza Sabdar gettext("\tmover.pause reason:\tMedia Error\n")); 254*2654012fSReza Sabdar break; 255*2654012fSReza Sabdar default: 256*2654012fSReza Sabdar (void) fprintf(stdout, 257*2654012fSReza Sabdar gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 258*2654012fSReza Sabdar si->nsi_mover.nm_pause_reason); 259*2654012fSReza Sabdar } 260*2654012fSReza Sabdar 261*2654012fSReza Sabdar switch (si->nsi_mover.nm_halt_reason) { 262*2654012fSReza Sabdar case NDMP_MV_HALT_NA: 263*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 264*2654012fSReza Sabdar break; 265*2654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_CLOSED: 266*2654012fSReza Sabdar (void) fprintf(stdout, 267*2654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection closed\n")); 268*2654012fSReza Sabdar break; 269*2654012fSReza Sabdar case NDMP_MV_HALT_ABORTED: 270*2654012fSReza Sabdar (void) fprintf(stdout, 271*2654012fSReza Sabdar gettext("\tmover.halt reason:\tAborted\n")); 272*2654012fSReza Sabdar break; 273*2654012fSReza Sabdar case NDMP_MV_HALT_INTERNAL_ERROR: 274*2654012fSReza Sabdar (void) fprintf(stdout, 275*2654012fSReza Sabdar gettext("\tmover.halt reason:\tInternal error\n")); 276*2654012fSReza Sabdar break; 277*2654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_ERROR: 278*2654012fSReza Sabdar (void) fprintf(stdout, 279*2654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection error\n")); 280*2654012fSReza Sabdar break; 281*2654012fSReza Sabdar default: 282*2654012fSReza Sabdar (void) fprintf(stdout, 283*2654012fSReza Sabdar gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 284*2654012fSReza Sabdar si->nsi_mover.nm_halt_reason); 285*2654012fSReza Sabdar } 286*2654012fSReza Sabdar 287*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 288*2654012fSReza Sabdar (int)si->nsi_mover.nm_rec_size); 289*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 290*2654012fSReza Sabdar (int)si->nsi_mover.nm_rec_num); 291*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 292*2654012fSReza Sabdar si->nsi_mover.nm_mov_pos); 293*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 294*2654012fSReza Sabdar si->nsi_mover.nm_window_offset); 295*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 296*2654012fSReza Sabdar si->nsi_mover.nm_window_length); 297*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 298*2654012fSReza Sabdar si->nsi_mover.nm_sock); 299*2654012fSReza Sabdar } 300*2654012fSReza Sabdar 301*2654012fSReza Sabdar /* 302*2654012fSReza Sabdar * Print the connection data info. 303*2654012fSReza Sabdar */ 304*2654012fSReza Sabdar static void 305*2654012fSReza Sabdar ndmp_connect_print_data_v2(ndmp_session_info_t *si) 306*2654012fSReza Sabdar { 307*2654012fSReza Sabdar int i; 308*2654012fSReza Sabdar ndmp_dt_name_t *np; 309*2654012fSReza Sabdar 310*2654012fSReza Sabdar switch (si->nsi_data.nd_oper) { 311*2654012fSReza Sabdar case NDMP_DT_OP_NOACTION: 312*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 313*2654012fSReza Sabdar break; 314*2654012fSReza Sabdar case NDMP_DT_OP_BACKUP: 315*2654012fSReza Sabdar (void) fprintf(stdout, 316*2654012fSReza Sabdar gettext("\tdata.operation:\t\tBackup\n")); 317*2654012fSReza Sabdar break; 318*2654012fSReza Sabdar case NDMP_DT_OP_RECOVER: 319*2654012fSReza Sabdar (void) fprintf(stdout, 320*2654012fSReza Sabdar gettext("\tdata.operation:\t\tRestore\n")); 321*2654012fSReza Sabdar break; 322*2654012fSReza Sabdar default: 323*2654012fSReza Sabdar (void) fprintf(stdout, 324*2654012fSReza Sabdar gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 325*2654012fSReza Sabdar si->nsi_data.nd_oper); 326*2654012fSReza Sabdar } 327*2654012fSReza Sabdar 328*2654012fSReza Sabdar switch (si->nsi_data.nd_state) { 329*2654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 330*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 331*2654012fSReza Sabdar break; 332*2654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 333*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 334*2654012fSReza Sabdar break; 335*2654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 336*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 337*2654012fSReza Sabdar break; 338*2654012fSReza Sabdar default: 339*2654012fSReza Sabdar (void) fprintf(stdout, 340*2654012fSReza Sabdar gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 341*2654012fSReza Sabdar si->nsi_data.nd_state); 342*2654012fSReza Sabdar } 343*2654012fSReza Sabdar 344*2654012fSReza Sabdar switch (si->nsi_data.nd_halt_reason) { 345*2654012fSReza Sabdar case NDMP_DT_HALT_NA: 346*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.halt reason:\tN/A\n")); 347*2654012fSReza Sabdar break; 348*2654012fSReza Sabdar case NDMP_DT_HALT_SUCCESSFUL: 349*2654012fSReza Sabdar (void) fprintf(stdout, 350*2654012fSReza Sabdar gettext("\tdata.halt reason:\tSuccessful\n")); 351*2654012fSReza Sabdar break; 352*2654012fSReza Sabdar case NDMP_DT_HALT_ABORTED: 353*2654012fSReza Sabdar (void) fprintf(stdout, 354*2654012fSReza Sabdar gettext("\tdata.halt reason:\tAborted\n")); 355*2654012fSReza Sabdar break; 356*2654012fSReza Sabdar case NDMP_DT_HALT_INTERNAL_ERROR: 357*2654012fSReza Sabdar (void) fprintf(stdout, 358*2654012fSReza Sabdar gettext("\tdata.halt reason:\tInternal error\n")); 359*2654012fSReza Sabdar break; 360*2654012fSReza Sabdar case NDMP_DT_HALT_CONNECT_ERROR: 361*2654012fSReza Sabdar (void) fprintf(stdout, 362*2654012fSReza Sabdar gettext("\tdata.halt reason:\tConnection error\n")); 363*2654012fSReza Sabdar break; 364*2654012fSReza Sabdar default: 365*2654012fSReza Sabdar (void) fprintf(stdout, 366*2654012fSReza Sabdar gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 367*2654012fSReza Sabdar si->nsi_data.nd_halt_reason); 368*2654012fSReza Sabdar } 369*2654012fSReza Sabdar 370*2654012fSReza Sabdar switch (si->nsi_data.nd_addr_type) { 371*2654012fSReza Sabdar case NDMP_AD_LOCAL: 372*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.mover type:\tLocal\n")); 373*2654012fSReza Sabdar break; 374*2654012fSReza Sabdar case NDMP_AD_TCP: 375*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.mover type:\tTCP\n")); 376*2654012fSReza Sabdar if (si->nsi_data.nd_tcp_addr) 377*2654012fSReza Sabdar (void) fprintf(stdout, 378*2654012fSReza Sabdar gettext("\tdata.mover address:\t%s\n"), 379*2654012fSReza Sabdar si->nsi_data.nd_tcp_addr); 380*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.sock:\t%d\n"), 381*2654012fSReza Sabdar si->nsi_data.nd_sock); 382*2654012fSReza Sabdar break; 383*2654012fSReza Sabdar default: 384*2654012fSReza Sabdar (void) fprintf(stdout, 385*2654012fSReza Sabdar gettext("\tdata.mover type:\tUnknown (0x%x)\n"), 386*2654012fSReza Sabdar si->nsi_data.nd_addr_type); 387*2654012fSReza Sabdar } 388*2654012fSReza Sabdar 389*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 390*2654012fSReza Sabdar B2S(si->nsi_data.nd_abort)); 391*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 392*2654012fSReza Sabdar si->nsi_data.nd_read_offset); 393*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 394*2654012fSReza Sabdar si->nsi_data.nd_read_length); 395*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 396*2654012fSReza Sabdar si->nsi_data.nd_total_size); 397*2654012fSReza Sabdar 398*2654012fSReza Sabdar ndmp_print_env(si); 399*2654012fSReza Sabdar 400*2654012fSReza Sabdar np = si->nsi_data.nd_nlist.nld_nlist; 401*2654012fSReza Sabdar for (i = 0; np && i < (int)si->nsi_data.nld_nlist_len; i++, np++) { 402*2654012fSReza Sabdar if ((np->nn_name) && (np->nn_dest)) { 403*2654012fSReza Sabdar (void) fprintf(stdout, 404*2654012fSReza Sabdar gettext("\tdata.nlist[%d]:\tname: " 405*2654012fSReza Sabdar "\"%s\"\n\t\tdest:\"%s\"\n"), 406*2654012fSReza Sabdar i, np->nn_name, np->nn_dest); 407*2654012fSReza Sabdar } 408*2654012fSReza Sabdar } 409*2654012fSReza Sabdar } 410*2654012fSReza Sabdar 411*2654012fSReza Sabdar /* 412*2654012fSReza Sabdar * Print V2 connection info for the given category. 413*2654012fSReza Sabdar */ 414*2654012fSReza Sabdar static void 415*2654012fSReza Sabdar ndmp_connect_print_v2(int cat, ndmp_session_info_t *si) 416*2654012fSReza Sabdar { 417*2654012fSReza Sabdar if (cat & NDMP_CAT_SCSI) 418*2654012fSReza Sabdar ndmp_connect_print_scsi_v2(si); 419*2654012fSReza Sabdar if (cat & NDMP_CAT_TAPE) 420*2654012fSReza Sabdar ndmp_connect_print_tape_v2(si); 421*2654012fSReza Sabdar if (cat & NDMP_CAT_MOVER) 422*2654012fSReza Sabdar ndmp_connect_print_mover_v2(si); 423*2654012fSReza Sabdar if (cat & NDMP_CAT_DATA) 424*2654012fSReza Sabdar ndmp_connect_print_data_v2(si); 425*2654012fSReza Sabdar } 426*2654012fSReza Sabdar 427*2654012fSReza Sabdar /* 428*2654012fSReza Sabdar * Print the V3 connection mover info. 429*2654012fSReza Sabdar */ 430*2654012fSReza Sabdar static void 431*2654012fSReza Sabdar ndmp_connect_print_mover_v3(ndmp_session_info_t *si) 432*2654012fSReza Sabdar { 433*2654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 434*2654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 435*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 436*2654012fSReza Sabdar break; 437*2654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 438*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 439*2654012fSReza Sabdar break; 440*2654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 441*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 442*2654012fSReza Sabdar break; 443*2654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 444*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 445*2654012fSReza Sabdar break; 446*2654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 447*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 448*2654012fSReza Sabdar break; 449*2654012fSReza Sabdar default: 450*2654012fSReza Sabdar (void) fprintf(stdout, 451*2654012fSReza Sabdar gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 452*2654012fSReza Sabdar si->nsi_mover.nm_state); 453*2654012fSReza Sabdar } 454*2654012fSReza Sabdar 455*2654012fSReza Sabdar switch (si->nsi_mover.nm_mode) { 456*2654012fSReza Sabdar case NDMP_MV_MODE_READ: 457*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 458*2654012fSReza Sabdar break; 459*2654012fSReza Sabdar case NDMP_MV_MODE_WRITE: 460*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 461*2654012fSReza Sabdar break; 462*2654012fSReza Sabdar default: 463*2654012fSReza Sabdar (void) fprintf(stdout, 464*2654012fSReza Sabdar gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 465*2654012fSReza Sabdar si->nsi_mover.nm_mode); 466*2654012fSReza Sabdar } 467*2654012fSReza Sabdar 468*2654012fSReza Sabdar switch (si->nsi_mover.nm_pause_reason) { 469*2654012fSReza Sabdar case NDMP_MV_PAUSE_NA: 470*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 471*2654012fSReza Sabdar break; 472*2654012fSReza Sabdar case NDMP_MV_PAUSE_EOM: 473*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 474*2654012fSReza Sabdar break; 475*2654012fSReza Sabdar case NDMP_MV_PAUSE_EOF: 476*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 477*2654012fSReza Sabdar break; 478*2654012fSReza Sabdar case NDMP_MV_PAUSE_SEEK: 479*2654012fSReza Sabdar (void) fprintf(stdout, 480*2654012fSReza Sabdar gettext("\tmover.pause reason:\tSeek\n")); 481*2654012fSReza Sabdar break; 482*2654012fSReza Sabdar case NDMP_MV_PAUSE_MEDIA_ERROR: 483*2654012fSReza Sabdar (void) fprintf(stdout, 484*2654012fSReza Sabdar gettext("\tmover.pause reason:\tMedia Error\n")); 485*2654012fSReza Sabdar break; 486*2654012fSReza Sabdar case NDMP_MV_PAUSE_EOW: 487*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOW\n")); 488*2654012fSReza Sabdar break; 489*2654012fSReza Sabdar default: 490*2654012fSReza Sabdar (void) fprintf(stdout, 491*2654012fSReza Sabdar gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 492*2654012fSReza Sabdar si->nsi_mover.nm_pause_reason); 493*2654012fSReza Sabdar } 494*2654012fSReza Sabdar 495*2654012fSReza Sabdar switch (si->nsi_mover.nm_halt_reason) { 496*2654012fSReza Sabdar case NDMP_MV_HALT_NA: 497*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 498*2654012fSReza Sabdar break; 499*2654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_CLOSED: 500*2654012fSReza Sabdar (void) fprintf(stdout, 501*2654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection closed\n")); 502*2654012fSReza Sabdar break; 503*2654012fSReza Sabdar case NDMP_MV_HALT_ABORTED: 504*2654012fSReza Sabdar (void) fprintf(stdout, 505*2654012fSReza Sabdar gettext("\tmover.halt reason:\tAborted\n")); 506*2654012fSReza Sabdar break; 507*2654012fSReza Sabdar case NDMP_MV_HALT_INTERNAL_ERROR: 508*2654012fSReza Sabdar (void) fprintf(stdout, 509*2654012fSReza Sabdar gettext("\tmover.halt reason:\tInternal error\n")); 510*2654012fSReza Sabdar break; 511*2654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_ERROR: 512*2654012fSReza Sabdar (void) fprintf(stdout, 513*2654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection error\n")); 514*2654012fSReza Sabdar break; 515*2654012fSReza Sabdar default: 516*2654012fSReza Sabdar (void) fprintf(stdout, 517*2654012fSReza Sabdar gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 518*2654012fSReza Sabdar si->nsi_mover.nm_halt_reason); 519*2654012fSReza Sabdar } 520*2654012fSReza Sabdar 521*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 522*2654012fSReza Sabdar (int)si->nsi_mover.nm_rec_size); 523*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 524*2654012fSReza Sabdar (int)si->nsi_mover.nm_rec_num); 525*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 526*2654012fSReza Sabdar si->nsi_mover.nm_mov_pos, si->nsi_mover.nm_mov_pos); 527*2654012fSReza Sabdar 528*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 529*2654012fSReza Sabdar si->nsi_mover.nm_window_length, si->nsi_mover.nm_window_length); 530*2654012fSReza Sabdar 531*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 532*2654012fSReza Sabdar si->nsi_mover.nm_window_offset); 533*2654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 534*2654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 535*2654012fSReza Sabdar if (si->nsi_mover.nm_listen_sock != -1) 536*2654012fSReza Sabdar (void) fprintf(stdout, 537*2654012fSReza Sabdar gettext("\tmover.listenSock:\t%d\n"), 538*2654012fSReza Sabdar si->nsi_mover.nm_listen_sock); 539*2654012fSReza Sabdar if (si->nsi_mover.nm_sock != -1) 540*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.sock:\t%d\n"), 541*2654012fSReza Sabdar si->nsi_mover.nm_sock); 542*2654012fSReza Sabdar break; 543*2654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 544*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.listen socket:\t%d\n"), 545*2654012fSReza Sabdar si->nsi_mover.nm_listen_sock); 546*2654012fSReza Sabdar ndmp_tprint_addr(gettext("mover.listen"), 547*2654012fSReza Sabdar si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 548*2654012fSReza Sabdar break; 549*2654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 550*2654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 551*2654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 552*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 553*2654012fSReza Sabdar si->nsi_mover.nm_sock); 554*2654012fSReza Sabdar ndmp_tprint_addr(gettext("mover.data connection"), 555*2654012fSReza Sabdar si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 556*2654012fSReza Sabdar break; 557*2654012fSReza Sabdar } 558*2654012fSReza Sabdar } 559*2654012fSReza Sabdar 560*2654012fSReza Sabdar /* 561*2654012fSReza Sabdar * Print the connection data info. 562*2654012fSReza Sabdar */ 563*2654012fSReza Sabdar static void 564*2654012fSReza Sabdar ndmp_connect_print_data_v3(ndmp_session_info_t *si) 565*2654012fSReza Sabdar { 566*2654012fSReza Sabdar int i; 567*2654012fSReza Sabdar ndmp_dt_name_v3_t *np; 568*2654012fSReza Sabdar 569*2654012fSReza Sabdar switch (si->nsi_data.nd_oper) { 570*2654012fSReza Sabdar case NDMP_DT_OP_NOACTION: 571*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 572*2654012fSReza Sabdar break; 573*2654012fSReza Sabdar case NDMP_DT_OP_BACKUP: 574*2654012fSReza Sabdar (void) fprintf(stdout, 575*2654012fSReza Sabdar gettext("\tdata.operation:\t\tBackup\n")); 576*2654012fSReza Sabdar break; 577*2654012fSReza Sabdar case NDMP_DT_OP_RECOVER: 578*2654012fSReza Sabdar (void) fprintf(stdout, 579*2654012fSReza Sabdar gettext("\tdata.operation:\t\tRestore\n")); 580*2654012fSReza Sabdar break; 581*2654012fSReza Sabdar default: 582*2654012fSReza Sabdar (void) fprintf(stdout, 583*2654012fSReza Sabdar gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 584*2654012fSReza Sabdar si->nsi_data.nd_oper); 585*2654012fSReza Sabdar } 586*2654012fSReza Sabdar 587*2654012fSReza Sabdar switch (si->nsi_data.nd_state) { 588*2654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 589*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 590*2654012fSReza Sabdar break; 591*2654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 592*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 593*2654012fSReza Sabdar break; 594*2654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 595*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 596*2654012fSReza Sabdar break; 597*2654012fSReza Sabdar case NDMP_DT_STATE_LISTEN: 598*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tListen\n")); 599*2654012fSReza Sabdar break; 600*2654012fSReza Sabdar case NDMP_DT_STATE_CONNECTED: 601*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tConnected\n")); 602*2654012fSReza Sabdar break; 603*2654012fSReza Sabdar default: 604*2654012fSReza Sabdar (void) fprintf(stdout, 605*2654012fSReza Sabdar gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 606*2654012fSReza Sabdar si->nsi_data.nd_state); 607*2654012fSReza Sabdar } 608*2654012fSReza Sabdar 609*2654012fSReza Sabdar switch (si->nsi_data.nd_halt_reason) { 610*2654012fSReza Sabdar case NDMP_DT_HALT_NA: 611*2654012fSReza Sabdar (void) fprintf(stdout, 612*2654012fSReza Sabdar gettext("\tdata.halt reason:\tN/A\n")); 613*2654012fSReza Sabdar break; 614*2654012fSReza Sabdar case NDMP_DT_HALT_SUCCESSFUL: 615*2654012fSReza Sabdar (void) fprintf(stdout, 616*2654012fSReza Sabdar gettext("\tdata.halt reason:\tSuccessful\n")); 617*2654012fSReza Sabdar break; 618*2654012fSReza Sabdar case NDMP_DT_HALT_ABORTED: 619*2654012fSReza Sabdar (void) fprintf(stdout, 620*2654012fSReza Sabdar gettext("\tdata.halt reason:\tAborted\n")); 621*2654012fSReza Sabdar break; 622*2654012fSReza Sabdar case NDMP_DT_HALT_INTERNAL_ERROR: 623*2654012fSReza Sabdar (void) fprintf(stdout, 624*2654012fSReza Sabdar gettext("\tdata.halt reason:\tInternal error\n")); 625*2654012fSReza Sabdar break; 626*2654012fSReza Sabdar case NDMP_DT_HALT_CONNECT_ERROR: 627*2654012fSReza Sabdar (void) fprintf(stdout, 628*2654012fSReza Sabdar gettext("\tdata.halt reason:\tConnection error\n")); 629*2654012fSReza Sabdar break; 630*2654012fSReza Sabdar default: 631*2654012fSReza Sabdar (void) fprintf(stdout, 632*2654012fSReza Sabdar gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 633*2654012fSReza Sabdar si->nsi_data.nd_halt_reason); 634*2654012fSReza Sabdar } 635*2654012fSReza Sabdar 636*2654012fSReza Sabdar switch (si->nsi_data.nd_state) { 637*2654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 638*2654012fSReza Sabdar if (si->nsi_data.nd_sock != -1) 639*2654012fSReza Sabdar (void) fprintf(stdout, 640*2654012fSReza Sabdar gettext("\tdata.data socket:\t%d\n"), 641*2654012fSReza Sabdar si->nsi_data.nd_sock); 642*2654012fSReza Sabdar if (si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock != -1) 643*2654012fSReza Sabdar (void) fprintf(stdout, 644*2654012fSReza Sabdar gettext("\tdata.data socket:\t%d\n"), 645*2654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 646*2654012fSReza Sabdar break; 647*2654012fSReza Sabdar case NDMP_DT_STATE_LISTEN: 648*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.listen socket:\t%d\n"), 649*2654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 650*2654012fSReza Sabdar ndmp_tprint_addr(gettext("data.listen"), 651*2654012fSReza Sabdar si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 652*2654012fSReza Sabdar break; 653*2654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 654*2654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 655*2654012fSReza Sabdar case NDMP_DT_STATE_CONNECTED: 656*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.data socket:\t%d\n"), 657*2654012fSReza Sabdar si->nsi_data.nd_sock); 658*2654012fSReza Sabdar ndmp_tprint_addr(gettext("data.data"), 659*2654012fSReza Sabdar si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 660*2654012fSReza Sabdar break; 661*2654012fSReza Sabdar } 662*2654012fSReza Sabdar 663*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 664*2654012fSReza Sabdar B2S(si->nsi_data.nd_abort)); 665*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 666*2654012fSReza Sabdar si->nsi_data.nd_read_offset); 667*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 668*2654012fSReza Sabdar si->nsi_data.nd_read_length); 669*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 670*2654012fSReza Sabdar si->nsi_data.nd_total_size); 671*2654012fSReza Sabdar (void) fprintf(stdout, 672*2654012fSReza Sabdar gettext("\tdata.bytes processed:\t%lld\n"), 673*2654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_bytes_processed); 674*2654012fSReza Sabdar 675*2654012fSReza Sabdar ndmp_print_env(si); 676*2654012fSReza Sabdar 677*2654012fSReza Sabdar np = si->nsi_data.nd_nlist.nld_dt_v3.dv3_nlist; 678*2654012fSReza Sabdar for (i = 0; np && i < si->nsi_data.nld_nlist_len; i++, np++) { 679*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.nlist[%d]:\tname:\n"), 680*2654012fSReza Sabdar i); 681*2654012fSReza Sabdar if (np->nn3_opath) 682*2654012fSReza Sabdar (void) fprintf(stdout, 683*2654012fSReza Sabdar gettext("\t\torig: \"%s\"\n"), np->nn3_opath); 684*2654012fSReza Sabdar if (np->nn3_dpath) 685*2654012fSReza Sabdar (void) fprintf(stdout, 686*2654012fSReza Sabdar gettext("\t\tdest: \"%s\"\n"), np->nn3_dpath); 687*2654012fSReza Sabdar else 688*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t\tdest:\n")); 689*2654012fSReza Sabdar (void) fprintf(stdout, 690*2654012fSReza Sabdar gettext("\t\tnode: %lld\n"), np->nn3_node); 691*2654012fSReza Sabdar (void) fprintf(stdout, gettext("\t\tfh_info: %lld\n"), 692*2654012fSReza Sabdar np->nn3_fh_info); 693*2654012fSReza Sabdar } 694*2654012fSReza Sabdar } 695*2654012fSReza Sabdar 696*2654012fSReza Sabdar /* 697*2654012fSReza Sabdar * Print V3 connection info for given category. 698*2654012fSReza Sabdar */ 699*2654012fSReza Sabdar static void 700*2654012fSReza Sabdar ndmp_connect_print_v3(int cat, ndmp_session_info_t *si) 701*2654012fSReza Sabdar { 702*2654012fSReza Sabdar if (cat & NDMP_CAT_SCSI) 703*2654012fSReza Sabdar ndmp_connect_print_scsi_v2(si); 704*2654012fSReza Sabdar if (cat & NDMP_CAT_TAPE) 705*2654012fSReza Sabdar ndmp_connect_print_tape_v2(si); 706*2654012fSReza Sabdar if (cat & NDMP_CAT_MOVER) 707*2654012fSReza Sabdar ndmp_connect_print_mover_v3(si); 708*2654012fSReza Sabdar if (cat & NDMP_CAT_DATA) 709*2654012fSReza Sabdar ndmp_connect_print_data_v3(si); 710*2654012fSReza Sabdar } 711*2654012fSReza Sabdar 712*2654012fSReza Sabdar /* 713*2654012fSReza Sabdar * Print the list of all active sessions to the clients. For each version, 714*2654012fSReza Sabdar * call the appropriate print function. 715*2654012fSReza Sabdar */ 716*2654012fSReza Sabdar static void 717*2654012fSReza Sabdar ndmp_connection_print(int cat, ndmp_session_info_t *si) 718*2654012fSReza Sabdar { 719*2654012fSReza Sabdar switch (si->nsi_pver) { 720*2654012fSReza Sabdar case NDMP_V2: 721*2654012fSReza Sabdar ndmp_connect_print_conn(si); 722*2654012fSReza Sabdar ndmp_connect_print_v2(cat, si); 723*2654012fSReza Sabdar break; 724*2654012fSReza Sabdar case NDMP_V3: 725*2654012fSReza Sabdar case NDMP_V4: 726*2654012fSReza Sabdar ndmp_connect_print_conn(si); 727*2654012fSReza Sabdar ndmp_connect_print_v3(cat, si); 728*2654012fSReza Sabdar break; 729*2654012fSReza Sabdar default: 730*2654012fSReza Sabdar (void) fprintf(stdout, 731*2654012fSReza Sabdar gettext("Invalid version %d"), si->nsi_pver); 732*2654012fSReza Sabdar } 733*2654012fSReza Sabdar } 734*2654012fSReza Sabdar 735*2654012fSReza Sabdar /* 736*2654012fSReza Sabdar * Print the list of all active sessions to the clients. 737*2654012fSReza Sabdar */ 738*2654012fSReza Sabdar void 739*2654012fSReza Sabdar ndmp_session_all_print(int cat, ndmp_session_info_t *si, size_t num) 740*2654012fSReza Sabdar { 741*2654012fSReza Sabdar int i; 742*2654012fSReza Sabdar ndmp_session_info_t *sp; 743*2654012fSReza Sabdar 744*2654012fSReza Sabdar sp = si; 745*2654012fSReza Sabdar for (i = 0; i < num; i++, sp++) { 746*2654012fSReza Sabdar ndmp_connection_print(cat, sp); 747*2654012fSReza Sabdar (void) fprintf(stdout, "\n"); 748*2654012fSReza Sabdar } 749*2654012fSReza Sabdar 750*2654012fSReza Sabdar if (num == 0) { 751*2654012fSReza Sabdar (void) fprintf(stdout, gettext("No active session.\n")); 752*2654012fSReza Sabdar } else { 753*2654012fSReza Sabdar (void) fprintf(stdout, gettext("%d active sessions.\n"), num); 754*2654012fSReza Sabdar } 755*2654012fSReza Sabdar } 756*2654012fSReza Sabdar 757*2654012fSReza Sabdar /* 758*2654012fSReza Sabdar * Print the connection information for the given category. 759*2654012fSReza Sabdar */ 760*2654012fSReza Sabdar void 761*2654012fSReza Sabdar ndmp_session_print(int cat, ndmp_session_info_t *si) 762*2654012fSReza Sabdar { 763*2654012fSReza Sabdar ndmp_connection_print(cat, si); 764*2654012fSReza Sabdar } 765*2654012fSReza Sabdar 766*2654012fSReza Sabdar void 767*2654012fSReza Sabdar ndmp_devinfo_print(ndmp_devinfo_t *dip, size_t size) 768*2654012fSReza Sabdar { 769*2654012fSReza Sabdar int i; 770*2654012fSReza Sabdar 771*2654012fSReza Sabdar if (dip == NULL) { 772*2654012fSReza Sabdar (void) fprintf(stdout, gettext("No device attached.\n")); 773*2654012fSReza Sabdar return; 774*2654012fSReza Sabdar } 775*2654012fSReza Sabdar 776*2654012fSReza Sabdar for (i = 0; i < size; i++, dip++) { 777*2654012fSReza Sabdar switch (dip->nd_dev_type) { 778*2654012fSReza Sabdar case NDMP_SINQ_TAPE_ROBOT: 779*2654012fSReza Sabdar (void) fprintf(stdout, gettext("Robot (Changer):\n")); 780*2654012fSReza Sabdar break; 781*2654012fSReza Sabdar case NDMP_SINQ_SEQ_ACCESS_DEVICE: 782*2654012fSReza Sabdar (void) fprintf(stdout, gettext("Tape drive(s):\n")); 783*2654012fSReza Sabdar break; 784*2654012fSReza Sabdar } 785*2654012fSReza Sabdar if (dip->nd_name) 786*2654012fSReza Sabdar (void) fprintf(stdout, 787*2654012fSReza Sabdar gettext("\tName : %s\n"), dip->nd_name); 788*2654012fSReza Sabdar (void) fprintf(stdout, 789*2654012fSReza Sabdar gettext("\tLUN # : %d\n"), dip->nd_lun); 790*2654012fSReza Sabdar (void) fprintf(stdout, 791*2654012fSReza Sabdar gettext("\tSCSI ID # : %d\n"), dip->nd_sid); 792*2654012fSReza Sabdar if (dip->nd_vendor) 793*2654012fSReza Sabdar (void) fprintf(stdout, 794*2654012fSReza Sabdar gettext("\tVendor : %s\n"), dip->nd_vendor); 795*2654012fSReza Sabdar if (dip->nd_product) 796*2654012fSReza Sabdar (void) fprintf(stdout, 797*2654012fSReza Sabdar gettext("\tProduct : %s\n"), dip->nd_product); 798*2654012fSReza Sabdar if (dip->nd_revision) 799*2654012fSReza Sabdar (void) fprintf(stdout, 800*2654012fSReza Sabdar gettext("\tRevision : %s\n"), dip->nd_revision); 801*2654012fSReza Sabdar (void) fprintf(stdout, "\n"); 802*2654012fSReza Sabdar } 803*2654012fSReza Sabdar } 804