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