root/fs/orangefs/upcall.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * (C) 2001 Clemson University and The University of Chicago
 *
 * See COPYING in top-level directory.
 */

#ifndef __UPCALL_H
#define __UPCALL_H

/*
 * Sanitized this header file to fix
 * 32-64 bit interaction issues between
 * client-core and device
 */
struct orangefs_io_request_s {
        __s32 __pad1;
        __s32 buf_index;
        __s32 count;
        __s32 __pad2;
        __s64 offset;
        struct orangefs_object_kref refn;
        enum ORANGEFS_io_type io_type;
        __s32 readahead_size;
};

struct orangefs_lookup_request_s {
        __s32 sym_follow;
        __s32 __pad1;
        struct orangefs_object_kref parent_refn;
        char d_name[ORANGEFS_NAME_MAX];
};

struct orangefs_create_request_s {
        struct orangefs_object_kref parent_refn;
        struct ORANGEFS_sys_attr_s attributes;
        char d_name[ORANGEFS_NAME_MAX];
};

struct orangefs_symlink_request_s {
        struct orangefs_object_kref parent_refn;
        struct ORANGEFS_sys_attr_s attributes;
        char entry_name[ORANGEFS_NAME_MAX];
        char target[ORANGEFS_NAME_MAX];
};

struct orangefs_getattr_request_s {
        struct orangefs_object_kref refn;
        __u32 mask;
        __u32 __pad1;
};

struct orangefs_setattr_request_s {
        struct orangefs_object_kref refn;
        struct ORANGEFS_sys_attr_s attributes;
};

struct orangefs_remove_request_s {
        struct orangefs_object_kref parent_refn;
        char d_name[ORANGEFS_NAME_MAX];
};

struct orangefs_mkdir_request_s {
        struct orangefs_object_kref parent_refn;
        struct ORANGEFS_sys_attr_s attributes;
        char d_name[ORANGEFS_NAME_MAX];
};

struct orangefs_readdir_request_s {
        struct orangefs_object_kref refn;
        __u64 token;
        __s32 max_dirent_count;
        __s32 buf_index;
};

struct orangefs_readdirplus_request_s {
        struct orangefs_object_kref refn;
        __u64 token;
        __s32 max_dirent_count;
        __u32 mask;
        __s32 buf_index;
        __s32 __pad1;
};

struct orangefs_rename_request_s {
        struct orangefs_object_kref old_parent_refn;
        struct orangefs_object_kref new_parent_refn;
        char d_old_name[ORANGEFS_NAME_MAX];
        char d_new_name[ORANGEFS_NAME_MAX];
};

struct orangefs_statfs_request_s {
        __s32 fs_id;
        __s32 __pad1;
};

struct orangefs_truncate_request_s {
        struct orangefs_object_kref refn;
        __s64 size;
};

struct orangefs_ra_cache_flush_request_s {
        struct orangefs_object_kref refn;
};

struct orangefs_fs_mount_request_s {
        char orangefs_config_server[ORANGEFS_MAX_SERVER_ADDR_LEN];
};

struct orangefs_fs_umount_request_s {
        __s32 id;
        __s32 fs_id;
        char orangefs_config_server[ORANGEFS_MAX_SERVER_ADDR_LEN];
};

struct orangefs_getxattr_request_s {
        struct orangefs_object_kref refn;
        __s32 key_sz;
        __s32 __pad1;
        char key[ORANGEFS_MAX_XATTR_NAMELEN];
};

struct orangefs_setxattr_request_s {
        struct orangefs_object_kref refn;
        struct ORANGEFS_keyval_pair keyval;
        __s32 flags;
        __s32 __pad1;
};

struct orangefs_listxattr_request_s {
        struct orangefs_object_kref refn;
        __s32 requested_count;
        __s32 __pad1;
        __u64 token;
};

struct orangefs_removexattr_request_s {
        struct orangefs_object_kref refn;
        __s32 key_sz;
        __s32 __pad1;
        char key[ORANGEFS_MAX_XATTR_NAMELEN];
};

struct orangefs_op_cancel_s {
        __u64 op_tag;
};

struct orangefs_fsync_request_s {
        struct orangefs_object_kref refn;
};

enum orangefs_param_request_type {
        ORANGEFS_PARAM_REQUEST_SET = 1,
        ORANGEFS_PARAM_REQUEST_GET = 2
};

