17917SReza.Sabdar@Sun.COM /* 27917SReza.Sabdar@Sun.COM * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 37917SReza.Sabdar@Sun.COM * Use is subject to license terms. 47917SReza.Sabdar@Sun.COM */ 57917SReza.Sabdar@Sun.COM 67917SReza.Sabdar@Sun.COM /* 77917SReza.Sabdar@Sun.COM * BSD 3 Clause License 87917SReza.Sabdar@Sun.COM * 97917SReza.Sabdar@Sun.COM * Copyright (c) 2007, The Storage Networking Industry Association. 107917SReza.Sabdar@Sun.COM * 117917SReza.Sabdar@Sun.COM * Redistribution and use in source and binary forms, with or without 127917SReza.Sabdar@Sun.COM * modification, are permitted provided that the following conditions 137917SReza.Sabdar@Sun.COM * are met: 147917SReza.Sabdar@Sun.COM * - Redistributions of source code must retain the above copyright 157917SReza.Sabdar@Sun.COM * notice, this list of conditions and the following disclaimer. 167917SReza.Sabdar@Sun.COM * 177917SReza.Sabdar@Sun.COM * - Redistributions in binary form must reproduce the above copyright 187917SReza.Sabdar@Sun.COM * notice, this list of conditions and the following disclaimer in 197917SReza.Sabdar@Sun.COM * the documentation and/or other materials provided with the 207917SReza.Sabdar@Sun.COM * distribution. 217917SReza.Sabdar@Sun.COM * 227917SReza.Sabdar@Sun.COM * - Neither the name of The Storage Networking Industry Association (SNIA) 237917SReza.Sabdar@Sun.COM * nor the names of its contributors may be used to endorse or promote 247917SReza.Sabdar@Sun.COM * products derived from this software without specific prior written 257917SReza.Sabdar@Sun.COM * permission. 267917SReza.Sabdar@Sun.COM * 277917SReza.Sabdar@Sun.COM * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 287917SReza.Sabdar@Sun.COM * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 297917SReza.Sabdar@Sun.COM * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 307917SReza.Sabdar@Sun.COM * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 317917SReza.Sabdar@Sun.COM * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 327917SReza.Sabdar@Sun.COM * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 337917SReza.Sabdar@Sun.COM * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 347917SReza.Sabdar@Sun.COM * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 357917SReza.Sabdar@Sun.COM * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 367917SReza.Sabdar@Sun.COM * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 377917SReza.Sabdar@Sun.COM * POSSIBILITY OF SUCH DAMAGE. 387917SReza.Sabdar@Sun.COM */ 397917SReza.Sabdar@Sun.COM #include <stdio.h> 407917SReza.Sabdar@Sun.COM #include <locale.h> 417917SReza.Sabdar@Sun.COM #include <libndmp.h> 427917SReza.Sabdar@Sun.COM #include "ndmpadm.h" 437917SReza.Sabdar@Sun.COM 447917SReza.Sabdar@Sun.COM /* static functions prototype */ 457917SReza.Sabdar@Sun.COM static void ndmp_tprint_addr(char *, ndmp_ad_type_t, char *); 467917SReza.Sabdar@Sun.COM static void ndmp_print_env(ndmp_session_info_t *); 477917SReza.Sabdar@Sun.COM static void ndmp_connect_print_conn(ndmp_session_info_t *); 487917SReza.Sabdar@Sun.COM static void ndmp_connect_print_scsi_v2(ndmp_session_info_t *); 497917SReza.Sabdar@Sun.COM static void ndmp_connect_print_tape_v2(ndmp_session_info_t *); 507917SReza.Sabdar@Sun.COM static void ndmp_connect_print_mover_v2(ndmp_session_info_t *); 517917SReza.Sabdar@Sun.COM static void ndmp_connect_print_data_v2(ndmp_session_info_t *); 527917SReza.Sabdar@Sun.COM static void ndmp_connect_print_v2(int, ndmp_session_info_t *); 537917SReza.Sabdar@Sun.COM static void ndmp_connect_print_mover_v3(ndmp_session_info_t *); 547917SReza.Sabdar@Sun.COM static void ndmp_connect_print_data_v3(ndmp_session_info_t *); 557917SReza.Sabdar@Sun.COM static void ndmp_connect_print_v3(int, ndmp_session_info_t *); 567917SReza.Sabdar@Sun.COM static void ndmp_connection_print(int, ndmp_session_info_t *); 577917SReza.Sabdar@Sun.COM 587917SReza.Sabdar@Sun.COM /* Boolean to string. */ 597917SReza.Sabdar@Sun.COM #define B2S(b) ((b) ? "Yes" : "No") 607917SReza.Sabdar@Sun.COM 617917SReza.Sabdar@Sun.COM /* 627917SReza.Sabdar@Sun.COM * Print the address type and IP address if the address type is tcp 637917SReza.Sabdar@Sun.COM */ 647917SReza.Sabdar@Sun.COM static void 657917SReza.Sabdar@Sun.COM ndmp_tprint_addr(char *label, ndmp_ad_type_t addr_type, char *tcp_addr) 667917SReza.Sabdar@Sun.COM { 677917SReza.Sabdar@Sun.COM if ((label == NULL) || (tcp_addr == NULL)) 687917SReza.Sabdar@Sun.COM return; 697917SReza.Sabdar@Sun.COM 707917SReza.Sabdar@Sun.COM switch (addr_type) { 717917SReza.Sabdar@Sun.COM case NDMP_AD_LOCAL: 727917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t%s type:\tLocal\n"), label); 737917SReza.Sabdar@Sun.COM break; 747917SReza.Sabdar@Sun.COM case NDMP_AD_TCP: 757917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t%s type:\tTCP\n"), label); 767917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t%s address:\t%s\n"), 777917SReza.Sabdar@Sun.COM label, tcp_addr); 787917SReza.Sabdar@Sun.COM break; 797917SReza.Sabdar@Sun.COM case NDMP_AD_FC: 807917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t%s type:\tFC\n"), label); 817917SReza.Sabdar@Sun.COM break; 827917SReza.Sabdar@Sun.COM case NDMP_AD_IPC: 837917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t%s type:\tIPC\n"), label); 847917SReza.Sabdar@Sun.COM break; 857917SReza.Sabdar@Sun.COM default: 867917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 877917SReza.Sabdar@Sun.COM gettext("\t%s addr type unknown (0x%x)\n"), 887917SReza.Sabdar@Sun.COM label, addr_type); 897917SReza.Sabdar@Sun.COM } 907917SReza.Sabdar@Sun.COM } 917917SReza.Sabdar@Sun.COM 927917SReza.Sabdar@Sun.COM /* 937917SReza.Sabdar@Sun.COM * Print all the data environment variables for the active session 947917SReza.Sabdar@Sun.COM */ 957917SReza.Sabdar@Sun.COM static void 967917SReza.Sabdar@Sun.COM ndmp_print_env(ndmp_session_info_t *si) 977917SReza.Sabdar@Sun.COM { 987917SReza.Sabdar@Sun.COM int i, n; 997917SReza.Sabdar@Sun.COM ndmp_dt_pval_t *ep; 1007917SReza.Sabdar@Sun.COM 1017917SReza.Sabdar@Sun.COM n = si->nsi_data.nd_env_len; 1027917SReza.Sabdar@Sun.COM ep = si->nsi_data.nd_env; 1037917SReza.Sabdar@Sun.COM for (i = 0; ep && i < n; i++, ep++) { 1047917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.env[%d]:\t%s: "), 1057917SReza.Sabdar@Sun.COM i, ep->np_name); 1067917SReza.Sabdar@Sun.COM if ((ep->np_value != NULL) && (*ep->np_value != NULL)) 1077917SReza.Sabdar@Sun.COM (void) fprintf(stdout, "\"%s\"\n", ep->np_value); 1087917SReza.Sabdar@Sun.COM } 1097917SReza.Sabdar@Sun.COM } 1107917SReza.Sabdar@Sun.COM 1117917SReza.Sabdar@Sun.COM /* 1127917SReza.Sabdar@Sun.COM * Print common fields of the active connection. 1137917SReza.Sabdar@Sun.COM */ 1147917SReza.Sabdar@Sun.COM static void 1157917SReza.Sabdar@Sun.COM ndmp_connect_print_conn(ndmp_session_info_t *si) 1167917SReza.Sabdar@Sun.COM { 1177917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tSession Id:\t%d\n"), si->nsi_sid); 1187917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tProtocol version:\t%d\n"), 1197917SReza.Sabdar@Sun.COM si->nsi_pver); 1207917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tAuthenticated:\t\t%s\n"), 1217917SReza.Sabdar@Sun.COM B2S(si->nsi_auth)); 1227917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tEOF:\t\t\t%s\n"), B2S(si->nsi_eof)); 1237917SReza.Sabdar@Sun.COM if (si->nsi_cl_addr != NULL) 1247917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1257917SReza.Sabdar@Sun.COM gettext("\tClient address:\t\t%s\n"), si->nsi_cl_addr); 1267917SReza.Sabdar@Sun.COM } 1277917SReza.Sabdar@Sun.COM 1287917SReza.Sabdar@Sun.COM /* 1297917SReza.Sabdar@Sun.COM * Print the connection SCSI info. 1307917SReza.Sabdar@Sun.COM */ 1317917SReza.Sabdar@Sun.COM static void 1327917SReza.Sabdar@Sun.COM ndmp_connect_print_scsi_v2(ndmp_session_info_t *si) 1337917SReza.Sabdar@Sun.COM { 1347917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tscsi.open:\t\t%s\n"), 1357917SReza.Sabdar@Sun.COM B2S(si->nsi_scsi.ns_scsi_open != -1)); 1367917SReza.Sabdar@Sun.COM if (si->nsi_scsi.ns_adapter_name) 1377917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tscsi.adapter:\t\t\"%s\"\n"), 1387917SReza.Sabdar@Sun.COM si->nsi_scsi.ns_adapter_name); 1397917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tscsi.valid target:\t%s\n"), 1407917SReza.Sabdar@Sun.COM B2S(si->nsi_scsi.ns_valid_target_set)); 1417917SReza.Sabdar@Sun.COM if (si->nsi_scsi.ns_valid_target_set) { 1427917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1437917SReza.Sabdar@Sun.COM gettext("\tscsi.SID:\t\t%d\n"), si->nsi_scsi.ns_scsi_id); 1447917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1457917SReza.Sabdar@Sun.COM gettext("\tscsi.LUN:\t\t%d\n"), si->nsi_scsi.ns_lun); 1467917SReza.Sabdar@Sun.COM } 1477917SReza.Sabdar@Sun.COM } 1487917SReza.Sabdar@Sun.COM 1497917SReza.Sabdar@Sun.COM /* 1507917SReza.Sabdar@Sun.COM * Print the connection tape info. 1517917SReza.Sabdar@Sun.COM */ 1527917SReza.Sabdar@Sun.COM static void 1537917SReza.Sabdar@Sun.COM ndmp_connect_print_tape_v2(ndmp_session_info_t *si) 1547917SReza.Sabdar@Sun.COM { 1557917SReza.Sabdar@Sun.COM if (si->nsi_tape.nt_fd != -1) { 1567917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\ttape.fd:\t\t%d\n"), 1577917SReza.Sabdar@Sun.COM si->nsi_tape.nt_fd); 1587917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\ttape.record count:\t%d\n"), 1597917SReza.Sabdar@Sun.COM (int)si->nsi_tape.nt_rec_count); 1607917SReza.Sabdar@Sun.COM 1617917SReza.Sabdar@Sun.COM switch (si->nsi_tape.nt_mode) { 1627917SReza.Sabdar@Sun.COM case NDMP_TP_READ_MODE: 1637917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1647917SReza.Sabdar@Sun.COM gettext("\ttape.mode:\t\tRead-only\n")); 1657917SReza.Sabdar@Sun.COM break; 1667917SReza.Sabdar@Sun.COM case NDMP_TP_WRITE_MODE: 1677917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1687917SReza.Sabdar@Sun.COM gettext("\ttape.mode:\t\tRead/Write\n")); 1697917SReza.Sabdar@Sun.COM break; 1707917SReza.Sabdar@Sun.COM case NDMP_TP_RAW1_MODE: 1717917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1727917SReza.Sabdar@Sun.COM gettext("\ttape.mode:\t\tRaw\n")); 1737917SReza.Sabdar@Sun.COM break; 1747917SReza.Sabdar@Sun.COM default: 1757917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1767917SReza.Sabdar@Sun.COM gettext("\ttape.mode:\t\tUnknown (0x%x)\n"), 1777917SReza.Sabdar@Sun.COM si->nsi_tape.nt_mode); 1787917SReza.Sabdar@Sun.COM } 1797917SReza.Sabdar@Sun.COM 1807917SReza.Sabdar@Sun.COM if (si->nsi_tape.nt_dev_name) 1817917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1827917SReza.Sabdar@Sun.COM gettext("\ttape.device name:\t%s\n"), 1837917SReza.Sabdar@Sun.COM si->nsi_tape.nt_dev_name); 1847917SReza.Sabdar@Sun.COM if (si->nsi_tape.nt_adapter_name) 1857917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1867917SReza.Sabdar@Sun.COM gettext("\ttape.adapter name:\t\"%s\"\n"), 1877917SReza.Sabdar@Sun.COM si->nsi_tape.nt_adapter_name); 1887917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1897917SReza.Sabdar@Sun.COM gettext("\ttape.SID:\t\t%d\n"), si->nsi_tape.nt_sid); 1907917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 1917917SReza.Sabdar@Sun.COM gettext("\ttape.LUN:\t\t%d\n"), si->nsi_tape.nt_lun); 1927917SReza.Sabdar@Sun.COM } else 1937917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\ttape.device:\t\tNot open\n")); 1947917SReza.Sabdar@Sun.COM } 1957917SReza.Sabdar@Sun.COM 1967917SReza.Sabdar@Sun.COM /* 1977917SReza.Sabdar@Sun.COM * Print the connection mover info. 1987917SReza.Sabdar@Sun.COM */ 1997917SReza.Sabdar@Sun.COM static void 2007917SReza.Sabdar@Sun.COM ndmp_connect_print_mover_v2(ndmp_session_info_t *si) 2017917SReza.Sabdar@Sun.COM { 2027917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_state) { 2037917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_IDLE: 2047917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 2057917SReza.Sabdar@Sun.COM break; 2067917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_LISTEN: 2077917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 2087917SReza.Sabdar@Sun.COM break; 2097917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_ACTIVE: 2107917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 2117917SReza.Sabdar@Sun.COM break; 2127917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_PAUSED: 2137917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 2147917SReza.Sabdar@Sun.COM break; 2157917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_HALTED: 2167917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 2177917SReza.Sabdar@Sun.COM break; 2187917SReza.Sabdar@Sun.COM default: 2197917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2207917SReza.Sabdar@Sun.COM gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 2217917SReza.Sabdar@Sun.COM si->nsi_mover.nm_state); 2227917SReza.Sabdar@Sun.COM } 2237917SReza.Sabdar@Sun.COM 2247917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_mode) { 2257917SReza.Sabdar@Sun.COM case NDMP_MV_MODE_READ: 2267917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 2277917SReza.Sabdar@Sun.COM break; 2287917SReza.Sabdar@Sun.COM case NDMP_MV_MODE_WRITE: 2297917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 2307917SReza.Sabdar@Sun.COM break; 2317917SReza.Sabdar@Sun.COM default: 2327917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2337917SReza.Sabdar@Sun.COM gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 2347917SReza.Sabdar@Sun.COM si->nsi_mover.nm_mode); 2357917SReza.Sabdar@Sun.COM } 2367917SReza.Sabdar@Sun.COM 2377917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_pause_reason) { 2387917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_NA: 2397917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 2407917SReza.Sabdar@Sun.COM break; 2417917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_EOM: 2427917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 2437917SReza.Sabdar@Sun.COM break; 2447917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_EOF: 2457917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 2467917SReza.Sabdar@Sun.COM break; 2477917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_SEEK: 2487917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2497917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tSeek\n")); 2507917SReza.Sabdar@Sun.COM break; 2517917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_MEDIA_ERROR: 2527917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2537917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tMedia Error\n")); 2547917SReza.Sabdar@Sun.COM break; 2557917SReza.Sabdar@Sun.COM default: 2567917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2577917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 2587917SReza.Sabdar@Sun.COM si->nsi_mover.nm_pause_reason); 2597917SReza.Sabdar@Sun.COM } 2607917SReza.Sabdar@Sun.COM 2617917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_halt_reason) { 2627917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_NA: 2637917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 2647917SReza.Sabdar@Sun.COM break; 2657917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_CONNECT_CLOSED: 2667917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2677917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tConnection closed\n")); 2687917SReza.Sabdar@Sun.COM break; 2697917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_ABORTED: 2707917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2717917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tAborted\n")); 2727917SReza.Sabdar@Sun.COM break; 2737917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_INTERNAL_ERROR: 2747917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2757917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tInternal error\n")); 2767917SReza.Sabdar@Sun.COM break; 2777917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_CONNECT_ERROR: 2787917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2797917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tConnection error\n")); 2807917SReza.Sabdar@Sun.COM break; 2817917SReza.Sabdar@Sun.COM default: 2827917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 2837917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 2847917SReza.Sabdar@Sun.COM si->nsi_mover.nm_halt_reason); 2857917SReza.Sabdar@Sun.COM } 2867917SReza.Sabdar@Sun.COM 2877917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 2887917SReza.Sabdar@Sun.COM (int)si->nsi_mover.nm_rec_size); 2897917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 2907917SReza.Sabdar@Sun.COM (int)si->nsi_mover.nm_rec_num); 2917917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 2927917SReza.Sabdar@Sun.COM si->nsi_mover.nm_mov_pos); 2937917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 2947917SReza.Sabdar@Sun.COM si->nsi_mover.nm_window_offset); 2957917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 2967917SReza.Sabdar@Sun.COM si->nsi_mover.nm_window_length); 2977917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 2987917SReza.Sabdar@Sun.COM si->nsi_mover.nm_sock); 2997917SReza.Sabdar@Sun.COM } 3007917SReza.Sabdar@Sun.COM 3017917SReza.Sabdar@Sun.COM /* 3027917SReza.Sabdar@Sun.COM * Print the connection data info. 3037917SReza.Sabdar@Sun.COM */ 3047917SReza.Sabdar@Sun.COM static void 3057917SReza.Sabdar@Sun.COM ndmp_connect_print_data_v2(ndmp_session_info_t *si) 3067917SReza.Sabdar@Sun.COM { 3077917SReza.Sabdar@Sun.COM int i; 3087917SReza.Sabdar@Sun.COM ndmp_dt_name_t *np; 3097917SReza.Sabdar@Sun.COM 3107917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_oper) { 3117917SReza.Sabdar@Sun.COM case NDMP_DT_OP_NOACTION: 3127917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 3137917SReza.Sabdar@Sun.COM break; 3147917SReza.Sabdar@Sun.COM case NDMP_DT_OP_BACKUP: 3157917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3167917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tBackup\n")); 3177917SReza.Sabdar@Sun.COM break; 3187917SReza.Sabdar@Sun.COM case NDMP_DT_OP_RECOVER: 3197917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3207917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tRestore\n")); 3217917SReza.Sabdar@Sun.COM break; 3227917SReza.Sabdar@Sun.COM default: 3237917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3247917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 3257917SReza.Sabdar@Sun.COM si->nsi_data.nd_oper); 3267917SReza.Sabdar@Sun.COM } 3277917SReza.Sabdar@Sun.COM 3287917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_state) { 3297917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_IDLE: 3307917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 3317917SReza.Sabdar@Sun.COM break; 3327917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_ACTIVE: 3337917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 3347917SReza.Sabdar@Sun.COM break; 3357917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_HALTED: 3367917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 3377917SReza.Sabdar@Sun.COM break; 3387917SReza.Sabdar@Sun.COM default: 3397917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3407917SReza.Sabdar@Sun.COM gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 3417917SReza.Sabdar@Sun.COM si->nsi_data.nd_state); 3427917SReza.Sabdar@Sun.COM } 3437917SReza.Sabdar@Sun.COM 3447917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_halt_reason) { 3457917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_NA: 3467917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.halt reason:\tN/A\n")); 3477917SReza.Sabdar@Sun.COM break; 3487917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_SUCCESSFUL: 3497917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3507917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tSuccessful\n")); 3517917SReza.Sabdar@Sun.COM break; 3527917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_ABORTED: 3537917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3547917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tAborted\n")); 3557917SReza.Sabdar@Sun.COM break; 3567917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_INTERNAL_ERROR: 3577917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3587917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tInternal error\n")); 3597917SReza.Sabdar@Sun.COM break; 3607917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_CONNECT_ERROR: 3617917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3627917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tConnection error\n")); 3637917SReza.Sabdar@Sun.COM break; 3647917SReza.Sabdar@Sun.COM default: 3657917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3667917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 3677917SReza.Sabdar@Sun.COM si->nsi_data.nd_halt_reason); 3687917SReza.Sabdar@Sun.COM } 3697917SReza.Sabdar@Sun.COM 3707917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_addr_type) { 3717917SReza.Sabdar@Sun.COM case NDMP_AD_LOCAL: 3727917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.mover type:\tLocal\n")); 3737917SReza.Sabdar@Sun.COM break; 3747917SReza.Sabdar@Sun.COM case NDMP_AD_TCP: 3757917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.mover type:\tTCP\n")); 3767917SReza.Sabdar@Sun.COM if (si->nsi_data.nd_tcp_addr) 3777917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3787917SReza.Sabdar@Sun.COM gettext("\tdata.mover address:\t%s\n"), 3797917SReza.Sabdar@Sun.COM si->nsi_data.nd_tcp_addr); 3807917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.sock:\t%d\n"), 3817917SReza.Sabdar@Sun.COM si->nsi_data.nd_sock); 3827917SReza.Sabdar@Sun.COM break; 3837917SReza.Sabdar@Sun.COM default: 3847917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 3857917SReza.Sabdar@Sun.COM gettext("\tdata.mover type:\tUnknown (0x%x)\n"), 3867917SReza.Sabdar@Sun.COM si->nsi_data.nd_addr_type); 3877917SReza.Sabdar@Sun.COM } 3887917SReza.Sabdar@Sun.COM 3897917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 3907917SReza.Sabdar@Sun.COM B2S(si->nsi_data.nd_abort)); 3917917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 3927917SReza.Sabdar@Sun.COM si->nsi_data.nd_read_offset); 3937917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 3947917SReza.Sabdar@Sun.COM si->nsi_data.nd_read_length); 3957917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 3967917SReza.Sabdar@Sun.COM si->nsi_data.nd_total_size); 3977917SReza.Sabdar@Sun.COM 3987917SReza.Sabdar@Sun.COM ndmp_print_env(si); 3997917SReza.Sabdar@Sun.COM 4007917SReza.Sabdar@Sun.COM np = si->nsi_data.nd_nlist.nld_nlist; 4017917SReza.Sabdar@Sun.COM for (i = 0; np && i < (int)si->nsi_data.nld_nlist_len; i++, np++) { 4027917SReza.Sabdar@Sun.COM if ((np->nn_name) && (np->nn_dest)) { 4037917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4047917SReza.Sabdar@Sun.COM gettext("\tdata.nlist[%d]:\tname: " 4057917SReza.Sabdar@Sun.COM "\"%s\"\n\t\tdest:\"%s\"\n"), 4067917SReza.Sabdar@Sun.COM i, np->nn_name, np->nn_dest); 4077917SReza.Sabdar@Sun.COM } 4087917SReza.Sabdar@Sun.COM } 4097917SReza.Sabdar@Sun.COM } 4107917SReza.Sabdar@Sun.COM 4117917SReza.Sabdar@Sun.COM /* 4127917SReza.Sabdar@Sun.COM * Print V2 connection info for the given category. 4137917SReza.Sabdar@Sun.COM */ 4147917SReza.Sabdar@Sun.COM static void 4157917SReza.Sabdar@Sun.COM ndmp_connect_print_v2(int cat, ndmp_session_info_t *si) 4167917SReza.Sabdar@Sun.COM { 4177917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_SCSI) 4187917SReza.Sabdar@Sun.COM ndmp_connect_print_scsi_v2(si); 4197917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_TAPE) 4207917SReza.Sabdar@Sun.COM ndmp_connect_print_tape_v2(si); 4217917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_MOVER) 4227917SReza.Sabdar@Sun.COM ndmp_connect_print_mover_v2(si); 4237917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_DATA) 4247917SReza.Sabdar@Sun.COM ndmp_connect_print_data_v2(si); 4257917SReza.Sabdar@Sun.COM } 4267917SReza.Sabdar@Sun.COM 4277917SReza.Sabdar@Sun.COM /* 4287917SReza.Sabdar@Sun.COM * Print the V3 connection mover info. 4297917SReza.Sabdar@Sun.COM */ 4307917SReza.Sabdar@Sun.COM static void 4317917SReza.Sabdar@Sun.COM ndmp_connect_print_mover_v3(ndmp_session_info_t *si) 4327917SReza.Sabdar@Sun.COM { 4337917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_state) { 4347917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_IDLE: 4357917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n")); 4367917SReza.Sabdar@Sun.COM break; 4377917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_LISTEN: 4387917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n")); 4397917SReza.Sabdar@Sun.COM break; 4407917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_ACTIVE: 4417917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n")); 4427917SReza.Sabdar@Sun.COM break; 4437917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_PAUSED: 4447917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n")); 4457917SReza.Sabdar@Sun.COM break; 4467917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_HALTED: 4477917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n")); 4487917SReza.Sabdar@Sun.COM break; 4497917SReza.Sabdar@Sun.COM default: 4507917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4517917SReza.Sabdar@Sun.COM gettext("\tmover.state:\t\tUnknown (0x%x)\n"), 4527917SReza.Sabdar@Sun.COM si->nsi_mover.nm_state); 4537917SReza.Sabdar@Sun.COM } 4547917SReza.Sabdar@Sun.COM 4557917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_mode) { 4567917SReza.Sabdar@Sun.COM case NDMP_MV_MODE_READ: 4577917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n")); 4587917SReza.Sabdar@Sun.COM break; 4597917SReza.Sabdar@Sun.COM case NDMP_MV_MODE_WRITE: 4607917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n")); 4617917SReza.Sabdar@Sun.COM break; 4627917SReza.Sabdar@Sun.COM default: 4637917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4647917SReza.Sabdar@Sun.COM gettext("\tmover.mode:\t\tUnknown (0x%x)\n"), 4657917SReza.Sabdar@Sun.COM si->nsi_mover.nm_mode); 4667917SReza.Sabdar@Sun.COM } 4677917SReza.Sabdar@Sun.COM 4687917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_pause_reason) { 4697917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_NA: 4707917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n")); 4717917SReza.Sabdar@Sun.COM break; 4727917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_EOM: 4737917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n")); 4747917SReza.Sabdar@Sun.COM break; 4757917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_EOF: 4767917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n")); 4777917SReza.Sabdar@Sun.COM break; 4787917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_SEEK: 4797917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4807917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tSeek\n")); 4817917SReza.Sabdar@Sun.COM break; 4827917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_MEDIA_ERROR: 4837917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4847917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tMedia Error\n")); 4857917SReza.Sabdar@Sun.COM break; 4867917SReza.Sabdar@Sun.COM case NDMP_MV_PAUSE_EOW: 4877917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pause reason:\tEOW\n")); 4887917SReza.Sabdar@Sun.COM break; 4897917SReza.Sabdar@Sun.COM default: 4907917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 4917917SReza.Sabdar@Sun.COM gettext("\tmover.pause reason:\tUnknown (0x%x)\n"), 4927917SReza.Sabdar@Sun.COM si->nsi_mover.nm_pause_reason); 4937917SReza.Sabdar@Sun.COM } 4947917SReza.Sabdar@Sun.COM 4957917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_halt_reason) { 4967917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_NA: 4977917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n")); 4987917SReza.Sabdar@Sun.COM break; 4997917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_CONNECT_CLOSED: 5007917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5017917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tConnection closed\n")); 5027917SReza.Sabdar@Sun.COM break; 5037917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_ABORTED: 5047917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5057917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tAborted\n")); 5067917SReza.Sabdar@Sun.COM break; 5077917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_INTERNAL_ERROR: 5087917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5097917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tInternal error\n")); 5107917SReza.Sabdar@Sun.COM break; 5117917SReza.Sabdar@Sun.COM case NDMP_MV_HALT_CONNECT_ERROR: 5127917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5137917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tConnection error\n")); 5147917SReza.Sabdar@Sun.COM break; 5157917SReza.Sabdar@Sun.COM default: 5167917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5177917SReza.Sabdar@Sun.COM gettext("\tmover.halt reason:\tUnknown (0x%x)\n"), 5187917SReza.Sabdar@Sun.COM si->nsi_mover.nm_halt_reason); 5197917SReza.Sabdar@Sun.COM } 5207917SReza.Sabdar@Sun.COM 5217917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"), 5227917SReza.Sabdar@Sun.COM (int)si->nsi_mover.nm_rec_size); 5237917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"), 5247917SReza.Sabdar@Sun.COM (int)si->nsi_mover.nm_rec_num); 5257917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"), 5267917SReza.Sabdar@Sun.COM si->nsi_mover.nm_mov_pos, si->nsi_mover.nm_mov_pos); 5277917SReza.Sabdar@Sun.COM 5287917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"), 5297917SReza.Sabdar@Sun.COM si->nsi_mover.nm_window_length, si->nsi_mover.nm_window_length); 5307917SReza.Sabdar@Sun.COM 5317917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"), 5327917SReza.Sabdar@Sun.COM si->nsi_mover.nm_window_offset); 5337917SReza.Sabdar@Sun.COM switch (si->nsi_mover.nm_state) { 5347917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_IDLE: 5357917SReza.Sabdar@Sun.COM if (si->nsi_mover.nm_listen_sock != -1) 5367917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5377917SReza.Sabdar@Sun.COM gettext("\tmover.listenSock:\t%d\n"), 5387917SReza.Sabdar@Sun.COM si->nsi_mover.nm_listen_sock); 5397917SReza.Sabdar@Sun.COM if (si->nsi_mover.nm_sock != -1) 5407917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.sock:\t%d\n"), 5417917SReza.Sabdar@Sun.COM si->nsi_mover.nm_sock); 5427917SReza.Sabdar@Sun.COM break; 5437917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_LISTEN: 5447917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.listen socket:\t%d\n"), 5457917SReza.Sabdar@Sun.COM si->nsi_mover.nm_listen_sock); 5467917SReza.Sabdar@Sun.COM ndmp_tprint_addr(gettext("mover.listen"), 5477917SReza.Sabdar@Sun.COM si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 5487917SReza.Sabdar@Sun.COM break; 5497917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_ACTIVE: 5507917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_PAUSED: 5517917SReza.Sabdar@Sun.COM case NDMP_MV_STATE_HALTED: 5527917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"), 5537917SReza.Sabdar@Sun.COM si->nsi_mover.nm_sock); 5547917SReza.Sabdar@Sun.COM ndmp_tprint_addr(gettext("mover.data connection"), 5557917SReza.Sabdar@Sun.COM si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr); 5567917SReza.Sabdar@Sun.COM break; 5577917SReza.Sabdar@Sun.COM } 5587917SReza.Sabdar@Sun.COM } 5597917SReza.Sabdar@Sun.COM 5607917SReza.Sabdar@Sun.COM /* 5617917SReza.Sabdar@Sun.COM * Print the connection data info. 5627917SReza.Sabdar@Sun.COM */ 5637917SReza.Sabdar@Sun.COM static void 5647917SReza.Sabdar@Sun.COM ndmp_connect_print_data_v3(ndmp_session_info_t *si) 5657917SReza.Sabdar@Sun.COM { 5667917SReza.Sabdar@Sun.COM int i; 5677917SReza.Sabdar@Sun.COM ndmp_dt_name_v3_t *np; 5687917SReza.Sabdar@Sun.COM 5697917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_oper) { 5707917SReza.Sabdar@Sun.COM case NDMP_DT_OP_NOACTION: 5717917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n")); 5727917SReza.Sabdar@Sun.COM break; 5737917SReza.Sabdar@Sun.COM case NDMP_DT_OP_BACKUP: 5747917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5757917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tBackup\n")); 5767917SReza.Sabdar@Sun.COM break; 5777917SReza.Sabdar@Sun.COM case NDMP_DT_OP_RECOVER: 5787917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5797917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tRestore\n")); 5807917SReza.Sabdar@Sun.COM break; 5817917SReza.Sabdar@Sun.COM default: 5827917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 5837917SReza.Sabdar@Sun.COM gettext("\tdata.operation:\t\tUnknown (0x%x)\n"), 5847917SReza.Sabdar@Sun.COM si->nsi_data.nd_oper); 5857917SReza.Sabdar@Sun.COM } 5867917SReza.Sabdar@Sun.COM 5877917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_state) { 5887917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_IDLE: 5897917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n")); 5907917SReza.Sabdar@Sun.COM break; 5917917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_ACTIVE: 5927917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n")); 5937917SReza.Sabdar@Sun.COM break; 5947917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_HALTED: 5957917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n")); 5967917SReza.Sabdar@Sun.COM break; 5977917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_LISTEN: 5987917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tListen\n")); 5997917SReza.Sabdar@Sun.COM break; 6007917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_CONNECTED: 6017917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.state:\t\tConnected\n")); 6027917SReza.Sabdar@Sun.COM break; 6037917SReza.Sabdar@Sun.COM default: 6047917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6057917SReza.Sabdar@Sun.COM gettext("\tdata.state:\t\tUnknown (0x%x)\n"), 6067917SReza.Sabdar@Sun.COM si->nsi_data.nd_state); 6077917SReza.Sabdar@Sun.COM } 6087917SReza.Sabdar@Sun.COM 6097917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_halt_reason) { 6107917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_NA: 6117917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6127917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tN/A\n")); 6137917SReza.Sabdar@Sun.COM break; 6147917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_SUCCESSFUL: 6157917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6167917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tSuccessful\n")); 6177917SReza.Sabdar@Sun.COM break; 6187917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_ABORTED: 6197917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6207917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tAborted\n")); 6217917SReza.Sabdar@Sun.COM break; 6227917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_INTERNAL_ERROR: 6237917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6247917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tInternal error\n")); 6257917SReza.Sabdar@Sun.COM break; 6267917SReza.Sabdar@Sun.COM case NDMP_DT_HALT_CONNECT_ERROR: 6277917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6287917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tConnection error\n")); 6297917SReza.Sabdar@Sun.COM break; 6307917SReza.Sabdar@Sun.COM default: 6317917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6327917SReza.Sabdar@Sun.COM gettext("\tdata.halt reason:\tUnknown (0x%x)\n"), 6337917SReza.Sabdar@Sun.COM si->nsi_data.nd_halt_reason); 6347917SReza.Sabdar@Sun.COM } 6357917SReza.Sabdar@Sun.COM 6367917SReza.Sabdar@Sun.COM switch (si->nsi_data.nd_state) { 6377917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_IDLE: 6387917SReza.Sabdar@Sun.COM if (si->nsi_data.nd_sock != -1) 6397917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6407917SReza.Sabdar@Sun.COM gettext("\tdata.data socket:\t%d\n"), 6417917SReza.Sabdar@Sun.COM si->nsi_data.nd_sock); 6427917SReza.Sabdar@Sun.COM if (si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock != -1) 6437917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6447917SReza.Sabdar@Sun.COM gettext("\tdata.data socket:\t%d\n"), 6457917SReza.Sabdar@Sun.COM si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 6467917SReza.Sabdar@Sun.COM break; 6477917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_LISTEN: 6487917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.listen socket:\t%d\n"), 6497917SReza.Sabdar@Sun.COM si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock); 6507917SReza.Sabdar@Sun.COM ndmp_tprint_addr(gettext("data.listen"), 6517917SReza.Sabdar@Sun.COM si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 6527917SReza.Sabdar@Sun.COM break; 6537917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_ACTIVE: 6547917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_HALTED: 6557917SReza.Sabdar@Sun.COM case NDMP_DT_STATE_CONNECTED: 6567917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.data socket:\t%d\n"), 6577917SReza.Sabdar@Sun.COM si->nsi_data.nd_sock); 6587917SReza.Sabdar@Sun.COM ndmp_tprint_addr(gettext("data.data"), 6597917SReza.Sabdar@Sun.COM si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr); 6607917SReza.Sabdar@Sun.COM break; 6617917SReza.Sabdar@Sun.COM } 6627917SReza.Sabdar@Sun.COM 6637917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"), 6647917SReza.Sabdar@Sun.COM B2S(si->nsi_data.nd_abort)); 6657917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"), 6667917SReza.Sabdar@Sun.COM si->nsi_data.nd_read_offset); 6677917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"), 6687917SReza.Sabdar@Sun.COM si->nsi_data.nd_read_length); 6697917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"), 6707917SReza.Sabdar@Sun.COM si->nsi_data.nd_total_size); 6717917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6727917SReza.Sabdar@Sun.COM gettext("\tdata.bytes processed:\t%lld\n"), 6737917SReza.Sabdar@Sun.COM si->nsi_data.nd_nlist.nld_dt_v3.dv3_bytes_processed); 6747917SReza.Sabdar@Sun.COM 6757917SReza.Sabdar@Sun.COM ndmp_print_env(si); 6767917SReza.Sabdar@Sun.COM 6777917SReza.Sabdar@Sun.COM np = si->nsi_data.nd_nlist.nld_dt_v3.dv3_nlist; 6787917SReza.Sabdar@Sun.COM for (i = 0; np && i < si->nsi_data.nld_nlist_len; i++, np++) { 6797917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\tdata.nlist[%d]:\tname:\n"), 6807917SReza.Sabdar@Sun.COM i); 6817917SReza.Sabdar@Sun.COM if (np->nn3_opath) 6827917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6837917SReza.Sabdar@Sun.COM gettext("\t\torig: \"%s\"\n"), np->nn3_opath); 6847917SReza.Sabdar@Sun.COM if (np->nn3_dpath) 6857917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6867917SReza.Sabdar@Sun.COM gettext("\t\tdest: \"%s\"\n"), np->nn3_dpath); 6877917SReza.Sabdar@Sun.COM else 6887917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t\tdest:\n")); 6897917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 6907917SReza.Sabdar@Sun.COM gettext("\t\tnode: %lld\n"), np->nn3_node); 6917917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("\t\tfh_info: %lld\n"), 6927917SReza.Sabdar@Sun.COM np->nn3_fh_info); 6937917SReza.Sabdar@Sun.COM } 6947917SReza.Sabdar@Sun.COM } 6957917SReza.Sabdar@Sun.COM 6967917SReza.Sabdar@Sun.COM /* 6977917SReza.Sabdar@Sun.COM * Print V3 connection info for given category. 6987917SReza.Sabdar@Sun.COM */ 6997917SReza.Sabdar@Sun.COM static void 7007917SReza.Sabdar@Sun.COM ndmp_connect_print_v3(int cat, ndmp_session_info_t *si) 7017917SReza.Sabdar@Sun.COM { 7027917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_SCSI) 7037917SReza.Sabdar@Sun.COM ndmp_connect_print_scsi_v2(si); 7047917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_TAPE) 7057917SReza.Sabdar@Sun.COM ndmp_connect_print_tape_v2(si); 7067917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_MOVER) 7077917SReza.Sabdar@Sun.COM ndmp_connect_print_mover_v3(si); 7087917SReza.Sabdar@Sun.COM if (cat & NDMP_CAT_DATA) 7097917SReza.Sabdar@Sun.COM ndmp_connect_print_data_v3(si); 7107917SReza.Sabdar@Sun.COM } 7117917SReza.Sabdar@Sun.COM 7127917SReza.Sabdar@Sun.COM /* 7137917SReza.Sabdar@Sun.COM * Print the list of all active sessions to the clients. For each version, 7147917SReza.Sabdar@Sun.COM * call the appropriate print function. 7157917SReza.Sabdar@Sun.COM */ 7167917SReza.Sabdar@Sun.COM static void 7177917SReza.Sabdar@Sun.COM ndmp_connection_print(int cat, ndmp_session_info_t *si) 7187917SReza.Sabdar@Sun.COM { 7197917SReza.Sabdar@Sun.COM switch (si->nsi_pver) { 7207917SReza.Sabdar@Sun.COM case NDMP_V2: 7217917SReza.Sabdar@Sun.COM ndmp_connect_print_conn(si); 7227917SReza.Sabdar@Sun.COM ndmp_connect_print_v2(cat, si); 7237917SReza.Sabdar@Sun.COM break; 7247917SReza.Sabdar@Sun.COM case NDMP_V3: 7257917SReza.Sabdar@Sun.COM case NDMP_V4: 7267917SReza.Sabdar@Sun.COM ndmp_connect_print_conn(si); 7277917SReza.Sabdar@Sun.COM ndmp_connect_print_v3(cat, si); 7287917SReza.Sabdar@Sun.COM break; 7297917SReza.Sabdar@Sun.COM default: 7307917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7317917SReza.Sabdar@Sun.COM gettext("Invalid version %d"), si->nsi_pver); 7327917SReza.Sabdar@Sun.COM } 7337917SReza.Sabdar@Sun.COM } 7347917SReza.Sabdar@Sun.COM 7357917SReza.Sabdar@Sun.COM /* 7367917SReza.Sabdar@Sun.COM * Print the list of all active sessions to the clients. 7377917SReza.Sabdar@Sun.COM */ 7387917SReza.Sabdar@Sun.COM void 7397917SReza.Sabdar@Sun.COM ndmp_session_all_print(int cat, ndmp_session_info_t *si, size_t num) 7407917SReza.Sabdar@Sun.COM { 7417917SReza.Sabdar@Sun.COM int i; 7427917SReza.Sabdar@Sun.COM ndmp_session_info_t *sp; 7437917SReza.Sabdar@Sun.COM 7447917SReza.Sabdar@Sun.COM sp = si; 7457917SReza.Sabdar@Sun.COM for (i = 0; i < num; i++, sp++) { 7467917SReza.Sabdar@Sun.COM ndmp_connection_print(cat, sp); 7477917SReza.Sabdar@Sun.COM (void) fprintf(stdout, "\n"); 7487917SReza.Sabdar@Sun.COM } 7497917SReza.Sabdar@Sun.COM 7507917SReza.Sabdar@Sun.COM if (num == 0) { 7517917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("No active session.\n")); 7527917SReza.Sabdar@Sun.COM } else { 7537917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("%d active sessions.\n"), num); 7547917SReza.Sabdar@Sun.COM } 7557917SReza.Sabdar@Sun.COM } 7567917SReza.Sabdar@Sun.COM 7577917SReza.Sabdar@Sun.COM /* 7587917SReza.Sabdar@Sun.COM * Print the connection information for the given category. 7597917SReza.Sabdar@Sun.COM */ 7607917SReza.Sabdar@Sun.COM void 7617917SReza.Sabdar@Sun.COM ndmp_session_print(int cat, ndmp_session_info_t *si) 7627917SReza.Sabdar@Sun.COM { 7637917SReza.Sabdar@Sun.COM ndmp_connection_print(cat, si); 7647917SReza.Sabdar@Sun.COM } 7657917SReza.Sabdar@Sun.COM 7667917SReza.Sabdar@Sun.COM void 7677917SReza.Sabdar@Sun.COM ndmp_devinfo_print(ndmp_devinfo_t *dip, size_t size) 7687917SReza.Sabdar@Sun.COM { 7697917SReza.Sabdar@Sun.COM int i; 7707917SReza.Sabdar@Sun.COM 7717917SReza.Sabdar@Sun.COM if (dip == NULL) { 7727917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("No device attached.\n")); 7737917SReza.Sabdar@Sun.COM return; 7747917SReza.Sabdar@Sun.COM } 7757917SReza.Sabdar@Sun.COM 7767917SReza.Sabdar@Sun.COM for (i = 0; i < size; i++, dip++) { 7777917SReza.Sabdar@Sun.COM switch (dip->nd_dev_type) { 7787917SReza.Sabdar@Sun.COM case NDMP_SINQ_TAPE_ROBOT: 7797917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("Robot (Changer):\n")); 7807917SReza.Sabdar@Sun.COM break; 7817917SReza.Sabdar@Sun.COM case NDMP_SINQ_SEQ_ACCESS_DEVICE: 7827917SReza.Sabdar@Sun.COM (void) fprintf(stdout, gettext("Tape drive(s):\n")); 7837917SReza.Sabdar@Sun.COM break; 7847917SReza.Sabdar@Sun.COM } 7857917SReza.Sabdar@Sun.COM if (dip->nd_name) 7867917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7877917SReza.Sabdar@Sun.COM gettext("\tName : %s\n"), dip->nd_name); 7887917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7897917SReza.Sabdar@Sun.COM gettext("\tLUN # : %d\n"), dip->nd_lun); 7907917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7917917SReza.Sabdar@Sun.COM gettext("\tSCSI ID # : %d\n"), dip->nd_sid); 7927917SReza.Sabdar@Sun.COM if (dip->nd_vendor) 7937917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7947917SReza.Sabdar@Sun.COM gettext("\tVendor : %s\n"), dip->nd_vendor); 7957917SReza.Sabdar@Sun.COM if (dip->nd_product) 7967917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 7977917SReza.Sabdar@Sun.COM gettext("\tProduct : %s\n"), dip->nd_product); 7987917SReza.Sabdar@Sun.COM if (dip->nd_revision) 7997917SReza.Sabdar@Sun.COM (void) fprintf(stdout, 8007917SReza.Sabdar@Sun.COM gettext("\tRevision : %s\n"), dip->nd_revision); 801*8193SReza.Sabdar@Sun.COM if (dip->nd_serial) 802*8193SReza.Sabdar@Sun.COM (void) fprintf(stdout, 803*8193SReza.Sabdar@Sun.COM gettext("\tSerial : %s\n"), dip->nd_serial); 804*8193SReza.Sabdar@Sun.COM if (dip->nd_wwn) 805*8193SReza.Sabdar@Sun.COM (void) fprintf(stdout, 806*8193SReza.Sabdar@Sun.COM gettext("\tWWN : %s\n"), dip->nd_wwn); 8077917SReza.Sabdar@Sun.COM (void) fprintf(stdout, "\n"); 8087917SReza.Sabdar@Sun.COM } 8097917SReza.Sabdar@Sun.COM } 810