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