usr/src/uts/common/nfs/export.h
author ek110237
Mon, 31 Oct 2005 22:53:57 -0800
changeset 806 849fb015aa25
parent 0 68f95e015346
child 2060 d28fa6b07b04
permissions -rw-r--r--
6337437 .zfs doesn't work over NFS
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#ifndef	_NFS_EXPORT_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#define	_NFS_EXPORT_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <nfs/nfs_sec.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <rpcsvc/nfsauth_prot.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/vnode.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <nfs/nfs4.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * nfs pseudo flavor number is owned by IANA. Need to make sure the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * Solaris specific NFS_FLAVOR_NOMAP number will not overlap with any
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * new IANA defined pseudo flavor numbers. The chance for the overlap
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * is very small since the growth of new flavor numbers is expected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * to be limited.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#define	NFS_FLAVOR_NOMAP	999999	/* no nfs flavor mapping */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 * Note: exported_lock is currently used to ensure the integrity of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 * the secinfo fields.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
struct secinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
	seconfig_t	s_secinfo;	/* /etc/nfssec.conf entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	unsigned int	s_flags;	/* flags (see below) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	uint32_t	s_refcnt;	/* reference count for tracking */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
					/* how many children (self included) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
					/* use this flavor. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	int 		s_window;	/* window */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	int		s_rootcnt;	/* count of root names */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
	caddr_t		*s_rootnames;	/* array of root names */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
					/* they are strings for AUTH_DES and */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
					/* rpc_gss_principal_t for RPCSEC_GSS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
#ifdef _SYSCALL32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
struct secinfo32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	seconfig32_t	s_secinfo;	/* /etc/nfssec.conf entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	uint32_t	s_flags;	/* flags (see below) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	uint32_t	s_refcnt;	/* reference count for tracking */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
					/* how many children (self included) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
					/* use this flavor. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	int32_t 	s_window;	/* window */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	int32_t		s_rootcnt;	/* count of root names */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	caddr32_t	s_rootnames;	/* array of root names */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
					/* they are strings for AUTH_DES and */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
					/* rpc_gss_principal_t for RPCSEC_GSS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
#endif /* _SYSCALL32 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 * security negotiation related
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
#define	SEC_QUERY	0x01	/* query sec modes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
struct sec_ol {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	int		sec_flags;	/* security nego flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	uint_t		sec_index;	/* index into sec flavor array */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
 * Per-mode flags (secinfo.s_flags)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#define	M_RO		0x01	/* exported ro to all */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
#define	M_ROL		0x02	/* exported ro to all listed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#define	M_RW		0x04	/* exported rw to all */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
#define	M_RWL		0x08	/* exported ro to all listed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
#define	M_ROOT		0x10	/* root list is defined */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
#define	M_4SEC_EXPORTED	0x20	/* this is an explicitly shared flavor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
/* invalid secinfo reference count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#define	SEC_REF_INVALID(p) ((p)->s_refcnt < 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
/* last secinfo reference */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
#define	SEC_REF_LAST(p) ((p)->s_refcnt == 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
/* sec flavor explicitly shared for the exported node */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	SEC_REF_EXPORTED(p) ((p)->s_flags & M_4SEC_EXPORTED)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
/* the only reference count left is for referring itself */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#define	SEC_REF_SELF(p) (SEC_REF_LAST(p) && SEC_REF_EXPORTED(p))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
 * The export information passed to exportfs() (Version 2)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
