xref: /titanic_44/usr/src/cmd/ndmpadm/ndmpadm_print.c (revision 7bc22e45a20f905cdd06bb98c98a5c8be7fd25c0)
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