enum orangefs_param_request_op {
        ORANGEFS_PARAM_REQUEST_OP_ACACHE_TIMEOUT_MSECS = 1,
        ORANGEFS_PARAM_REQUEST_OP_ACACHE_HARD_LIMIT = 2,
        ORANGEFS_PARAM_REQUEST_OP_ACACHE_SOFT_LIMIT = 3,
        ORANGEFS_PARAM_REQUEST_OP_ACACHE_RECLAIM_PERCENTAGE = 4,
        ORANGEFS_PARAM_REQUEST_OP_PERF_TIME_INTERVAL_SECS = 5,
        ORANGEFS_PARAM_REQUEST_OP_PERF_HISTORY_SIZE = 6,
        ORANGEFS_PARAM_REQUEST_OP_PERF_RESET = 7,
        ORANGEFS_PARAM_REQUEST_OP_NCACHE_TIMEOUT_MSECS = 8,
        ORANGEFS_PARAM_REQUEST_OP_NCACHE_HARD_LIMIT = 9,
        ORANGEFS_PARAM_REQUEST_OP_NCACHE_SOFT_LIMIT = 10,
        ORANGEFS_PARAM_REQUEST_OP_NCACHE_RECLAIM_PERCENTAGE = 11,
        ORANGEFS_PARAM_REQUEST_OP_STATIC_ACACHE_TIMEOUT_MSECS = 12,
        ORANGEFS_PARAM_REQUEST_OP_STATIC_ACACHE_HARD_LIMIT = 13,
        ORANGEFS_PARAM_REQUEST_OP_STATIC_ACACHE_SOFT_LIMIT = 14,
        ORANGEFS_PARAM_REQUEST_OP_STATIC_ACACHE_RECLAIM_PERCENTAGE = 15,
        ORANGEFS_PARAM_REQUEST_OP_CLIENT_DEBUG = 16,
        ORANGEFS_PARAM_REQUEST_OP_CCACHE_TIMEOUT_SECS = 17,
        ORANGEFS_PARAM_REQUEST_OP_CCACHE_HARD_LIMIT = 18,
        ORANGEFS_PARAM_REQUEST_OP_CCACHE_SOFT_LIMIT = 19,
        ORANGEFS_PARAM_REQUEST_OP_CCACHE_RECLAIM_PERCENTAGE = 20,
        ORANGEFS_PARAM_REQUEST_OP_CAPCACHE_TIMEOUT_SECS = 21,
        ORANGEFS_PARAM_REQUEST_OP_CAPCACHE_HARD_LIMIT = 22,
        ORANGEFS_PARAM_REQUEST_OP_CAPCACHE_SOFT_LIMIT = 23,
        ORANGEFS_PARAM_REQUEST_OP_CAPCACHE_RECLAIM_PERCENTAGE = 24,
        ORANGEFS_PARAM_REQUEST_OP_TWO_MASK_VALUES = 25,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_SIZE = 26,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_COUNT = 27,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_COUNT_SIZE = 28,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_READCNT = 29,
};

struct orangefs_param_request_s {
        enum orangefs_param_request_type type;
        enum orangefs_param_request_op op;
        union {
                __s64 value64;
                __s32 value32[2];
        } u;
        char s_value[ORANGEFS_MAX_DEBUG_STRING_LEN];
};

enum orangefs_perf_count_request_type {
        ORANGEFS_PERF_COUNT_REQUEST_ACACHE = 1,
        ORANGEFS_PERF_COUNT_REQUEST_NCACHE = 2,
        ORANGEFS_PERF_COUNT_REQUEST_CAPCACHE = 3,
};

struct orangefs_perf_count_request_s {
        enum orangefs_perf_count_request_type type;
        __s32 __pad1;
};

struct orangefs_fs_key_request_s {
        __s32 fsid;
        __s32 __pad1;
};

/* 2.9.6 */
struct orangefs_features_request_s {
        __u64 features;
};

struct orangefs_upcall_s {
        __s32 type;
        __u32 uid;
        __u32 gid;
        int pid;
        int tgid;
        /* Trailers unused but must be retained for protocol compatibility. */
        __s64 trailer_size;
        char *trailer_buf;

        union {
                struct orangefs_io_request_s io;
                struct orangefs_lookup_request_s lookup;
                struct orangefs_create_request_s create;
                struct orangefs_symlink_request_s sym;
                struct orangefs_getattr_request_s getattr;
                struct orangefs_setattr_request_s setattr;
                struct orangefs_remove_request_s remove;
                struct orangefs_mkdir_request_s mkdir;
                struct orangefs_readdir_request_s readdir;
                struct orangefs_readdirplus_request_s readdirplus;
                struct orangefs_rename_request_s rename;
                struct orangefs_statfs_request_s statfs;
                struct orangefs_truncate_request_s truncate;
                struct orangefs_ra_cache_flush_request_s ra_cache_flush;
                struct orangefs_fs_mount_request_s fs_mount;
                struct orangefs_fs_umount_request_s fs_umount;
                struct orangefs_getxattr_request_s getxattr;
                struct orangefs_setxattr_request_s setxattr;
                struct orangefs_listxattr_request_s listxattr;
                struct orangefs_removexattr_request_s removexattr;
                struct orangefs_op_cancel_s cancel;
                struct orangefs_fsync_request_s fsync;
                struct orangefs_param_request_s param;
                struct orangefs_perf_count_request_s perf_count;
                struct orangefs_fs_key_request_s fs_key;
                struct orangefs_features_request_s features;
        } req;
};

#endif /* __UPCALL_H */