Home | History | Annotate | Line # | Download | only in nfs_prot
      1 /*	$NetBSD: nfs_prot_linux.h,v 1.1.1.3 2015/01/17 16:34:16 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1997-2014 Erez Zadok
      5  * Copyright (c) 1990 Jan-Simon Pendry
      6  * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
      7  * Copyright (c) 1990 The Regents of the University of California.
      8  * All rights reserved.
      9  *
     10  * This code is derived from software contributed to Berkeley by
     11  * Jan-Simon Pendry at Imperial College, London.
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted provided that the following conditions
     15  * are met:
     16  * 1. Redistributions of source code must retain the above copyright
     17  *    notice, this list of conditions and the following disclaimer.
     18  * 2. Redistributions in binary form must reproduce the above copyright
     19  *    notice, this list of conditions and the following disclaimer in the
     20  *    documentation and/or other materials provided with the distribution.
     21  * 3. Neither the name of the University nor the names of its contributors
     22  *    may be used to endorse or promote products derived from this software
     23  *    without specific prior written permission.
     24  *
     25  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     35  * SUCH DAMAGE.
     36  *
     37  *
     38  * File: am-utils/conf/nfs_prot/nfs_prot_linux.h
     39  *
     40  */
     41 
     42 #ifndef _AMU_NFS_PROT_H
     43 #define _AMU_NFS_PROT_H
     44 
     45 #ifdef HAVE_RPCSVC_NFS_PROT_H
     46 # include <rpcsvc/nfs_prot.h>
     47 #endif /* HAVE_RPCSVC_NFS_PROT_H */
     48 
     49 /*
     50  * Hard-code support for some file systems so the built amd
     51  * binary can always run them.  Also, this helps detection of iso9660
     52  * file system for which the module isn't named as the file system mount
     53  * name.
     54  */
     55 #include <linux/version.h>
     56 #ifndef KERNEL_VERSION
     57 # define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
     58 #endif /* not KERNEL_VERSION */
     59 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
     60 # ifndef MS_BIND
     61 #  define MS_BIND 4096
     62 # endif /* not MS_BIND */
     63 
     64 # ifndef MNTTYPE_LOFS
     65 #  define MNTTYPE_LOFS "bind"
     66 # endif /* not MNTTYPE_LOFS */
     67 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
     68 
     69 #ifndef MNTTYPE_ISO9660
     70 # define MNTTYPE_ISO9660 "iso9660"
     71 #endif /* not MNTTYPE_ISO9660 */
     72 
     73 #ifndef FHSIZE
     74 # define FHSIZE 32
     75 #endif /* not FHSIZE */
     76 #ifndef FHSIZE3
     77 # define FHSIZE3 64
     78 #endif /* not FHSIZE3 */
     79 
     80 #ifdef HAVE_FS_NFS3
     81 #ifndef MNTTYPE_NFS3
     82 # define MNTTYPE_NFS3	"nfs"
     83 #endif /* not MNTTYPE_NFS3 */
     84 #endif /* HAVE_FS_NFS3 */
     85 
     86 /*
     87  * These two force/lazy unmount flags are sometimes missing from some linux
     88  * systems' headers.
     89  */
     90 #ifdef HAVE_UMOUNT2
     91 # ifndef MNT_FORCE
     92 #  define MNT_FORCE	0x1	/* from <sys/mount.h> */
     93 # endif /* not MNT_FORCE */
     94 # ifndef MNT_DETACH
     95 #  define MNT_DETACH	0x2	/* from kernel <linux/fs.h> */
     96 # endif /* not MNT_DETACH */
     97 #endif /* HAVE_UMOUNT2 */
     98 
     99 /* XXX: hack until we have a better way to detect /dev/loop devices */
    100 #ifdef HAVE_LINUX_LOOP_H
    101 # define HAVE_LOOP_DEVICE
    102 extern char *setup_loop_device(const char *file);
    103 extern int delete_loop_device(const char *device);
    104 #endif /* HAVE_LINUX_LOOP_H */
    105 
    106 
    107 /*
    108  * MACROS:
    109  */
    110 #define	dr_drok_u	diropres
    111 #define ca_attributes	attributes
    112 #define ca_where	where
    113 #define da_fhandle	dir
    114 #define da_name		name
    115 #define dl_entries	entries
    116 #define dl_eof		eof
    117 #define dr_status	status
    118 #define dr_u		diropres_u
    119 #define drok_attributes	attributes
    120 #define drok_fhandle	file
    121 #define fh_data		data
    122 #define fhsize		root.size
    123 #define la_fhandle	from
    124 #define la_to		to
    125 #define na_atime	atime
    126 #define na_blocks	blocks
    127 #define na_blocksize	blocksize
    128 #define na_ctime	ctime
    129 #define na_fileid	fileid
    130 #define na_fsid		fsid
    131 #define na_gid		gid
    132 #define na_mode		mode
    133 #define na_mtime	mtime
    134 #define na_nlink	nlink
    135 #define na_rdev		rdev
    136 #define na_size		size
    137 #define na_type		type
    138 #define na_uid		uid
    139 #define ne_cookie	cookie
    140 #define ne_fileid	fileid
    141 #define ne_name		name
    142 #define ne_nextentry	nextentry
    143 #define ns_attr_u	attributes
    144 #define ns_status	status
    145 #define ns_u		attrstat_u
    146 #define nt_seconds	seconds
    147 #define nt_useconds	useconds
    148 #define ra_count	count
    149 #define ra_fhandle	file
    150 #define ra_offset	offset
    151 #define ra_totalcount	totalcount
    152 #define raok_attributes	attributes
    153 #define raok_len_u	data_len
    154 #define raok_u		data
    155 #define raok_val_u	data_val
    156 #define rda_cookie	cookie
    157 #define rda_count	count
    158 #define rda_fhandle	dir
    159 #define rdr_reply_u	reply
    160 #define rdr_status	status
    161 #define rdr_u		readdirres_u
    162 #define rlr_data_u	data
    163 #define rlr_status	status
    164 #define rlr_u		readlinkres_u
    165 #define rna_from	from
    166 #define rna_to		to
    167 #define rr_reply_u	reply
    168 #define rr_status	status
    169 #define rr_u		readres_u
    170 #define sa_atime	atime
    171 #define sa_gid		gid
    172 #define sa_mode		mode
    173 #define sa_mtime	mtime
    174 #define sa_size		size
    175 #define sa_uid		uid
    176 #define sag_attributes	attributes
    177 #define sag_fhandle	file
    178 #define sfr_reply_u	reply
    179 #define sfr_status	status
    180 #define sfr_u		statfsres_u
    181 #define sfrok_bavail	bavail
    182 #define sfrok_bfree	bfree
    183 #define sfrok_blocks	blocks
    184 #define sfrok_bsize	bsize
    185 #define sfrok_tsize	tsize
    186 #define sla_attributes	attributes
    187 #define sla_from	from
    188 #define sla_to		to
    189 #define wra_beginoffset	beginoffset
    190 #define wra_fhandle	file
    191 #define wra_len_u	data_len
    192 #define wra_offset	offset
    193 #define wra_totalcount	totalcount
    194 #define wra_u		data
    195 #define wra_val_u	data_val
    196 
    197 
    198 /*
    199  * TYPEDEFS:
    200  */
    201 typedef attrstat	nfsattrstat;
    202 typedef createargs	nfscreateargs;
    203 typedef dirlist		nfsdirlist;
    204 typedef diropargs	nfsdiropargs;
    205 typedef diropokres	nfsdiropokres;
    206 typedef diropres	nfsdiropres;
    207 typedef entry		nfsentry;
    208 typedef fattr		nfsfattr;
    209 typedef ftype		nfsftype;
    210 typedef linkargs	nfslinkargs;
    211 typedef readargs	nfsreadargs;
    212 typedef readdirargs	nfsreaddirargs;
    213 typedef readdirres	nfsreaddirres;
    214 typedef readlinkres	nfsreadlinkres;
    215 typedef readokres	nfsreadokres;
    216 typedef readres		nfsreadres;
    217 typedef renameargs	nfsrenameargs;
    218 typedef sattr		nfssattr;
    219 typedef sattrargs	nfssattrargs;
    220 typedef statfsokres	nfsstatfsokres;
    221 typedef statfsres	nfsstatfsres;
    222 typedef symlinkargs	nfssymlinkargs;
    223 typedef writeargs	nfswriteargs;
    224 
    225 /* Autofs trick */
    226 typedef int autofs_args_t;
    227 
    228 /*
    229  * We use our own definitions here, because the definitions in the
    230  * kernel change the API (though not the ABI) *way* too often.
    231  */
    232 #undef nfs_args_t
    233 struct nfs2_fh {
    234   char		data[FHSIZE];
    235 };
    236 
    237 struct nfs3_fh {
    238   u_short	size;
    239   u_char	data[FHSIZE3];
    240 };
    241 
    242 struct nfs_args {
    243   int			version;	/* 1 */
    244   int			fd;		/* 1 */
    245   struct nfs2_fh	old_root;	/* 1 */
    246   int			flags;		/* 1 */
    247   int			rsize;		/* 1 */
    248   int			wsize;		/* 1 */
    249   int			timeo;		/* 1 */
    250   int			retrans;	/* 1 */
    251   int			acregmin;	/* 1 */
    252   int			acregmax;	/* 1 */
    253   int			acdirmin;	/* 1 */
    254   int			acdirmax;	/* 1 */
    255   struct sockaddr_in	addr;		/* 1 */
    256   char			hostname[256];	/* 1 */
    257   int			namlen;		/* 2 */
    258   unsigned int		bsize;		/* 3 */
    259   struct nfs3_fh	root;		/* 4 */
    260   int			pseudoflavor;	/* 5 */
    261   char			context[256 + 1];/* 6 */
    262 };
    263 typedef struct nfs_args nfs_args_t;
    264 
    265 #define	NFS4_MOUNT_VERSION	1
    266 
    267 struct nfs_string {
    268   unsigned int len;
    269   char *data;
    270 };
    271 
    272 struct nfs4_args {
    273   int 			version;	/* 1 */
    274   int			flags;		/* 1 */
    275   int			rsize;		/* 1 */
    276   int			wsize;		/* 1 */
    277   int			timeo;		/* 1 */
    278   int			retrans;	/* 1 */
    279   int			acregmin;	/* 1 */
    280   int			acregmax;	/* 1 */
    281   int			acdirmin;	/* 1 */
    282   int			acdirmax;	/* 1 */
    283   struct nfs_string	client_addr;	/* 1 */
    284   struct nfs_string	mnt_path;	/* 1 */
    285   struct nfs_string	hostname;	/* 1 */
    286   unsigned int		host_addrlen;	/* 1 */
    287   struct sockaddr      *host_addr;	/* 1 */
    288   int 			proto;		/* 1 */
    289   int 			auth_flavourlen;/* 1 */
    290   int 		       *auth_flavours;	/* 1 */
    291 };
    292 
    293 typedef struct nfs4_args nfs4_args_t;
    294 
    295 /* HACK: these are not defined on Linux but we still need them
    296  * internally.  We have to be able to differentiate between having a
    297  * timeout value set to zero and not having the option at all. These
    298  * flags are masked off before passing the nfs_args structure to
    299  * mount2() */
    300 
    301 #define MNT2_NFS_OPT_ACREGMIN 0x10000
    302 #define MNT2_NFS_OPT_ACREGMAX 0x20000
    303 #define MNT2_NFS_OPT_ACDIRMIN 0x40000
    304 #define MNT2_NFS_OPT_ACDIRMAX 0x80000
    305 #define MNT2_NFS_OPT_FLAGMASK 0xFFFF
    306 
    307 /*
    308  * Missing definitions on redhat alpha linux
    309  */
    310 #ifdef _SELECTBITS_H
    311 # ifndef __FD_ZERO
    312 /* This line MUST be split!  Otherwise m4 will not change it.  */
    313 #  define __FD_ZERO(set)  \
    314   ((void) memset ((__ptr_t) (set), 0, sizeof(fd_set)))
    315 # endif /* not __FD_ZERO */
    316 # ifndef __FD_SET
    317 #  define __FD_SET(d, set)        ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
    318 # endif /* not __FD_SET */
    319 # ifndef __FD_CLR
    320 #  define __FD_CLR(d, set)        ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
    321 # endif /* not __FD_CLR */
    322 # ifndef __FD_ISSET
    323 #  define __FD_ISSET(d, set)      ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
    324 # endif /* not __FD_ISSET */
    325 
    326 #endif /* _SELECTBITS_H */
    327 
    328 /* turn off this (b/c of hlfsd) */
    329 #undef HAVE_RPC_AUTH_DES_H
    330 
    331 extern int linux_version_code();
    332 /* use a private mapper from errno's to NFS errors */
    333 extern int linux_nfs_error(int e);
    334 #define nfs_error(e)	linux_nfs_error(e)
    335 
    336 #endif /* not _AMU_NFS_PROT_H */
    337