mhd_metamhd.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1994, 2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include "mhd_local.h"
/*
* list drives
*/
/*ARGSUSED*/
bool_t
mhd_list_1_svc(
mhd_list_args_t *argp,
mhd_list_res_t *resp,
struct svc_req *rqstp /* RPC stuff */
)
{
mhd_error_t *mhep = &resp->status;
int err;
/* setup, check permissions */
(void) memset(resp, 0, sizeof (*resp));
if ((err = mhd_init(rqstp, R_OK, mhep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
(void) mhd_list_drives(argp->path, argp->flags, resp, mhep);
return (TRUE);
}
/*
* take ownership of drives
*/
/*ARGSUSED*/
bool_t
mhd_tkown_1_svc(
mhd_tkown_args_t *argp,
mhd_error_t *mhep,
struct svc_req *rqstp /* RPC stuff */
)
{
int err;
/* setup, check permissions */
if ((err = mhd_init(rqstp, W_OK, mhep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
(void) mhd_reserve_drives(&argp->set, &argp->timeouts, argp->ff_mode,
argp->options, mhep);
return (TRUE);
}
/*
* release ownership of drives
*/
/*ARGSUSED*/
bool_t
mhd_relown_1_svc(
mhd_relown_args_t *argp,
mhd_error_t *mhep,
struct svc_req *rqstp /* RPC stuff */
)
{
int err;
/* setup, check permissions */
if ((err = mhd_init(rqstp, W_OK, mhep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
(void) mhd_release_drives(&argp->set, argp->options, mhep);
return (TRUE);
}
/*
* status drives
*/
/*ARGSUSED*/
bool_t
mhd_status_1_svc(
mhd_status_args_t *argp,
mhd_status_res_t *resp,
struct svc_req *rqstp /* RPC stuff */
)
{
mhd_error_t *mhep = &resp->status;
mhd_drive_status_t *status = NULL;
int cnt;
int err;
/* setup, check permissions */
(void) memset(resp, 0, sizeof (*resp));
if ((err = mhd_init(rqstp, W_OK, mhep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
if ((cnt = mhd_status_drives(&argp->set, argp->options,
&status, mhep)) < 0) {
return (TRUE);
}
resp->results.results_len = cnt;
resp->results.results_val = status;
return (TRUE);
}