/* SPDX-License-Identifier: GPL-2.0-or-later */ 
 | 
/* YFS protocol bits 
 | 
 * 
 | 
 * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved. 
 | 
 * Written by David Howells (dhowells@redhat.com) 
 | 
 */ 
 | 
  
 | 
#define YFS_FS_SERVICE    2500 
 | 
#define YFS_CM_SERVICE    2501 
 | 
  
 | 
#define YFSCBMAX    1024 
 | 
  
 | 
enum YFS_CM_Operations { 
 | 
    YFSCBProbe        = 206,    /* probe client */ 
 | 
    YFSCBGetLock        = 207,    /* get contents of CM lock table */ 
 | 
    YFSCBXStatsVersion    = 209,    /* get version of extended statistics */ 
 | 
    YFSCBGetXStats        = 210,    /* get contents of extended statistics data */ 
 | 
    YFSCBInitCallBackState3    = 213,    /* initialise callback state, version 3 */ 
 | 
    YFSCBProbeUuid        = 214,    /* check the client hasn't rebooted */ 
 | 
    YFSCBGetServerPrefs    = 215, 
 | 
    YFSCBGetCellServDV    = 216, 
 | 
    YFSCBGetLocalCell    = 217, 
 | 
    YFSCBGetCacheConfig    = 218, 
 | 
    YFSCBGetCellByNum    = 65537, 
 | 
    YFSCBTellMeAboutYourself = 65538, /* get client capabilities */ 
 | 
    YFSCBCallBack        = 64204, 
 | 
}; 
 | 
  
 | 
enum YFS_FS_Operations { 
 | 
    YFSFETCHACL        = 64131, /* YFS Fetch file AFS3 ACL */ 
 | 
    YFSFETCHSTATUS        = 64132, /* YFS Fetch file status */ 
 | 
    YFSSTOREACL        = 64134, /* YFS Store file AFS3 ACL */ 
 | 
    YFSSTORESTATUS        = 64135, /* YFS Store file status */ 
 | 
    YFSREMOVEFILE        = 64136, /* YFS Remove a file */ 
 | 
    YFSCREATEFILE        = 64137, /* YFS Create a file */ 
 | 
    YFSRENAME        = 64138, /* YFS Rename or move a file or directory */ 
 | 
    YFSSYMLINK        = 64139, /* YFS Create a symbolic link */ 
 | 
    YFSLINK            = 64140, /* YFS Create a hard link */ 
 | 
    YFSMAKEDIR        = 64141, /* YFS Create a directory */ 
 | 
    YFSREMOVEDIR        = 64142, /* YFS Remove a directory */ 
 | 
    YFSGETVOLUMESTATUS    = 64149, /* YFS Get volume status information */ 
 | 
    YFSSETVOLUMESTATUS    = 64150, /* YFS Set volume status information */ 
 | 
    YFSSETLOCK        = 64156, /* YFS Request a file lock */ 
 | 
    YFSEXTENDLOCK        = 64157, /* YFS Extend a file lock */ 
 | 
    YFSRELEASELOCK        = 64158, /* YFS Release a file lock */ 
 | 
    YFSLOOKUP        = 64161, /* YFS lookup file in directory */ 
 | 
    YFSFLUSHCPS        = 64165, 
 | 
    YFSFETCHOPAQUEACL    = 64168, /* YFS Fetch file YFS ACL */ 
 | 
    YFSWHOAMI        = 64170, 
 | 
    YFSREMOVEACL        = 64171, 
 | 
    YFSREMOVEFILE2        = 64173, 
 | 
    YFSSTOREOPAQUEACL2    = 64174, 
 | 
    YFSINLINEBULKSTATUS    = 64536, /* YFS Fetch multiple file statuses with errors */ 
 | 
    YFSFETCHDATA64        = 64537, /* YFS Fetch file data */ 
 | 
    YFSSTOREDATA64        = 64538, /* YFS Store file data */ 
 | 
    YFSUPDATESYMLINK    = 64540, 
 | 
}; 
 | 
  
 | 
struct yfs_xdr_u64 { 
 | 
    __be32            msw; 
 | 
    __be32            lsw; 
 | 
} __packed; 
 | 
  
 | 
static inline u64 xdr_to_u64(const struct yfs_xdr_u64 x) 
 | 
{ 
 | 
    return ((u64)ntohl(x.msw) << 32) | ntohl(x.lsw); 
 | 
} 
 | 
  
 | 
