summaryrefslogtreecommitdiffstats
path: root/sys/nfs4client/nfs4_socket.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2009-05-22 12:35:12 +0000
committerrwatson <rwatson@FreeBSD.org>2009-05-22 12:35:12 +0000
commitccb17e335aed123268303ae81de1b71c1340a1e7 (patch)
treed3806d83b9761a1610e63824e4451e9628878f16 /sys/nfs4client/nfs4_socket.c
parenta75d175b4f1d7335efc89a91eac2db17f903ec5e (diff)
downloadFreeBSD-src-ccb17e335aed123268303ae81de1b71c1340a1e7.zip
FreeBSD-src-ccb17e335aed123268303ae81de1b71c1340a1e7.tar.gz
Remove the unmaintained University of Michigan NFSv4 client from 8.x
prior to 8.0-RELEASE. Rick Macklem's new and more feature-rich NFSv234 client and server are replacing it. Discussed with: rmacklem
Diffstat (limited to 'sys/nfs4client/nfs4_socket.c')
-rw-r--r--sys/nfs4client/nfs4_socket.c348
1 files changed, 0 insertions, 348 deletions
diff --git a/sys/nfs4client/nfs4_socket.c b/sys/nfs4client/nfs4_socket.c
deleted file mode 100644
index c1fe154..0000000
--- a/sys/nfs4client/nfs4_socket.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/* $FreeBSD$ */
-/* $Id: nfs_socket.c,v 1.12 2003/11/05 14:59:01 rees Exp $ */
-
-/*-
- * copyright (c) 2003
- * the regents of the university of michigan
- * all rights reserved
- *
- * permission is granted to use, copy, create derivative works and redistribute
- * this software and such derivative works for any purpose, so long as the name
- * of the university of michigan is not used in any advertising or publicity
- * pertaining to the use or distribution of this software without specific,
- * written prior authorization. if the above copyright notice or any other
- * identification of the university of michigan is included in any copy of any
- * portion of this software, then the disclaimer below must also be included.
- *
- * this software is provided as is, without representation from the university
- * of michigan as to its fitness for any purpose, and without warranty by the
- * university of michigan of any kind, either express or implied, including
- * without limitation the implied warranties of merchantability and fitness for
- * a particular purpose. the regents of the university of michigan shall not be
- * liable for any damages, including special, indirect, incidental, or
- * consequential damages, with respect to any claim arising out of or in
- * connection with the use of the software, even if it has been or is hereafter
- * advised of the possibility of such damages.
- */
-
-/*-
- * Copyright (c) 1989, 1991, 1993, 1995
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-/*
- * Socket operations for use by nfs
- */
-
-#include "opt_inet6.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/mount.h>
-#include <sys/mutex.h>
-#include <sys/proc.h>
-#include <sys/protosw.h>
-#include <sys/signalvar.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <sys/syslog.h>
-#include <sys/vnode.h>
-
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-
-#include <rpc/rpcclnt.h>
-
-#include <nfs/rpcv2.h>
-#include <nfs/nfsproto.h>
-#include <nfsclient/nfs.h>
-#include <nfs4client/nfs4.h>
-#include <nfs/xdr_subs.h>
-#include <nfsclient/nfsm_subs.h>
-#include <nfsclient/nfsmount.h>
-
-#ifdef NFS4_USE_RPCCLNT
-#include <rpc/rpcclnt.h>
-#include <rpc/rpcm_subs.h>
-#endif
-
-#ifdef NFS4_USE_RPCCLNT
-static struct rpc_program nfs_program = {
- NFS_PROG, NFS_VER4, "NFSv4"
-};
-#endif
-
-
-static struct {
- short nfserr;
- short syserr;
-} nfs_errtbl[] = {
- { NFS_OK, 0 },
- { NFSERR_PERM, EPERM },
- { NFSERR_NOENT, ENOENT },
- { NFSERR_IO, EIO },
- { NFSERR_NXIO, ENXIO },
- { NFSERR_ACCES, EACCES },
- { NFSERR_EXIST, EEXIST },
- { NFSERR_XDEV, EXDEV },
- { NFSERR_MLINK, EMLINK },
- { NFSERR_NODEV, ENODEV },
- { NFSERR_NOTDIR, ENOTDIR },
- { NFSERR_ISDIR, EISDIR },
- { NFSERR_INVAL, EINVAL },
- { NFSERR_FBIG, EFBIG },
- { NFSERR_NOSPC, ENOSPC },
- { NFSERR_ROFS, EROFS },
- { NFSERR_MLINK, EMLINK },
- { NFSERR_NAMETOL, ENAMETOOLONG },
- { NFSERR_NOTEMPTY, ENOTEMPTY },
- { NFSERR_NOTSUPP, EOPNOTSUPP },
-#ifdef EDQUOT
- { NFSERR_DQUOT, EDQUOT },
-#endif
- { NFSERR_STALE, ESTALE },
- { NFSERR_DENIED, EAGAIN },
- { NFSERR_SYMLINK, ELOOP },
- { NFSERR_BADXDR, EBADRPC },
- { NFSERR_WRONGSEC, EPERM },
- { -1, EIO }
-};
-
-static int
-nfs4_nfserr_to_syserr(int nfserr)
-{
- int i, syserr;
-
- /* XXX : not the optimal algorithm, but will do for now! */
- for (i = 0; nfs_errtbl[i].nfserr != -1; i++) {
- if (nfs_errtbl[i].nfserr == nfserr)
- break;
- }
-#ifdef NFS4_MAP_UNKNOWN_ERR
- syserr = nfs_errtbl[i].syserr;
-#else
- if (nfs_errtbl[i].nfserr != -1)
- syserr = nfs_errtbl[i].syserr;
- else
- syserr = nfserr;
-#endif
- return syserr;
-}
-
-int
-nfs4_connect(struct nfsmount *nmp)
-{
- struct rpcclnt * rpc = &nmp->nm_rpcclnt;
- struct rpc_auth * auth;
- int flag = 0;
- int error;
-
- /* XXX hack! */
-#ifdef __OpenBSD__
- struct proc * td = curproc;
-#else
- struct thread * td = curthread;
-#endif
-
- auth = malloc(sizeof(struct rpc_auth), M_TEMP, M_WAITOK);
- auth->auth_type = RPCAUTH_UNIX;
-
- /* translate nfs flags -> rpcclnt flags */
- if (nmp->nm_flag & NFSMNT_SOFT)
- flag |= RPCCLNT_SOFT;
-
- if (nmp->nm_flag & NFSMNT_INT)
- flag |= RPCCLNT_INT;
-
- if (nmp->nm_flag & NFSMNT_NOCONN)
- flag |= RPCCLNT_NOCONN;
-
- if (nmp->nm_flag & NFSMNT_DUMBTIMR)
- flag |= RPCCLNT_DUMBTIMR;
-
- /* rpc->rc_servername = nmp->nm_mountp->mnt_stat.f_mntfromname; */
-
- error = rpcclnt_setup(rpc, &nfs_program, nmp->nm_nam, nmp->nm_sotype,
- nmp->nm_soproto, auth,
- /* XXX: check nmp->nm_flag to make sure these are set */
- (nmp->nm_rsize > nmp->nm_readdirsize) ? nmp->nm_rsize : nmp->nm_readdirsize,
- nmp->nm_wsize, flag);
-
- /* set deadthresh, timeo, retry */
- rpc->rc_deadthresh = nmp->nm_deadthresh;
- rpc->rc_timeo = nmp->nm_timeo;
- rpc->rc_retry = nmp->nm_retry;
-
-
- if (error)
- return error;
-
- return rpcclnt_connect(rpc, td);
-}
-
-/*
- * NFS disconnect. Clean up and unlink.
- */
-void
-nfs4_disconnect(struct nfsmount *nmp)
-{
- rpcclnt_disconnect(&nmp->nm_rpcclnt);
-}
-
-void
-nfs4_safedisconnect(struct nfsmount *nmp)
-{
- rpcclnt_safedisconnect(&nmp->nm_rpcclnt);
-}
-
-/*
- * nfs_request - goes something like this
- * - fill in request struct
- * - links it into list
- * - calls nfs_send() for first transmit
- * - calls nfs_receive() to get reply
- * - break down rpc header and return with nfs reply pointed to
- * by mrep or error
- * nb: always frees up mreq mbuf list
- */
-/* XXX overloaded before */
-#define NQ_TRYLATERDEL 15 /* Initial try later delay (sec) */
-
-int
-nfs4_request(struct vnode *vp, struct mbuf *mrest, int procnum,
- struct thread *td, struct ucred *cred, struct mbuf **mrp,
- struct mbuf **mdp, caddr_t *dposp)
-{
- int error;
-
- error = nfs4_request_mnt(VFSTONFS(vp->v_mount), mrest, procnum,
- td, cred, mrp, mdp, dposp);
-
- /*
- ** If the File Handle was stale, invalidate the
- ** lookup cache, just in case.
- **/
- if (error == ESTALE)
- nfs_purgecache(vp);
-
- return (error);
-}
-
-
-int
-nfs4_request_mnt(struct nfsmount *nmp, struct mbuf *mrest, int procnum,
- struct thread *td, struct ucred *cred, struct mbuf **mrp,
- struct mbuf **mdp, caddr_t *dposp)
-{
- int error;
- u_int32_t *tl;
- struct rpcclnt * clnt = &nmp->nm_rpcclnt;
- struct mbuf *md, *mrep;
- caddr_t dpos;
- struct rpc_reply reply;
-
- if ((error = rpcclnt_request(clnt, mrest, procnum, td, cred,
- &reply)) != 0) {
- goto out;
- }
-
- /* XXX: don't free mrest if an error occured, to allow caller to retry*/
- m_freem(mrest);
- mrep = reply.mrep;
- md = reply.result_md;
- dpos = reply.result_dpos;
-
- tl = nfsm_dissect(u_int32_t *, NFSX_UNSIGNED);
- if (*tl != 0) {
- error = fxdr_unsigned(int, *tl);
-#if 0
- if ((nmp->nm_flag & NFSMNT_NFSV3) &&
- error == NFSERR_TRYLATER) {
- m_freem(mrep);
- error = 0;
- waituntil = time_second + trylater_delay;
- while (time_second < waituntil)
- (void) tsleep(&fake_wchan, PSOCK, "nqnfstry", hz);
- trylater_delay *= nfs_backoff[trylater_cnt];
- if (trylater_cnt < NFS_NBACKOFF - 1)
- trylater_cnt++;
- goto tryagain;
- }
-#endif
- goto out;
- }
-
- *mrp = mrep;
- *mdp = md;
- *dposp = dpos;
- return (0);
-nfsmout:
-out:
- m_freem(reply.mrep);
- *mrp = NULL;
- *mdp = NULL;
- return (nfs4_nfserr_to_syserr(error));
-}
-
-
-/*
- * Mark all of an nfs mount's outstanding requests with R_SOFTTERM and
- * wait for all requests to complete. This is used by forced unmounts
- * to terminate any outstanding RPCs.
- */
-int
-nfs4_nmcancelreqs(nmp)
- struct nfsmount *nmp;
-{
- return rpcclnt_cancelreqs(&nmp->nm_rpcclnt);
-}
-
-/*
- * Test for a termination condition pending on the process.
- * This is used for NFSMNT_INT mounts.
- */
-int
-nfs4_sigintr(struct nfsmount *nmp, struct nfsreq *rep, struct thread *td)
-{
- if (rep != NULL) {
- printf("nfs_sigintr: attempting to use nfsreq != NULL\n");
- return EINTR;
- }
- return rpcclnt_sigintr(&nmp->nm_rpcclnt, NULL, td);
-}
OpenPOWER on IntegriCloud