Blame ndmp-src/ndma_cops_query.c

Packit Service 392537
/*
Packit Service 392537
 * Copyright (c) 1998,1999,2000
Packit Service 392537
 *	Traakan, Inc., Los Altos, CA
Packit Service 392537
 *	All rights reserved.
Packit Service 392537
 *
Packit Service 392537
 * Redistribution and use in source and binary forms, with or without
Packit Service 392537
 * modification, are permitted provided that the following conditions
Packit Service 392537
 * are met:
Packit Service 392537
 * 1. Redistributions of source code must retain the above copyright
Packit Service 392537
 *    notice unmodified, this list of conditions, and the following
Packit Service 392537
 *    disclaimer.
Packit Service 392537
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 392537
 *    notice, this list of conditions and the following disclaimer in the
Packit Service 392537
 *    documentation and/or other materials provided with the distribution.
Packit Service 392537
 *
Packit Service 392537
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit Service 392537
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit Service 392537
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit Service 392537
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit Service 392537
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 392537
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 392537
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 392537
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit Service 392537
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit Service 392537
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit Service 392537
 * SUCH DAMAGE.
Packit Service 392537
 */
Packit Service 392537
Packit Service 392537
/*
Packit Service 392537
 * Project:  NDMJOB
Packit Service 392537
 * Ident:    $Id: $
Packit Service 392537
 *
Packit Service 392537
 * Description:
Packit Service 392537
 *
Packit Service 392537
 */
