xref: /illumos-gate/usr/src/cmd/ndmpadm/ndmpadm_print.c (revision 2654012f83cec5dc15b61dfe3e4a4915f186e7a6)
1*2654012fSReza Sabdar /*
2*2654012fSReza Sabdar  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3*2654012fSReza Sabdar  * Use is subject to license terms.
4*2654012fSReza Sabdar  */
5*2654012fSReza Sabdar 
6*2654012fSReza Sabdar /*
7*2654012fSReza Sabdar  * BSD 3 Clause License
8*2654012fSReza Sabdar  *
9*2654012fSReza Sabdar  * Copyright (c) 2007, The Storage Networking Industry Association.
10*2654012fSReza Sabdar  *
11*2654012fSReza Sabdar  * Redistribution and use in source and binary forms, with or without
12*2654012fSReza Sabdar  * modification, are permitted provided that the following conditions
13*2654012fSReza Sabdar  * are met:
14*2654012fSReza Sabdar  * 	- Redistributions of source code must retain the above copyright
15*2654012fSReza Sabdar  *	  notice, this list of conditions and the following disclaimer.
16*2654012fSReza Sabdar  *
17*2654012fSReza Sabdar  * 	- Redistributions in binary form must reproduce the above copyright
18*2654012fSReza Sabdar  *	  notice, this list of conditions and the following disclaimer in
19*2654012fSReza Sabdar  *	  the documentation and/or other materials provided with the
20*2654012fSReza Sabdar  *	  distribution.
21*2654012fSReza Sabdar  *
22*2654012fSReza Sabdar  *	- Neither the name of The Storage Networking Industry Association (SNIA)
23*2654012fSReza Sabdar  *	  nor the names of its contributors may be used to endorse or promote
24*2654012fSReza Sabdar  *	  products derived from this software without specific prior written
25*2654012fSReza Sabdar  *	  permission.
26*2654012fSReza Sabdar  *
27*2654012fSReza Sabdar  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28*2654012fSReza Sabdar  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29*2654012fSReza Sabdar  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30*2654012fSReza Sabdar  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31*2654012fSReza Sabdar  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32*2654012fSReza Sabdar  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33*2654012fSReza Sabdar  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34*2654012fSReza Sabdar  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35*2654012fSReza Sabdar  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36*2654012fSReza Sabdar  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37*2654012fSReza Sabdar  * POSSIBILITY OF SUCH DAMAGE.
38*2654012fSReza Sabdar  */
39*2654012fSReza Sabdar #include <stdio.h>
40*2654012fSReza Sabdar #include <locale.h>
41*2654012fSReza Sabdar #include <libndmp.h>
42*2654012fSReza Sabdar #include "ndmpadm.h"
43*2654012fSReza Sabdar 
44*2654012fSReza Sabdar /* static functions prototype */
45*2654012fSReza Sabdar static void ndmp_tprint_addr(char *, ndmp_ad_type_t, char *);
46*2654012fSReza Sabdar static void ndmp_print_env(ndmp_session_info_t *);
47*2654012fSReza Sabdar static void ndmp_connect_print_conn(ndmp_session_info_t *);
48*2654012fSReza Sabdar static void ndmp_connect_print_scsi_v2(ndmp_session_info_t *);
49*2654012fSReza Sabdar static void ndmp_connect_print_tape_v2(ndmp_session_info_t *);
50*2654012fSReza Sabdar static void ndmp_connect_print_mover_v2(ndmp_session_info_t *);
51*2654012fSReza Sabdar static void ndmp_connect_print_data_v2(ndmp_session_info_t *);
52*2654012fSReza Sabdar static void ndmp_connect_print_v2(int, ndmp_session_info_t *);
53*2654012fSReza Sabdar static void ndmp_connect_print_mover_v3(ndmp_session_info_t *);
54*2654012fSReza Sabdar static void ndmp_connect_print_data_v3(ndmp_session_info_t *);
55*2654012fSReza Sabdar static void ndmp_connect_print_v3(int, ndmp_session_info_t *);
56*2654012fSReza Sabdar static void ndmp_connection_print(int, ndmp_session_info_t *);
57*2654012fSReza Sabdar 
58*2654012fSReza Sabdar /* Boolean to string.  */
59*2654012fSReza Sabdar #define	B2S(b)	((b) ? "Yes" : "No")
60*2654012fSReza Sabdar 
61*2654012fSReza Sabdar /*
62*2654012fSReza Sabdar  * Print the address type and IP address if the address type is tcp
63*2654012fSReza Sabdar  */
64*2654012fSReza Sabdar static void
65*2654012fSReza Sabdar ndmp_tprint_addr(char *label, ndmp_ad_type_t addr_type, char *tcp_addr)
66*2654012fSReza Sabdar {
67*2654012fSReza Sabdar 	if ((label == NULL) || (tcp_addr == NULL))
68*2654012fSReza Sabdar 		return;
69*2654012fSReza Sabdar 
70*2654012fSReza Sabdar 	switch (addr_type) {
71*2654012fSReza Sabdar 	case NDMP_AD_LOCAL:
72*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t%s type:\tLocal\n"), label);
73*2654012fSReza Sabdar 		break;
74*2654012fSReza Sabdar 	case NDMP_AD_TCP:
75*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t%s type:\tTCP\n"), label);
76*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t%s address:\t%s\n"),
77*2654012fSReza Sabdar 		    label, tcp_addr);
78*2654012fSReza Sabdar 		break;
79*2654012fSReza Sabdar 	case NDMP_AD_FC:
80*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t%s type:\tFC\n"), label);
81*2654012fSReza Sabdar 		break;
82*2654012fSReza Sabdar 	case NDMP_AD_IPC:
83*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t%s type:\tIPC\n"), label);
84*2654012fSReza Sabdar 		break;
85*2654012fSReza Sabdar 	default:
86*2654012fSReza Sabdar 		(void) fprintf(stdout,
87*2654012fSReza Sabdar 		    gettext("\t%s addr type unknown (0x%x)\n"),
88*2654012fSReza Sabdar 		    label, addr_type);
89*2654012fSReza Sabdar 	}
90*2654012fSReza Sabdar }
91*2654012fSReza Sabdar 
92*2654012fSReza Sabdar /*
93*2654012fSReza Sabdar  * Print all the data environment variables for the active session
94*2654012fSReza Sabdar  */
95*2654012fSReza Sabdar static void
96*2654012fSReza Sabdar ndmp_print_env(ndmp_session_info_t *si)
97*2654012fSReza Sabdar {
98*2654012fSReza Sabdar 	int i, n;
99*2654012fSReza Sabdar 	ndmp_dt_pval_t *ep;
100*2654012fSReza Sabdar 
101*2654012fSReza Sabdar 	n = si->nsi_data.nd_env_len;
102*2654012fSReza Sabdar 	ep = si->nsi_data.nd_env;
103*2654012fSReza Sabdar 	for (i = 0; ep && i < n; i++, ep++) {
104*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.env[%d]:\t%s: "),
105*2654012fSReza Sabdar 		    i, ep->np_name);
106*2654012fSReza Sabdar 		if ((ep->np_value != NULL) && (*ep->np_value != NULL))
107*2654012fSReza Sabdar 			(void) fprintf(stdout, "\"%s\"\n", ep->np_value);
108*2654012fSReza Sabdar 	}
109*2654012fSReza Sabdar }
110*2654012fSReza Sabdar 
111*2654012fSReza Sabdar /*
112*2654012fSReza Sabdar  * Print common fields of the active connection.
113*2654012fSReza Sabdar  */
114*2654012fSReza Sabdar static void
115*2654012fSReza Sabdar ndmp_connect_print_conn(ndmp_session_info_t *si)
116*2654012fSReza Sabdar {
117*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tSession Id:\t%d\n"), si->nsi_sid);
118*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tProtocol version:\t%d\n"),
119*2654012fSReza Sabdar 	    si->nsi_pver);
120*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tAuthenticated:\t\t%s\n"),
121*2654012fSReza Sabdar 	    B2S(si->nsi_auth));
122*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tEOF:\t\t\t%s\n"), B2S(si->nsi_eof));
123*2654012fSReza Sabdar 	if (si->nsi_cl_addr != NULL)
124*2654012fSReza Sabdar 		(void) fprintf(stdout,
125*2654012fSReza Sabdar 		    gettext("\tClient address:\t\t%s\n"), si->nsi_cl_addr);
126*2654012fSReza Sabdar }
127*2654012fSReza Sabdar 
128*2654012fSReza Sabdar /*
129*2654012fSReza Sabdar  * Print the connection SCSI info.
130*2654012fSReza Sabdar  */
131*2654012fSReza Sabdar static void
132*2654012fSReza Sabdar ndmp_connect_print_scsi_v2(ndmp_session_info_t *si)
133*2654012fSReza Sabdar {
134*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tscsi.open:\t\t%s\n"),
135*2654012fSReza Sabdar 	    B2S(si->nsi_scsi.ns_scsi_open != -1));
136*2654012fSReza Sabdar 	if (si->nsi_scsi.ns_adapter_name)
137*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tscsi.adapter:\t\t\"%s\"\n"),
138*2654012fSReza Sabdar 		    si->nsi_scsi.ns_adapter_name);
139*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tscsi.valid target:\t%s\n"),
140*2654012fSReza Sabdar 	    B2S(si->nsi_scsi.ns_valid_target_set));
141*2654012fSReza Sabdar 	if (si->nsi_scsi.ns_valid_target_set) {
142*2654012fSReza Sabdar 		(void) fprintf(stdout,
143*2654012fSReza Sabdar 		    gettext("\tscsi.SID:\t\t%d\n"), si->nsi_scsi.ns_scsi_id);
144*2654012fSReza Sabdar 		(void) fprintf(stdout,
145*2654012fSReza Sabdar 		    gettext("\tscsi.LUN:\t\t%d\n"), si->nsi_scsi.ns_lun);
146*2654012fSReza Sabdar 	}
147*2654012fSReza Sabdar }
148*2654012fSReza Sabdar 
149*2654012fSReza Sabdar /*
150*2654012fSReza Sabdar  * Print the connection tape info.
151*2654012fSReza Sabdar  */
152*2654012fSReza Sabdar static void
153*2654012fSReza Sabdar ndmp_connect_print_tape_v2(ndmp_session_info_t *si)
154*2654012fSReza Sabdar {
155*2654012fSReza Sabdar 	if (si->nsi_tape.nt_fd != -1) {
156*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\ttape.fd:\t\t%d\n"),
157*2654012fSReza Sabdar 		    si->nsi_tape.nt_fd);
158*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\ttape.record count:\t%d\n"),
159*2654012fSReza Sabdar 		    (int)si->nsi_tape.nt_rec_count);
160*2654012fSReza Sabdar 
161*2654012fSReza Sabdar 		switch (si->nsi_tape.nt_mode) {
162*2654012fSReza Sabdar 		case NDMP_TP_READ_MODE:
163*2654012fSReza Sabdar 			(void) fprintf(stdout,
164*2654012fSReza Sabdar 			    gettext("\ttape.mode:\t\tRead-only\n"));
165*2654012fSReza Sabdar 			break;
166*2654012fSReza Sabdar 		case NDMP_TP_WRITE_MODE:
167*2654012fSReza Sabdar 			(void) fprintf(stdout,
168*2654012fSReza Sabdar 			    gettext("\ttape.mode:\t\tRead/Write\n"));
169*2654012fSReza Sabdar 			break;
170*2654012fSReza Sabdar 		case NDMP_TP_RAW1_MODE:
171*2654012fSReza Sabdar 			(void) fprintf(stdout,
172*2654012fSReza Sabdar 			    gettext("\ttape.mode:\t\tRaw\n"));
173*2654012fSReza Sabdar 			break;
174*2654012fSReza Sabdar 		default:
175*2654012fSReza Sabdar 			(void) fprintf(stdout,
176*2654012fSReza Sabdar 			    gettext("\ttape.mode:\t\tUnknown (0x%x)\n"),
177*2654012fSReza Sabdar 			    si->nsi_tape.nt_mode);
178*2654012fSReza Sabdar 		}
179*2654012fSReza Sabdar 
180*2654012fSReza Sabdar 		if (si->nsi_tape.nt_dev_name)
181*2654012fSReza Sabdar 			(void) fprintf(stdout,
182*2654012fSReza Sabdar 			    gettext("\ttape.device name:\t%s\n"),
183*2654012fSReza Sabdar 			    si->nsi_tape.nt_dev_name);
184*2654012fSReza Sabdar 		if (si->nsi_tape.nt_adapter_name)
185*2654012fSReza Sabdar 			(void) fprintf(stdout,
186*2654012fSReza Sabdar 			    gettext("\ttape.adapter name:\t\"%s\"\n"),
187*2654012fSReza Sabdar 			    si->nsi_tape.nt_adapter_name);
188*2654012fSReza Sabdar 		(void) fprintf(stdout,
189*2654012fSReza Sabdar 		    gettext("\ttape.SID:\t\t%d\n"), si->nsi_tape.nt_sid);
190*2654012fSReza Sabdar 		(void) fprintf(stdout,
191*2654012fSReza Sabdar 		    gettext("\ttape.LUN:\t\t%d\n"), si->nsi_tape.nt_lun);
192*2654012fSReza Sabdar 	} else
193*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\ttape.device:\t\tNot open\n"));
194*2654012fSReza Sabdar }
195*2654012fSReza Sabdar 
196*2654012fSReza Sabdar /*
197*2654012fSReza Sabdar  * Print the connection mover info.
198*2654012fSReza Sabdar  */
199*2654012fSReza Sabdar static void
200*2654012fSReza Sabdar ndmp_connect_print_mover_v2(ndmp_session_info_t *si)
201*2654012fSReza Sabdar {
202*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_state) {
203*2654012fSReza Sabdar 	case NDMP_MV_STATE_IDLE:
204*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n"));
205*2654012fSReza Sabdar 		break;
206*2654012fSReza Sabdar 	case NDMP_MV_STATE_LISTEN:
207*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n"));
208*2654012fSReza Sabdar 		break;
209*2654012fSReza Sabdar 	case NDMP_MV_STATE_ACTIVE:
210*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n"));
211*2654012fSReza Sabdar 		break;
212*2654012fSReza Sabdar 	case NDMP_MV_STATE_PAUSED:
213*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n"));
214*2654012fSReza Sabdar 		break;
215*2654012fSReza Sabdar 	case NDMP_MV_STATE_HALTED:
216*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n"));
217*2654012fSReza Sabdar 		break;
218*2654012fSReza Sabdar 	default:
219*2654012fSReza Sabdar 		(void) fprintf(stdout,
220*2654012fSReza Sabdar 		    gettext("\tmover.state:\t\tUnknown (0x%x)\n"),
221*2654012fSReza Sabdar 		    si->nsi_mover.nm_state);
222*2654012fSReza Sabdar 	}
223*2654012fSReza Sabdar 
224*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_mode) {
225*2654012fSReza Sabdar 	case NDMP_MV_MODE_READ:
226*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n"));
227*2654012fSReza Sabdar 		break;
228*2654012fSReza Sabdar 	case NDMP_MV_MODE_WRITE:
229*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n"));
230*2654012fSReza Sabdar 		break;
231*2654012fSReza Sabdar 	default:
232*2654012fSReza Sabdar 		(void) fprintf(stdout,
233*2654012fSReza Sabdar 		    gettext("\tmover.mode:\t\tUnknown (0x%x)\n"),
234*2654012fSReza Sabdar 		    si->nsi_mover.nm_mode);
235*2654012fSReza Sabdar 	}
236*2654012fSReza Sabdar 
237*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_pause_reason) {
238*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_NA:
239*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n"));
240*2654012fSReza Sabdar 		break;
241*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_EOM:
242*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n"));
243*2654012fSReza Sabdar 		break;
244*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_EOF:
245*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n"));
246*2654012fSReza Sabdar 		break;
247*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_SEEK:
248*2654012fSReza Sabdar 		(void) fprintf(stdout,
249*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tSeek\n"));
250*2654012fSReza Sabdar 		break;
251*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_MEDIA_ERROR:
252*2654012fSReza Sabdar 		(void) fprintf(stdout,
253*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tMedia Error\n"));
254*2654012fSReza Sabdar 		break;
255*2654012fSReza Sabdar 	default:
256*2654012fSReza Sabdar 		(void) fprintf(stdout,
257*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tUnknown (0x%x)\n"),
258*2654012fSReza Sabdar 		    si->nsi_mover.nm_pause_reason);
259*2654012fSReza Sabdar 	}
260*2654012fSReza Sabdar 
261*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_halt_reason) {
262*2654012fSReza Sabdar 	case NDMP_MV_HALT_NA:
263*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n"));
264*2654012fSReza Sabdar 		break;
265*2654012fSReza Sabdar 	case NDMP_MV_HALT_CONNECT_CLOSED:
266*2654012fSReza Sabdar 		(void) fprintf(stdout,
267*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tConnection closed\n"));
268*2654012fSReza Sabdar 		break;
269*2654012fSReza Sabdar 	case NDMP_MV_HALT_ABORTED:
270*2654012fSReza Sabdar 		(void) fprintf(stdout,
271*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tAborted\n"));
272*2654012fSReza Sabdar 		break;
273*2654012fSReza Sabdar 	case NDMP_MV_HALT_INTERNAL_ERROR:
274*2654012fSReza Sabdar 		(void) fprintf(stdout,
275*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tInternal error\n"));
276*2654012fSReza Sabdar 		break;
277*2654012fSReza Sabdar 	case NDMP_MV_HALT_CONNECT_ERROR:
278*2654012fSReza Sabdar 		(void) fprintf(stdout,
279*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tConnection error\n"));
280*2654012fSReza Sabdar 		break;
281*2654012fSReza Sabdar 	default:
282*2654012fSReza Sabdar 		(void) fprintf(stdout,
283*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tUnknown (0x%x)\n"),
284*2654012fSReza Sabdar 		    si->nsi_mover.nm_halt_reason);
285*2654012fSReza Sabdar 	}
286*2654012fSReza Sabdar 
287*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"),
288*2654012fSReza Sabdar 	    (int)si->nsi_mover.nm_rec_size);
289*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"),
290*2654012fSReza Sabdar 	    (int)si->nsi_mover.nm_rec_num);
291*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"),
292*2654012fSReza Sabdar 	    si->nsi_mover.nm_mov_pos);
293*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"),
294*2654012fSReza Sabdar 	    si->nsi_mover.nm_window_offset);
295*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"),
296*2654012fSReza Sabdar 	    si->nsi_mover.nm_window_length);
297*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"),
298*2654012fSReza Sabdar 	    si->nsi_mover.nm_sock);
299*2654012fSReza Sabdar }
300*2654012fSReza Sabdar 
301*2654012fSReza Sabdar /*
302*2654012fSReza Sabdar  * Print the connection data info.
303*2654012fSReza Sabdar  */
304*2654012fSReza Sabdar static void
305*2654012fSReza Sabdar ndmp_connect_print_data_v2(ndmp_session_info_t *si)
306*2654012fSReza Sabdar {
307*2654012fSReza Sabdar 	int i;
308*2654012fSReza Sabdar 	ndmp_dt_name_t *np;
309*2654012fSReza Sabdar 
310*2654012fSReza Sabdar 	switch (si->nsi_data.nd_oper) {
311*2654012fSReza Sabdar 	case NDMP_DT_OP_NOACTION:
312*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n"));
313*2654012fSReza Sabdar 		break;
314*2654012fSReza Sabdar 	case NDMP_DT_OP_BACKUP:
315*2654012fSReza Sabdar 		(void) fprintf(stdout,
316*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tBackup\n"));
317*2654012fSReza Sabdar 		break;
318*2654012fSReza Sabdar 	case NDMP_DT_OP_RECOVER:
319*2654012fSReza Sabdar 		(void) fprintf(stdout,
320*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tRestore\n"));
321*2654012fSReza Sabdar 		break;
322*2654012fSReza Sabdar 	default:
323*2654012fSReza Sabdar 		(void) fprintf(stdout,
324*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tUnknown (0x%x)\n"),
325*2654012fSReza Sabdar 		    si->nsi_data.nd_oper);
326*2654012fSReza Sabdar 	}
327*2654012fSReza Sabdar 
328*2654012fSReza Sabdar 	switch (si->nsi_data.nd_state) {
329*2654012fSReza Sabdar 	case NDMP_DT_STATE_IDLE:
330*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n"));
331*2654012fSReza Sabdar 		break;
332*2654012fSReza Sabdar 	case NDMP_DT_STATE_ACTIVE:
333*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n"));
334*2654012fSReza Sabdar 		break;
335*2654012fSReza Sabdar 	case NDMP_DT_STATE_HALTED:
336*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n"));
337*2654012fSReza Sabdar 		break;
338*2654012fSReza Sabdar 	default:
339*2654012fSReza Sabdar 		(void) fprintf(stdout,
340*2654012fSReza Sabdar 		    gettext("\tdata.state:\t\tUnknown (0x%x)\n"),
341*2654012fSReza Sabdar 		    si->nsi_data.nd_state);
342*2654012fSReza Sabdar 	}
343*2654012fSReza Sabdar 
344*2654012fSReza Sabdar 	switch (si->nsi_data.nd_halt_reason) {
345*2654012fSReza Sabdar 	case NDMP_DT_HALT_NA:
346*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.halt reason:\tN/A\n"));
347*2654012fSReza Sabdar 		break;
348*2654012fSReza Sabdar 	case NDMP_DT_HALT_SUCCESSFUL:
349*2654012fSReza Sabdar 		(void) fprintf(stdout,
350*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tSuccessful\n"));
351*2654012fSReza Sabdar 		break;
352*2654012fSReza Sabdar 	case NDMP_DT_HALT_ABORTED:
353*2654012fSReza Sabdar 		(void) fprintf(stdout,
354*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tAborted\n"));
355*2654012fSReza Sabdar 		break;
356*2654012fSReza Sabdar 	case NDMP_DT_HALT_INTERNAL_ERROR:
357*2654012fSReza Sabdar 		(void) fprintf(stdout,
358*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tInternal error\n"));
359*2654012fSReza Sabdar 		break;
360*2654012fSReza Sabdar 	case NDMP_DT_HALT_CONNECT_ERROR:
361*2654012fSReza Sabdar 		(void) fprintf(stdout,
362*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tConnection error\n"));
363*2654012fSReza Sabdar 		break;
364*2654012fSReza Sabdar 	default:
365*2654012fSReza Sabdar 		(void) fprintf(stdout,
366*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tUnknown (0x%x)\n"),
367*2654012fSReza Sabdar 		    si->nsi_data.nd_halt_reason);
368*2654012fSReza Sabdar 	}
369*2654012fSReza Sabdar 
370*2654012fSReza Sabdar 	switch (si->nsi_data.nd_addr_type) {
371*2654012fSReza Sabdar 	case NDMP_AD_LOCAL:
372*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.mover type:\tLocal\n"));
373*2654012fSReza Sabdar 		break;
374*2654012fSReza Sabdar 	case NDMP_AD_TCP:
375*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.mover type:\tTCP\n"));
376*2654012fSReza Sabdar 		if (si->nsi_data.nd_tcp_addr)
377*2654012fSReza Sabdar 			(void) fprintf(stdout,
378*2654012fSReza Sabdar 			    gettext("\tdata.mover address:\t%s\n"),
379*2654012fSReza Sabdar 			    si->nsi_data.nd_tcp_addr);
380*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.sock:\t%d\n"),
381*2654012fSReza Sabdar 		    si->nsi_data.nd_sock);
382*2654012fSReza Sabdar 		break;
383*2654012fSReza Sabdar 	default:
384*2654012fSReza Sabdar 		(void) fprintf(stdout,
385*2654012fSReza Sabdar 		    gettext("\tdata.mover type:\tUnknown (0x%x)\n"),
386*2654012fSReza Sabdar 		    si->nsi_data.nd_addr_type);
387*2654012fSReza Sabdar 	}
388*2654012fSReza Sabdar 
389*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"),
390*2654012fSReza Sabdar 	    B2S(si->nsi_data.nd_abort));
391*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"),
392*2654012fSReza Sabdar 	    si->nsi_data.nd_read_offset);
393*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"),
394*2654012fSReza Sabdar 	    si->nsi_data.nd_read_length);
395*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"),
396*2654012fSReza Sabdar 	    si->nsi_data.nd_total_size);
397*2654012fSReza Sabdar 
398*2654012fSReza Sabdar 	ndmp_print_env(si);
399*2654012fSReza Sabdar 
400*2654012fSReza Sabdar 	np = si->nsi_data.nd_nlist.nld_nlist;
401*2654012fSReza Sabdar 	for (i = 0; np && i < (int)si->nsi_data.nld_nlist_len; i++, np++) {
402*2654012fSReza Sabdar 		if ((np->nn_name) && (np->nn_dest)) {
403*2654012fSReza Sabdar 			(void) fprintf(stdout,
404*2654012fSReza Sabdar 			    gettext("\tdata.nlist[%d]:\tname: "
405*2654012fSReza Sabdar 			    "\"%s\"\n\t\tdest:\"%s\"\n"),
406*2654012fSReza Sabdar 			    i, np->nn_name, np->nn_dest);
407*2654012fSReza Sabdar 		}
408*2654012fSReza Sabdar 	}
409*2654012fSReza Sabdar }
410*2654012fSReza Sabdar 
411*2654012fSReza Sabdar /*
412*2654012fSReza Sabdar  * Print V2 connection info for the given category.
413*2654012fSReza Sabdar  */
414*2654012fSReza Sabdar static void
415*2654012fSReza Sabdar ndmp_connect_print_v2(int cat, ndmp_session_info_t *si)
416*2654012fSReza Sabdar {
417*2654012fSReza Sabdar 		if (cat & NDMP_CAT_SCSI)
418*2654012fSReza Sabdar 			ndmp_connect_print_scsi_v2(si);
419*2654012fSReza Sabdar 		if (cat & NDMP_CAT_TAPE)
420*2654012fSReza Sabdar 			ndmp_connect_print_tape_v2(si);
421*2654012fSReza Sabdar 		if (cat & NDMP_CAT_MOVER)
422*2654012fSReza Sabdar 			ndmp_connect_print_mover_v2(si);
423*2654012fSReza Sabdar 		if (cat & NDMP_CAT_DATA)
424*2654012fSReza Sabdar 			ndmp_connect_print_data_v2(si);
425*2654012fSReza Sabdar }
426*2654012fSReza Sabdar 
427*2654012fSReza Sabdar /*
428*2654012fSReza Sabdar  * Print the V3 connection mover info.
429*2654012fSReza Sabdar  */
430*2654012fSReza Sabdar static void
431*2654012fSReza Sabdar ndmp_connect_print_mover_v3(ndmp_session_info_t *si)
432*2654012fSReza Sabdar {
433*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_state) {
434*2654012fSReza Sabdar 	case NDMP_MV_STATE_IDLE:
435*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tIdle\n"));
436*2654012fSReza Sabdar 		break;
437*2654012fSReza Sabdar 	case NDMP_MV_STATE_LISTEN:
438*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tListen\n"));
439*2654012fSReza Sabdar 		break;
440*2654012fSReza Sabdar 	case NDMP_MV_STATE_ACTIVE:
441*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tActive\n"));
442*2654012fSReza Sabdar 		break;
443*2654012fSReza Sabdar 	case NDMP_MV_STATE_PAUSED:
444*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tPaused\n"));
445*2654012fSReza Sabdar 		break;
446*2654012fSReza Sabdar 	case NDMP_MV_STATE_HALTED:
447*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.state:\t\tHalted\n"));
448*2654012fSReza Sabdar 		break;
449*2654012fSReza Sabdar 	default:
450*2654012fSReza Sabdar 		(void) fprintf(stdout,
451*2654012fSReza Sabdar 		    gettext("\tmover.state:\t\tUnknown (0x%x)\n"),
452*2654012fSReza Sabdar 		    si->nsi_mover.nm_state);
453*2654012fSReza Sabdar 	}
454*2654012fSReza Sabdar 
455*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_mode) {
456*2654012fSReza Sabdar 	case NDMP_MV_MODE_READ:
457*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.mode:\t\tRead\n"));
458*2654012fSReza Sabdar 		break;
459*2654012fSReza Sabdar 	case NDMP_MV_MODE_WRITE:
460*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.mode:\t\tWrite\n"));
461*2654012fSReza Sabdar 		break;
462*2654012fSReza Sabdar 	default:
463*2654012fSReza Sabdar 		(void) fprintf(stdout,
464*2654012fSReza Sabdar 		    gettext("\tmover.mode:\t\tUnknown (0x%x)\n"),
465*2654012fSReza Sabdar 		    si->nsi_mover.nm_mode);
466*2654012fSReza Sabdar 	}
467*2654012fSReza Sabdar 
468*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_pause_reason) {
469*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_NA:
470*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tN/A\n"));
471*2654012fSReza Sabdar 		break;
472*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_EOM:
473*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tEOM\n"));
474*2654012fSReza Sabdar 		break;
475*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_EOF:
476*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tEOF\n"));
477*2654012fSReza Sabdar 		break;
478*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_SEEK:
479*2654012fSReza Sabdar 		(void) fprintf(stdout,
480*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tSeek\n"));
481*2654012fSReza Sabdar 		break;
482*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_MEDIA_ERROR:
483*2654012fSReza Sabdar 		(void) fprintf(stdout,
484*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tMedia Error\n"));
485*2654012fSReza Sabdar 		break;
486*2654012fSReza Sabdar 	case NDMP_MV_PAUSE_EOW:
487*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.pause reason:\tEOW\n"));
488*2654012fSReza Sabdar 		break;
489*2654012fSReza Sabdar 	default:
490*2654012fSReza Sabdar 		(void) fprintf(stdout,
491*2654012fSReza Sabdar 		    gettext("\tmover.pause reason:\tUnknown (0x%x)\n"),
492*2654012fSReza Sabdar 		    si->nsi_mover.nm_pause_reason);
493*2654012fSReza Sabdar 	}
494*2654012fSReza Sabdar 
495*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_halt_reason) {
496*2654012fSReza Sabdar 	case NDMP_MV_HALT_NA:
497*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.halt reason:\tN/A\n"));
498*2654012fSReza Sabdar 		break;
499*2654012fSReza Sabdar 	case NDMP_MV_HALT_CONNECT_CLOSED:
500*2654012fSReza Sabdar 		(void) fprintf(stdout,
501*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tConnection closed\n"));
502*2654012fSReza Sabdar 		break;
503*2654012fSReza Sabdar 	case NDMP_MV_HALT_ABORTED:
504*2654012fSReza Sabdar 		(void) fprintf(stdout,
505*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tAborted\n"));
506*2654012fSReza Sabdar 		break;
507*2654012fSReza Sabdar 	case NDMP_MV_HALT_INTERNAL_ERROR:
508*2654012fSReza Sabdar 		(void) fprintf(stdout,
509*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tInternal error\n"));
510*2654012fSReza Sabdar 		break;
511*2654012fSReza Sabdar 	case NDMP_MV_HALT_CONNECT_ERROR:
512*2654012fSReza Sabdar 		(void) fprintf(stdout,
513*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tConnection error\n"));
514*2654012fSReza Sabdar 		break;
515*2654012fSReza Sabdar 	default:
516*2654012fSReza Sabdar 		(void) fprintf(stdout,
517*2654012fSReza Sabdar 		    gettext("\tmover.halt reason:\tUnknown (0x%x)\n"),
518*2654012fSReza Sabdar 		    si->nsi_mover.nm_halt_reason);
519*2654012fSReza Sabdar 	}
520*2654012fSReza Sabdar 
521*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.record size:\t%d\n"),
522*2654012fSReza Sabdar 	    (int)si->nsi_mover.nm_rec_size);
523*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.record number:\t%d\n"),
524*2654012fSReza Sabdar 	    (int)si->nsi_mover.nm_rec_num);
525*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.pos:\t\t%lld\n"),
526*2654012fSReza Sabdar 	    si->nsi_mover.nm_mov_pos, si->nsi_mover.nm_mov_pos);
527*2654012fSReza Sabdar 
528*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.win len:\t\t%lld\n"),
529*2654012fSReza Sabdar 	    si->nsi_mover.nm_window_length, si->nsi_mover.nm_window_length);
530*2654012fSReza Sabdar 
531*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tmover.win off:\t\t%lld\n"),
532*2654012fSReza Sabdar 	    si->nsi_mover.nm_window_offset);
533*2654012fSReza Sabdar 	switch (si->nsi_mover.nm_state) {
534*2654012fSReza Sabdar 	case NDMP_MV_STATE_IDLE:
535*2654012fSReza Sabdar 		if (si->nsi_mover.nm_listen_sock != -1)
536*2654012fSReza Sabdar 			(void) fprintf(stdout,
537*2654012fSReza Sabdar 			    gettext("\tmover.listenSock:\t%d\n"),
538*2654012fSReza Sabdar 			    si->nsi_mover.nm_listen_sock);
539*2654012fSReza Sabdar 		if (si->nsi_mover.nm_sock != -1)
540*2654012fSReza Sabdar 			(void) fprintf(stdout, gettext("\tmover.sock:\t%d\n"),
541*2654012fSReza Sabdar 			    si->nsi_mover.nm_sock);
542*2654012fSReza Sabdar 		break;
543*2654012fSReza Sabdar 	case NDMP_MV_STATE_LISTEN:
544*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.listen socket:\t%d\n"),
545*2654012fSReza Sabdar 		    si->nsi_mover.nm_listen_sock);
546*2654012fSReza Sabdar 		ndmp_tprint_addr(gettext("mover.listen"),
547*2654012fSReza Sabdar 		    si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr);
548*2654012fSReza Sabdar 		break;
549*2654012fSReza Sabdar 	case NDMP_MV_STATE_ACTIVE:
550*2654012fSReza Sabdar 	case NDMP_MV_STATE_PAUSED:
551*2654012fSReza Sabdar 	case NDMP_MV_STATE_HALTED:
552*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tmover.data socket:\t%d\n"),
553*2654012fSReza Sabdar 		    si->nsi_mover.nm_sock);
554*2654012fSReza Sabdar 		ndmp_tprint_addr(gettext("mover.data connection"),
555*2654012fSReza Sabdar 		    si->nsi_mover.nm_addr_type, si->nsi_mover.nm_tcp_addr);
556*2654012fSReza Sabdar 		break;
557*2654012fSReza Sabdar 	}
558*2654012fSReza Sabdar }
559*2654012fSReza Sabdar 
560*2654012fSReza Sabdar /*
561*2654012fSReza Sabdar  * Print the connection data info.
562*2654012fSReza Sabdar  */
563*2654012fSReza Sabdar static void
564*2654012fSReza Sabdar ndmp_connect_print_data_v3(ndmp_session_info_t *si)
565*2654012fSReza Sabdar {
566*2654012fSReza Sabdar 	int i;
567*2654012fSReza Sabdar 	ndmp_dt_name_v3_t *np;
568*2654012fSReza Sabdar 
569*2654012fSReza Sabdar 	switch (si->nsi_data.nd_oper) {
570*2654012fSReza Sabdar 	case NDMP_DT_OP_NOACTION:
571*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.operation:\t\tNone\n"));
572*2654012fSReza Sabdar 		break;
573*2654012fSReza Sabdar 	case NDMP_DT_OP_BACKUP:
574*2654012fSReza Sabdar 		(void) fprintf(stdout,
575*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tBackup\n"));
576*2654012fSReza Sabdar 		break;
577*2654012fSReza Sabdar 	case NDMP_DT_OP_RECOVER:
578*2654012fSReza Sabdar 		(void) fprintf(stdout,
579*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tRestore\n"));
580*2654012fSReza Sabdar 		break;
581*2654012fSReza Sabdar 	default:
582*2654012fSReza Sabdar 		(void) fprintf(stdout,
583*2654012fSReza Sabdar 		    gettext("\tdata.operation:\t\tUnknown (0x%x)\n"),
584*2654012fSReza Sabdar 		    si->nsi_data.nd_oper);
585*2654012fSReza Sabdar 	}
586*2654012fSReza Sabdar 
587*2654012fSReza Sabdar 	switch (si->nsi_data.nd_state) {
588*2654012fSReza Sabdar 	case NDMP_DT_STATE_IDLE:
589*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tIdle\n"));
590*2654012fSReza Sabdar 		break;
591*2654012fSReza Sabdar 	case NDMP_DT_STATE_ACTIVE:
592*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tActive\n"));
593*2654012fSReza Sabdar 		break;
594*2654012fSReza Sabdar 	case NDMP_DT_STATE_HALTED:
595*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tHalted\n"));
596*2654012fSReza Sabdar 		break;
597*2654012fSReza Sabdar 	case NDMP_DT_STATE_LISTEN:
598*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tListen\n"));
599*2654012fSReza Sabdar 		break;
600*2654012fSReza Sabdar 	case NDMP_DT_STATE_CONNECTED:
601*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.state:\t\tConnected\n"));
602*2654012fSReza Sabdar 		break;
603*2654012fSReza Sabdar 	default:
604*2654012fSReza Sabdar 		(void) fprintf(stdout,
605*2654012fSReza Sabdar 		    gettext("\tdata.state:\t\tUnknown (0x%x)\n"),
606*2654012fSReza Sabdar 		    si->nsi_data.nd_state);
607*2654012fSReza Sabdar 	}
608*2654012fSReza Sabdar 
609*2654012fSReza Sabdar 	switch (si->nsi_data.nd_halt_reason) {
610*2654012fSReza Sabdar 	case NDMP_DT_HALT_NA:
611*2654012fSReza Sabdar 		(void) fprintf(stdout,
612*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tN/A\n"));
613*2654012fSReza Sabdar 		break;
614*2654012fSReza Sabdar 	case NDMP_DT_HALT_SUCCESSFUL:
615*2654012fSReza Sabdar 		(void) fprintf(stdout,
616*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tSuccessful\n"));
617*2654012fSReza Sabdar 		break;
618*2654012fSReza Sabdar 	case NDMP_DT_HALT_ABORTED:
619*2654012fSReza Sabdar 		(void) fprintf(stdout,
620*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tAborted\n"));
621*2654012fSReza Sabdar 		break;
622*2654012fSReza Sabdar 	case NDMP_DT_HALT_INTERNAL_ERROR:
623*2654012fSReza Sabdar 		(void) fprintf(stdout,
624*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tInternal error\n"));
625*2654012fSReza Sabdar 		break;
626*2654012fSReza Sabdar 	case NDMP_DT_HALT_CONNECT_ERROR:
627*2654012fSReza Sabdar 		(void) fprintf(stdout,
628*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tConnection error\n"));
629*2654012fSReza Sabdar 		break;
630*2654012fSReza Sabdar 	default:
631*2654012fSReza Sabdar 		(void) fprintf(stdout,
632*2654012fSReza Sabdar 		    gettext("\tdata.halt reason:\tUnknown (0x%x)\n"),
633*2654012fSReza Sabdar 		    si->nsi_data.nd_halt_reason);
634*2654012fSReza Sabdar 	}
635*2654012fSReza Sabdar 
636*2654012fSReza Sabdar 	switch (si->nsi_data.nd_state) {
637*2654012fSReza Sabdar 	case NDMP_DT_STATE_IDLE:
638*2654012fSReza Sabdar 		if (si->nsi_data.nd_sock != -1)
639*2654012fSReza Sabdar 			(void) fprintf(stdout,
640*2654012fSReza Sabdar 			    gettext("\tdata.data socket:\t%d\n"),
641*2654012fSReza Sabdar 			    si->nsi_data.nd_sock);
642*2654012fSReza Sabdar 		if (si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock != -1)
643*2654012fSReza Sabdar 			(void) fprintf(stdout,
644*2654012fSReza Sabdar 			    gettext("\tdata.data socket:\t%d\n"),
645*2654012fSReza Sabdar 			    si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock);
646*2654012fSReza Sabdar 		break;
647*2654012fSReza Sabdar 	case NDMP_DT_STATE_LISTEN:
648*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.listen socket:\t%d\n"),
649*2654012fSReza Sabdar 		    si->nsi_data.nd_nlist.nld_dt_v3.dv3_listen_sock);
650*2654012fSReza Sabdar 		ndmp_tprint_addr(gettext("data.listen"),
651*2654012fSReza Sabdar 		    si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr);
652*2654012fSReza Sabdar 		break;
653*2654012fSReza Sabdar 	case NDMP_DT_STATE_ACTIVE:
654*2654012fSReza Sabdar 	case NDMP_DT_STATE_HALTED:
655*2654012fSReza Sabdar 	case NDMP_DT_STATE_CONNECTED:
656*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.data socket:\t%d\n"),
657*2654012fSReza Sabdar 		    si->nsi_data.nd_sock);
658*2654012fSReza Sabdar 		ndmp_tprint_addr(gettext("data.data"),
659*2654012fSReza Sabdar 		    si->nsi_data.nd_addr_type, si->nsi_data.nd_tcp_addr);
660*2654012fSReza Sabdar 		break;
661*2654012fSReza Sabdar 	}
662*2654012fSReza Sabdar 
663*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.aborted:\t\t%s\n"),
664*2654012fSReza Sabdar 	    B2S(si->nsi_data.nd_abort));
665*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.read offset:\t%llu\n"),
666*2654012fSReza Sabdar 	    si->nsi_data.nd_read_offset);
667*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.read length:\t%llu\n"),
668*2654012fSReza Sabdar 	    si->nsi_data.nd_read_length);
669*2654012fSReza Sabdar 	(void) fprintf(stdout, gettext("\tdata.total size:\t%llu\n"),
670*2654012fSReza Sabdar 	    si->nsi_data.nd_total_size);
671*2654012fSReza Sabdar 	(void) fprintf(stdout,
672*2654012fSReza Sabdar 	    gettext("\tdata.bytes processed:\t%lld\n"),
673*2654012fSReza Sabdar 	    si->nsi_data.nd_nlist.nld_dt_v3.dv3_bytes_processed);
674*2654012fSReza Sabdar 
675*2654012fSReza Sabdar 	ndmp_print_env(si);
676*2654012fSReza Sabdar 
677*2654012fSReza Sabdar 	np = si->nsi_data.nd_nlist.nld_dt_v3.dv3_nlist;
678*2654012fSReza Sabdar 	for (i = 0; np && i < si->nsi_data.nld_nlist_len; i++, np++) {
679*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\tdata.nlist[%d]:\tname:\n"),
680*2654012fSReza Sabdar 		    i);
681*2654012fSReza Sabdar 		if (np->nn3_opath)
682*2654012fSReza Sabdar 			(void) fprintf(stdout,
683*2654012fSReza Sabdar 			    gettext("\t\torig: \"%s\"\n"), np->nn3_opath);
684*2654012fSReza Sabdar 		if (np->nn3_dpath)
685*2654012fSReza Sabdar 			(void) fprintf(stdout,
686*2654012fSReza Sabdar 			    gettext("\t\tdest: \"%s\"\n"), np->nn3_dpath);
687*2654012fSReza Sabdar 		else
688*2654012fSReza Sabdar 			(void) fprintf(stdout, gettext("\t\tdest:\n"));
689*2654012fSReza Sabdar 		(void) fprintf(stdout,
690*2654012fSReza Sabdar 		    gettext("\t\tnode: %lld\n"), np->nn3_node);
691*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("\t\tfh_info: %lld\n"),
692*2654012fSReza Sabdar 		    np->nn3_fh_info);
693*2654012fSReza Sabdar 	}
694*2654012fSReza Sabdar }
695*2654012fSReza Sabdar 
696*2654012fSReza Sabdar /*
697*2654012fSReza Sabdar  * Print V3 connection info for given category.
698*2654012fSReza Sabdar  */
699*2654012fSReza Sabdar static void
700*2654012fSReza Sabdar ndmp_connect_print_v3(int cat, ndmp_session_info_t *si)
701*2654012fSReza Sabdar {
702*2654012fSReza Sabdar 	if (cat & NDMP_CAT_SCSI)
703*2654012fSReza Sabdar 		ndmp_connect_print_scsi_v2(si);
704*2654012fSReza Sabdar 	if (cat & NDMP_CAT_TAPE)
705*2654012fSReza Sabdar 		ndmp_connect_print_tape_v2(si);
706*2654012fSReza Sabdar 	if (cat & NDMP_CAT_MOVER)
707*2654012fSReza Sabdar 		ndmp_connect_print_mover_v3(si);
708*2654012fSReza Sabdar 	if (cat & NDMP_CAT_DATA)
709*2654012fSReza Sabdar 		ndmp_connect_print_data_v3(si);
710*2654012fSReza Sabdar }
711*2654012fSReza Sabdar 
712*2654012fSReza Sabdar /*
713*2654012fSReza Sabdar  * Print the list of all active sessions to the clients.  For each version,
714*2654012fSReza Sabdar  * call the appropriate print function.
715*2654012fSReza Sabdar  */
716*2654012fSReza Sabdar static void
717*2654012fSReza Sabdar ndmp_connection_print(int cat, ndmp_session_info_t *si)
718*2654012fSReza Sabdar {
719*2654012fSReza Sabdar 	switch (si->nsi_pver) {
720*2654012fSReza Sabdar 	case NDMP_V2:
721*2654012fSReza Sabdar 		ndmp_connect_print_conn(si);
722*2654012fSReza Sabdar 		ndmp_connect_print_v2(cat, si);
723*2654012fSReza Sabdar 		break;
724*2654012fSReza Sabdar 	case NDMP_V3:
725*2654012fSReza Sabdar 	case NDMP_V4:
726*2654012fSReza Sabdar 		ndmp_connect_print_conn(si);
727*2654012fSReza Sabdar 		ndmp_connect_print_v3(cat, si);
728*2654012fSReza Sabdar 		break;
729*2654012fSReza Sabdar 	default:
730*2654012fSReza Sabdar 		(void) fprintf(stdout,
731*2654012fSReza Sabdar 		    gettext("Invalid version %d"), si->nsi_pver);
732*2654012fSReza Sabdar 	}
733*2654012fSReza Sabdar }
734*2654012fSReza Sabdar 
735*2654012fSReza Sabdar /*
736*2654012fSReza Sabdar  * Print the list of all active sessions to the clients.
737*2654012fSReza Sabdar  */
738*2654012fSReza Sabdar void
739*2654012fSReza Sabdar ndmp_session_all_print(int cat, ndmp_session_info_t *si, size_t num)
740*2654012fSReza Sabdar {
741*2654012fSReza Sabdar 	int i;
742*2654012fSReza Sabdar 	ndmp_session_info_t *sp;
743*2654012fSReza Sabdar 
744*2654012fSReza Sabdar 	sp = si;
745*2654012fSReza Sabdar 	for (i = 0; i < num; i++, sp++) {
746*2654012fSReza Sabdar 		ndmp_connection_print(cat, sp);
747*2654012fSReza Sabdar 		(void) fprintf(stdout, "\n");
748*2654012fSReza Sabdar 	}
749*2654012fSReza Sabdar 
750*2654012fSReza Sabdar 	if (num == 0) {
751*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("No active session.\n"));
752*2654012fSReza Sabdar 	} else {
753*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("%d active sessions.\n"), num);
754*2654012fSReza Sabdar 	}
755*2654012fSReza Sabdar }
756*2654012fSReza Sabdar 
757*2654012fSReza Sabdar /*
758*2654012fSReza Sabdar  * Print the connection information for the given category.
759*2654012fSReza Sabdar  */
760*2654012fSReza Sabdar void
761*2654012fSReza Sabdar ndmp_session_print(int cat,  ndmp_session_info_t *si)
762*2654012fSReza Sabdar {
763*2654012fSReza Sabdar 	ndmp_connection_print(cat, si);
764*2654012fSReza Sabdar }
765*2654012fSReza Sabdar 
766*2654012fSReza Sabdar void
767*2654012fSReza Sabdar ndmp_devinfo_print(ndmp_devinfo_t *dip, size_t size)
768*2654012fSReza Sabdar {
769*2654012fSReza Sabdar 	int i;
770*2654012fSReza Sabdar 
771*2654012fSReza Sabdar 	if (dip == NULL) {
772*2654012fSReza Sabdar 		(void) fprintf(stdout, gettext("No device attached.\n"));
773*2654012fSReza Sabdar 		return;
774*2654012fSReza Sabdar 	}
775*2654012fSReza Sabdar 
776*2654012fSReza Sabdar 	for (i = 0; i < size; i++, dip++) {
777*2654012fSReza Sabdar 		switch (dip->nd_dev_type) {
778*2654012fSReza Sabdar 		case NDMP_SINQ_TAPE_ROBOT:
779*2654012fSReza Sabdar 			(void) fprintf(stdout, gettext("Robot (Changer):\n"));
780*2654012fSReza Sabdar 			break;
781*2654012fSReza Sabdar 		case NDMP_SINQ_SEQ_ACCESS_DEVICE:
782*2654012fSReza Sabdar 			(void) fprintf(stdout, gettext("Tape drive(s):\n"));
783*2654012fSReza Sabdar 			break;
784*2654012fSReza Sabdar 		}
785*2654012fSReza Sabdar 		if (dip->nd_name)
786*2654012fSReza Sabdar 			(void) fprintf(stdout,
787*2654012fSReza Sabdar 			    gettext("\tName      : %s\n"), dip->nd_name);
788*2654012fSReza Sabdar 		(void) fprintf(stdout,
789*2654012fSReza Sabdar 		    gettext("\tLUN #     : %d\n"), dip->nd_lun);
790*2654012fSReza Sabdar 		(void) fprintf(stdout,
791*2654012fSReza Sabdar 		    gettext("\tSCSI ID # : %d\n"), dip->nd_sid);
792*2654012fSReza Sabdar 		if (dip->nd_vendor)
793*2654012fSReza Sabdar 			(void) fprintf(stdout,
794*2654012fSReza Sabdar 			    gettext("\tVendor    : %s\n"), dip->nd_vendor);
795*2654012fSReza Sabdar 		if (dip->nd_product)
796*2654012fSReza Sabdar 			(void) fprintf(stdout,
797*2654012fSReza Sabdar 			    gettext("\tProduct   : %s\n"), dip->nd_product);
798*2654012fSReza Sabdar 		if (dip->nd_revision)
799*2654012fSReza Sabdar 			(void) fprintf(stdout,
800*2654012fSReza Sabdar 			    gettext("\tRevision  : %s\n"), dip->nd_revision);
801*2654012fSReza Sabdar 		(void) fprintf(stdout, "\n");
802*2654012fSReza Sabdar 	}
803*2654012fSReza Sabdar }
804