12654012fSReza Sabdar /* 22654012fSReza Sabdar * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 32654012fSReza Sabdar * Use is subject to license terms. 42654012fSReza Sabdar */ 52654012fSReza Sabdar 62654012fSReza Sabdar /* 72654012fSReza Sabdar * BSD 3 Clause License 82654012fSReza Sabdar * 92654012fSReza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association. 102654012fSReza Sabdar * 112654012fSReza Sabdar * Redistribution and use in source and binary forms, with or without 122654012fSReza Sabdar * modification, are permitted provided that the following conditions 132654012fSReza Sabdar * are met: 142654012fSReza Sabdar * - Redistributions of source code must retain the above copyright 152654012fSReza Sabdar * notice, this list of conditions and the following disclaimer. 162654012fSReza Sabdar * 172654012fSReza Sabdar * - Redistributions in binary form must reproduce the above copyright 182654012fSReza Sabdar * notice, this list of conditions and the following disclaimer in 192654012fSReza Sabdar * the documentation and/or other materials provided with the 202654012fSReza Sabdar * distribution. 212654012fSReza Sabdar * 222654012fSReza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA) 232654012fSReza Sabdar * nor the names of its contributors may be used to endorse or promote 242654012fSReza Sabdar * products derived from this software without specific prior written 252654012fSReza Sabdar * permission. 262654012fSReza Sabdar * 272654012fSReza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 282654012fSReza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 292654012fSReza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 302654012fSReza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 312654012fSReza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 322654012fSReza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 332654012fSReza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 342654012fSReza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 352654012fSReza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 362654012fSReza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 372654012fSReza Sabdar * POSSIBILITY OF SUCH DAMAGE. 382654012fSReza Sabdar */ 392654012fSReza Sabdar #include <stdio.h> 402654012fSReza Sabdar #include <locale.h> 412654012fSReza Sabdar #include <libndmp.h> 422654012fSReza Sabdar #include "ndmpadm.h" 432654012fSReza Sabdar 442654012fSReza Sabdar /* static functions prototype */ 452654012fSReza Sabdar static void ndmp_tprint_addr(char *, ndmp_ad_type_t, char *); 462654012fSReza Sabdar static void ndmp_print_env(ndmp_session_info_t *); 472654012fSReza Sabdar static void ndmp_connect_print_conn(ndmp_session_info_t *); 482654012fSReza Sabdar static void ndmp_connect_print_scsi_v2(ndmp_session_info_t *); 492654012fSReza Sabdar static void ndmp_connect_print_tape_v2(ndmp_session_info_t *); 502654012fSReza Sabdar static void ndmp_connect_print_mover_v2(ndmp_session_info_t *); 512654012fSReza Sabdar static void ndmp_connect_print_data_v2(ndmp_session_info_t *); 522654012fSReza Sabdar static void ndmp_connect_print_v2(int, ndmp_session_info_t *); 532654012fSReza Sabdar static void ndmp_connect_print_mover_v3(ndmp_session_info_t *); 542654012fSReza Sabdar static void ndmp_connect_print_data_v3(ndmp_session_info_t *); 552654012fSReza Sabdar static void ndmp_connect_print_v3(int, ndmp_session_info_t *); 562654012fSReza Sabdar static void ndmp_connection_print(int, ndmp_session_info_t *); 572654012fSReza Sabdar 582654012fSReza Sabdar /* Boolean to string. */ 592654012fSReza Sabdar #define B2S(b) ((b) ? "Yes" : "No") 602654012fSReza Sabdar 612654012fSReza Sabdar /* 622654012fSReza Sabdar * Print the address type and IP address if the address type is tcp 632654012fSReza Sabdar */ 642654012fSReza Sabdar static void 652654012fSReza Sabdar ndmp_tprint_addr(char *label, ndmp_ad_type_t addr_type, char *tcp_addr) 662654012fSReza Sabdar { 672654012fSReza Sabdar if ((label == NULL) || (tcp_addr == NULL)) 682654012fSReza Sabdar return; 692654012fSReza Sabdar 702654012fSReza Sabdar switch (addr_type) { 712654012fSReza Sabdar case NDMP_AD_LOCAL: 722654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tLocal\n"), label); 732654012fSReza Sabdar break; 742654012fSReza Sabdar case NDMP_AD_TCP: 752654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tTCP\n"), label); 762654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s address:\t%s\n"), 772654012fSReza Sabdar label, tcp_addr); 782654012fSReza Sabdar break; 792654012fSReza Sabdar case NDMP_AD_FC: 802654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tFC\n"), label); 812654012fSReza Sabdar break; 822654012fSReza Sabdar case NDMP_AD_IPC: 832654012fSReza Sabdar (void) fprintf(stdout, gettext("\t%s type:\tIPC\n"), label); 842654012fSReza Sabdar break; 852654012fSReza Sabdar default: 862654012fSReza Sabdar (void) fprintf(stdout, 872654012fSReza Sabdar gettext("\t%s addr type unknown (0x%x)\n"), 882654012fSReza Sabdar label, addr_type); 892654012fSReza Sabdar } 902654012fSReza Sabdar } 912654012fSReza Sabdar 922654012fSReza Sabdar /* 932654012fSReza Sabdar * Print all the data environment variables for the active session 942654012fSReza Sabdar */ 952654012fSReza Sabdar static void 962654012fSReza Sabdar ndmp_print_env(ndmp_session_info_t *si) 972654012fSReza Sabdar { 982654012fSReza Sabdar int i, n; 992654012fSReza Sabdar ndmp_dt_pval_t *ep; 1002654012fSReza Sabdar 1012654012fSReza Sabdar n = si->nsi_data.nd_env_len; 1022654012fSReza Sabdar ep = si->nsi_data.nd_env; 1032654012fSReza Sabdar for (i = 0; ep && i < n; i++, ep++) { 1042654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.env[%d]:\t%s: "), 1052654012fSReza Sabdar i, ep->np_name); 1062654012fSReza Sabdar if ((ep->np_value != NULL) && (*ep->np_value != NULL)) 1072654012fSReza Sabdar (void) fprintf(stdout, "\"%s\"\n", ep->np_value); 1082654012fSReza Sabdar } 1092654012fSReza Sabdar } 1102654012fSReza Sabdar 1112654012fSReza Sabdar /* 1122654012fSReza Sabdar * Print common fields of the active connection. 1132654012fSReza Sabdar */ 1142654012fSReza Sabdar static void 1152654012fSReza Sabdar ndmp_connect_print_conn(ndmp_session_info_t *si) 1162654012fSReza Sabdar { 1172654012fSReza Sabdar (void) fprintf(stdout, gettext("\tSession Id:\t%d\n"), si->nsi_sid); 1182654012fSReza Sabdar (void) fprintf(stdout, gettext("\tProtocol version:\t%d\n"), 1192654012fSReza Sabdar si->nsi_pver); 1202654012fSReza Sabdar (void) fprintf(stdout, gettext("\tAuthenticated:\t\t%s\n"), 1212654012fSReza Sabdar B2S(si->nsi_auth)); 1222654012fSReza Sabdar (void) fprintf(stdout, gettext("\tEOF:\t\t\t%s\n"), B2S(si->nsi_eof)); 1232654012fSReza Sabdar if (si->nsi_cl_addr != NULL) 1242654012fSReza Sabdar (void) fprintf(stdout, 1252654012fSReza Sabdar gettext("\tClient address:\t\t%s\n"), si->nsi_cl_addr); 1262654012fSReza Sabdar } 1272654012fSReza Sabdar 1282654012fSReza Sabdar /* 1292654012fSReza Sabdar * Print the connection SCSI info. 1302654012fSReza Sabdar */ 1312654012fSReza Sabdar static void 1322654012fSReza Sabdar ndmp_connect_print_scsi_v2(ndmp_session_info_t *si) 1332654012fSReza Sabdar { 1342654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.open:\t\t%s\n"), 1352654012fSReza Sabdar B2S(si->nsi_scsi.ns_scsi_open != -1)); 1362654012fSReza Sabdar if (si->nsi_scsi.ns_adapter_name) 1372654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.adapter:\t\t\"%s\"\n"), 1382654012fSReza Sabdar si->nsi_scsi.ns_adapter_name); 1392654012fSReza Sabdar (void) fprintf(stdout, gettext("\tscsi.valid target:\t%s\n"), 1402654012fSReza Sabdar B2S(si->nsi_scsi.ns_valid_target_set)); 1412654012fSReza Sabdar if (si->nsi_scsi.ns_valid_target_set) { 1422654012fSReza Sabdar (void) fprintf(stdout, 1432654012fSReza Sabdar gettext("\tscsi.SID:\t\t%d\n"), si->nsi_scsi.ns_scsi_id); 1442654012fSReza Sabdar (void) fprintf(stdout, 1452654012fSReza Sabdar gettext("\tscsi.LUN:\t\t%d\n"), si->nsi_scsi.ns_lun); 1462654012fSReza Sabdar } 1472654012fSReza Sabdar } 1482654012fSReza Sabdar 1492654012fSReza Sabdar /* 1502654012fSReza Sabdar * Print the connection tape info. 1512654012fSReza Sabdar */ 1522654012fSReza Sabdar static void 1532654012fSReza Sabdar ndmp_connect_print_tape_v2(ndmp_session_info_t *si) 1542654012fSReza Sabdar { 1552654012fSReza Sabdar if (si->nsi_tape.nt_fd != -1) { 1562654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.fd:\t\t%d\n"), 1572654012fSReza Sabdar si->nsi_tape.nt_fd); 1582654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.record count:\t%d\n"), 1592654012fSReza Sabdar (int)si->nsi_tape.nt_rec_count); 1602654012fSReza Sabdar 1612654012fSReza Sabdar switch (si->nsi_tape.nt_mode) { 1622654012fSReza Sabdar case NDMP_TP_READ_MODE: 1632654012fSReza Sabdar (void) fprintf(stdout, 1642654012fSReza Sabdar gettext("\ttape.mode:\t\tRead-only\n")); 1652654012fSReza Sabdar break; 1662654012fSReza Sabdar case NDMP_TP_WRITE_MODE: 1672654012fSReza Sabdar (void) fprintf(stdout, 1682654012fSReza Sabdar gettext("\ttape.mode:\t\tRead/Write\n")); 1692654012fSReza Sabdar break; 1702654012fSReza Sabdar case NDMP_TP_RAW1_MODE: 1712654012fSReza Sabdar (void) fprintf(stdout, 1722654012fSReza Sabdar gettext("\ttape.mode:\t\tRaw\n")); 1732654012fSReza Sabdar break; 1742654012fSReza Sabdar default: 1752654012fSReza Sabdar (void) fprintf(stdout, 1762654012fSReza Sabdar gettext("\ttape.mode:\t\tUnknown (0x%x)\n"), 1772654012fSReza Sabdar si->nsi_tape.nt_mode); 1782654012fSReza Sabdar } 1792654012fSReza Sabdar 1802654012fSReza Sabdar if (si->nsi_tape.nt_dev_name) 1812654012fSReza Sabdar (void) fprintf(stdout, 1822654012fSReza Sabdar gettext("\ttape.device name:\t%s\n"), 1832654012fSReza Sabdar si->nsi_tape.nt_dev_name); 1842654012fSReza Sabdar if (si->nsi_tape.nt_adapter_name) 1852654012fSReza Sabdar (void) fprintf(stdout, 1862654012fSReza Sabdar gettext("\ttape.adapter name:\t\"%s\"\n"), 1872654012fSReza Sabdar si->nsi_tape.nt_adapter_name); 1882654012fSReza Sabdar (void) fprintf(stdout, 1892654012fSReza Sabdar gettext("\ttape.SID:\t\t%d\n"), si->nsi_tape.nt_sid); 1902654012fSReza Sabdar (void) fprintf(stdout, 1912654012fSReza Sabdar gettext("\ttape.LUN:\t\t%d\n"), si->nsi_tape.nt_lun); 1922654012fSReza Sabdar } else 1932654012fSReza Sabdar (void) fprintf(stdout, gettext("\ttape.device:\t\tNot open\n")); 1942654012fSReza Sabdar } 1952654012fSReza Sabdar 1962654012fSReza Sabdar /* 1972654012fSReza Sabdar * Print the connection mover info. 1982654012fSReza Sabdar */ 1992654012fSReza Sabdar static void 2002654012fSReza Sabdar ndmp_connect_print_mover_v2(ndmp_session_info_t *si) 2012654012fSReza Sabdar { 2022654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 2032654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 2042654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 2052654012fSReza Sabdar break; 2062654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 2072654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 2082654012fSReza Sabdar break; 2092654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 2102654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 2112654012fSReza Sabdar break; 2122654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 2132654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 2142654012fSReza Sabdar break; 2152654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 2162654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 2172654012fSReza Sabdar break; 2182654012fSReza Sabdar default: 2192654012fSReza Sabdar (void) fprintf(stdout, 2202654012fSReza Sabdar gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 2212654012fSReza Sabdar si->nsi_mover.nm_state); 2222654012fSReza Sabdar } 2232654012fSReza Sabdar 2242654012fSReza Sabdar switch (si->nsi_mover.nm_mode) { 2252654012fSReza Sabdar case NDMP_MV_MODE_READ: 2262654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 2272654012fSReza Sabdar break; 2282654012fSReza Sabdar case NDMP_MV_MODE_WRITE: 2292654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 2302654012fSReza Sabdar break; 2312654012fSReza Sabdar default: 2322654012fSReza Sabdar (void) fprintf(stdout, 2332654012fSReza Sabdar gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 2342654012fSReza Sabdar si->nsi_mover.nm_mode); 2352654012fSReza Sabdar } 2362654012fSReza Sabdar 2372654012fSReza Sabdar switch (si->nsi_mover.nm_pause_reason) { 2382654012fSReza Sabdar case NDMP_MV_PAUSE_NA: 2392654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 2402654012fSReza Sabdar break; 2412654012fSReza Sabdar case NDMP_MV_PAUSE_EOM: 2422654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 2432654012fSReza Sabdar break; 2442654012fSReza Sabdar case NDMP_MV_PAUSE_EOF: 2452654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 2462654012fSReza Sabdar break; 2472654012fSReza Sabdar case NDMP_MV_PAUSE_SEEK: 2482654012fSReza Sabdar (void) fprintf(stdout, 2492654012fSReza Sabdar gettext("\tmover.pause reason:\tSeek\n")); 2502654012fSReza Sabdar break; 2512654012fSReza Sabdar case NDMP_MV_PAUSE_MEDIA_ERROR: 2522654012fSReza Sabdar (void) fprintf(stdout, 2532654012fSReza Sabdar gettext("\tmover.pause reason:\tMedia Error\n")); 2542654012fSReza Sabdar break; 2552654012fSReza Sabdar default: 2562654012fSReza Sabdar (void) fprintf(stdout, 2572654012fSReza Sabdar gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 2582654012fSReza Sabdar si->nsi_mover.nm_pause_reason); 2592654012fSReza Sabdar } 2602654012fSReza Sabdar 2612654012fSReza Sabdar switch (si->nsi_mover.nm_halt_reason) { 2622654012fSReza Sabdar case NDMP_MV_HALT_NA: 2632654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 2642654012fSReza Sabdar break; 2652654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_CLOSED: 2662654012fSReza Sabdar (void) fprintf(stdout, 2672654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection closed\n")); 2682654012fSReza Sabdar break; 2692654012fSReza Sabdar case NDMP_MV_HALT_ABORTED: 2702654012fSReza Sabdar (void) fprintf(stdout, 2712654012fSReza Sabdar gettext("\tmover.halt reason:\tAborted\n")); 2722654012fSReza Sabdar break; 2732654012fSReza Sabdar case NDMP_MV_HALT_INTERNAL_ERROR: 2742654012fSReza Sabdar (void) fprintf(stdout, 2752654012fSReza Sabdar gettext("\tmover.halt reason:\tInternal error\n")); 2762654012fSReza Sabdar break; 2772654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_ERROR: 2782654012fSReza Sabdar (void) fprintf(stdout, 2792654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection error\n")); 2802654012fSReza Sabdar break; 2812654012fSReza Sabdar default: 2822654012fSReza Sabdar (void) fprintf(stdout, 2832654012fSReza Sabdar gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 2842654012fSReza Sabdar si->nsi_mover.nm_halt_reason); 2852654012fSReza Sabdar } 2862654012fSReza Sabdar 2872654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 2882654012fSReza Sabdar (int)si->nsi_mover.nm_rec_size); 2892654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 2902654012fSReza Sabdar (int)si->nsi_mover.nm_rec_num); 2912654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 2922654012fSReza Sabdar si->nsi_mover.nm_mov_pos); 2932654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 2942654012fSReza Sabdar si->nsi_mover.nm_window_offset); 2952654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 2962654012fSReza Sabdar si->nsi_mover.nm_window_length); 2972654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 2982654012fSReza Sabdar si->nsi_mover.nm_sock); 2992654012fSReza Sabdar } 3002654012fSReza Sabdar 3012654012fSReza Sabdar /* 3022654012fSReza Sabdar * Print the connection data info. 3032654012fSReza Sabdar */ 3042654012fSReza Sabdar static void 3052654012fSReza Sabdar ndmp_connect_print_data_v2(ndmp_session_info_t *si) 3062654012fSReza Sabdar { 3072654012fSReza Sabdar int i; 3082654012fSReza Sabdar ndmp_dt_name_t *np; 3092654012fSReza Sabdar 3102654012fSReza Sabdar switch (si->nsi_data.nd_oper) { 3112654012fSReza Sabdar case NDMP_DT_OP_NOACTION: 3122654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 3132654012fSReza Sabdar break; 3142654012fSReza Sabdar case NDMP_DT_OP_BACKUP: 3152654012fSReza Sabdar (void) fprintf(stdout, 3162654012fSReza Sabdar gettext("\tdata.operation:\t\tBackup\n")); 3172654012fSReza Sabdar break; 3182654012fSReza Sabdar case NDMP_DT_OP_RECOVER: 3192654012fSReza Sabdar (void) fprintf(stdout, 3202654012fSReza Sabdar gettext("\tdata.operation:\t\tRestore\n")); 3212654012fSReza Sabdar break; 3222654012fSReza Sabdar default: 3232654012fSReza Sabdar (void) fprintf(stdout, 3242654012fSReza Sabdar gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 3252654012fSReza Sabdar si->nsi_data.nd_oper); 3262654012fSReza Sabdar } 3272654012fSReza Sabdar 3282654012fSReza Sabdar switch (si->nsi_data.nd_state) { 3292654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 3302654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 3312654012fSReza Sabdar break; 3322654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 3332654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 3342654012fSReza Sabdar break; 3352654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 3362654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 3372654012fSReza Sabdar break; 3382654012fSReza Sabdar default: 3392654012fSReza Sabdar (void) fprintf(stdout, 3402654012fSReza Sabdar gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 3412654012fSReza Sabdar si->nsi_data.nd_state); 3422654012fSReza Sabdar } 3432654012fSReza Sabdar 3442654012fSReza Sabdar switch (si->nsi_data.nd_halt_reason) { 3452654012fSReza Sabdar case NDMP_DT_HALT_NA: 3462654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.halt reason:\tN/A\n")); 3472654012fSReza Sabdar break; 3482654012fSReza Sabdar case NDMP_DT_HALT_SUCCESSFUL: 3492654012fSReza Sabdar (void) fprintf(stdout, 3502654012fSReza Sabdar gettext("\tdata.halt reason:\tSuccessful\n")); 3512654012fSReza Sabdar break; 3522654012fSReza Sabdar case NDMP_DT_HALT_ABORTED: 3532654012fSReza Sabdar (void) fprintf(stdout, 3542654012fSReza Sabdar gettext("\tdata.halt reason:\tAborted\n")); 3552654012fSReza Sabdar break; 3562654012fSReza Sabdar case NDMP_DT_HALT_INTERNAL_ERROR: 3572654012fSReza Sabdar (void) fprintf(stdout, 3582654012fSReza Sabdar gettext("\tdata.halt reason:\tInternal error\n")); 3592654012fSReza Sabdar break; 3602654012fSReza Sabdar case NDMP_DT_HALT_CONNECT_ERROR: 3612654012fSReza Sabdar (void) fprintf(stdout, 3622654012fSReza Sabdar gettext("\tdata.halt reason:\tConnection error\n")); 3632654012fSReza Sabdar break; 3642654012fSReza Sabdar default: 3652654012fSReza Sabdar (void) fprintf(stdout, 3662654012fSReza Sabdar gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 3672654012fSReza Sabdar si->nsi_data.nd_halt_reason); 3682654012fSReza Sabdar } 3692654012fSReza Sabdar 3702654012fSReza Sabdar switch (si->nsi_data.nd_addr_type) { 3712654012fSReza Sabdar case NDMP_AD_LOCAL: 3722654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.mover type:\tLocal\n")); 3732654012fSReza Sabdar break; 3742654012fSReza Sabdar case NDMP_AD_TCP: 3752654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.mover type:\tTCP\n")); 3762654012fSReza Sabdar if (si->nsi_data.nd_tcp_addr) 3772654012fSReza Sabdar (void) fprintf(stdout, 3782654012fSReza Sabdar gettext("\tdata.mover address:\t%s\n"), 3792654012fSReza Sabdar si->nsi_data.nd_tcp_addr); 3802654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.sock:\t%d\n"), 3812654012fSReza Sabdar si->nsi_data.nd_sock); 3822654012fSReza Sabdar break; 3832654012fSReza Sabdar default: 3842654012fSReza Sabdar (void) fprintf(stdout, 3852654012fSReza Sabdar gettext("\tdata.mover type:\tUnknown (0x%x)\n"), 3862654012fSReza Sabdar si->nsi_data.nd_addr_type); 3872654012fSReza Sabdar } 3882654012fSReza Sabdar 3892654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 3902654012fSReza Sabdar B2S(si->nsi_data.nd_abort)); 3912654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 3922654012fSReza Sabdar si->nsi_data.nd_read_offset); 3932654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 3942654012fSReza Sabdar si->nsi_data.nd_read_length); 3952654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 3962654012fSReza Sabdar si->nsi_data.nd_total_size); 3972654012fSReza Sabdar 3982654012fSReza Sabdar ndmp_print_env(si); 3992654012fSReza Sabdar 4002654012fSReza Sabdar np = si->nsi_data.nd_nlist.nld_nlist; 4012654012fSReza Sabdar for (i = 0; np && i < (int)si->nsi_data.nld_nlist_len; i++, np++) { 4022654012fSReza Sabdar if ((np->nn_name) && (np->nn_dest)) { 4032654012fSReza Sabdar (void) fprintf(stdout, 4042654012fSReza Sabdar gettext("\tdata.nlist[%d]:\tname: " 4052654012fSReza Sabdar "\"%s\"\n\t\tdest:\"%s\"\n"), 4062654012fSReza Sabdar i, np->nn_name, np->nn_dest); 4072654012fSReza Sabdar } 4082654012fSReza Sabdar } 4092654012fSReza Sabdar } 4102654012fSReza Sabdar 4112654012fSReza Sabdar /* 4122654012fSReza Sabdar * Print V2 connection info for the given category. 4132654012fSReza Sabdar */ 4142654012fSReza Sabdar static void 4152654012fSReza Sabdar ndmp_connect_print_v2(int cat, ndmp_session_info_t *si) 4162654012fSReza Sabdar { 4172654012fSReza Sabdar if (cat & NDMP_CAT_SCSI) 4182654012fSReza Sabdar ndmp_connect_print_scsi_v2(si); 4192654012fSReza Sabdar if (cat & NDMP_CAT_TAPE) 4202654012fSReza Sabdar ndmp_connect_print_tape_v2(si); 4212654012fSReza Sabdar if (cat & NDMP_CAT_MOVER) 4222654012fSReza Sabdar ndmp_connect_print_mover_v2(si); 4232654012fSReza Sabdar if (cat & NDMP_CAT_DATA) 4242654012fSReza Sabdar ndmp_connect_print_data_v2(si); 4252654012fSReza Sabdar } 4262654012fSReza Sabdar 4272654012fSReza Sabdar /* 4282654012fSReza Sabdar * Print the V3 connection mover info. 4292654012fSReza Sabdar */ 4302654012fSReza Sabdar static void 4312654012fSReza Sabdar ndmp_connect_print_mover_v3(ndmp_session_info_t *si) 4322654012fSReza Sabdar { 4332654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 4342654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 4352654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 4362654012fSReza Sabdar break; 4372654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 4382654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 4392654012fSReza Sabdar break; 4402654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 4412654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 4422654012fSReza Sabdar break; 4432654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 4442654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 4452654012fSReza Sabdar break; 4462654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 4472654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 4482654012fSReza Sabdar break; 4492654012fSReza Sabdar default: 4502654012fSReza Sabdar (void) fprintf(stdout, 4512654012fSReza Sabdar gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 4522654012fSReza Sabdar si->nsi_mover.nm_state); 4532654012fSReza Sabdar } 4542654012fSReza Sabdar 4552654012fSReza Sabdar switch (si->nsi_mover.nm_mode) { 4562654012fSReza Sabdar case NDMP_MV_MODE_READ: 4572654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 4582654012fSReza Sabdar break; 4592654012fSReza Sabdar case NDMP_MV_MODE_WRITE: 4602654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 4612654012fSReza Sabdar break; 4622654012fSReza Sabdar default: 4632654012fSReza Sabdar (void) fprintf(stdout, 4642654012fSReza Sabdar gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 4652654012fSReza Sabdar si->nsi_mover.nm_mode); 4662654012fSReza Sabdar } 4672654012fSReza Sabdar 4682654012fSReza Sabdar switch (si->nsi_mover.nm_pause_reason) { 4692654012fSReza Sabdar case NDMP_MV_PAUSE_NA: 4702654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 4712654012fSReza Sabdar break; 4722654012fSReza Sabdar case NDMP_MV_PAUSE_EOM: 4732654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 4742654012fSReza Sabdar break; 4752654012fSReza Sabdar case NDMP_MV_PAUSE_EOF: 4762654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 4772654012fSReza Sabdar break; 4782654012fSReza Sabdar case NDMP_MV_PAUSE_SEEK: 4792654012fSReza Sabdar (void) fprintf(stdout, 4802654012fSReza Sabdar gettext("\tmover.pause reason:\tSeek\n")); 4812654012fSReza Sabdar break; 4822654012fSReza Sabdar case NDMP_MV_PAUSE_MEDIA_ERROR: 4832654012fSReza Sabdar (void) fprintf(stdout, 4842654012fSReza Sabdar gettext("\tmover.pause reason:\tMedia Error\n")); 4852654012fSReza Sabdar break; 4862654012fSReza Sabdar case NDMP_MV_PAUSE_EOW: 4872654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOW\n")); 4882654012fSReza Sabdar break; 4892654012fSReza Sabdar default: 4902654012fSReza Sabdar (void) fprintf(stdout, 4912654012fSReza Sabdar gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 4922654012fSReza Sabdar si->nsi_mover.nm_pause_reason); 4932654012fSReza Sabdar } 4942654012fSReza Sabdar 4952654012fSReza Sabdar switch (si->nsi_mover.nm_halt_reason) { 4962654012fSReza Sabdar case NDMP_MV_HALT_NA: 4972654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 4982654012fSReza Sabdar break; 4992654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_CLOSED: 5002654012fSReza Sabdar (void) fprintf(stdout, 5012654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection closed\n")); 5022654012fSReza Sabdar break; 5032654012fSReza Sabdar case NDMP_MV_HALT_ABORTED: 5042654012fSReza Sabdar (void) fprintf(stdout, 5052654012fSReza Sabdar gettext("\tmover.halt reason:\tAborted\n")); 5062654012fSReza Sabdar break; 5072654012fSReza Sabdar case NDMP_MV_HALT_INTERNAL_ERROR: 5082654012fSReza Sabdar (void) fprintf(stdout, 5092654012fSReza Sabdar gettext("\tmover.halt reason:\tInternal error\n")); 5102654012fSReza Sabdar break; 5112654012fSReza Sabdar case NDMP_MV_HALT_CONNECT_ERROR: 5122654012fSReza Sabdar (void) fprintf(stdout, 5132654012fSReza Sabdar gettext("\tmover.halt reason:\tConnection error\n")); 5142654012fSReza Sabdar break; 5152654012fSReza Sabdar default: 5162654012fSReza Sabdar (void) fprintf(stdout, 5172654012fSReza Sabdar gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 5182654012fSReza Sabdar si->nsi_mover.nm_halt_reason); 5192654012fSReza Sabdar } 5202654012fSReza Sabdar 5212654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 5222654012fSReza Sabdar (int)si->nsi_mover.nm_rec_size); 5232654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 5242654012fSReza Sabdar (int)si->nsi_mover.nm_rec_num); 5252654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 5262654012fSReza Sabdar si->nsi_mover.nm_mov_pos, si->nsi_mover.nm_mov_pos); 5272654012fSReza Sabdar 5282654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 5292654012fSReza Sabdar si->nsi_mover.nm_window_length, si->nsi_mover.nm_window_length); 5302654012fSReza Sabdar 5312654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 5322654012fSReza Sabdar si->nsi_mover.nm_window_offset); 5332654012fSReza Sabdar switch (si->nsi_mover.nm_state) { 5342654012fSReza Sabdar case NDMP_MV_STATE_IDLE: 5352654012fSReza Sabdar if (si->nsi_mover.nm_listen_sock != -1) 5362654012fSReza Sabdar (void) fprintf(stdout, 5372654012fSReza Sabdar gettext("\tmover.listenSock:\t%d\n"), 5382654012fSReza Sabdar si->nsi_mover.nm_listen_sock); 5392654012fSReza Sabdar if (si->nsi_mover.nm_sock != -1) 5402654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.sock:\t%d\n"), 5412654012fSReza Sabdar si->nsi_mover.nm_sock); 5422654012fSReza Sabdar break; 5432654012fSReza Sabdar case NDMP_MV_STATE_LISTEN: 5442654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.listen socket:\t%d\n"), 5452654012fSReza Sabdar si->nsi_mover.nm_listen_sock); 5462654012fSReza Sabdar ndmp_tprint_addr(gettext("mover.listen"), 5472654012fSReza Sabdar si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 5482654012fSReza Sabdar break; 5492654012fSReza Sabdar case NDMP_MV_STATE_ACTIVE: 5502654012fSReza Sabdar case NDMP_MV_STATE_PAUSED: 5512654012fSReza Sabdar case NDMP_MV_STATE_HALTED: 5522654012fSReza Sabdar (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 5532654012fSReza Sabdar si->nsi_mover.nm_sock); 5542654012fSReza Sabdar ndmp_tprint_addr(gettext("mover.data connection"), 5552654012fSReza Sabdar si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 5562654012fSReza Sabdar break; 5572654012fSReza Sabdar } 5582654012fSReza Sabdar } 5592654012fSReza Sabdar 5602654012fSReza Sabdar /* 5612654012fSReza Sabdar * Print the connection data info. 5622654012fSReza Sabdar */ 5632654012fSReza Sabdar static void 5642654012fSReza Sabdar ndmp_connect_print_data_v3(ndmp_session_info_t *si) 5652654012fSReza Sabdar { 5662654012fSReza Sabdar int i; 5672654012fSReza Sabdar ndmp_dt_name_v3_t *np; 5682654012fSReza Sabdar 5692654012fSReza Sabdar switch (si->nsi_data.nd_oper) { 5702654012fSReza Sabdar case NDMP_DT_OP_NOACTION: 5712654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 5722654012fSReza Sabdar break; 5732654012fSReza Sabdar case NDMP_DT_OP_BACKUP: 5742654012fSReza Sabdar (void) fprintf(stdout, 5752654012fSReza Sabdar gettext("\tdata.operation:\t\tBackup\n")); 5762654012fSReza Sabdar break; 5772654012fSReza Sabdar case NDMP_DT_OP_RECOVER: 5782654012fSReza Sabdar (void) fprintf(stdout, 5792654012fSReza Sabdar gettext("\tdata.operation:\t\tRestore\n")); 5802654012fSReza Sabdar break; 5812654012fSReza Sabdar default: 5822654012fSReza Sabdar (void) fprintf(stdout, 5832654012fSReza Sabdar gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 5842654012fSReza Sabdar si->nsi_data.nd_oper); 5852654012fSReza Sabdar } 5862654012fSReza Sabdar 5872654012fSReza Sabdar switch (si->nsi_data.nd_state) { 5882654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 5892654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 5902654012fSReza Sabdar break; 5912654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 5922654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 5932654012fSReza Sabdar break; 5942654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 5952654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 5962654012fSReza Sabdar break; 5972654012fSReza Sabdar case NDMP_DT_STATE_LISTEN: 5982654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tListen\n")); 5992654012fSReza Sabdar break; 6002654012fSReza Sabdar case NDMP_DT_STATE_CONNECTED: 6012654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.state:\t\tConnected\n")); 6022654012fSReza Sabdar break; 6032654012fSReza Sabdar default: 6042654012fSReza Sabdar (void) fprintf(stdout, 6052654012fSReza Sabdar gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 6062654012fSReza Sabdar si->nsi_data.nd_state); 6072654012fSReza Sabdar } 6082654012fSReza Sabdar 6092654012fSReza Sabdar switch (si->nsi_data.nd_halt_reason) { 6102654012fSReza Sabdar case NDMP_DT_HALT_NA: 6112654012fSReza Sabdar (void) fprintf(stdout, 6122654012fSReza Sabdar gettext("\tdata.halt reason:\tN/A\n")); 6132654012fSReza Sabdar break; 6142654012fSReza Sabdar case NDMP_DT_HALT_SUCCESSFUL: 6152654012fSReza Sabdar (void) fprintf(stdout, 6162654012fSReza Sabdar gettext("\tdata.halt reason:\tSuccessful\n")); 6172654012fSReza Sabdar break; 6182654012fSReza Sabdar case NDMP_DT_HALT_ABORTED: 6192654012fSReza Sabdar (void) fprintf(stdout, 6202654012fSReza Sabdar gettext("\tdata.halt reason:\tAborted\n")); 6212654012fSReza Sabdar break; 6222654012fSReza Sabdar case NDMP_DT_HALT_INTERNAL_ERROR: 6232654012fSReza Sabdar (void) fprintf(stdout, 6242654012fSReza Sabdar gettext("\tdata.halt reason:\tInternal error\n")); 6252654012fSReza Sabdar break; 6262654012fSReza Sabdar case NDMP_DT_HALT_CONNECT_ERROR: 6272654012fSReza Sabdar (void) fprintf(stdout, 6282654012fSReza Sabdar gettext("\tdata.halt reason:\tConnection error\n")); 6292654012fSReza Sabdar break; 6302654012fSReza Sabdar default: 6312654012fSReza Sabdar (void) fprintf(stdout, 6322654012fSReza Sabdar gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 6332654012fSReza Sabdar si->nsi_data.nd_halt_reason); 6342654012fSReza Sabdar } 6352654012fSReza Sabdar 6362654012fSReza Sabdar switch (si->nsi_data.nd_state) { 6372654012fSReza Sabdar case NDMP_DT_STATE_IDLE: 6382654012fSReza Sabdar if (si->nsi_data.nd_sock != -1) 6392654012fSReza Sabdar (void) fprintf(stdout, 6402654012fSReza Sabdar gettext("\tdata.data socket:\t%d\n"), 6412654012fSReza Sabdar si->nsi_data.nd_sock); 6422654012fSReza Sabdar if (si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock != -1) 6432654012fSReza Sabdar (void) fprintf(stdout, 6442654012fSReza Sabdar gettext("\tdata.data socket:\t%d\n"), 6452654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 6462654012fSReza Sabdar break; 6472654012fSReza Sabdar case NDMP_DT_STATE_LISTEN: 6482654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.listen socket:\t%d\n"), 6492654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 6502654012fSReza Sabdar ndmp_tprint_addr(gettext("data.listen"), 6512654012fSReza Sabdar si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 6522654012fSReza Sabdar break; 6532654012fSReza Sabdar case NDMP_DT_STATE_ACTIVE: 6542654012fSReza Sabdar case NDMP_DT_STATE_HALTED: 6552654012fSReza Sabdar case NDMP_DT_STATE_CONNECTED: 6562654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.data socket:\t%d\n"), 6572654012fSReza Sabdar si->nsi_data.nd_sock); 6582654012fSReza Sabdar ndmp_tprint_addr(gettext("data.data"), 6592654012fSReza Sabdar si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 6602654012fSReza Sabdar break; 6612654012fSReza Sabdar } 6622654012fSReza Sabdar 6632654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 6642654012fSReza Sabdar B2S(si->nsi_data.nd_abort)); 6652654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 6662654012fSReza Sabdar si->nsi_data.nd_read_offset); 6672654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 6682654012fSReza Sabdar si->nsi_data.nd_read_length); 6692654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 6702654012fSReza Sabdar si->nsi_data.nd_total_size); 6712654012fSReza Sabdar (void) fprintf(stdout, 6722654012fSReza Sabdar gettext("\tdata.bytes processed:\t%lld\n"), 6732654012fSReza Sabdar si->nsi_data.nd_nlist.nld_dt_v3.dv3_bytes_processed); 6742654012fSReza Sabdar 6752654012fSReza Sabdar ndmp_print_env(si); 6762654012fSReza Sabdar 6772654012fSReza Sabdar np = si->nsi_data.nd_nlist.nld_dt_v3.dv3_nlist; 6782654012fSReza Sabdar for (i = 0; np && i < si->nsi_data.nld_nlist_len; i++, np++) { 6792654012fSReza Sabdar (void) fprintf(stdout, gettext("\tdata.nlist[%d]:\tname:\n"), 6802654012fSReza Sabdar i); 6812654012fSReza Sabdar if (np->nn3_opath) 6822654012fSReza Sabdar (void) fprintf(stdout, 6832654012fSReza Sabdar gettext("\t\torig: \"%s\"\n"), np->nn3_opath); 6842654012fSReza Sabdar if (np->nn3_dpath) 6852654012fSReza Sabdar (void) fprintf(stdout, 6862654012fSReza Sabdar gettext("\t\tdest: \"%s\"\n"), np->nn3_dpath); 6872654012fSReza Sabdar else 6882654012fSReza Sabdar (void) fprintf(stdout, gettext("\t\tdest:\n")); 6892654012fSReza Sabdar (void) fprintf(stdout, 6902654012fSReza Sabdar gettext("\t\tnode: %lld\n"), np->nn3_node); 6912654012fSReza Sabdar (void) fprintf(stdout, gettext("\t\tfh_info: %lld\n"), 6922654012fSReza Sabdar np->nn3_fh_info); 6932654012fSReza Sabdar } 6942654012fSReza Sabdar } 6952654012fSReza Sabdar 6962654012fSReza Sabdar /* 6972654012fSReza Sabdar * Print V3 connection info for given category. 6982654012fSReza Sabdar */ 6992654012fSReza Sabdar static void 7002654012fSReza Sabdar ndmp_connect_print_v3(int cat, ndmp_session_info_t *si) 7012654012fSReza Sabdar { 7022654012fSReza Sabdar if (cat & NDMP_CAT_SCSI) 7032654012fSReza Sabdar ndmp_connect_print_scsi_v2(si); 7042654012fSReza Sabdar if (cat & NDMP_CAT_TAPE) 7052654012fSReza Sabdar ndmp_connect_print_tape_v2(si); 7062654012fSReza Sabdar if (cat & NDMP_CAT_MOVER) 7072654012fSReza Sabdar ndmp_connect_print_mover_v3(si); 7082654012fSReza Sabdar if (cat & NDMP_CAT_DATA) 7092654012fSReza Sabdar ndmp_connect_print_data_v3(si); 7102654012fSReza Sabdar } 7112654012fSReza Sabdar 7122654012fSReza Sabdar /* 7132654012fSReza Sabdar * Print the list of all active sessions to the clients. For each version, 7142654012fSReza Sabdar * call the appropriate print function. 7152654012fSReza Sabdar */ 7162654012fSReza Sabdar static void 7172654012fSReza Sabdar ndmp_connection_print(int cat, ndmp_session_info_t *si) 7182654012fSReza Sabdar { 7192654012fSReza Sabdar switch (si->nsi_pver) { 7202654012fSReza Sabdar case NDMP_V2: 7212654012fSReza Sabdar ndmp_connect_print_conn(si); 7222654012fSReza Sabdar ndmp_connect_print_v2(cat, si); 7232654012fSReza Sabdar break; 7242654012fSReza Sabdar case NDMP_V3: 7252654012fSReza Sabdar case NDMP_V4: 7262654012fSReza Sabdar ndmp_connect_print_conn(si); 7272654012fSReza Sabdar ndmp_connect_print_v3(cat, si); 7282654012fSReza Sabdar break; 7292654012fSReza Sabdar default: 7302654012fSReza Sabdar (void) fprintf(stdout, 7312654012fSReza Sabdar gettext("Invalid version %d"), si->nsi_pver); 7322654012fSReza Sabdar } 7332654012fSReza Sabdar } 7342654012fSReza Sabdar 7352654012fSReza Sabdar /* 7362654012fSReza Sabdar * Print the list of all active sessions to the clients. 7372654012fSReza Sabdar */ 7382654012fSReza Sabdar void 7392654012fSReza Sabdar ndmp_session_all_print(int cat, ndmp_session_info_t *si, size_t num) 7402654012fSReza Sabdar { 7412654012fSReza Sabdar int i; 7422654012fSReza Sabdar ndmp_session_info_t *sp; 7432654012fSReza Sabdar 7442654012fSReza Sabdar sp = si; 7452654012fSReza Sabdar for (i = 0; i < num; i++, sp++) { 7462654012fSReza Sabdar ndmp_connection_print(cat, sp); 7472654012fSReza Sabdar (void) fprintf(stdout, "\n"); 7482654012fSReza Sabdar } 7492654012fSReza Sabdar 7502654012fSReza Sabdar if (num == 0) { 7512654012fSReza Sabdar (void) fprintf(stdout, gettext("No active session.\n")); 7522654012fSReza Sabdar } else { 7532654012fSReza Sabdar (void) fprintf(stdout, gettext("%d active sessions.\n"), num); 7542654012fSReza Sabdar } 7552654012fSReza Sabdar } 7562654012fSReza Sabdar 7572654012fSReza Sabdar /* 7582654012fSReza Sabdar * Print the connection information for the given category. 7592654012fSReza Sabdar */ 7602654012fSReza Sabdar void 7612654012fSReza Sabdar ndmp_session_print(int cat, ndmp_session_info_t *si) 7622654012fSReza Sabdar { 7632654012fSReza Sabdar ndmp_connection_print(cat, si); 7642654012fSReza Sabdar } 7652654012fSReza Sabdar 7662654012fSReza Sabdar void 7672654012fSReza Sabdar ndmp_devinfo_print(ndmp_devinfo_t *dip, size_t size) 7682654012fSReza Sabdar { 7692654012fSReza Sabdar int i; 7702654012fSReza Sabdar 7712654012fSReza Sabdar if (dip == NULL) { 7722654012fSReza Sabdar (void) fprintf(stdout, gettext("No device attached.\n")); 7732654012fSReza Sabdar return; 7742654012fSReza Sabdar } 7752654012fSReza Sabdar 7762654012fSReza Sabdar for (i = 0; i < size; i++, dip++) { 7772654012fSReza Sabdar switch (dip->nd_dev_type) { 7782654012fSReza Sabdar case NDMP_SINQ_TAPE_ROBOT: 7792654012fSReza Sabdar (void) fprintf(stdout, gettext("Robot (Changer):\n")); 7802654012fSReza Sabdar break; 7812654012fSReza Sabdar case NDMP_SINQ_SEQ_ACCESS_DEVICE: 7822654012fSReza Sabdar (void) fprintf(stdout, gettext("Tape drive(s):\n")); 7832654012fSReza Sabdar break; 7842654012fSReza Sabdar } 7852654012fSReza Sabdar if (dip->nd_name) 7862654012fSReza Sabdar (void) fprintf(stdout, 7872654012fSReza Sabdar gettext("\tName : %s\n"), dip->nd_name); 7882654012fSReza Sabdar (void) fprintf(stdout, 7892654012fSReza Sabdar gettext("\tLUN # : %d\n"), dip->nd_lun); 7902654012fSReza Sabdar (void) fprintf(stdout, 7912654012fSReza Sabdar gettext("\tSCSI ID # : %d\n"), dip->nd_sid); 7922654012fSReza Sabdar if (dip->nd_vendor) 7932654012fSReza Sabdar (void) fprintf(stdout, 7942654012fSReza Sabdar gettext("\tVendor : %s\n"), dip->nd_vendor); 7952654012fSReza Sabdar if (dip->nd_product) 7962654012fSReza Sabdar (void) fprintf(stdout, 7972654012fSReza Sabdar gettext("\tProduct : %s\n"), dip->nd_product); 7982654012fSReza Sabdar if (dip->nd_revision) 7992654012fSReza Sabdar (void) fprintf(stdout, 8002654012fSReza Sabdar gettext("\tRevision : %s\n"), dip->nd_revision); 801*7bc22e45SReza Sabdar if (dip->nd_serial) 802*7bc22e45SReza Sabdar (void) fprintf(stdout, 803*7bc22e45SReza Sabdar gettext("\tSerial : %s\n"), dip->nd_serial); 804*7bc22e45SReza Sabdar if (dip->nd_wwn) 805*7bc22e45SReza Sabdar (void) fprintf(stdout, 806*7bc22e45SReza Sabdar gettext("\tWWN : %s\n"), dip->nd_wwn); 8072654012fSReza Sabdar (void) fprintf(stdout, "\n"); 8082654012fSReza Sabdar } 8092654012fSReza Sabdar } 810