Packit Service 392537
Packit Service 392537
Packit Service 392537
#include "ndmagents.h"
Packit Service 392537
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_CONTROL_AGENT
Packit Service 392537
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_op_query (struct ndm_session *sess)
Packit Service 392537
{
Packit Service 392537
	ndmca_opq_data(sess);
Packit Service 392537
	ndmca_opq_tape(sess);
Packit Service 392537
	ndmca_opq_robot(sess);
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_data (struct ndm_session *sess)
Packit Service 392537
{
Packit Service 392537
	struct ndm_job_param *	job = &sess->control_acb.job;
Packit Service 392537
	int			rc;
Packit Service 392537
Packit Service 392537
	if (job->data_agent.conn_type == NDMCONN_TYPE_NONE)
Packit Service 392537
		return 0;
Packit Service 392537
Packit Service 392537
	rc = ndmca_connect_data_agent (sess);
Packit Service 392537
	if (rc) {
Packit Service 392537
		ndmconn_destruct (sess->plumb.data);
Packit Service 392537
		return rc;	/* already tattled */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	ndmalogqr (sess, "");
Packit Service 392537
	ndmalogqr (sess, "Data Agent %s NDMPv%d",
Packit Service 392537
		job->data_agent.host,
Packit Service 392537
		sess->plumb.data->protocol_version);
Packit Service 392537
	ndmca_opq_host_info (sess, sess->plumb.data);
Packit Service 392537
	ndmca_opq_get_mover_type (sess, sess->plumb.data);
Packit Service 392537
	ndmca_opq_get_butype_attr (sess, sess->plumb.data);
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	if (sess->plumb.data->protocol_version == NDMP3VER) {
Packit Service 392537
		ndmca_opq_get_fs_info (sess, sess->plumb.data);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	if (sess->plumb.data->protocol_version == NDMP4VER) {
Packit Service 392537
		ndmca_opq_get_fs_info (sess, sess->plumb.data);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_tape (struct ndm_session *sess)
Packit Service 392537
{
Packit Service 392537
	struct ndm_job_param *	job = &sess->control_acb.job;
Packit Service 392537
	int			rc;
Packit Service 392537
Packit Service 392537
	if (job->tape_agent.conn_type == NDMCONN_TYPE_NONE)
Packit Service 392537
		return 0;
Packit Service 392537
Packit Service 392537
	rc = ndmca_connect_tape_agent (sess);
Packit Service 392537
	if (rc) {
Packit Service 392537
		ndmconn_destruct (sess->plumb.tape);
Packit Service 392537
		return rc;	/* already tattled */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	ndmalogqr (sess, "");
Packit Service 392537
	ndmalogqr (sess, "Tape Agent %s NDMPv%d",
Packit Service 392537
		job->tape_agent.host,
Packit Service 392537
		sess->plumb.tape->protocol_version);
Packit Service 392537
	if (sess->plumb.tape != sess->plumb.data) {	/* don't be boring */
Packit Service 392537
		ndmca_opq_host_info (sess, sess->plumb.tape);
Packit Service 392537
		ndmca_opq_get_mover_type (sess, sess->plumb.tape);
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	if (sess->plumb.tape->protocol_version == NDMP3VER) {
Packit Service 392537
		ndmca_opq_get_tape_info (sess, sess->plumb.tape);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	if (sess->plumb.tape->protocol_version == NDMP4VER) {
Packit Service 392537
		ndmca_opq_get_tape_info (sess, sess->plumb.tape);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_robot (struct ndm_session *sess)
Packit Service 392537
{
Packit Service 392537
	struct ndm_job_param *	job = &sess->control_acb.job;
Packit Service 392537
	int			rc;
Packit Service 392537
Packit Service 392537
	if (job->robot_agent.conn_type == NDMCONN_TYPE_NONE
Packit Service 392537
	 && !job->have_robot)
Packit Service 392537
		return 0;
Packit Service 392537
Packit Service 392537
	rc = ndmca_connect_robot_agent (sess);
Packit Service 392537
	if (rc)
Packit Service 392537
		return rc;	/* already tattled */
Packit Service 392537
Packit Service 392537
	ndmalogqr (sess, "");
Packit Service 392537
	ndmalogqr (sess, "Robot Agent %s NDMPv%d",
Packit Service 392537
		job->robot_agent.host,
Packit Service 392537
		sess->plumb.robot->protocol_version);
Packit Service 392537
Packit Service 392537
	if (sess->plumb.robot != sess->plumb.data
Packit Service 392537
	 && sess->plumb.robot != sess->plumb.tape) {
Packit Service 392537
		/* don't be boring */
Packit Service 392537
		ndmca_opq_host_info (sess, sess->plumb.robot);
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	if (sess->plumb.robot->protocol_version == NDMP3VER) {
Packit Service 392537
		ndmca_opq_get_scsi_info (sess, sess->plumb.robot);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	if (sess->plumb.robot->protocol_version == NDMP4VER) {
Packit Service 392537
		ndmca_opq_get_scsi_info (sess, sess->plumb.robot);
Packit Service 392537
	}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
Packit Service 392537
	if (job->have_robot) {
Packit Service 392537
		if (ndmca_robot_prep_target(sess)) {
Packit Service 392537
			ndmalogqr (sess, "  robot init failed");
Packit Service 392537
			return -1;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmca_robot_query (sess);
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_host_info (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
	unsigned int	i;
Packit Service 392537
	char		buf[100];
Packit Service 392537
Packit Service 392537
	switch (conn->protocol_version) {
Packit Service 392537
	default:
Packit Service 392537
		ndmalogqr (sess, "  Host info NDMPv???? %d",
Packit Service 392537
				conn->protocol_version);
Packit Service 392537
		ndmalogqr (sess, "    INTERNAL ERROR, CHECK BUILD");
Packit Service 392537
		break;
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP2
Packit Service 392537
	case NDMP2VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp2_config_get_host_info, NDMP2VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_host_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Host info");
Packit Service 392537
		ndmalogqr (sess, "    hostname   %s", reply->hostname);
Packit Service 392537
		ndmalogqr (sess, "    os_type    %s", reply->os_type);
Packit Service 392537
		ndmalogqr (sess, "    os_vers    %s", reply->os_vers);
Packit Service 392537
		ndmalogqr (sess, "    hostid     %s", reply->hostid);
Packit Service 392537
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->auth_type.auth_type_len; i++) {
Packit Service 392537
			ndmp2_auth_type atyp;
Packit Service 392537
Packit Service 392537
			atyp = reply->auth_type.auth_type_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp2_auth_type_to_str (atyp));
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "    auths      (%d) %s",
Packit Service 392537
					reply->auth_type.auth_type_len, buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP2 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	case NDMP3VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp3_config_get_host_info, NDMP3VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_host_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Host info");
Packit Service 392537
		ndmalogqr (sess, "    hostname   %s", reply->hostname);
Packit Service 392537
		ndmalogqr (sess, "    os_type    %s", reply->os_type);
Packit Service 392537
		ndmalogqr (sess, "    os_vers    %s", reply->os_vers);
Packit Service 392537
		ndmalogqr (sess, "    hostid     %s", reply->hostid);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp3_config_get_server_info, NDMP3VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_server_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Server info");
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "    vendor     %s", reply->vendor_name);
Packit Service 392537
		ndmalogqr (sess, "    product    %s", reply->product_name);
Packit Service 392537
		ndmalogqr (sess, "    revision   %s", reply->revision_number);
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->auth_type.auth_type_len; i++) {
Packit Service 392537
			ndmp3_auth_type atyp;
Packit Service 392537
Packit Service 392537
			atyp = reply->auth_type.auth_type_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp3_auth_type_to_str (atyp));
Packit Service 392537
		}
Packit Service 392537
		ndmalogqr (sess, "    auths      (%d) %s",
Packit Service 392537
					reply->auth_type.auth_type_len, buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	case NDMP4VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp4_config_get_host_info, NDMP4VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_host_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Host info");
Packit Service 392537
		ndmalogqr (sess, "    hostname   %s", reply->hostname);
Packit Service 392537
		ndmalogqr (sess, "    os_type    %s", reply->os_type);
Packit Service 392537
		ndmalogqr (sess, "    os_vers    %s", reply->os_vers);
Packit Service 392537
		ndmalogqr (sess, "    hostid     %s", reply->hostid);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp4_config_get_server_info, NDMP4VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_server_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Server info");
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "    vendor     %s", reply->vendor_name);
Packit Service 392537
		ndmalogqr (sess, "    product    %s", reply->product_name);
Packit Service 392537
		ndmalogqr (sess, "    revision   %s", reply->revision_number);
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->auth_type.auth_type_len; i++) {
Packit Service 392537
			ndmp4_auth_type atyp;
Packit Service 392537
Packit Service 392537
			atyp = reply->auth_type.auth_type_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp4_auth_type_to_str (atyp));
Packit Service 392537
		}
Packit Service 392537
		ndmalogqr (sess, "    auths      (%d) %s",
Packit Service 392537
					reply->auth_type.auth_type_len, buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_get_mover_type (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
	unsigned int	i;
Packit Service 392537
	char		buf[100];
Packit Service 392537
Packit Service 392537
	switch (conn->protocol_version) {
Packit Service 392537
	default:
Packit Service 392537
		/* already tattled in ndmca_opq_host_info() */
Packit Service 392537
		break;
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP2
Packit Service 392537
	case NDMP2VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp2_config_get_mover_type, NDMP2VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_mover_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Mover types");
Packit Service 392537
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->methods.methods_len; i++) {
Packit Service 392537
			ndmp2_mover_addr_type	val;
Packit Service 392537
Packit Service 392537
			val = reply->methods.methods_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp2_mover_addr_type_to_str (val));
Packit Service 392537
		}
Packit Service 392537
		ndmalogqr (sess, "    methods    (%d) %s",
Packit Service 392537
					reply->methods.methods_len,
Packit Service 392537
					buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP2 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	case NDMP3VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp3_config_get_connection_type, NDMP3VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_connection_type failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Connection types");
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->addr_types.addr_types_len; i++) {
Packit Service 392537
			ndmp3_addr_type		val;
Packit Service 392537
Packit Service 392537
			val = reply->addr_types.addr_types_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp3_addr_type_to_str (val));
Packit Service 392537
		}
Packit Service 392537
		ndmalogqr (sess, "    addr_types (%d) %s",
Packit Service 392537
					reply->addr_types.addr_types_len, buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	case NDMP4VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp4_config_get_connection_type, NDMP4VER)
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "get_connection_type failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Connection types");
Packit Service 392537
		*buf = 0;
Packit Service 392537
		for (i = 0; i < reply->addr_types.addr_types_len; i++) {
Packit Service 392537
			ndmp4_addr_type		val;
Packit Service 392537
Packit Service 392537
			val = reply->addr_types.addr_types_val[i];
Packit Service 392537
			strcat (buf, " ");
Packit Service 392537
			strcat (buf, ndmp4_addr_type_to_str (val));
Packit Service 392537
		}
Packit Service 392537
		ndmalogqr (sess, "    addr_types (%d) %s",
Packit Service 392537
					reply->addr_types.addr_types_len, buf);
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_get_butype_attr (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
Packit Service 392537
	switch (conn->protocol_version) {
Packit Service 392537
	default:
Packit Service 392537
		/* already tattled in ndmca_opq_host_info() */
Packit Service 392537
		break;
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP2
Packit Service 392537
	case NDMP2VER:
Packit Service 392537
	    NDMC_WITH(ndmp2_config_get_butype_attr, NDMP2VER)
Packit Service 392537
		request->name = sess->control_acb.job.bu_type;
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "  get_butype_attr '%s' failed",
Packit Service 392537
					sess->control_acb.job.bu_type);
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		ndmalogqr (sess, "  Backup type attributes of %s format",
Packit Service 392537
			sess->control_acb.job.bu_type);
Packit Service 392537
		ndmalogqr (sess, "    backup-filelist   %s",
Packit Service 392537
			(reply->attrs&NDMP2_NO_BACKUP_FILELIST) ? "no":"yes");
Packit Service 392537
		ndmalogqr (sess, "    backup-fhinfo     %s",
Packit Service 392537
			(reply->attrs&NDMP2_NO_BACKUP_FHINFO) ? "no":"yes");
Packit Service 392537
		ndmalogqr (sess, "    recover-filelist  %s",
Packit Service 392537
			(reply->attrs&NDMP2_NO_RECOVER_FILELIST) ? "no":"yes");
Packit Service 392537
		ndmalogqr (sess, "    recover-fhinfo    %s",
Packit Service 392537
			(reply->attrs&NDMP2_NO_RECOVER_FHINFO) ? "no":"yes");
Packit Service 392537
		ndmalogqr (sess, "    recover-inc-only  %s",
Packit Service 392537
			(reply->attrs&NDMP2_NO_RECOVER_INC_ONLY) ? "no":"yes");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP2 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	case NDMP3VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp3_config_get_butype_info, NDMP3VER)
Packit Service 392537
		unsigned int	i, j;
Packit Service 392537
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "  get_butype_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		for (i = 0; i < reply->butype_info.butype_info_len; i++) {
Packit Service 392537
		    ndmp3_butype_info *	buti;
Packit Service 392537
Packit Service 392537
		    buti = &reply->butype_info.butype_info_val[i];
Packit Service 392537
		    ndmalogqr (sess, "  Backup type info of %s format",
Packit Service 392537
				buti->butype_name);
Packit Service 392537
		    ndmalogqr (sess, "    attrs      0x%lx",
Packit Service 392537
				buti->attrs);
Packit Service 392537
Packit Service 392537
		    ndmalogqr (sess, "      backup-file-history   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_BACKUP_FILE_HISTORY) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      backup-filelist   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_BACKUP_FILELIST) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      recover-filelist   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_RECOVER_FILELIST) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      backup-direct   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_BACKUP_DIRECT) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      recover-direct   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_RECOVER_DIRECT) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      backup-incremental   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_BACKUP_INCREMENTAL) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      recover-incremental   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_RECOVER_INCREMENTAL) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      backup-utf8   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_BACKUP_UTF8) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      recover-utf8   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_RECOVER_UTF8) ? "yes":"no");
Packit Service 392537
		    ndmalogqr (sess, "      recover-file-history   %s",
Packit Service 392537
			       (buti->attrs&NDMP3_BUTYPE_RECOVER_FILE_HISTORY) ? "yes":"no");
Packit Service 392537
Packit Service 392537
Packit Service 392537
Packit Service 392537
Packit Service 392537
		    for (j = 0; j < buti->default_env.default_env_len; j++) {
Packit Service 392537
			ndmalogqr (sess, "    set        %s=%s",
Packit Service 392537
				buti->default_env.default_env_val[j].name,
Packit Service 392537
				buti->default_env.default_env_val[j].value);
Packit Service 392537
		    }
Packit Service 392537
		    if (j == 0)
Packit Service 392537
			ndmalogqr (sess, "    empty default env");
Packit Service 392537
		    ndmalogqr (sess, "");
Packit Service 392537
		}
Packit Service 392537
		if (i == 0)
Packit Service 392537
			ndmalogqr (sess, "  Empty backup type info");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	case NDMP4VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp4_config_get_butype_info, NDMP4VER)
Packit Service 392537
		unsigned int	i, j;
Packit Service 392537
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "  get_butype_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		for (i = 0; i < reply->butype_info.butype_info_len; i++) {
Packit Service 392537
		    ndmp4_butype_info *	buti;
Packit Service 392537
Packit Service 392537
		    buti = &reply->butype_info.butype_info_val[i];
Packit Service 392537
		    ndmalogqr (sess, "  Backup type info of %s format",
Packit Service 392537
				buti->butype_name);
Packit Service 392537
		    ndmalogqr (sess, "    attrs      0x%lx",
Packit Service 392537
				buti->attrs);
Packit Service 392537
		    for (j = 0; j < buti->default_env.default_env_len; j++) {
Packit Service 392537
			ndmalogqr (sess, "    set        %s=%s",
Packit Service 392537
				buti->default_env.default_env_val[j].name,
Packit Service 392537
				buti->default_env.default_env_val[j].value);
Packit Service 392537
		    }
Packit Service 392537
		    if (j == 0)
Packit Service 392537
			ndmalogqr (sess, "    empty default env");
Packit Service 392537
		    ndmalogqr (sess, "");
Packit Service 392537
		}
Packit Service 392537
		if (i == 0)
Packit Service 392537
			ndmalogqr (sess, "  Empty backup type info");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_EFFECT_NO_NDMP3_NOR_NDMP4
Packit Service 392537
int
Packit Service 392537
ndmca_opq_get_fs_info (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
Packit Service 392537
	switch (conn->protocol_version) {
Packit Service 392537
	default:
Packit Service 392537
		/* already tattled in ndmca_opq_host_info() */
Packit Service 392537
		break;
Packit Service 392537
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP2
Packit Service 392537
	case NDMP2VER:
Packit Service 392537
		break;	/* why are we here? */
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP2 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
	case NDMP3VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp3_config_get_fs_info, NDMP3VER)
Packit Service 392537
		unsigned int	i, j;
Packit Service 392537
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "  get_fs_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		for (i = 0; i < reply->fs_info.fs_info_len; i++) {
Packit Service 392537
			ndmp3_fs_info *		fsi;
Packit Service 392537
Packit Service 392537
			fsi = &reply->fs_info.fs_info_val[i];
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "  File system %s",
Packit Service 392537
					fsi->fs_logical_device);
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    physdev    %s",
Packit Service 392537
					fsi->fs_physical_device);
Packit Service 392537
			ndmalogqr (sess, "    invalid    0x%lx", fsi->invalid);
Packit Service 392537
			if (fsi->invalid & NDMP3_FS_INFO_TOTAL_SIZE_INVALID)
Packit Service 392537
			    ndmalogqr (sess, "        TOTAL_SIZE_INVALID");
Packit Service 392537
			if (fsi->invalid & NDMP3_FS_INFO_USED_SIZE_INVALID)
Packit Service 392537
			    ndmalogqr (sess, "        USED_SIZE_INVALID");
Packit Service 392537
			if (fsi->invalid & NDMP3_FS_INFO_AVAIL_SIZE_INVALID)
Packit Service 392537
			    ndmalogqr (sess, "        AVAIL_SIZE_INVALID");
Packit Service 392537
Packit Service 392537
			if (fsi->invalid & NDMP3_FS_INFO_TOTAL_INODES_INVALID)
Packit Service 392537
			    ndmalogqr (sess, "        TOTAL_INODES_INVALID");
Packit Service 392537
			if (fsi->invalid & NDMP3_FS_INFO_USED_INODES_INVALID)
Packit Service 392537
			    ndmalogqr (sess, "        USED_INODES_INVALID");
Packit Service 392537
			ndmalogqr (sess, "    type       %s", fsi->fs_type);
Packit Service 392537
			ndmalogqr (sess, "    status     %s", fsi->fs_status);
Packit Service 392537
			ndmalogqr (sess,
Packit Service 392537
			    "    space      %lld total, %lld used, %lld avail",
Packit Service 392537
					fsi->total_size,
Packit Service 392537
					fsi->used_size,
Packit Service 392537
					fsi->avail_size);
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    inodes     %lld total, %lld used",
Packit Service 392537
					fsi->total_inodes,
Packit Service 392537
					fsi->used_inodes);
Packit Service 392537
Packit Service 392537
			for (j = 0; j < fsi->fs_env.fs_env_len; j++) {
Packit Service 392537
				ndmalogqr (sess, "    set        %s=%s",
Packit Service 392537
					fsi->fs_env.fs_env_val[j].name,
Packit Service 392537
					fsi->fs_env.fs_env_val[j].value);
Packit Service 392537
			}
Packit Service 392537
			if (j == 0)
Packit Service 392537
				ndmalogqr (sess, "    empty default env");
Packit Service 392537
			ndmalogqr (sess, "");
Packit Service 392537
		}
Packit Service 392537
		if (i == 0)
Packit Service 392537
			ndmalogqr (sess, "  Empty fs info");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
	case NDMP4VER:
Packit Service 392537
	    NDMC_WITH_VOID_REQUEST(ndmp4_config_get_fs_info, NDMP4VER)
Packit Service 392537
		unsigned int	i, j;
Packit Service 392537
Packit Service 392537
		rc = NDMC_CALL(conn);
Packit Service 392537
		if (rc) {
Packit Service 392537
			ndmalogqr (sess, "  get_fs_info failed");
Packit Service 392537
			return rc;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		for (i = 0; i < reply->fs_info.fs_info_len; i++) {
Packit Service 392537
			ndmp4_fs_info *		fsi;
Packit Service 392537
Packit Service 392537
			fsi = &reply->fs_info.fs_info_val[i];
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "  File system %s",
Packit Service 392537
					fsi->fs_logical_device);
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    physdev    %s",
Packit Service 392537
					fsi->fs_physical_device);
Packit Service 392537
			ndmalogqr (sess, "    unsupported 0x%lx",
Packit Service 392537
						fsi->unsupported);
Packit Service 392537
			if (fsi->unsupported & NDMP4_FS_INFO_TOTAL_SIZE_UNS)
Packit Service 392537
			    ndmalogqr (sess, "        TOTAL_SIZE_UNS");
Packit Service 392537
			if (fsi->unsupported & NDMP4_FS_INFO_USED_SIZE_UNS)
Packit Service 392537
			    ndmalogqr (sess, "        USED_SIZE_UNS");
Packit Service 392537
			if (fsi->unsupported & NDMP4_FS_INFO_AVAIL_SIZE_UNS)
Packit Service 392537
			    ndmalogqr (sess, "        AVAIL_SIZE_UNS");
Packit Service 392537
Packit Service 392537
			if (fsi->unsupported & NDMP4_FS_INFO_TOTAL_INODES_UNS)
Packit Service 392537
			    ndmalogqr (sess, "        TOTAL_INODES_UNS");
Packit Service 392537
			if (fsi->unsupported & NDMP4_FS_INFO_USED_INODES_UNS)
Packit Service 392537
			    ndmalogqr (sess, "        USED_INODES_UNS");
Packit Service 392537
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    type       %s", fsi->fs_type);
Packit Service 392537
			ndmalogqr (sess, "    status     %s", fsi->fs_status);
Packit Service 392537
			ndmalogqr (sess,
Packit Service 392537
			    "    space      %lld total, %lld used, %lld avail",
Packit Service 392537
					fsi->total_size,
Packit Service 392537
					fsi->used_size,
Packit Service 392537
					fsi->avail_size);
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    inodes     %lld total, %lld used",
Packit Service 392537
					fsi->total_inodes,
Packit Service 392537
					fsi->used_inodes);
Packit Service 392537
Packit Service 392537
			for (j = 0; j < fsi->fs_env.fs_env_len; j++) {
Packit Service 392537
				ndmalogqr (sess, "    set        %s=%s",
Packit Service 392537
					fsi->fs_env.fs_env_val[j].name,
Packit Service 392537
					fsi->fs_env.fs_env_val[j].value);
Packit Service 392537
			}
Packit Service 392537
			if (j == 0)
Packit Service 392537
				ndmalogqr (sess, "    empty default env");
Packit Service 392537
			ndmalogqr (sess, "");
Packit Service 392537
		}
Packit Service 392537
		if (i == 0)
Packit Service 392537
			ndmalogqr (sess, "  Empty fs info");
Packit Service 392537
Packit Service 392537
		NDMC_FREE_REPLY();
Packit Service 392537
	    NDMC_ENDWITH
Packit Service 392537
	    break;
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_show_device_info (struct ndm_session *sess,
Packit Service 392537
  ndmp9_device_info *info,
Packit Service 392537
  unsigned n_info, char *what)
Packit Service 392537
{
Packit Service 392537
	unsigned int	i, j, k;
Packit Service 392537
Packit Service 392537
	for (i = 0; i < n_info; i++) {
Packit Service 392537
		ndmalogqr (sess, "  %s %s", what, info[i].model);
Packit Service 392537
		for (j = 0; j < info[i].caplist.caplist_len; j++) {
Packit Service 392537
			ndmp9_device_capability *dc;
Packit Service 392537
			u_long attr;
Packit Service 392537
Packit Service 392537
			dc = &info[i].caplist.caplist_val[j];
Packit Service 392537
Packit Service 392537
			ndmalogqr (sess, "    device     %s", dc->device);
Packit Service 392537
			if (!strcmp(what, "tape")) {
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP3
Packit Service 392537
			    if (sess->plumb.tape->protocol_version == 3) {
Packit Service 392537
				attr = dc->v3attr.value;
Packit Service 392537
				ndmalogqr (sess, "      attr       0x%lx",
Packit Service 392537
					   attr);
Packit Service 392537
				if (attr & NDMP3_TAPE_ATTR_REWIND)
Packit Service 392537
				    ndmalogqr (sess, "        REWIND");
Packit Service 392537
				if (attr & NDMP3_TAPE_ATTR_UNLOAD)
Packit Service 392537
				    ndmalogqr (sess, "        UNLOAD");
Packit Service 392537
			    }
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP3 */
Packit Service 392537
#ifndef NDMOS_OPTION_NO_NDMP4
Packit Service 392537
			    if (sess->plumb.tape->protocol_version == 4) {
Packit Service 392537
				attr = dc->v4attr.value;
Packit Service 392537
				ndmalogqr (sess, "      attr       0x%lx",
Packit Service 392537
					   attr);
Packit Service 392537
				if (attr & NDMP4_TAPE_ATTR_REWIND)
Packit Service 392537
				    ndmalogqr (sess, "        REWIND");
Packit Service 392537
				if (attr & NDMP4_TAPE_ATTR_UNLOAD)
Packit Service 392537
				    ndmalogqr (sess, "        UNLOAD");
Packit Service 392537
			    }
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_NDMP4 */
Packit Service 392537
			}
Packit Service 392537
			for (k = 0; k < dc->capability.capability_len; k++) {
Packit Service 392537
				ndmalogqr (sess, "      set        %s=%s",
Packit Service 392537
				    dc->capability.capability_val[k].name,
Packit Service 392537
				    dc->capability.capability_val[k].value);
Packit Service 392537
			}
Packit Service 392537
			if (k == 0)
Packit Service 392537
				ndmalogqr (sess, "      empty capabilities");
Packit Service 392537
		}
Packit Service 392537
		if (j == 0)
Packit Service 392537
			ndmalogqr (sess, "    empty caplist");
Packit Service 392537
		ndmalogqr (sess, "");
Packit Service 392537
	}
Packit Service 392537
	if (i == 0)
Packit Service 392537
		ndmalogqr (sess, "  Empty %s info", what);
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_get_tape_info (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
Packit Service 392537
    NDMC_WITH_VOID_REQUEST(ndmp9_config_get_tape_info, NDMP9VER)
Packit Service 392537
	rc = NDMC_CALL(conn);
Packit Service 392537
	if (rc) {
Packit Service 392537
		ndmalogqr (sess, "  get_tape_info failed");
Packit Service 392537
		return rc;
Packit Service 392537
	}
Packit Service 392537
	ndmca_opq_show_device_info (sess,
Packit Service 392537
		reply->config_info.tape_info.tape_info_val,
Packit Service 392537
		reply->config_info.tape_info.tape_info_len,
Packit Service 392537
		"tape");
Packit Service 392537
Packit Service 392537
	NDMC_FREE_REPLY();
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
    NDMC_ENDWITH
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmca_opq_get_scsi_info (struct ndm_session *sess, struct ndmconn *conn)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
Packit Service 392537
    NDMC_WITH_VOID_REQUEST(ndmp9_config_get_scsi_info, NDMP9VER)
Packit Service 392537
	rc = NDMC_CALL(conn);
Packit Service 392537
	if (rc) {
Packit Service 392537
		ndmalogqr (sess, "  get_scsi_info failed");
Packit Service 392537
		return rc;
Packit Service 392537
	}
Packit Service 392537
	ndmca_opq_show_device_info (sess,
Packit Service 392537
		reply->config_info.scsi_info.scsi_info_val,
Packit Service 392537
		reply->config_info.scsi_info.scsi_info_len,
Packit Service 392537
		"scsi");
Packit Service 392537
Packit Service 392537
	NDMC_FREE_REPLY();
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
    NDMC_ENDWITH
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
#endif /* !NDMOS_EFFECT_NO_NDMP3_NOR_NDMP4 */
Packit Service 392537
Packit Service 392537
void
Packit Service 392537
ndmalogqr (struct ndm_session *sess, char *fmt, ...)
Packit Service 392537
{
Packit Service 392537
	va_list		ap;
Packit Service 392537
Packit Service 392537
	va_start (ap, fmt);
Packit Service 392537
	ndmalogfv (sess, "QR", 0, fmt, ap);
Packit Service 392537
	va_end (ap);
Packit Service 392537
}
Packit Service 392537
#endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */