blob: 026a155abc2a1cd30da20dc2f6c1b005a2453407 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _NFS4_ATTR_H
#define _NFS4_ATTR_H
#ifdef __cplusplus
extern "C" {
#endif
#define FATTR4_WORD0 32
#define FATTR4_WORD1 0
/*
* Attributes
*/
#define FATTR4_SUPPORTED_ATTRS_MASK (1ULL << (FATTR4_WORD0 + 0))
#define FATTR4_TYPE_MASK (1ULL << (FATTR4_WORD0 + 1))
#define FATTR4_FH_EXPIRE_TYPE_MASK (1ULL << (FATTR4_WORD0 + 2))
#define FATTR4_CHANGE_MASK (1ULL << (FATTR4_WORD0 + 3))
#define FATTR4_SIZE_MASK (1ULL << (FATTR4_WORD0 + 4))
#define FATTR4_LINK_SUPPORT_MASK (1ULL << (FATTR4_WORD0 + 5))
#define FATTR4_SYMLINK_SUPPORT_MASK (1ULL << (FATTR4_WORD0 + 6))
#define FATTR4_NAMED_ATTR_MASK (1ULL << (FATTR4_WORD0 + 7))
#define FATTR4_FSID_MASK (1ULL << (FATTR4_WORD0 + 8))
#define FATTR4_UNIQUE_HANDLES_MASK (1ULL << (FATTR4_WORD0 + 9))
#define FATTR4_LEASE_TIME_MASK (1ULL << (FATTR4_WORD0 + 10))
#define FATTR4_RDATTR_ERROR_MASK (1ULL << (FATTR4_WORD0 + 11))
#define FATTR4_ACL_MASK (1ULL << (FATTR4_WORD0 + 12))
#define FATTR4_ACLSUPPORT_MASK (1ULL << (FATTR4_WORD0 + 13))
#define FATTR4_ARCHIVE_MASK (1ULL << (FATTR4_WORD0 + 14))
#define FATTR4_CANSETTIME_MASK (1ULL << (FATTR4_WORD0 + 15))
#define FATTR4_CASE_INSENSITIVE_MASK (1ULL << (FATTR4_WORD0 + 16))
#define FATTR4_CASE_PRESERVING_MASK (1ULL << (FATTR4_WORD0 + 17))
#define FATTR4_CHOWN_RESTRICTED_MASK (1ULL << (FATTR4_WORD0 + 18))
#define FATTR4_FILEHANDLE_MASK (1ULL << (FATTR4_WORD0 + 19))
#define FATTR4_FILEID_MASK (1ULL << (FATTR4_WORD0 + 20))
#define FATTR4_FILES_AVAIL_MASK (1ULL << (FATTR4_WORD0 + 21))
#define FATTR4_FILES_FREE_MASK (1ULL << (FATTR4_WORD0 + 22))
#define FATTR4_FILES_TOTAL_MASK (1ULL << (FATTR4_WORD0 + 23))
#define FATTR4_FS_LOCATIONS_MASK (1ULL << (FATTR4_WORD0 + 24))
#define FATTR4_HIDDEN_MASK (1ULL << (FATTR4_WORD0 + 25))
#define FATTR4_HOMOGENEOUS_MASK (1ULL << (FATTR4_WORD0 + 26))
#define FATTR4_MAXFILESIZE_MASK (1ULL << (FATTR4_WORD0 + 27))
#define FATTR4_MAXLINK_MASK (1ULL << (FATTR4_WORD0 + 28))
#define FATTR4_MAXNAME_MASK (1ULL << (FATTR4_WORD0 + 29))
#define FATTR4_MAXREAD_MASK (1ULL << (FATTR4_WORD0 + 30))
#define FATTR4_MAXWRITE_MASK (1ULL << (FATTR4_WORD0 + 31))
#define FATTR4_MIMETYPE_MASK (1ULL << (FATTR4_WORD1 + 0))
#define FATTR4_MODE_MASK (1ULL << (FATTR4_WORD1 + 1))
#define FATTR4_NO_TRUNC_MASK (1ULL << (FATTR4_WORD1 + 2))
#define FATTR4_NUMLINKS_MASK (1ULL << (FATTR4_WORD1 + 3))
#define FATTR4_OWNER_MASK (1ULL << (FATTR4_WORD1 + 4))
#define FATTR4_OWNER_GROUP_MASK (1ULL << (FATTR4_WORD1 + 5))
#define FATTR4_QUOTA_AVAIL_HARD_MASK (1ULL << (FATTR4_WORD1 + 6))
#define FATTR4_QUOTA_AVAIL_SOFT_MASK (1ULL << (FATTR4_WORD1 + 7))
#define FATTR4_QUOTA_USED_MASK (1ULL << (FATTR4_WORD1 + 8))
#define FATTR4_RAWDEV_MASK (1ULL << (FATTR4_WORD1 + 9))
#define FATTR4_SPACE_AVAIL_MASK (1ULL << (FATTR4_WORD1 + 10))
#define FATTR4_SPACE_FREE_MASK (1ULL << (FATTR4_WORD1 + 11))
#define FATTR4_SPACE_TOTAL_MASK (1ULL << (FATTR4_WORD1 + 12))
#define FATTR4_SPACE_USED_MASK (1ULL << (FATTR4_WORD1 + 13))
#define FATTR4_SYSTEM_MASK (1ULL << (FATTR4_WORD1 + 14))
#define FATTR4_TIME_ACCESS_MASK (1ULL << (FATTR4_WORD1 + 15))
#define FATTR4_TIME_ACCESS_SET_MASK (1ULL << (FATTR4_WORD1 + 16))
#define FATTR4_TIME_BACKUP_MASK (1ULL << (FATTR4_WORD1 + 17))
#define FATTR4_TIME_CREATE_MASK (1ULL << (FATTR4_WORD1 + 18))
#define FATTR4_TIME_DELTA_MASK (1ULL << (FATTR4_WORD1 + 19))
#define FATTR4_TIME_METADATA_MASK (1ULL << (FATTR4_WORD1 + 20))
#define FATTR4_TIME_MODIFY_MASK (1ULL << (FATTR4_WORD1 + 21))
#define FATTR4_TIME_MODIFY_SET_MASK (1ULL << (FATTR4_WORD1 + 22))
#define FATTR4_MOUNTED_ON_FILEID_MASK (1ULL << (FATTR4_WORD1 + 23))
/*
* Common bitmap4 of file attributes to be gathered
*/
#define NFS4_NTOV_ATTR_MASK ( \
FATTR4_TYPE_MASK | \
FATTR4_CHANGE_MASK | \
FATTR4_SIZE_MASK | \
FATTR4_FSID_MASK | \
FATTR4_FILEID_MASK | \
FATTR4_MODE_MASK | \
FATTR4_OWNER_MASK | \
FATTR4_OWNER_GROUP_MASK | \
FATTR4_NUMLINKS_MASK | \
FATTR4_TIME_ACCESS_MASK | \
FATTR4_TIME_MODIFY_MASK | \
FATTR4_TIME_METADATA_MASK | \
FATTR4_RAWDEV_MASK | \
FATTR4_SPACE_USED_MASK | \
FATTR4_MOUNTED_ON_FILEID_MASK)
#define NFS4_VATTR_MASK ( \
FATTR4_TYPE_MASK | \
FATTR4_CHANGE_MASK | \
FATTR4_SIZE_MASK | \
FATTR4_FSID_MASK | \
FATTR4_FILEID_MASK | \
FATTR4_MODE_MASK | \
FATTR4_OWNER_MASK | \
FATTR4_OWNER_GROUP_MASK | \
FATTR4_NUMLINKS_MASK | \
FATTR4_TIME_ACCESS_MASK | \
FATTR4_TIME_MODIFY_MASK | \
FATTR4_TIME_METADATA_MASK | \
FATTR4_RAWDEV_MASK | \
FATTR4_SPACE_USED_MASK | \
FATTR4_MOUNTED_ON_FILEID_MASK)
#define NFS4_PATHCONF_MASK ( \
NFS4_VATTR_MASK | \
FATTR4_NO_TRUNC_MASK | \
FATTR4_CHOWN_RESTRICTED_MASK | \
FATTR4_CASE_INSENSITIVE_MASK | \
FATTR4_CASE_PRESERVING_MASK | \
FATTR4_NAMED_ATTR_MASK | \
FATTR4_LINK_SUPPORT_MASK | \
FATTR4_SYMLINK_SUPPORT_MASK | \
FATTR4_UNIQUE_HANDLES_MASK | \
FATTR4_CANSETTIME_MASK | \
FATTR4_HOMOGENEOUS_MASK | \
FATTR4_MAXLINK_MASK | \
FATTR4_MAXNAME_MASK | \
FATTR4_MAXFILESIZE_MASK)
/*
* The corresponding AT_MASK
*/
#define NFS4_NTOV_ATTR_AT_MASK ( \
AT_TYPE | \
AT_SIZE | \
AT_FSID | \
AT_NODEID | \
AT_MODE | \
AT_UID | \
AT_GID | \
AT_NLINK | \
AT_ATIME | \
AT_MTIME | \
AT_CTIME | \
AT_RDEV | \
AT_NBLOCKS)
/*
* Common bitmap4 of filesystem attributes to be gathered
*/
#define NFS4_FS_ATTR_MASK ( \
FATTR4_FILES_AVAIL_MASK | \
FATTR4_FILES_FREE_MASK | \
FATTR4_FILES_TOTAL_MASK | \
FATTR4_SPACE_AVAIL_MASK | \
FATTR4_SPACE_FREE_MASK | \
FATTR4_SPACE_TOTAL_MASK)
#define NFS4_STATFS_ATTR_MASK ( \
FATTR4_FILES_AVAIL_MASK | \
FATTR4_FILES_FREE_MASK | \
FATTR4_FILES_TOTAL_MASK | \
FATTR4_SPACE_AVAIL_MASK | \
FATTR4_SPACE_FREE_MASK | \
FATTR4_SPACE_TOTAL_MASK | \
FATTR4_MAXNAME_MASK)
/*
* The corresponding AT_MASK
*/
#define NFS4_FS_ATTR_AT_MASK 0
/*
* Common bitmap4 to gather attr cache state
*/
#define NFS4_NTOV_ATTR_CACHE_MASK ( \
FATTR4_TIME_METADATA_MASK | \
FATTR4_TIME_MODIFY_MASK | \
FATTR4_SIZE_MASK)
/*
* The corresponding AT_MASK
*/
#define NFS4_NTOV_ATTR_CACHE_AT_MASK ( \
AT_CTIME | \
AT_MTIME | \
AT_SIZE)
#define NFS4_VTON_ATTR_MASK ( \
AT_TYPE | \
AT_MODE | \
AT_UID | \
AT_GID | \
AT_NODEID | \
AT_SIZE | \
AT_NLINK | \
AT_ATIME | \
AT_MTIME | \
AT_CTIME | \
AT_RDEV | \
AT_NBLOCKS | \
AT_FSID)
#define NFS4_VTON_ATTR_MASK_SET ( \
AT_MODE | \
AT_UID | \
AT_GID | \
AT_SIZE | \
AT_ATIME | \
AT_MTIME)
/* solaris-supported, non-vattr_t per-vnode scoped attrs */
#define NFS4_VP_ATTR_MASK ( \
FATTR4_CHANGE_MASK | \
FATTR4_CHOWN_RESTRICTED_MASK | \
FATTR4_FILEHANDLE_MASK | \
FATTR4_MAXFILESIZE_MASK | \
FATTR4_MAXLINK_MASK | \
FATTR4_MAXNAME_MASK | \
FATTR4_MOUNTED_ON_FILEID_MASK)
#define FATTR4_FSINFO_MASK ( \
FATTR4_SUPPORTED_ATTRS_MASK | \
FATTR4_TYPE_MASK | \
FATTR4_FH_EXPIRE_TYPE_MASK | \
FATTR4_LINK_SUPPORT_MASK | \
FATTR4_SYMLINK_SUPPORT_MASK | \
FATTR4_FSID_MASK | \
FATTR4_MAXFILESIZE_MASK | \
FATTR4_MAXREAD_MASK | \
FATTR4_MAXWRITE_MASK)
/*
* These are the support attributes for the NFSv4 server
*/
#define NFS4_SRV_RDDIR_SUPPORTED_ATTRS ( \
FATTR4_SUPPORTED_ATTRS_MASK | \
FATTR4_TYPE_MASK | \
FATTR4_FH_EXPIRE_TYPE_MASK | \
FATTR4_CHANGE_MASK | \
FATTR4_SIZE_MASK | \
FATTR4_LINK_SUPPORT_MASK | \
FATTR4_SYMLINK_SUPPORT_MASK | \
FATTR4_NAMED_ATTR_MASK | \
FATTR4_FSID_MASK | \
FATTR4_UNIQUE_HANDLES_MASK | \
FATTR4_LEASE_TIME_MASK | \
FATTR4_RDATTR_ERROR_MASK | \
FATTR4_CANSETTIME_MASK | \
FATTR4_CASE_INSENSITIVE_MASK | \
FATTR4_CASE_PRESERVING_MASK | \
FATTR4_CHOWN_RESTRICTED_MASK | \
FATTR4_FILEHANDLE_MASK | \
FATTR4_FILEID_MASK | \
FATTR4_FILES_AVAIL_MASK | \
FATTR4_FILES_FREE_MASK | \
FATTR4_FILES_TOTAL_MASK | \
FATTR4_FS_LOCATIONS_MASK | \
FATTR4_HOMOGENEOUS_MASK | \
FATTR4_MAXFILESIZE_MASK | \
FATTR4_MAXLINK_MASK | \
FATTR4_MAXNAME_MASK | \
FATTR4_MAXREAD_MASK | \
FATTR4_MAXWRITE_MASK | \
FATTR4_MODE_MASK | \
FATTR4_NO_TRUNC_MASK | \
FATTR4_NUMLINKS_MASK | \
FATTR4_OWNER_MASK | \
FATTR4_OWNER_GROUP_MASK | \
FATTR4_RAWDEV_MASK | \
FATTR4_SPACE_AVAIL_MASK | \
FATTR4_SPACE_FREE_MASK | \
FATTR4_SPACE_TOTAL_MASK | \
FATTR4_SPACE_USED_MASK | \
FATTR4_TIME_ACCESS_MASK | \
FATTR4_TIME_DELTA_MASK | \
FATTR4_TIME_METADATA_MASK | \
FATTR4_TIME_MODIFY_MASK | \
FATTR4_MOUNTED_ON_FILEID_MASK \
)
#define FATTR4_FSID_EQ(a, b) \
((a)->major == (b)->major && (a)->minor == (b)->minor)
#define NFS4_MAXNUM_BITWORDS 2
#define NFS4_MAXNUM_ATTRS 56
union nfs4_attr_u {
fattr4_supported_attrs supported_attrs;
fattr4_type type;
fattr4_fh_expire_type fh_expire_type;
fattr4_change change;
fattr4_size size;
fattr4_link_support link_support;
fattr4_symlink_support symlink_support;
fattr4_named_attr named_attr;
fattr4_fsid fsid;
fattr4_unique_handles unique_handles;
fattr4_lease_time lease_time;
fattr4_rdattr_error rdattr_error;
fattr4_acl acl;
fattr4_aclsupport aclsupport;
fattr4_archive archive;
fattr4_cansettime cansettime;
fattr4_case_insensitive case_insensitive;
fattr4_case_preserving case_preserving;
fattr4_chown_restricted chown_restricted;
fattr4_fileid fileid;
fattr4_files_avail files_avail;
fattr4_filehandle filehandle;
fattr4_files_free files_free;
fattr4_files_total files_total;
fattr4_fs_locations fs_locations;
fattr4_hidden hidden;
fattr4_homogeneous homogeneous;
fattr4_maxfilesize maxfilesize;
fattr4_maxlink maxlink;
fattr4_maxname maxname;
fattr4_maxread maxread;
fattr4_maxwrite maxwrite;
fattr4_mimetype mimetype;
fattr4_mode mode;
fattr4_no_trunc no_trunc;
fattr4_numlinks numlinks;
fattr4_owner owner;
fattr4_owner_group owner_group;
fattr4_quota_avail_hard quota_avail_hard;
fattr4_quota_avail_soft quota_avail_soft;
fattr4_quota_used quota_used;
fattr4_rawdev rawdev;
fattr4_space_avail space_avail;
fattr4_space_free space_free;
fattr4_space_total space_total;
fattr4_space_used space_used;
fattr4_system system;
fattr4_time_access time_access;
fattr4_time_access_set time_access_set;
fattr4_time_backup time_backup;
fattr4_time_create time_create;
fattr4_time_delta time_delta;
fattr4_time_metadata time_metadata;
fattr4_time_modify time_modify;
fattr4_time_modify_set time_modify_set;
fattr4_mounted_on_fileid mounted_on_fileid;
};
/*
* Error details when processing the getattr response.
*/
#define NFS4_GETATTR_OP_OK 0
#define NFS4_GETATTR_STATUS_ERR 1
#define NFS4_GETATTR_MANDATTR_ERR 2
#define NFS4_GETATTR_BITMAP_ERR 3
#define NFS4_GETATTR_ATSIZE_ERR 4
#define NFS4_GETATTR_ATUID_ERR 5
#define NFS4_GETATTR_ATGID_ERR 6
#define NFS4_GETATTR_ATATIME_ERR 7
#define NFS4_GETATTR_ATMTIME_ERR 8
#define NFS4_GETATTR_ATCTIME_ERR 9
#define NFS4_GETATTR_RAWDEV_ERR 10
#define NFS4_GETATTR_ATNBLOCK_ERR 11
#define NFS4_GETATTR_MAXFILESIZE_ERR 12
#define NFS4_GETATTR_FHANDLE_ERR 13
#define NFS4_GETATTR_MAXREAD_ERR 14
#define NFS4_GETATTR_MAXWRITE_ERR 15
#define NFS4_GETATTR_NOCACHE_OK 16
typedef struct nfs4_pathconf_info {
unsigned pc4_cache_valid:1; /* When in rnode4, is data valid? */
unsigned pc4_no_trunc:1;
unsigned pc4_chown_restricted:1;
unsigned pc4_case_insensitive:1;
unsigned pc4_case_preserving:1;
unsigned pc4_xattr_valid:1;
unsigned pc4_xattr_exists:1;
unsigned pc4_link_support:1;
unsigned pc4_symlink_support:1;
unsigned pc4_unique_handles:1;
unsigned pc4_cansettime:1;
unsigned pc4_homogeneous:1;
uint_t pc4_link_max;
uint_t pc4_name_max;
uint_t pc4_filesizebits;
} nfs4_pathconf_info_t;
/*
* Used for client only to process incoming getattr results.
*/
typedef struct nfs4_ga_ext_res {
bitmap4 n4g_suppattrs;
nfsstat4 n4g_rdattr_error;
fattr4_fh_expire_type n4g_fet;
fattr4_lease_time n4g_leasetime;
uint64_t n4g_maxfilesize;
uint64_t n4g_maxread;
uint64_t n4g_maxwrite;
nfstime4 n4g_delta;
nfs4_pathconf_info_t n4g_pc4;
struct statvfs64 n4g_sb;
union {
nfs_fh4 n4g_fh;
struct {
uint_t len;
char *val;
char data[NFS4_FHSIZE];
} nfs_fh4_alt;
} n4g_fh_u;
/*
* Bitmask with valid fields being:
* ACL4_SUPPORT_ALLOW_ACL
* ACL4_SUPPORT_DENY_ACL
* ACL4_SUPPORT_AUDIT_ACL
* ACL4_SUPPORT_ALARM_ACL
*/
fattr4_aclsupport n4g_aclsupport;
fattr4_fs_locations n4g_fslocations;
} nfs4_ga_ext_res_t;
extern bitmap4 rfs4_supported_attrs;
#ifdef __cplusplus
}
#endif
#endif /* _NFS4_ATTR_H */
|