162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* YFS protocol bits 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved. 562306a36Sopenharmony_ci * Written by David Howells (dhowells@redhat.com) 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define YFS_FS_SERVICE 2500 962306a36Sopenharmony_ci#define YFS_CM_SERVICE 2501 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define YFSCBMAX 1024 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cienum YFS_CM_Operations { 1462306a36Sopenharmony_ci YFSCBProbe = 206, /* probe client */ 1562306a36Sopenharmony_ci YFSCBGetLock = 207, /* get contents of CM lock table */ 1662306a36Sopenharmony_ci YFSCBXStatsVersion = 209, /* get version of extended statistics */ 1762306a36Sopenharmony_ci YFSCBGetXStats = 210, /* get contents of extended statistics data */ 1862306a36Sopenharmony_ci YFSCBInitCallBackState3 = 213, /* initialise callback state, version 3 */ 1962306a36Sopenharmony_ci YFSCBProbeUuid = 214, /* check the client hasn't rebooted */ 2062306a36Sopenharmony_ci YFSCBGetServerPrefs = 215, 2162306a36Sopenharmony_ci YFSCBGetCellServDV = 216, 2262306a36Sopenharmony_ci YFSCBGetLocalCell = 217, 2362306a36Sopenharmony_ci YFSCBGetCacheConfig = 218, 2462306a36Sopenharmony_ci YFSCBGetCellByNum = 65537, 2562306a36Sopenharmony_ci YFSCBTellMeAboutYourself = 65538, /* get client capabilities */ 2662306a36Sopenharmony_ci YFSCBCallBack = 64204, 2762306a36Sopenharmony_ci}; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cienum YFS_FS_Operations { 3062306a36Sopenharmony_ci YFSFETCHACL = 64131, /* YFS Fetch file AFS3 ACL */ 3162306a36Sopenharmony_ci YFSFETCHSTATUS = 64132, /* YFS Fetch file status */ 3262306a36Sopenharmony_ci YFSSTOREACL = 64134, /* YFS Store file AFS3 ACL */ 3362306a36Sopenharmony_ci YFSSTORESTATUS = 64135, /* YFS Store file status */ 3462306a36Sopenharmony_ci YFSREMOVEFILE = 64136, /* YFS Remove a file */ 3562306a36Sopenharmony_ci YFSCREATEFILE = 64137, /* YFS Create a file */ 3662306a36Sopenharmony_ci YFSRENAME = 64138, /* YFS Rename or move a file or directory */ 3762306a36Sopenharmony_ci YFSSYMLINK = 64139, /* YFS Create a symbolic link */ 3862306a36Sopenharmony_ci YFSLINK = 64140, /* YFS Create a hard link */ 3962306a36Sopenharmony_ci YFSMAKEDIR = 64141, /* YFS Create a directory */ 4062306a36Sopenharmony_ci YFSREMOVEDIR = 64142, /* YFS Remove a directory */ 4162306a36Sopenharmony_ci YFSGETVOLUMESTATUS = 64149, /* YFS Get volume status information */ 4262306a36Sopenharmony_ci YFSSETVOLUMESTATUS = 64150, /* YFS Set volume status information */ 4362306a36Sopenharmony_ci YFSSETLOCK = 64156, /* YFS Request a file lock */ 4462306a36Sopenharmony_ci YFSEXTENDLOCK = 64157, /* YFS Extend a file lock */ 4562306a36Sopenharmony_ci YFSRELEASELOCK = 64158, /* YFS Release a file lock */ 4662306a36Sopenharmony_ci YFSLOOKUP = 64161, /* YFS lookup file in directory */ 4762306a36Sopenharmony_ci YFSFLUSHCPS = 64165, 4862306a36Sopenharmony_ci YFSFETCHOPAQUEACL = 64168, /* YFS Fetch file YFS ACL */ 4962306a36Sopenharmony_ci YFSWHOAMI = 64170, 5062306a36Sopenharmony_ci YFSREMOVEACL = 64171, 5162306a36Sopenharmony_ci YFSREMOVEFILE2 = 64173, 5262306a36Sopenharmony_ci YFSSTOREOPAQUEACL2 = 64174, 5362306a36Sopenharmony_ci YFSINLINEBULKSTATUS = 64536, /* YFS Fetch multiple file statuses with errors */ 5462306a36Sopenharmony_ci YFSFETCHDATA64 = 64537, /* YFS Fetch file data */ 5562306a36Sopenharmony_ci YFSSTOREDATA64 = 64538, /* YFS Store file data */ 5662306a36Sopenharmony_ci YFSUPDATESYMLINK = 64540, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cistruct yfs_xdr_u64 { 6062306a36Sopenharmony_ci __be32 msw; 6162306a36Sopenharmony_ci __be32 lsw; 6262306a36Sopenharmony_ci} __packed; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistatic inline u64 xdr_to_u64(const struct yfs_xdr_u64 x) 6562306a36Sopenharmony_ci{ 6662306a36Sopenharmony_ci return ((u64)ntohl(x.msw) << 32) | ntohl(x.lsw); 6762306a36Sopenharmony_ci} 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistatic inline struct yfs_xdr_u64 u64_to_xdr(const u64 x) 7062306a36Sopenharmony_ci{ 7162306a36Sopenharmony_ci return (struct yfs_xdr_u64){ .msw = htonl(x >> 32), .lsw = htonl(x) }; 7262306a36Sopenharmony_ci} 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cistruct yfs_xdr_vnode { 7562306a36Sopenharmony_ci struct yfs_xdr_u64 lo; 7662306a36Sopenharmony_ci __be32 hi; 7762306a36Sopenharmony_ci __be32 unique; 7862306a36Sopenharmony_ci} __packed; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cistruct yfs_xdr_YFSFid { 8162306a36Sopenharmony_ci struct yfs_xdr_u64 volume; 8262306a36Sopenharmony_ci struct yfs_xdr_vnode vnode; 8362306a36Sopenharmony_ci} __packed; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistruct yfs_xdr_YFSFetchStatus { 8762306a36Sopenharmony_ci __be32 type; 8862306a36Sopenharmony_ci __be32 nlink; 8962306a36Sopenharmony_ci struct yfs_xdr_u64 size; 9062306a36Sopenharmony_ci struct yfs_xdr_u64 data_version; 9162306a36Sopenharmony_ci struct yfs_xdr_u64 author; 9262306a36Sopenharmony_ci struct yfs_xdr_u64 owner; 9362306a36Sopenharmony_ci struct yfs_xdr_u64 group; 9462306a36Sopenharmony_ci __be32 mode; 9562306a36Sopenharmony_ci __be32 caller_access; 9662306a36Sopenharmony_ci __be32 anon_access; 9762306a36Sopenharmony_ci struct yfs_xdr_vnode parent; 9862306a36Sopenharmony_ci __be32 data_access_protocol; 9962306a36Sopenharmony_ci struct yfs_xdr_u64 mtime_client; 10062306a36Sopenharmony_ci struct yfs_xdr_u64 mtime_server; 10162306a36Sopenharmony_ci __be32 lock_count; 10262306a36Sopenharmony_ci __be32 abort_code; 10362306a36Sopenharmony_ci} __packed; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistruct yfs_xdr_YFSCallBack { 10662306a36Sopenharmony_ci __be32 version; 10762306a36Sopenharmony_ci struct yfs_xdr_u64 expiration_time; 10862306a36Sopenharmony_ci __be32 type; 10962306a36Sopenharmony_ci} __packed; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_cistruct yfs_xdr_YFSStoreStatus { 11262306a36Sopenharmony_ci __be32 mask; 11362306a36Sopenharmony_ci __be32 mode; 11462306a36Sopenharmony_ci struct yfs_xdr_u64 mtime_client; 11562306a36Sopenharmony_ci struct yfs_xdr_u64 owner; 11662306a36Sopenharmony_ci struct yfs_xdr_u64 group; 11762306a36Sopenharmony_ci} __packed; 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cistruct yfs_xdr_RPCFlags { 12062306a36Sopenharmony_ci __be32 rpc_flags; 12162306a36Sopenharmony_ci} __packed; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_cistruct yfs_xdr_YFSVolSync { 12462306a36Sopenharmony_ci struct yfs_xdr_u64 vol_creation_date; 12562306a36Sopenharmony_ci struct yfs_xdr_u64 vol_update_date; 12662306a36Sopenharmony_ci struct yfs_xdr_u64 max_quota; 12762306a36Sopenharmony_ci struct yfs_xdr_u64 blocks_in_use; 12862306a36Sopenharmony_ci struct yfs_xdr_u64 blocks_avail; 12962306a36Sopenharmony_ci} __packed; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cienum yfs_volume_type { 13262306a36Sopenharmony_ci yfs_volume_type_ro = 0, 13362306a36Sopenharmony_ci yfs_volume_type_rw = 1, 13462306a36Sopenharmony_ci}; 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci#define yfs_FVSOnline 0x1 13762306a36Sopenharmony_ci#define yfs_FVSInservice 0x2 13862306a36Sopenharmony_ci#define yfs_FVSBlessed 0x4 13962306a36Sopenharmony_ci#define yfs_FVSNeedsSalvage 0x8 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_cistruct yfs_xdr_YFSFetchVolumeStatus { 14262306a36Sopenharmony_ci struct yfs_xdr_u64 vid; 14362306a36Sopenharmony_ci struct yfs_xdr_u64 parent_id; 14462306a36Sopenharmony_ci __be32 flags; 14562306a36Sopenharmony_ci __be32 type; 14662306a36Sopenharmony_ci struct yfs_xdr_u64 max_quota; 14762306a36Sopenharmony_ci struct yfs_xdr_u64 blocks_in_use; 14862306a36Sopenharmony_ci struct yfs_xdr_u64 part_blocks_avail; 14962306a36Sopenharmony_ci struct yfs_xdr_u64 part_max_blocks; 15062306a36Sopenharmony_ci struct yfs_xdr_u64 vol_copy_date; 15162306a36Sopenharmony_ci struct yfs_xdr_u64 vol_backup_date; 15262306a36Sopenharmony_ci} __packed; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_cistruct yfs_xdr_YFSStoreVolumeStatus { 15562306a36Sopenharmony_ci __be32 mask; 15662306a36Sopenharmony_ci struct yfs_xdr_u64 min_quota; 15762306a36Sopenharmony_ci struct yfs_xdr_u64 max_quota; 15862306a36Sopenharmony_ci struct yfs_xdr_u64 file_quota; 15962306a36Sopenharmony_ci} __packed; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_cienum yfs_lock_type { 16262306a36Sopenharmony_ci yfs_LockNone = -1, 16362306a36Sopenharmony_ci yfs_LockRead = 0, 16462306a36Sopenharmony_ci yfs_LockWrite = 1, 16562306a36Sopenharmony_ci yfs_LockExtend = 2, 16662306a36Sopenharmony_ci yfs_LockRelease = 3, 16762306a36Sopenharmony_ci yfs_LockMandatoryRead = 0x100, 16862306a36Sopenharmony_ci yfs_LockMandatoryWrite = 0x101, 16962306a36Sopenharmony_ci yfs_LockMandatoryExtend = 0x102, 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci/* RXYFS Viced Capability Flags */ 17362306a36Sopenharmony_ci#define YFS_VICED_CAPABILITY_ERRORTRANS 0x0001 /* Deprecated v0.195 */ 17462306a36Sopenharmony_ci#define YFS_VICED_CAPABILITY_64BITFILES 0x0002 /* Deprecated v0.195 */ 17562306a36Sopenharmony_ci#define YFS_VICED_CAPABILITY_WRITELOCKACL 0x0004 /* Can lock a file even without lock perm */ 17662306a36Sopenharmony_ci#define YFS_VICED_CAPABILITY_SANEACLS 0x0008 /* Deprecated v0.195 */ 177