Blame view

fs/afs/afs.h 5.97 KB
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
1
  /* AFS common types
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
   *
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
3
   * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
   * Written by David Howells (dhowells@redhat.com)
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version
   * 2 of the License, or (at your option) any later version.
   */
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
11
12
  #ifndef AFS_H
  #define AFS_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13

08e0e7c82   David Howells   [AF_RXRPC]: Make ...
14
  #include <linux/in.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
15

00d3b7a45   David Howells   [AFS]: Add securi...
16
17
  #define AFS_MAXCELLNAME	64		/* maximum length of a cell name */
  #define AFS_MAXVOLNAME	64		/* maximum length of a volume name */
45222b9e0   David Howells   AFS: implement st...
18
19
20
  #define AFSNAMEMAX	256		/* maximum length of a filename plus NUL */
  #define AFSPATHMAX	1024		/* maximum length of a pathname plus NUL */
  #define AFSOPAQUEMAX	1024		/* maximum length of an opaque field */
00d3b7a45   David Howells   [AFS]: Add securi...
21

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  typedef unsigned			afs_volid_t;
  typedef unsigned			afs_vnodeid_t;
  typedef unsigned long long		afs_dataversion_t;
  
  typedef enum {
  	AFSVL_RWVOL,			/* read/write volume */
  	AFSVL_ROVOL,			/* read-only volume */
  	AFSVL_BACKVOL,			/* backup volume */
  } __attribute__((packed)) afs_voltype_t;
  
  typedef enum {
  	AFS_FTYPE_INVALID	= 0,
  	AFS_FTYPE_FILE		= 1,
  	AFS_FTYPE_DIR		= 2,
  	AFS_FTYPE_SYMLINK	= 3,
  } afs_file_type_t;
e8d6c5541   David Howells   AFS: implement fi...
38
39
40
41
42
43
  typedef enum {
  	AFS_LOCK_READ		= 0,	/* read lock request */
  	AFS_LOCK_WRITE		= 1,	/* write lock request */
  } afs_lock_type_t;
  
  #define AFS_LOCKWAIT		(5 * 60) /* time until a lock times out (seconds) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
  /*
   * AFS file identifier
   */
