/*
* Copyright (c) 2010-2011 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*
* nfs_sys_prot.x
*/
/*
* Basic typedefs for RFC 1832 data type definitions
*/
typedef int int32_t;
typedef unsigned int uint32_t;
/*
* Basic data types
*/
typedef uint32_t bitmap<>;
typedef opaque utf8string<>;
typedef utf8string utf8str_cis;
typedef utf8string utf8str_cs;
typedef utf8str_cs component;
typedef component pathname<>;
typedef opaque attrlist<>;
/* timespec */
struct nfstime32 {
int32_t seconds;
uint32_t nseconds;
};
/* a set of flags: which ones are set and what they are set to */
struct nfs_flag_set {
bitmap mask; /* which flags are valid */
bitmap value; /* what each flag is set to */
};
/* values for MATTR_LOCK_MODE */
enum nfs_lock_mode {
NFS_LOCK_MODE_ENABLED = 0,
NFS_LOCK_MODE_DISABLED = 1,
NFS_LOCK_MODE_LOCAL = 2
};
/*
* Filesystem locations attributes.
*
* This structure closely resembles the fs_locations and
* fs_locations_info structures in NFSv4.
*
* An NFS file system can have multiple locations.
* Each location consists of one or more servers that have
* the file system available at a given server-side pathname.
* Each server has a name and a list of addresses.
*
* The *_info elements are optional. If they are included the
* length of the element will be non-zero and the contents will
* be described by the corresponding _info structure.
*/
struct nfs_fs_server_info {
int32_t nfssi_currency;
opaque nfssi_info<>;
};
struct nfs_fs_server {
utf8str_cis nfss_name;
utf8str_cis nfss_address<>; /* universal addresses */
opaque nfss_server_info<>; /* optional, contents described by nfs_fs_server_info */
};
struct nfs_fs_location {
nfs_fs_server nfsl_server<>;
pathname nfsl_rootpath;
};
struct nfs_fs_locations_info {
uint32_t nfsli_flags;
int32_t nfsli_valid_for;
pathname nfsli_root;
};
struct nfs_fs_locations {
nfs_fs_location nfsl_location<>;
opaque nfsl_locations_info<>; /* optional, contents described by nfs_fs_locations_info */
};
/* NFS mount attribute container */
struct nfs_mattr {
bitmap attrmask;
attrlist attr_vals;
};
/* miscellaneous constants */
const NFS_XDRARGS_VERSION_0 = 0; /* nfs_mount_args version */
const NFS_MATTR_BITMAP_LEN = 1; /* # XDR words in mount attributes bitmap */
const NFS_MFLAG_BITMAP_LEN = 1; /* # XDR words in mount flags bitmap */
/*
* Mount attributes
*
* Additional mount attribute notes:
*
* Time value attributes are specified in second.nanosecond format but
* mount arguments may be rounded to a more appropriate unit/increment.
*
* The supported string values for NFS_MATTR_SOCKET_TYPE:
* tcp - use TCP over IPv4 or IPv6
* udp - use UDP over IPv4 or IPv6
* tcp6 - use TCP over IPv6 only
* udp6 - use UDP over IPv6 only
* tcp4 - use TCP over IPv4 only
* udp4 - use UDP over IPv4 only
* inet - use TCP or UDP over IPv4 or IPv6
* inet4 - use TCP or UDP over IPv4 only
* inet6 - use TCP or UDP over IPv6 only
*/
/* mount attribute types */
typedef nfs_flag_set nfs_mattr_flags;
typedef uint32_t nfs_mattr_nfs_version;
typedef uint32_t nfs_mattr_nfs_minor_version;
typedef uint32_t nfs_mattr_rsize;
typedef uint32_t nfs_mattr_wsize;
typedef uint32_t nfs_mattr_readdirsize;
typedef uint32_t nfs_mattr_readahead;
typedef nfstime32 nfs_mattr_acregmin;
typedef nfstime32 nfs_mattr_acregmax;
typedef nfstime32 nfs_mattr_acdirmin;
typedef nfstime32 nfs_mattr_acdirmax;
typedef nfs_lock_mode nfs_mattr_lock_mode;
typedef uint32_t nfs_mattr_security<>;
typedef uint32_t nfs_mattr_maxgrouplist;
typedef string nfs_mattr_socket_type<>;
typedef uint32_t nfs_mattr_nfs_port;
typedef uint32_t nfs_mattr_mount_port;
typedef nfstime32 nfs_mattr_request_timeout;
typedef uint32_t nfs_mattr_soft_retry_count;
typedef nfstime32 nfs_mattr_dead_timeout;
typedef opaque nfs_mattr_fh<NFS4_FHSIZE>;
typedef nfs_fs_locations nfs_mattr_fs_locations;
typedef uint32_t nfs_mattr_mntflags;
typedef string nfs_mattr_mntfrom<MAXPATHLEN-1>;
/* mount attribute bitmap indices */
const NFS_MATTR_FLAGS = 0; /* mount flags bitmap (MFLAG_*) */
const NFS_MATTR_NFS_VERSION = 1; /* NFS protocol version */
const NFS_MATTR_NFS_MINOR_VERSION = 2; /* NFS protocol minor version */
const NFS_MATTR_READ_SIZE = 3; /* READ RPC size */
const NFS_MATTR_WRITE_SIZE = 4; /* WRITE RPC size */
const NFS_MATTR_READDIR_SIZE = 5; /* READDIR RPC size */
const NFS_MATTR_READAHEAD = 6; /* block readahead count */
const NFS_MATTR_ATTRCACHE_REG_MIN = 7; /* minimum attribute cache time */
const NFS_MATTR_ATTRCACHE_REG_MAX = 8; /* maximum attribute cache time */
const NFS_MATTR_ATTRCACHE_DIR_MIN = 9; /* minimum attribute cache time for directories */
const NFS_MATTR_ATTRCACHE_DIR_MAX = 10; /* maximum attribute cache time for directories */
const NFS_MATTR_LOCK_MODE = 11; /* advisory file locking mode (nfs_lock_mode) */
const NFS_MATTR_SECURITY = 12; /* RPC security flavors to use */
const NFS_MATTR_MAX_GROUP_LIST = 13; /* max # of RPC AUTH_SYS groups */
const NFS_MATTR_SOCKET_TYPE = 14; /* socket transport type as a netid-like string */
const NFS_MATTR_NFS_PORT = 15; /* port # to use for NFS protocol */
const NFS_MATTR_MOUNT_PORT = 16; /* port # to use for MOUNT protocol */
const NFS_MATTR_REQUEST_TIMEOUT = 17; /* initial RPC request timeout value */
const NFS_MATTR_SOFT_RETRY_COUNT = 18; /* max RPC retransmissions for soft mounts */
const NFS_MATTR_DEAD_TIMEOUT = 19; /* how long until unresponsive mount is considered dead */
const NFS_MATTR_FH = 20; /* file handle for mount directory */
const NFS_MATTR_FS_LOCATIONS = 21; /* list of locations for the file system */
const NFS_MATTR_MNTFLAGS = 22; /* VFS mount flags (MNT_*) */
const NFS_MATTR_MNTFROM = 23; /* fixed string to use for "f_mntfromname" */
/*
* Mount flags
*/
const NFS_MFLAG_SOFT = 0; /* soft mount (requests fail if unresponsive) */
const NFS_MFLAG_INTR = 1; /* allow operations to be interrupted */
const NFS_MFLAG_RESVPORT = 2; /* use a reserved port */
const NFS_MFLAG_NOCONNECT = 3; /* don't connect the socket (UDP) */
const NFS_MFLAG_DUMBTIMER = 4; /* don't estimate RTT dynamically */
const NFS_MFLAG_CALLUMNT = 5; /* call MOUNTPROC_UMNT on unmount */
const NFS_MFLAG_RDIRPLUS = 6; /* request additional info when reading directories */
const NFS_MFLAG_NONEGNAMECACHE = 7; /* don't do negative name caching */
const NFS_MFLAG_MUTEJUKEBOX = 8; /* don't treat jukebox errors as unresponsive */
const NFS_MFLAG_EPHEMERAL = 9; /* ephemeral (mirror) mount */
const NFS_MFLAG_NOCALLBACK = 10; /* don't provide callback RPC service */
const NFS_MFLAG_NONAMEDATTR = 11; /* don't use named attributes */
const NFS_MFLAG_NOACL = 12; /* don't support ACLs */
const NFS_MFLAG_ACLONLY = 13; /* only support ACLs - not mode */
const NFS_MFLAG_NFC = 14; /* send NFC strings */
const NFS_MFLAG_NOQUOTA = 15; /* don't support QUOTA requests */
const NFS_MFLAG_MNTUDP = 16; /* MOUNT protocol should use UDP */
const NFS_MFLAG_MNTQUICK = 17; /* use short timeouts while mounting */
/*
* Arguments to mount an NFS file system
*
* Format of the buffer passed to NFS in the mount(2) system call.
*/
struct nfs_mount_args {
uint32_t args_version; /* NFS_ARGSVERSION_XDR = 88 */
uint32_t args_length; /* length of the entire nfs_mount_args structure */
uint32_t xdr_args_version; /* version of nfs_mount_args structure */
nfs_mattr nfs_mount_attrs; /* mount information */
};
/*
* Mount Info attributes
*/
/* mount info attribute types */
typedef nfs_flag_set nfs_miattr_flags;
typedef uint32_t nfs_miattr_cur_loc_index[4];
/* mount info attribute bitmap indices */
const NFS_MIATTR_FLAGS = 0; /* mount info flags bitmap (MIFLAG_*) */
const NFS_MIATTR_ORIG_ARGS = 1; /* original mount args passed into mount call */
const NFS_MIATTR_CUR_ARGS = 2; /* current mount args values */
const NFS_MIATTR_CUR_LOC_INDEX = 3; /* current fs location index */
/*
* Mount Info flags
*/
const NFS_MIFLAG_DEAD = 0; /* mount is dead */
const NFS_MIFLAG_NOTRESP = 1; /* server is unresponsive */
const NFS_MIFLAG_RECOVERY = 2; /* mount in recovery */
/* NFS mount info attribute container */
struct nfs_miattr {
bitmap attrmask;
attrlist attr_vals;
};
/* miscellaneous constants */
const NFS_MOUNT_INFO_VERSION = 0; /* nfs_mount_info version */
const NFS_MIATTR_BITMAP_LEN = 1; /* # XDR words in mount info attributes bitmap */
const NFS_MIFLAG_BITMAP_LEN = 1; /* # XDR words in mount info flags bitmap */
/*
* NFS mount information as returned by NFS_MOUNTINFO sysctl.
*/
struct nfs_mount_info {
uint32_t info_version; /* NFS_MOUNT_INFO_VERSION = 0 */
uint32_t info_length; /* length of the entire nfs_mount_info structure */
nfs_miattr nfs_mountinfo_attrs; /* mount information attributes */
};