xref: /onnv-gate/usr/src/cmd/ndmpadm/ndmpadm_print.c (revision 8193:9b3c96bc17e3)
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