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