| 1 | /* @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC */ |
| 2 | |
| 3 | /* |
| 4 | * Sun RPC is a product of Sun Microsystems, Inc. and is provided for |
| 5 | * unrestricted use provided that this legend is included on all tape |
| 6 | * media and as a part of the software program in whole or part. Users |
| 7 | * may copy or modify Sun RPC without charge, but are not authorized |
| 8 | * to license or distribute it to anyone else except as part of a product or |
| 9 | * program developed by the user. |
| 10 | * |
| 11 | * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE |
| 12 | * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR |
| 13 | * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. |
| 14 | * |
| 15 | * Sun RPC is provided with no support and without any obligation on the |
| 16 | * part of Sun Microsystems, Inc. to assist in its use, correction, |
| 17 | * modification or enhancement. |
| 18 | * |
| 19 | * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE |
| 20 | * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC |
| 21 | * OR ANY PART THEREOF. |
| 22 | * |
| 23 | * In no event will Sun Microsystems, Inc. be liable for any lost revenue |
| 24 | * or profits or other special, indirect and consequential damages, even if |
| 25 | * Sun has been advised of the possibility of such damages. |
| 26 | * |
| 27 | * Sun Microsystems, Inc. |
| 28 | * 2550 Garcia Avenue |
| 29 | * Mountain View, California 94043 |
| 30 | */ |
| 31 | |
| 32 | /* |
| 33 | * nfs_prot.x 1.2 87/10/12 |
| 34 | * Copyright 1987 Sun Microsystems, Inc. |
| 35 | */ |
| 36 | const NFS_PORT = 2049; |
| 37 | const NFS_MAXDATA = 8192; |
| 38 | const NFS_MAXPATHLEN = 1024; |
| 39 | const NFS_MAXNAMLEN = 255; |
| 40 | const NFS_FHSIZE = 32; |
| 41 | const NFS_COOKIESIZE = 4; |
| 42 | const NFS_FIFO_DEV = -1; /* size kludge for named pipes */ |
| 43 | |
| 44 | /* |
| 45 | * File types |
| 46 | */ |
| 47 | const NFSMODE_FMT = 0170000; /* type of file */ |
| 48 | const NFSMODE_DIR = 0040000; /* directory */ |
| 49 | const NFSMODE_CHR = 0020000; /* character special */ |
| 50 | const NFSMODE_BLK = 0060000; /* block special */ |
| 51 | const NFSMODE_REG = 0100000; /* regular */ |
| 52 | const NFSMODE_LNK = 0120000; /* symbolic link */ |
| 53 | const NFSMODE_SOCK = 0140000; /* socket */ |
| 54 | const NFSMODE_FIFO = 0010000; /* fifo */ |
| 55 | |
| 56 | /* |
| 57 | * Error status |
| 58 | */ |
| 59 | enum nfsstat { |
| 60 | NFS_OK= 0, /* no error */ |
| 61 | NFSERR_PERM=1, /* Not owner */ |
| 62 | NFSERR_NOENT=2, /* No such file or directory */ |
| 63 | NFSERR_IO=5, /* I/O error */ |
| 64 | NFSERR_NXIO=6, /* No such device or address */ |
| 65 | NFSERR_ACCES=13, /* Permission denied */ |
| 66 | NFSERR_EXIST=17, /* File exists */ |
| 67 | NFSERR_NODEV=19, /* No such device */ |
| 68 | NFSERR_NOTDIR=20, /* Not a directory*/ |
| 69 | NFSERR_ISDIR=21, /* Is a directory */ |
| 70 | NFSERR_FBIG=27, /* File too large */ |
| 71 | NFSERR_NOSPC=28, /* No space left on device */ |
| 72 | NFSERR_ROFS=30, /* Read-only file system */ |
| 73 | NFSERR_NAMETOOLONG=63, /* File name too long */ |
| 74 | NFSERR_NOTEMPTY=66, /* Directory not empty */ |
| 75 | NFSERR_DQUOT=69, /* Disc quota exceeded */ |
| 76 | NFSERR_STALE=70, /* Stale NFS file handle */ |
| 77 | NFSERR_WFLUSH=99 /* write cache flushed */ |
| 78 | }; |
| 79 | |
| 80 | /* |
| 81 | * File types |
| 82 | */ |
| 83 | enum ftype { |
| 84 | NFNON = 0, /* non-file */ |
| 85 | NFREG = 1, /* regular file */ |
| 86 | NFDIR = 2, /* directory */ |
| 87 | NFBLK = 3, /* block special */ |
| 88 | NFCHR = 4, /* character special */ |
| 89 | NFLNK = 5, /* symbolic link */ |
| 90 | NFSOCK = 6, /* unix domain sockets */ |
| 91 | NFBAD = 7, /* unused */ |
| 92 | NFFIFO = 8 /* named pipe */ |
| 93 | }; |
| 94 | |
| 95 | /* |
| 96 | * File access handle |
| 97 | */ |
| 98 | struct nfs_fh { |
| 99 | opaque data[NFS_FHSIZE]; |
| 100 | }; |
| 101 | |
| 102 | /* |
| 103 | * Timeval |
| 104 | */ |
| 105 | struct nfstime { |
| 106 | unsigned seconds; |
| 107 | unsigned useconds; |
| 108 | }; |
| 109 | |
| 110 | |
| 111 | /* |
| 112 | * File attributes |
| 113 | */ |
| 114 | struct fattr { |
| 115 | ftype type; /* file type */ |
| 116 | unsigned mode; /* protection mode bits */ |
| 117 | unsigned nlink; /* # hard links */ |
| 118 | unsigned uid; /* owner user id */ |
| 119 | unsigned gid; /* owner group id */ |
| 120 | unsigned size; /* file size in bytes */ |
| 121 | unsigned blocksize; /* prefered block size */ |
| 122 | unsigned rdev; /* special device # */ |
| 123 | unsigned blocks; /* Kb of disk used by file */ |
| 124 | unsigned fsid; /* device # */ |
| 125 | unsigned fileid; /* inode # */ |
| 126 | nfstime atime; /* time of last access */ |
| 127 | nfstime mtime; /* time of last modification */ |
| 128 | nfstime ctime; /* time of last change */ |
| 129 | }; |
| 130 | |
| 131 | /* |
| 132 | * File attributes which can be set |
| 133 | */ |
| 134 | struct sattr { |
| 135 | unsigned mode; /* protection mode bits */ |
| 136 | unsigned uid; /* owner user id */ |
| 137 | unsigned gid; /* owner group id */ |
| 138 | unsigned size; /* file size in bytes */ |
| 139 | nfstime atime; /* time of last access */ |
| 140 | nfstime mtime; /* time of last modification */ |
| 141 | }; |
| 142 | |
| 143 | |
| 144 | typedef string filename<NFS_MAXNAMLEN>; |
| 145 | typedef string nfspath<NFS_MAXPATHLEN>; |
| 146 | |
| 147 | /* |
| 148 | * Reply status with file attributes |
| 149 | */ |
| 150 | union attrstat switch (nfsstat status) { |
| 151 | case NFS_OK: |
| 152 | fattr attributes; |
| 153 | default: |
| 154 | void; |
| 155 | }; |
| 156 | |
| 157 | struct sattrargs { |
| 158 | nfs_fh file; |
| 159 | sattr attributes; |
| 160 | }; |
| 161 | |
| 162 | /* |
| 163 | * Arguments for directory operations |
| 164 | */ |
| 165 | struct diropargs { |
| 166 | nfs_fh dir; /* directory file handle */ |
| 167 | filename name; /* name (up to NFS_MAXNAMLEN bytes) */ |
| 168 | }; |
| 169 | |
| 170 | struct diropokres { |
| 171 | nfs_fh file; |
| 172 | fattr attributes; |
| 173 | }; |
| 174 | |
| 175 | /* |
| 176 | * Results from directory operation |
| 177 | */ |
| 178 | union diropres switch (nfsstat status) { |
| 179 | case NFS_OK: |
| 180 | diropokres diropres; |
| 181 | default: |
| 182 | void; |
| 183 | }; |
| 184 | |
| 185 | union readlinkres switch (nfsstat status) { |
| 186 | case NFS_OK: |
| 187 | nfspath data; |
| 188 | default: |
| 189 | void; |
| 190 | }; |
| 191 | |
| 192 | /* |
| 193 | * Arguments to remote read |
| 194 | */ |
| 195 | struct readargs { |
| 196 | nfs_fh file; /* handle for file */ |
| 197 | unsigned offset; /* byte offset in file */ |
| 198 | unsigned count; /* immediate read count */ |
| 199 | unsigned totalcount; /* total read count (from this offset)*/ |
| 200 | }; |
| 201 | |
| 202 | /* |
| 203 | * Status OK portion of remote read reply |
| 204 | */ |
| 205 | struct readokres { |
| 206 | fattr attributes; /* attributes, need for pagin*/ |
| 207 | opaque data<NFS_MAXDATA>; |
| 208 | }; |
| 209 | |
| 210 | union readres switch (nfsstat status) { |
| 211 | case NFS_OK: |
| 212 | readokres reply; |
| 213 | default: |
| 214 | void; |
| 215 | }; |
| 216 | |
| 217 | /* |
| 218 | * Arguments to remote write |
| 219 | */ |
| 220 | struct writeargs { |
| 221 | nfs_fh file; /* handle for file */ |
| 222 | unsigned beginoffset; /* beginning byte offset in file */ |
| 223 | unsigned offset; /* current byte offset in file */ |
| 224 | unsigned totalcount; /* total write count (to this offset)*/ |
| 225 | opaque data<NFS_MAXDATA>; |
| 226 | }; |
| 227 | |
| 228 | struct createargs { |
| 229 | diropargs where; |
| 230 | sattr attributes; |
| 231 | }; |
| 232 | |
| 233 | struct renameargs { |
| 234 | diropargs from; |
| 235 | diropargs to; |
| 236 | }; |
| 237 | |
| 238 | struct linkargs { |
| 239 | nfs_fh from; |
| 240 | diropargs to; |
| 241 | }; |
| 242 | |
| 243 | struct symlinkargs { |
| 244 | diropargs from; |
| 245 | nfspath to; |
| 246 | sattr attributes; |
| 247 | }; |
| 248 | |
| 249 | |
| 250 | typedef opaque nfscookie[NFS_COOKIESIZE]; |
| 251 | |
| 252 | /* |
| 253 | * Arguments to readdir |
| 254 | */ |
| 255 | struct readdirargs { |
| 256 | nfs_fh dir; /* directory handle */ |
| 257 | nfscookie cookie; |
| 258 | unsigned count; /* number of directory bytes to read */ |
| 259 | }; |
| 260 | |
| 261 | struct entry { |
| 262 | unsigned fileid; |
| 263 | filename name; |
| 264 | nfscookie cookie; |
| 265 | entry *nextentry; |
| 266 | }; |
| 267 | |
| 268 | struct dirlist { |
| 269 | entry *entries; |
| 270 | bool eof; |
| 271 | }; |
| 272 | |
| 273 | union readdirres switch (nfsstat status) { |
| 274 | case NFS_OK: |
| 275 | dirlist reply; |
| 276 | default: |
| 277 | void; |
| 278 | }; |
| 279 | |
| 280 | struct statfsokres { |
| 281 | unsigned tsize; /* preferred transfer size in bytes */ |
| 282 | unsigned bsize; /* fundamental file system block size */ |
| 283 | unsigned blocks; /* total blocks in file system */ |
| 284 | unsigned bfree; /* free blocks in fs */ |
| 285 | unsigned bavail; /* free blocks avail to non-superuser */ |
| 286 | }; |
| 287 | |
| 288 | union statfsres switch (nfsstat status) { |
| 289 | case NFS_OK: |
| 290 | statfsokres reply; |
| 291 | default: |
| 292 | void; |
| 293 | }; |
| 294 | |
| 295 | /* |
| 296 | * Remote file service routines |
| 297 | */ |
| 298 | program NFS_PROGRAM { |
| 299 | version NFS_VERSION { |
| 300 | void |
| 301 | NFSPROC_NULL(void) = 0; |
| 302 | |
| 303 | attrstat |
| 304 | NFSPROC_GETATTR(nfs_fh) = 1; |
| 305 | |
| 306 | attrstat |
| 307 | NFSPROC_SETATTR(sattrargs) = 2; |
| 308 | |
| 309 | void |
| 310 | NFSPROC_ROOT(void) = 3; |
| 311 | |
| 312 | diropres |
| 313 | NFSPROC_LOOKUP(diropargs) = 4; |
| 314 | |
| 315 | readlinkres |
| 316 | NFSPROC_READLINK(nfs_fh) = 5; |
| 317 | |
| 318 | readres |
| 319 | NFSPROC_READ(readargs) = 6; |
| 320 | |
| 321 | void |
| 322 | NFSPROC_WRITECACHE(void) = 7; |
| 323 | |
| 324 | attrstat |
| 325 | NFSPROC_WRITE(writeargs) = 8; |
| 326 | |
| 327 | diropres |
| 328 | NFSPROC_CREATE(createargs) = 9; |
| 329 | |
| 330 | nfsstat |
| 331 | NFSPROC_REMOVE(diropargs) = 10; |
| 332 | |
| 333 | nfsstat |
| 334 | NFSPROC_RENAME(renameargs) = 11; |
| 335 | |
| 336 | nfsstat |
| 337 | NFSPROC_LINK(linkargs) = 12; |
| 338 | |
| 339 | nfsstat |
| 340 | NFSPROC_SYMLINK(symlinkargs) = 13; |
| 341 | |
| 342 | diropres |
| 343 | NFSPROC_MKDIR(createargs) = 14; |
| 344 | |
| 345 | nfsstat |
| 346 | NFSPROC_RMDIR(diropargs) = 15; |
| 347 | |
| 348 | readdirres |
| 349 | NFSPROC_READDIR(readdirargs) = 16; |
| 350 | |
| 351 | statfsres |
| 352 | NFSPROC_STATFS(nfs_fh) = 17; |
| 353 | } = 2; |
| 354 | } = 100003; |
| 355 | |