ec26815ad   David Howells   [AFS]: Clean up t...
47
  struct afs_fid {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48
49
50
51
  	afs_volid_t	vid;		/* volume ID */
  	afs_vnodeid_t	vnode;		/* file index within volume */
  	unsigned	unique;		/* unique ID number (file index version) */
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
54
55
56
57
58
59
60
  /*
   * AFS callback notification
   */
  typedef enum {
  	AFSCM_CB_UNTYPED	= 0,	/* no type set on CB break */
  	AFSCM_CB_EXCLUSIVE	= 1,	/* CB exclusive to CM [not implemented] */
  	AFSCM_CB_SHARED		= 2,	/* CB shared by other CM's */
  	AFSCM_CB_DROPPED	= 3,	/* CB promise cancelled by file server */
  } afs_callback_type_t;
ec26815ad   David Howells   [AFS]: Clean up t...
61
  struct afs_callback {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
66
  	struct afs_fid		fid;		/* file identifier */
  	unsigned		version;	/* callback version */
  	unsigned		expiry;		/* time at which expires */
  	afs_callback_type_t	type;		/* type of callback */
  };
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
67
  #define AFSCBMAX 50	/* maximum callbacks transferred per bulk op */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
69
70
71
  /*
   * AFS volume information
   */
ec26815ad   David Howells   [AFS]: Clean up t...
72
  struct afs_volume_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
74
75
  	afs_volid_t		vid;		/* volume ID */
  	afs_voltype_t		type;		/* type of this volume */
  	afs_volid_t		type_vids[5];	/* volume ID's for possible types for this vol */
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
76

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
77
78
79
80
81
82
  	/* list of fileservers serving this volume */
  	size_t			nservers;	/* number of entries used in servers[] */
  	struct {
  		struct in_addr	addr;		/* fileserver address */
  	} servers[8];
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
  /*
00d3b7a45   David Howells   [AFS]: Add securi...
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
   * AFS security ACE access mask
   */
  typedef u32 afs_access_t;
  #define AFS_ACE_READ		0x00000001U	/* - permission to read a file/dir */
  #define AFS_ACE_WRITE		0x00000002U	/* - permission to write/chmod a file */
  #define AFS_ACE_INSERT		0x00000004U	/* - permission to create dirent in a dir */
  #define AFS_ACE_LOOKUP		0x00000008U	/* - permission to lookup a file/dir in a dir */
  #define AFS_ACE_DELETE		0x00000010U	/* - permission to delete a dirent from a dir */
  #define AFS_ACE_LOCK		0x00000020U	/* - permission to lock a file */
  #define AFS_ACE_ADMINISTER	0x00000040U	/* - permission to change ACL */
  #define AFS_ACE_USER_A		0x01000000U	/* - 'A' user-defined permission */
  #define AFS_ACE_USER_B		0x02000000U	/* - 'B' user-defined permission */
  #define AFS_ACE_USER_C		0x04000000U	/* - 'C' user-defined permission */
  #define AFS_ACE_USER_D		0x08000000U	/* - 'D' user-defined permission */
  #define AFS_ACE_USER_E		0x10000000U	/* - 'E' user-defined permission */
  #define AFS_ACE_USER_F		0x20000000U	/* - 'F' user-defined permission */
  #define AFS_ACE_USER_G		0x40000000U	/* - 'G' user-defined permission */
  #define AFS_ACE_USER_H		0x80000000U	/* - 'H' user-defined permission */
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
   * AFS file status information
   */
ec26815ad   David Howells   [AFS]: Clean up t...
106
  struct afs_file_status {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
108
109
110
111
  	unsigned		if_version;	/* interface version */
  #define AFS_FSTATUS_VERSION	1
  
  	afs_file_type_t		type;		/* file type */
  	unsigned		nlink;		/* link count */
260a98031   David Howells   [AFS]: Add "direc...
112
  	u64			size;		/* file size */
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
113
  	afs_dataversion_t	data_version;	/* current data version */
260a98031   David Howells   [AFS]: Add "direc...
114
115
116
  	u32			author;		/* author ID */
  	u32			owner;		/* owner ID */
  	u32			group;		/* group ID */
00d3b7a45   David Howells   [AFS]: Add securi...
117
118
  	afs_access_t		caller_access;	/* access rights for authenticated caller */
  	afs_access_t		anon_access;	/* access rights for unauthenticated caller */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
  	umode_t			mode;		/* UNIX mode */
260a98031   David Howells   [AFS]: Add "direc...
120
  	struct afs_fid		parent;		/* parent dir ID for non-dirs only */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121
122
  	time_t			mtime_client;	/* last time client changed data */
  	time_t			mtime_server;	/* last time server changed data */
e8d6c5541   David Howells   AFS: implement fi...
123
  	s32			lock_count;	/* file lock count (0=UNLK -1=WRLCK +ve=#RDLCK */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
125
  /*
260a98031   David Howells   [AFS]: Add "direc...
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
   * AFS file status change request
   */
  struct afs_store_status {
  	u32			mask;		/* which bits of the struct are set */
  	u32			mtime_client;	/* last time client changed data */
  	u32			owner;		/* owner ID */
  	u32			group;		/* group ID */
  	umode_t			mode;		/* UNIX mode */
  };
  
  #define AFS_SET_MTIME		0x01		/* set the mtime */
  #define AFS_SET_OWNER		0x02		/* set the owner ID */
  #define AFS_SET_GROUP		0x04		/* set the group ID (unsupported?) */
  #define AFS_SET_MODE		0x08		/* set the UNIX mode */
  #define AFS_SET_SEG_SIZE	0x10		/* set the segment size (unsupported) */
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
143
144
   * AFS volume synchronisation information
   */
ec26815ad   David Howells   [AFS]: Clean up t...
145
  struct afs_volsync {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
147
  	time_t			creation;	/* volume creation time */
  };
45222b9e0   David Howells   AFS: implement st...
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
  /*
   * AFS volume status record
   */
  struct afs_volume_status {
  	u32			vid;		/* volume ID */
  	u32			parent_id;	/* parent volume ID */
  	u8			online;		/* true if volume currently online and available */
  	u8			in_service;	/* true if volume currently in service */
  	u8			blessed;	/* same as in_service */
  	u8			needs_salvage;	/* true if consistency checking required */
  	u32			type;		/* volume type (afs_voltype_t) */
  	u32			min_quota;	/* minimum space set aside (blocks) */
  	u32			max_quota;	/* maximum space this volume may occupy (blocks) */
  	u32			blocks_in_use;	/* space this volume currently occupies (blocks) */
  	u32			part_blocks_avail; /* space available in volume's partition */
  	u32			part_max_blocks; /* size of volume's partition */
  };
  
  #define AFS_BLOCK_SIZE	1024
08e0e7c82   David Howells   [AF_RXRPC]: Make ...
167
  #endif /* AFS_H */