0001
0002
0003
0004
0005
0006
0007
0008 #ifndef AFS_H
0009 #define AFS_H
0010
0011 #include <linux/in.h>
0012
0013 #define AFS_MAXCELLNAME 256
0014 #define AFS_MAXVOLNAME 64
0015 #define AFS_MAXNSERVERS 8
0016 #define AFS_NMAXNSERVERS 13
0017 #define AFS_MAXTYPES 3
0018 #define AFSNAMEMAX 256
0019 #define AFSPATHMAX 1024
0020 #define AFSOPAQUEMAX 1024
0021
0022 #define AFS_VL_MAX_LIFESPAN (120 * HZ)
0023 #define AFS_PROBE_MAX_LIFESPAN (30 * HZ)
0024
0025 typedef u64 afs_volid_t;
0026 typedef u64 afs_vnodeid_t;
0027 typedef u64 afs_dataversion_t;
0028
0029 typedef enum {
0030 AFSVL_RWVOL,
0031 AFSVL_ROVOL,
0032 AFSVL_BACKVOL,
0033 } __attribute__((packed)) afs_voltype_t;
0034
0035 typedef enum {
0036 AFS_FTYPE_INVALID = 0,
0037 AFS_FTYPE_FILE = 1,
0038 AFS_FTYPE_DIR = 2,
0039 AFS_FTYPE_SYMLINK = 3,
0040 } afs_file_type_t;
0041
0042 typedef enum {
0043 AFS_LOCK_READ = 0,
0044 AFS_LOCK_WRITE = 1,
0045 } afs_lock_type_t;
0046
0047 #define AFS_LOCKWAIT (5 * 60)
0048
0049
0050
0051
0052 struct afs_fid {
0053 afs_volid_t vid;
0054 afs_vnodeid_t vnode;
0055 u32 vnode_hi;
0056 u32 unique;
0057 };
0058
0059
0060
0061
0062 typedef enum {
0063 AFSCM_CB_UNTYPED = 0,
0064 AFSCM_CB_EXCLUSIVE = 1,
0065 AFSCM_CB_SHARED = 2,
0066 AFSCM_CB_DROPPED = 3,
0067 } afs_callback_type_t;
0068
0069 struct afs_callback {
0070 time64_t expires_at;
0071
0072
0073 };
0074
0075 struct afs_callback_break {
0076 struct afs_fid fid;
0077
0078 };
0079
0080 #define AFSCBMAX 50
0081
0082 struct afs_uuid {
0083 __be32 time_low;
0084 __be16 time_mid;
0085 __be16 time_hi_and_version;
0086 __s8 clock_seq_hi_and_reserved;
0087 __s8 clock_seq_low;
0088 __s8 node[6];
0089 };
0090
0091
0092
0093
0094 struct afs_volume_info {
0095 afs_volid_t vid;
0096 afs_voltype_t type;
0097 afs_volid_t type_vids[5];
0098
0099
0100 size_t nservers;
0101 struct {
0102 struct in_addr addr;
0103 } servers[8];
0104 };
0105
0106
0107
0108
0109 typedef u32 afs_access_t;
0110 #define AFS_ACE_READ 0x00000001U
0111 #define AFS_ACE_WRITE 0x00000002U
0112 #define AFS_ACE_INSERT 0x00000004U
0113 #define AFS_ACE_LOOKUP 0x00000008U
0114 #define AFS_ACE_DELETE 0x00000010U
0115 #define AFS_ACE_LOCK 0x00000020U
0116 #define AFS_ACE_ADMINISTER 0x00000040U
0117 #define AFS_ACE_USER_A 0x01000000U
0118 #define AFS_ACE_USER_B 0x02000000U
0119 #define AFS_ACE_USER_C 0x04000000U
0120 #define AFS_ACE_USER_D 0x08000000U
0121 #define AFS_ACE_USER_E 0x10000000U
0122 #define AFS_ACE_USER_F 0x20000000U
0123 #define AFS_ACE_USER_G 0x40000000U
0124 #define AFS_ACE_USER_H 0x80000000U
0125
0126
0127
0128
0129 struct afs_file_status {
0130 u64 size;
0131 afs_dataversion_t data_version;
0132 struct timespec64 mtime_client;
0133 struct timespec64 mtime_server;
0134 s64 author;
0135 s64 owner;
0136 s64 group;
0137 afs_access_t caller_access;
0138 afs_access_t anon_access;
0139 umode_t mode;
0140 afs_file_type_t type;
0141 u32 nlink;
0142 s32 lock_count;
0143 u32 abort_code;
0144 };
0145
0146 struct afs_status_cb {
0147 struct afs_file_status status;
0148 struct afs_callback callback;
0149 bool have_status;
0150 bool have_cb;
0151 bool have_error;
0152 };
0153
0154
0155
0156
0157
0158 #define AFS_SET_MTIME 0x01
0159 #define AFS_SET_OWNER 0x02
0160 #define AFS_SET_GROUP 0x04
0161 #define AFS_SET_MODE 0x08
0162 #define AFS_SET_SEG_SIZE 0x10
0163
0164
0165
0166
0167 struct afs_volsync {
0168 time64_t creation;
0169 };
0170
0171
0172
0173
0174 struct afs_volume_status {
0175 afs_volid_t vid;
0176 afs_volid_t parent_id;
0177 u8 online;
0178 u8 in_service;
0179 u8 blessed;
0180 u8 needs_salvage;
0181 u32 type;
0182 u64 min_quota;
0183 u64 max_quota;
0184 u64 blocks_in_use;
0185 u64 part_blocks_avail;
0186 u64 part_max_blocks;
0187 s64 vol_copy_date;
0188 s64 vol_backup_date;
0189 };
0190
0191 #define AFS_BLOCK_SIZE 1024
0192
0193
0194
0195
0196 struct afs_uuid__xdr {
0197 __be32 time_low;
0198 __be32 time_mid;
0199 __be32 time_hi_and_version;
0200 __be32 clock_seq_hi_and_reserved;
0201 __be32 clock_seq_low;
0202 __be32 node[6];
0203 };
0204
0205 #endif