#define	EX_CURRENT_VERSION 2	/* current version of exportdata struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
struct exportdata {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	int		ex_version;	/* structure version */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
	char		*ex_path;	/* exported path */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	size_t		ex_pathlen;	/* path length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	int		ex_flags;	/* flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	unsigned int	ex_anon;	/* uid for unauthenticated requests */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	int		ex_seccnt;	/* count of security modes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	struct secinfo	*ex_secinfo;	/* security mode info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	char		*ex_index;	/* index file for public filesystem */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	char		*ex_log_buffer;	/* path to logging buffer file */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	size_t		ex_log_bufferlen;	/* buffer file path len */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	char		*ex_tag;	/* tag used to identify log config */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	size_t		ex_taglen;	/* tag length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
#ifdef _SYSCALL32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
struct exportdata32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	int32_t		ex_version;	/* structure version */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	caddr32_t	ex_path;	/* exported path */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	int32_t		ex_pathlen;	/* path length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	int32_t		ex_flags;	/* flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	uint32_t	ex_anon;	/* uid for unauthenticated requests */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	int32_t		ex_seccnt;	/* count of security modes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	caddr32_t	ex_secinfo;	/* security mode info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	caddr32_t	ex_index;	/* index file for public filesystem */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	caddr32_t	ex_log_buffer;	/* path to logging buffer file */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	int32_t		ex_log_bufferlen;	/* buffer file path len */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	caddr32_t	ex_tag;		/* tag used to identify log config */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	int32_t		ex_taglen;	/* tag length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
#endif /* _SYSCALL32 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
 * exported vfs flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	EX_NOSUID	0x01	/* exported with unsetable set[ug]ids */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
#define	EX_ACLOK	0x02	/* exported with maximal access if acl exists */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
#define	EX_PUBLIC	0x04	/* exported with public filehandle */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
#define	EX_NOSUB	0x08	/* no nfs_getfh or MCL below export point */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
#define	EX_INDEX	0x10	/* exported with index file specified */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
#define	EX_LOG		0x20	/* logging enabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
#define	EX_LOG_ALLOPS	0x40	/* logging of all RPC operations enabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
				/* by default only operations which affect */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
				/* transaction logging are enabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
#define	EX_PSEUDO	0x80	/* pseudo filesystem export */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
#ifdef VOLATILE_FH_TEST
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
#define	EX_VOLFH	0x100	/* XXX nfsv4 fh may expire anytime */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
#define	EX_VOLRNM	0x200	/* XXX nfsv4 fh expire at rename */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
#define	EX_VOLMIG	0x400	/* XXX nfsv4 fh expire at migration */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
#define	EX_NOEXPOPEN	0x800	/* XXX nfsv4 fh no expire with open */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
#endif /* VOLATILE_FH_TEST */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
#ifdef	_KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
#define	RPC_IDEMPOTENT	0x1	/* idempotent or not */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
 * Be very careful about which NFS procedures get the RPC_ALLOWANON bit.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
 * Right now, it this bit is on, we ignore the results of per NFS request
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
 * access control.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
#define	RPC_ALLOWANON	0x2	/* allow anonymous access */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
#define	RPC_MAPRESP	0x4	/* use mapped response buffer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
#define	RPC_AVOIDWORK	0x8	/* do work avoidance for dups */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
#define	RPC_PUBLICFH_OK	0x10	/* allow use of public filehandle */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
 * RPC_ALL is an or of all above bits to be used with "don't care"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
 * nfsv4 ops. The flags of an nfsv4 request is the bit-AND of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
 * per-op flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
#define	RPC_ALL	(RPC_IDEMPOTENT|RPC_ALLOWANON|RPC_AVOIDWORK|RPC_PUBLICFH_OK)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
#ifdef VOLATILE_FH_TEST
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
struct ex_vol_rename {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
	nfs_fh4_fmt_t vrn_fh_fmt;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	struct ex_vol_rename *vrn_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
#endif /* VOLATILE_FH_TEST */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
 * An authorization cache entry
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
struct auth_cache {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	struct netbuf		auth_addr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	int			auth_flavor;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	int			auth_access;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	time_t			auth_time;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	struct auth_cache	*auth_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
#define	AUTH_TABLESIZE	32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
 * Structure containing log file meta-data.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
struct log_file {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	unsigned int	lf_flags;	/* flags (see below) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	int		lf_writers;	/* outstanding writers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	int		lf_refcnt;	/* references to this struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	caddr_t		lf_path;	/* buffer file location */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	vnode_t		*lf_vp;		/* vnode for the buffer file */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	kmutex_t	lf_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	kcondvar_t	lf_cv_waiters;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
 * log_file and log_buffer flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
#define	L_WAITING	0x01		/* flush of in-core data to stable */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
					/* storage in progress */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
#define	L_PRINTED	0x02		/* error message printed to console */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
#define	L_ERROR		0x04		/* error condition detected */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
 * The logging buffer information.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
 * This structure may be shared by multiple exportinfo structures,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
 * if they share the same buffer file.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
 * This structure contains the basic information about the buffer, such
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
 * as it's location in the filesystem.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
 * 'lb_lock' protects all the fields in this structure except for 'lb_path',
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
 * and 'lb_next'.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
 * 'lb_path' is a write-once/read-many field which needs no locking, it is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
 * set before the structure is linked to any exportinfo structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
 * 'lb_next' is protected by the log_buffer_list_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
struct log_buffer {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	unsigned int	lb_flags;	/* L_ONLIST set? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
	int		lb_refcnt;	/* references to this struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	unsigned int	lb_rec_id;	/* used to generate unique id */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
	caddr_t		lb_path;	/* buffer file pathname */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	struct log_file	*lb_logfile;	/* points to log_file structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	kmutex_t	lb_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
	struct log_buffer	*lb_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	kcondvar_t	lb_cv_waiters;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
	caddr_t		lb_records;	/* linked list of records to write */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
	int		lb_num_recs;	/* # of records to write */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
	ssize_t		lb_size_queued; /* number of bytes queued for write */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
#define	LOG_BUFFER_HOLD(lbp)	{ \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	mutex_enter(&(lbp)->lb_lock); \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	(lbp)->lb_refcnt++; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	mutex_exit(&(lbp)->lb_lock); \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
#define	LOG_BUFFER_RELE(lbp)	{ \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	log_buffer_rele(lbp); \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
#define	EXPTABLESIZE	16
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
 * A node associated with an export entry on the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
 * list of exported filesystems.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
 * exi_count+exi_lock protects an individual exportinfo from being freed
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
 * when in use.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
 * You must have the writer lock on exported_lock to add/delete an exportinfo
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
 * structure to/from the list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
 * exi_volatile_dev maps to VSW_VOLATILEDEV.  It means that the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
 * underlying fs devno can change on each mount.  When set, the server
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
 * should not use va_fsid for a GETATTR(FATTR4_FSID) reply.  It must
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
 * use exi_fsid because it is guaranteed to be persistent.  This isn't
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
 * in any way related to NFS4 volatile filehandles.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
struct exportinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	struct exportdata	exi_export;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	fsid_t			exi_fsid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	struct fid		exi_fid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	struct exportinfo	*exi_hash;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	fhandle_t		exi_fh;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	krwlock_t		exi_cache_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	kmutex_t		exi_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	uint_t			exi_count;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	vnode_t			*exi_vp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	vnode_t			*exi_dvp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	struct auth_cache	*exi_cache[AUTH_TABLESIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	struct log_buffer	*exi_logbuffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
	struct exp_visible	*exi_visible;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
	unsigned		exi_volatile_dev:1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
#ifdef VOLATILE_FH_TEST
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
	uint32_t		exi_volatile_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
	struct ex_vol_rename	*exi_vol_rename;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	kmutex_t		exi_vol_rename_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
#endif /* VOLATILE_FH_TEST */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
 * exp_visible is a visible list per filesystem. It is for filesystems
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
 * that may need a limited view of its contents. A pseudo export and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
 * a real export at the mount point (VROOT) which has a subtree shared
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
 * has a visible list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
 * The exi_visible field is NULL for normal, non=pseudo filesystems
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
 * which do not have any subtree exported. If the field is non-null,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
 * it points to a list of visible entries, identified by vis_fid and/or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
 * vis_ino. The presence of a "visible" list means that if this export
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
 * can only have a limited view, it can only view the entries in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
 * exp_visible list. The directories in the fid list comprise paths that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
 * lead to exported directories.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
 * The vis_count field records the number of paths in this filesystem
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
 * that use this directory. The vis_exported field is non-zero if the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
 * entry is an exported directory (leaf node).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
struct exp_visible {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
	vnode_t			*vis_vp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
	fid_t			vis_fid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
	u_longlong_t		vis_ino;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
	int			vis_count;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	int			vis_exported;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	struct exp_visible	*vis_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
#define	PSEUDO(exi)	((exi)->exi_export.ex_flags & EX_PSEUDO)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
#define	EQFSID(fsidp1, fsidp2)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	(((fsidp1)->val[0] == (fsidp2)->val[0]) && \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
	    ((fsidp1)->val[1] == (fsidp2)->val[1]))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
#define	EQFID(fidp1, fidp2)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
	((fidp1)->fid_len == (fidp2)->fid_len && \
806
849fb015aa25 6337437 .zfs doesn't work over NFS
ek110237
parents: 0
diff changeset
   350
	    bcmp((char *)(fidp1)->fid_data, (char *)(fidp2)->fid_data, \
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	    (uint_t)(fidp1)->fid_len) == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
#define	exportmatch(exi, fsid, fid)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	(EQFSID(&(exi)->exi_fsid, (fsid)) && EQFID(&(exi)->exi_fid, (fid)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
 * Returns true iff exported filesystem is read-only to the given host.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
 * Note:  this macro should be as fast as possible since it's called
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
 * on each NFS modification request.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
#define	rdonly(exi, req)  (nfsauth_access(exi, req) & NFSAUTH_RO)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
#define	rdonly4(exi, vp, req)  \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	(vn_is_readonly(vp) || \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	    (nfsauth4_access(exi, vp, req) & (NFSAUTH_RO | NFSAUTH_LIMITED)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
extern int	nfsauth4_access(struct exportinfo *, vnode_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
				struct svc_req *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
extern int	nfsauth4_secinfo_access(struct exportinfo *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
				struct svc_req *, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
extern int	nfs_fhhash(fsid_t *, fid_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
extern int	nfs_fhbcmp(char *, char *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
extern int	nfs_exportinit(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
extern void	nfs_exportfini(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
extern int	chk_clnt_sec(struct exportinfo *, struct svc_req *req);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
extern int	makefh(fhandle_t *, struct vnode *, struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
extern int	makefh_ol(fhandle_t *, struct exportinfo *, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
extern int	makefh3(nfs_fh3 *, struct vnode *, struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
extern int	makefh3_ol(nfs_fh3 *, struct exportinfo *, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
extern vnode_t *nfs_fhtovp(fhandle_t *, struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
extern vnode_t *nfs3_fhtovp(nfs_fh3 *, struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
extern vnode_t *lm_fhtovp(fhandle_t *fh);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
extern vnode_t *lm_nfs3_fhtovp(nfs_fh3 *fh);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
extern struct	exportinfo *checkexport(fsid_t *, struct fid *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
extern struct	exportinfo *checkexport4(fsid_t *, struct fid *, vnode_t *vp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
extern void	exi_rele(struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
extern struct exportinfo *nfs_vptoexi(vnode_t *, vnode_t *, cred_t *, int *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
    int *, bool_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
extern int	nfs_check_vpexi(vnode_t *, vnode_t *, cred_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
			struct exportinfo **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
extern void	export_link(struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
extern int	export_unlink(fsid_t *, fid_t *, vnode_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
			struct exportinfo **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
extern vnode_t *untraverse(vnode_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
 * Functions that handle the NFSv4 server namespace
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
extern int	treeclimb_export(struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
extern int	treeclimb_unexport(struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
extern int	nfs_visible(struct exportinfo *, vnode_t *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
extern int	nfs_visible_inode(struct exportinfo *, ino64_t, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
extern int	has_visible(struct exportinfo *, vnode_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
extern void	free_visible(struct exp_visible *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
extern int	nfs_exported(struct exportinfo *, vnode_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
extern int	pseudo_exportfs(vnode_t *, struct exp_visible *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
					struct exportdata *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
extern int	vop_fid_pseudo(vnode_t *, fid_t *fidp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
extern int	nfs4_vget_pseudo(struct exportinfo *, vnode_t **, fid_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
 * Functions that handle the NFSv4 server namespace security flavors
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
 * information.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
extern void	srv_secinfo_exp2pseu(struct exportdata *, struct exportdata *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
 * "public" and default (root) location for public filehandle
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
extern struct exportinfo *exi_public, *exi_root;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
extern fhandle_t nullfh2;	/* for comparing V2 filehandles */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
extern krwlock_t exported_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
extern struct exportinfo *exptable[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
 * Two macros for identifying public filehandles.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
 * A v2 public filehandle is 32 zero bytes.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
 * A v3 public filehandle is zero length.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
#define	PUBLIC_FH2(fh) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	((fh)->fh_fsid.val[1] == 0 && \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
	bcmp((fh), &nullfh2, sizeof (fhandle_t)) == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
#define	PUBLIC_FH3(fh) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
	((fh)->fh3_length == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
extern int	makefh4(nfs_fh4 *, struct vnode *, struct exportinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
extern vnode_t *nfs4_fhtovp(nfs_fh4 *, struct exportinfo *, nfsstat4 *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
#endif /* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
#endif	/* _NFS_EXPORT_H */