/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (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
* 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 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 1983,1984,1985,1986,1987,1988,1989 AT&T.
* All rights reserved.
*/
/*
* This is filled in with an appropriate address for the
* function that will traverse the rfs4_client_t table
* and mark any matching IP Address as "forced_expire".
*
* It is the server init() function that plops the
* function pointer.
*/
/* This filled in by nfssrv:_init() */
extern void nfscmd_args(uint_t);
/*
* These will be reset by klmmod:lm_svc(), when lockd starts NLM service,
* klmmod, the declarations need to be here (in nfs, on which both depend) so
* that nfssrv can see the klmmod changes.
* be adjusted.
*/
/* DSS: distributed stable storage */
/* This filled in by nfssrv:_init() */
int
{
if (!INGLOBALZONE(curproc))
}
int
{
int error = 0;
secpolicy_nfs(CRED()) != 0)
switch (opcode) {
case NFS4_CLR_STATE: { /* Clear NFS4 client state */
/*
* If the server is not loaded then no point in
* clearing nothing :-)
*/
if (rfs4_client_clrst == NULL) {
break;
}
if (!INGLOBALZONE(curproc))
break;
}
case SVCPOOL_CREATE: { /* setup an RPC server thread pool */
struct svcpool_args p;
error = svc_pool_create(&p);
break;
}
case SVCPOOL_WAIT: { /* wait in kernel for threads to be needed */
int id;
break;
}
case SVCPOOL_RUN: { /* give work to a runnable thread */
int id;
break;
}
case RDMA_SVC_INIT: {
if (!INGLOBALZONE(curproc))
if (get_udatamodel() != DATAMODEL_NATIVE) {
} else {
}
break;
}
case NFS_SVC: { /* NFS server daemon */
if (!INGLOBALZONE(curproc))
break;
}
case EXPORTFS: { /* export a file system */
break;
}
case NFS_GETFH: { /* get a file handle */
if (!INGLOBALZONE(curproc))
break;
}
case NFS_REVAUTH: { /* revoke the cached credentials for the uid */
/* This call performs its own privilege checking */
break;
}
case LM_SVC: { /* LM server daemon */
if (get_udatamodel() != DATAMODEL_NATIVE) {
} else {
}
break;
}
case KILL_LOCKMGR: {
error = lm_shutdown();
break;
}
case LOG_FLUSH: { /* Flush log buffer and possibly rename */
break;
}
case NFS4_SVC: { /* NFS client callback daemon */
break;
}
/* Request that NFSv4 server quiesce on next shutdown */
case NFS4_SVC_REQUEST_QUIESCE: {
int id;
/* check that nfssrv module is loaded */
if (nfs_srv_quiesce_func == NULL)
(void *)nfs_srv_quiesce_func);
break;
}
case NFS_IDMAP: {
error = 0;
break;
}
case NFS4_DSS_SETPATHS_SIZE: {
nfs4_dss_buflen = (long)nfs4_dss_bufsize;
error = 0;
break;
}
case NFS4_DSS_SETPATHS: {
char *nfs4_dss_bufp;
/* check that nfssrv module is loaded */
if (nfs_srv_dss_func == NULL)
/*
* NFS4_DSS_SETPATHS_SIZE must be called before
* NFS4_DSS_SETPATHS, to tell us how big a buffer we need
* to allocate.
*/
if (nfs4_dss_buflen == 0)
if (nfs4_dss_bufp == NULL)
}
/* unpack the buffer and extract the pathnames */
break;
}
case NFS4_EPHEMERAL_MOUNT_TO: {
/*
* Not a very complicated call.
*/
error = 0;
break;
}
case MOUNTD_ARGS: {
/*
* For now, only passing down the door fd; if we
* ever need to pass down more info, we can use
* a (properly aligned) struct.
*/
error = 0;
break;
}
case NFSCMD_ARGS: {
/*
* For now, only passing down the door fd; if we
* ever need to pass down more info, we can use
* a (properly aligned) struct.
*/
error = 0;
break;
}
default:
break;
}
}