1a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* 2a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher * File: linux/nfsacl.h 3a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher * 4a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher * (C) 2003 Andreas Gruenbacher <agruen@suse.de> 5a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher */ 6a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#ifndef __LINUX_NFSACL_H 7a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define __LINUX_NFSACL_H 8a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 9a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_ACL_PROGRAM 100227 10a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 11a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC2_GETACL 1 12a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC2_SETACL 2 13a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC2_GETATTR 3 14a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC2_ACCESS 4 15a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 16a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC3_GETACL 1 17a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define ACLPROC3_SETACL 2 18a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 19a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 20a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* Flags for the getacl/setacl mode */ 21a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_ACL 0x0001 22a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_ACLCNT 0x0002 23a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_DFACL 0x0004 24a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_DFACLCNT 0x0008 25a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 26a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* Flag for Default ACL entries */ 27a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_ACL_DEFAULT 0x1000 28a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 29a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#ifdef __KERNEL__ 30a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 31a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#include <linux/posix_acl.h> 32d703158229329af7152d159753f849aa7bd55ee6Boaz Harrosh#include <linux/sunrpc/xdr.h> 33a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 34a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* Maximum number of ACL entries over NFS */ 35a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFS_ACL_MAX_ENTRIES 1024 36a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 37a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFSACL_MAXWORDS (2*(2+3*NFS_ACL_MAX_ENTRIES)) 38a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#define NFSACL_MAXPAGES ((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \ 39a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher >> PAGE_SHIFT) 40a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 41ae46141ff08f1965b17c531b571953c39ce8b9e2Trond Myklebust#define NFS_ACL_MAX_ENTRIES_INLINE (5) 42ae46141ff08f1965b17c531b571953c39ce8b9e2Trond Myklebust#define NFS_ACL_INLINE_BUFSIZE ((2*(2+3*NFS_ACL_MAX_ENTRIES_INLINE)) << 2) 43ae46141ff08f1965b17c531b571953c39ce8b9e2Trond Myklebust 44a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacherstatic inline unsigned int 45a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbachernfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default) 46a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher{ 47a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher unsigned int w = 16; 48a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher w += max(acl_access ? (int)acl_access->a_count : 3, 4) * 12; 49a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher if (acl_default) 50a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher w += max((int)acl_default->a_count, 4) * 12; 51a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher return w; 52a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher} 53a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 54731f3f482ad3b2c58a1af2d0a9a634a82803706aChuck Leverextern int 55a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbachernfsacl_encode(struct xdr_buf *buf, unsigned int base, struct inode *inode, 56a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher struct posix_acl *acl, int encode_entries, int typeflag); 57731f3f482ad3b2c58a1af2d0a9a634a82803706aChuck Leverextern int 58a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbachernfsacl_decode(struct xdr_buf *buf, unsigned int base, unsigned int *aclcnt, 59a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher struct posix_acl **pacl); 60a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 61a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#endif /* __KERNEL__ */ 62a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher#endif /* __LINUX_NFSACL_H */ 63