static inline struct yfs_xdr_u64 u64_to_xdr(const u64 x) 
 | 
{ 
 | 
    return (struct yfs_xdr_u64){ .msw = htonl(x >> 32), .lsw = htonl(x) }; 
 | 
} 
 | 
  
 | 
struct yfs_xdr_vnode { 
 | 
    struct yfs_xdr_u64    lo; 
 | 
    __be32            hi; 
 | 
    __be32            unique; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_YFSFid { 
 | 
    struct yfs_xdr_u64    volume; 
 | 
    struct yfs_xdr_vnode    vnode; 
 | 
} __packed; 
 | 
  
 | 
  
 | 
struct yfs_xdr_YFSFetchStatus { 
 | 
    __be32            type; 
 | 
    __be32            nlink; 
 | 
    struct yfs_xdr_u64    size; 
 | 
    struct yfs_xdr_u64    data_version; 
 | 
    struct yfs_xdr_u64    author; 
 | 
    struct yfs_xdr_u64    owner; 
 | 
    struct yfs_xdr_u64    group; 
 | 
    __be32            mode; 
 | 
    __be32            caller_access; 
 | 
    __be32            anon_access; 
 | 
    struct yfs_xdr_vnode    parent; 
 | 
    __be32            data_access_protocol; 
 | 
    struct yfs_xdr_u64    mtime_client; 
 | 
    struct yfs_xdr_u64    mtime_server; 
 | 
    __be32            lock_count; 
 | 
    __be32            abort_code; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_YFSCallBack { 
 | 
    __be32            version; 
 | 
    struct yfs_xdr_u64    expiration_time; 
 | 
    __be32            type; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_YFSStoreStatus { 
 | 
    __be32            mask; 
 | 
    __be32            mode; 
 | 
    struct yfs_xdr_u64    mtime_client; 
 | 
    struct yfs_xdr_u64    owner; 
 | 
    struct yfs_xdr_u64    group; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_RPCFlags { 
 | 
    __be32            rpc_flags; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_YFSVolSync { 
 | 
    struct yfs_xdr_u64    vol_creation_date; 
 | 
    struct yfs_xdr_u64    vol_update_date; 
 | 
    struct yfs_xdr_u64    max_quota; 
 | 
    struct yfs_xdr_u64    blocks_in_use; 
 | 
    struct yfs_xdr_u64    blocks_avail; 
 | 
} __packed; 
 | 
  
 | 
enum yfs_volume_type { 
 | 
    yfs_volume_type_ro = 0, 
 | 
    yfs_volume_type_rw = 1, 
 | 
}; 
 | 
  
 | 
#define yfs_FVSOnline        0x1 
 | 
#define yfs_FVSInservice    0x2 
 | 
#define yfs_FVSBlessed        0x4 
 | 
#define yfs_FVSNeedsSalvage    0x8 
 | 
  
 | 
struct yfs_xdr_YFSFetchVolumeStatus { 
 | 
    struct yfs_xdr_u64    vid; 
 | 
    struct yfs_xdr_u64    parent_id; 
 | 
    __be32            flags; 
 | 
    __be32            type; 
 | 
    struct yfs_xdr_u64    max_quota; 
 | 
    struct yfs_xdr_u64    blocks_in_use; 
 | 
    struct yfs_xdr_u64    part_blocks_avail; 
 | 
    struct yfs_xdr_u64    part_max_blocks; 
 | 
    struct yfs_xdr_u64    vol_copy_date; 
 | 
    struct yfs_xdr_u64    vol_backup_date; 
 | 
} __packed; 
 | 
  
 | 
struct yfs_xdr_YFSStoreVolumeStatus { 
 | 
    __be32            mask; 
 | 
    struct yfs_xdr_u64    min_quota; 
 | 
    struct yfs_xdr_u64    max_quota; 
 | 
    struct yfs_xdr_u64    file_quota; 
 | 
} __packed; 
 | 
  
 | 
enum yfs_lock_type { 
 | 
    yfs_LockNone        = -1, 
 | 
    yfs_LockRead        = 0, 
 | 
    yfs_LockWrite        = 1, 
 | 
    yfs_LockExtend        = 2, 
 | 
    yfs_LockRelease        = 3, 
 | 
    yfs_LockMandatoryRead    = 0x100, 
 | 
    yfs_LockMandatoryWrite    = 0x101, 
 | 
    yfs_LockMandatoryExtend    = 0x102, 
 | 
}; 
 |