xref: /OK3568_Linux_fs/kernel/fs/afs/protocol_yfs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /* YFS protocol bits
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved.
5*4882a593Smuzhiyun  * Written by David Howells (dhowells@redhat.com)
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #define YFS_FS_SERVICE	2500
9*4882a593Smuzhiyun #define YFS_CM_SERVICE	2501
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #define YFSCBMAX	1024
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun enum YFS_CM_Operations {
14*4882a593Smuzhiyun 	YFSCBProbe		= 206,	/* probe client */
15*4882a593Smuzhiyun 	YFSCBGetLock		= 207,	/* get contents of CM lock table */
16*4882a593Smuzhiyun 	YFSCBXStatsVersion	= 209,	/* get version of extended statistics */
17*4882a593Smuzhiyun 	YFSCBGetXStats		= 210,	/* get contents of extended statistics data */
18*4882a593Smuzhiyun 	YFSCBInitCallBackState3	= 213,	/* initialise callback state, version 3 */
19*4882a593Smuzhiyun 	YFSCBProbeUuid		= 214,	/* check the client hasn't rebooted */
20*4882a593Smuzhiyun 	YFSCBGetServerPrefs	= 215,
21*4882a593Smuzhiyun 	YFSCBGetCellServDV	= 216,
22*4882a593Smuzhiyun 	YFSCBGetLocalCell	= 217,
23*4882a593Smuzhiyun 	YFSCBGetCacheConfig	= 218,
24*4882a593Smuzhiyun 	YFSCBGetCellByNum	= 65537,
25*4882a593Smuzhiyun 	YFSCBTellMeAboutYourself = 65538, /* get client capabilities */
26*4882a593Smuzhiyun 	YFSCBCallBack		= 64204,
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun enum YFS_FS_Operations {
30*4882a593Smuzhiyun 	YFSFETCHACL		= 64131, /* YFS Fetch file AFS3 ACL */
31*4882a593Smuzhiyun 	YFSFETCHSTATUS		= 64132, /* YFS Fetch file status */
32*4882a593Smuzhiyun 	YFSSTOREACL		= 64134, /* YFS Store file AFS3 ACL */
33*4882a593Smuzhiyun 	YFSSTORESTATUS		= 64135, /* YFS Store file status */
34*4882a593Smuzhiyun 	YFSREMOVEFILE		= 64136, /* YFS Remove a file */
35*4882a593Smuzhiyun 	YFSCREATEFILE		= 64137, /* YFS Create a file */
36*4882a593Smuzhiyun 	YFSRENAME		= 64138, /* YFS Rename or move a file or directory */
37*4882a593Smuzhiyun 	YFSSYMLINK		= 64139, /* YFS Create a symbolic link */
38*4882a593Smuzhiyun 	YFSLINK			= 64140, /* YFS Create a hard link */
39*4882a593Smuzhiyun 	YFSMAKEDIR		= 64141, /* YFS Create a directory */
40*4882a593Smuzhiyun 	YFSREMOVEDIR		= 64142, /* YFS Remove a directory */
41*4882a593Smuzhiyun 	YFSGETVOLUMESTATUS	= 64149, /* YFS Get volume status information */
42*4882a593Smuzhiyun 	YFSSETVOLUMESTATUS	= 64150, /* YFS Set volume status information */
43*4882a593Smuzhiyun 	YFSSETLOCK		= 64156, /* YFS Request a file lock */
44*4882a593Smuzhiyun 	YFSEXTENDLOCK		= 64157, /* YFS Extend a file lock */
45*4882a593Smuzhiyun 	YFSRELEASELOCK		= 64158, /* YFS Release a file lock */
46*4882a593Smuzhiyun 	YFSLOOKUP		= 64161, /* YFS lookup file in directory */
47*4882a593Smuzhiyun 	YFSFLUSHCPS		= 64165,
48*4882a593Smuzhiyun 	YFSFETCHOPAQUEACL	= 64168, /* YFS Fetch file YFS ACL */
49*4882a593Smuzhiyun 	YFSWHOAMI		= 64170,
50*4882a593Smuzhiyun 	YFSREMOVEACL		= 64171,
51*4882a593Smuzhiyun 	YFSREMOVEFILE2		= 64173,
52*4882a593Smuzhiyun 	YFSSTOREOPAQUEACL2	= 64174,
53*4882a593Smuzhiyun 	YFSINLINEBULKSTATUS	= 64536, /* YFS Fetch multiple file statuses with errors */
54*4882a593Smuzhiyun 	YFSFETCHDATA64		= 64537, /* YFS Fetch file data */
55*4882a593Smuzhiyun 	YFSSTOREDATA64		= 64538, /* YFS Store file data */
56*4882a593Smuzhiyun 	YFSUPDATESYMLINK	= 64540,
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun struct yfs_xdr_u64 {
60*4882a593Smuzhiyun 	__be32			msw;
61*4882a593Smuzhiyun 	__be32			lsw;
62*4882a593Smuzhiyun } __packed;
63*4882a593Smuzhiyun 
xdr_to_u64(const struct yfs_xdr_u64 x)64*4882a593Smuzhiyun static inline u64 xdr_to_u64(const struct yfs_xdr_u64 x)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun 	return ((u64)ntohl(x.msw) << 32) | ntohl(x.lsw);
67*4882a593Smuzhiyun }
68*4882a593Smuzhiyun 
u64_to_xdr(const u64 x)69*4882a593Smuzhiyun static inline struct yfs_xdr_u64 u64_to_xdr(const u64 x)
70*4882a593Smuzhiyun {
71*4882a593Smuzhiyun 	return (struct yfs_xdr_u64){ .msw = htonl(x >> 32), .lsw = htonl(x) };
72*4882a593Smuzhiyun }
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun struct yfs_xdr_vnode {
75*4882a593Smuzhiyun 	struct yfs_xdr_u64	lo;
76*4882a593Smuzhiyun 	__be32			hi;
77*4882a593Smuzhiyun 	__be32			unique;
78*4882a593Smuzhiyun } __packed;
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun struct yfs_xdr_YFSFid {
81*4882a593Smuzhiyun 	struct yfs_xdr_u64	volume;
82*4882a593Smuzhiyun 	struct yfs_xdr_vnode	vnode;
83*4882a593Smuzhiyun } __packed;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun struct yfs_xdr_YFSFetchStatus {
87*4882a593Smuzhiyun 	__be32			type;
88*4882a593Smuzhiyun 	__be32			nlink;
89*4882a593Smuzhiyun 	struct yfs_xdr_u64	size;
90*4882a593Smuzhiyun 	struct yfs_xdr_u64	data_version;
91*4882a593Smuzhiyun 	struct yfs_xdr_u64	author;
92*4882a593Smuzhiyun 	struct yfs_xdr_u64	owner;
93*4882a593Smuzhiyun 	struct yfs_xdr_u64	group;
94*4882a593Smuzhiyun 	__be32			mode;
95*4882a593Smuzhiyun 	__be32			caller_access;
96*4882a593Smuzhiyun 	__be32			anon_access;
97*4882a593Smuzhiyun 	struct yfs_xdr_vnode	parent;
98*4882a593Smuzhiyun 	__be32			data_access_protocol;
99*4882a593Smuzhiyun 	struct yfs_xdr_u64	mtime_client;
100*4882a593Smuzhiyun 	struct yfs_xdr_u64	mtime_server;
101*4882a593Smuzhiyun 	__be32			lock_count;
102*4882a593Smuzhiyun 	__be32			abort_code;
103*4882a593Smuzhiyun } __packed;
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun struct yfs_xdr_YFSCallBack {
106*4882a593Smuzhiyun 	__be32			version;
107*4882a593Smuzhiyun 	struct yfs_xdr_u64	expiration_time;
108*4882a593Smuzhiyun 	__be32			type;
109*4882a593Smuzhiyun } __packed;
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun struct yfs_xdr_YFSStoreStatus {
112*4882a593Smuzhiyun 	__be32			mask;
113*4882a593Smuzhiyun 	__be32			mode;
114*4882a593Smuzhiyun 	struct yfs_xdr_u64	mtime_client;
115*4882a593Smuzhiyun 	struct yfs_xdr_u64	owner;
116*4882a593Smuzhiyun 	struct yfs_xdr_u64	group;
117*4882a593Smuzhiyun } __packed;
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun struct yfs_xdr_RPCFlags {
120*4882a593Smuzhiyun 	__be32			rpc_flags;
121*4882a593Smuzhiyun } __packed;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun struct yfs_xdr_YFSVolSync {
124*4882a593Smuzhiyun 	struct yfs_xdr_u64	vol_creation_date;
125*4882a593Smuzhiyun 	struct yfs_xdr_u64	vol_update_date;
126*4882a593Smuzhiyun 	struct yfs_xdr_u64	max_quota;
127*4882a593Smuzhiyun 	struct yfs_xdr_u64	blocks_in_use;
128*4882a593Smuzhiyun 	struct yfs_xdr_u64	blocks_avail;
129*4882a593Smuzhiyun } __packed;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun enum yfs_volume_type {
132*4882a593Smuzhiyun 	yfs_volume_type_ro = 0,
133*4882a593Smuzhiyun 	yfs_volume_type_rw = 1,
134*4882a593Smuzhiyun };
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun #define yfs_FVSOnline		0x1
137*4882a593Smuzhiyun #define yfs_FVSInservice	0x2
138*4882a593Smuzhiyun #define yfs_FVSBlessed		0x4
139*4882a593Smuzhiyun #define yfs_FVSNeedsSalvage	0x8
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun struct yfs_xdr_YFSFetchVolumeStatus {
142*4882a593Smuzhiyun 	struct yfs_xdr_u64	vid;
143*4882a593Smuzhiyun 	struct yfs_xdr_u64	parent_id;
144*4882a593Smuzhiyun 	__be32			flags;
145*4882a593Smuzhiyun 	__be32			type;
146*4882a593Smuzhiyun 	struct yfs_xdr_u64	max_quota;
147*4882a593Smuzhiyun 	struct yfs_xdr_u64	blocks_in_use;
148*4882a593Smuzhiyun 	struct yfs_xdr_u64	part_blocks_avail;
149*4882a593Smuzhiyun 	struct yfs_xdr_u64	part_max_blocks;
150*4882a593Smuzhiyun 	struct yfs_xdr_u64	vol_copy_date;
151*4882a593Smuzhiyun 	struct yfs_xdr_u64	vol_backup_date;
152*4882a593Smuzhiyun } __packed;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun struct yfs_xdr_YFSStoreVolumeStatus {
155*4882a593Smuzhiyun 	__be32			mask;
156*4882a593Smuzhiyun 	struct yfs_xdr_u64	min_quota;
157*4882a593Smuzhiyun 	struct yfs_xdr_u64	max_quota;
158*4882a593Smuzhiyun 	struct yfs_xdr_u64	file_quota;
159*4882a593Smuzhiyun } __packed;
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun enum yfs_lock_type {
162*4882a593Smuzhiyun 	yfs_LockNone		= -1,
163*4882a593Smuzhiyun 	yfs_LockRead		= 0,
164*4882a593Smuzhiyun 	yfs_LockWrite		= 1,
165*4882a593Smuzhiyun 	yfs_LockExtend		= 2,
166*4882a593Smuzhiyun 	yfs_LockRelease		= 3,
167*4882a593Smuzhiyun 	yfs_LockMandatoryRead	= 0x100,
168*4882a593Smuzhiyun 	yfs_LockMandatoryWrite	= 0x101,
169*4882a593Smuzhiyun 	yfs_LockMandatoryExtend	= 0x102,
170*4882a593Smuzhiyun };
171