diff options
Diffstat (limited to 'rpc/xdr')
-rw-r--r-- | rpc/xdr/src/glusterfs3.h | 303 | ||||
-rw-r--r-- | rpc/xdr/src/glusterfs4-xdr.x | 801 | ||||
-rw-r--r-- | rpc/xdr/src/libgfxdr.sym | 94 |
3 files changed, 1169 insertions, 29 deletions
diff --git a/rpc/xdr/src/glusterfs3.h b/rpc/xdr/src/glusterfs3.h index eef39416b5c..bbe231139b3 100644 --- a/rpc/xdr/src/glusterfs3.h +++ b/rpc/xdr/src/glusterfs3.h @@ -314,7 +314,6 @@ gf_stat_to_iatt (struct gf_iatt *gf_stat, struct iatt *iatt) iatt->ia_ctime_nsec = gf_stat->ia_ctime_nsec ; } - static inline void gf_stat_from_iatt (struct gf_iatt *gf_stat, struct iatt *iatt) { @@ -324,7 +323,7 @@ gf_stat_from_iatt (struct gf_iatt *gf_stat, struct iatt *iatt) memcpy (gf_stat->ia_gfid, iatt->ia_gfid, 16); gf_stat->ia_ino = iatt->ia_ino ; gf_stat->ia_dev = iatt->ia_dev ; - gf_stat->mode = st_mode_from_ia (iatt->ia_prot, iatt->ia_type); + gf_stat->mode = st_mode_from_ia (iatt->ia_prot, iatt->ia_type); gf_stat->ia_nlink = iatt->ia_nlink ; gf_stat->ia_uid = iatt->ia_uid ; gf_stat->ia_gid = iatt->ia_gid ; @@ -575,7 +574,303 @@ out: return ret; } -extern int dict_to_xdr (dict_t *this, gfx_dict *xdict); -extern int xdr_to_dict (gfx_dict *xdict, dict_t **to); +static inline void +gfx_stat_to_iattx (struct gfx_iattx *gf_stat, struct iatt *iatt) +{ + if (!iatt || !gf_stat) + return; + + memcpy (iatt->ia_gfid, gf_stat->ia_gfid, 16); + + iatt->ia_flags = gf_stat->ia_flags; + iatt->ia_ino = gf_stat->ia_ino ; + iatt->ia_dev = gf_stat->ia_dev ; + iatt->ia_rdev = gf_stat->ia_rdev ; + iatt->ia_size = gf_stat->ia_size ; + iatt->ia_nlink = gf_stat->ia_nlink ; + iatt->ia_uid = gf_stat->ia_uid ; + iatt->ia_gid = gf_stat->ia_gid ; + iatt->ia_blksize = gf_stat->ia_blksize ; + iatt->ia_blocks = gf_stat->ia_blocks ; + iatt->ia_atime = gf_stat->ia_atime ; + iatt->ia_atime_nsec = gf_stat->ia_atime_nsec ; + iatt->ia_mtime = gf_stat->ia_mtime ; + iatt->ia_mtime_nsec = gf_stat->ia_mtime_nsec ; + iatt->ia_ctime = gf_stat->ia_ctime ; + iatt->ia_ctime_nsec = gf_stat->ia_ctime_nsec ; + iatt->ia_btime = gf_stat->ia_btime ; + iatt->ia_btime_nsec = gf_stat->ia_btime_nsec ; + iatt->ia_attributes = gf_stat->ia_attributes; + iatt->ia_attributes_mask = gf_stat->ia_attributes_mask; + + iatt->ia_type = ia_type_from_st_mode (gf_stat->mode); + iatt->ia_prot = ia_prot_from_st_mode (gf_stat->mode); +} + + +static inline void +gfx_stat_from_iattx (struct gfx_iattx *gf_stat, struct iatt *iatt) +{ + if (!iatt || !gf_stat) + return; + + memcpy (gf_stat->ia_gfid, iatt->ia_gfid, 16); + gf_stat->ia_ino = iatt->ia_ino ; + gf_stat->ia_dev = iatt->ia_dev ; + + gf_stat->ia_nlink = iatt->ia_nlink ; + gf_stat->ia_uid = iatt->ia_uid ; + gf_stat->ia_gid = iatt->ia_gid ; + gf_stat->ia_rdev = iatt->ia_rdev ; + gf_stat->ia_size = iatt->ia_size ; + gf_stat->ia_blksize = iatt->ia_blksize ; + gf_stat->ia_blocks = iatt->ia_blocks ; + gf_stat->ia_atime = iatt->ia_atime ; + gf_stat->ia_atime_nsec = iatt->ia_atime_nsec ; + gf_stat->ia_mtime = iatt->ia_mtime ; + gf_stat->ia_mtime_nsec = iatt->ia_mtime_nsec ; + gf_stat->ia_ctime = iatt->ia_ctime ; + gf_stat->ia_ctime_nsec = iatt->ia_ctime_nsec ; + + gf_stat->ia_flags = iatt->ia_flags; + gf_stat->ia_btime = iatt->ia_btime ; + gf_stat->ia_btime_nsec = iatt->ia_btime_nsec ; + gf_stat->ia_attributes = iatt->ia_attributes; + gf_stat->ia_attributes_mask = iatt->ia_attributes_mask; + + gf_stat->mode = st_mode_from_ia (iatt->ia_prot, iatt->ia_type); +} + +/* dict_to_xdr () */ +static inline int +dict_to_xdr (dict_t *this, gfx_dict *dict) +{ + int ret = -1; + int i = 0; + int index = 0; + data_pair_t *dpair = NULL; + gfx_dict_pair *xpair = NULL; + ssize_t size = 0; + + /* This is a failure as we expect destination to be valid */ + if (!dict) + goto out; + + /* This is OK as dictionary can be null, in which case, destination + should also know that it is NULL. */ + if (!this) { + /* encode special meaning data here, + while decoding, you know it is NULL dict */ + dict->count = -1; + /* everything else is normal */ + dict->pairs.pairs_len = 0; + ret = 0; + goto out; + } + + dict->pairs.pairs_val = GF_CALLOC (1, (this->count * + sizeof (gfx_dict_pair)), + gf_common_mt_char); + if (!dict->pairs.pairs_val) + goto out; + + dpair = this->members_list; + for (i = 0; i < this->count; i++) { + xpair = &dict->pairs.pairs_val[index]; + + xpair->key.key_val = dpair->key; + xpair->key.key_len = strlen (dpair->key) + 1; + xpair->value.type = dpair->value->data_type; + switch (dpair->value->data_type) { + /* Add more type here */ + case GF_DATA_TYPE_INT: + index++; + xpair->value.gfx_value_u.value_int = + strtoll (dpair->value->data, NULL, 0); + break; + case GF_DATA_TYPE_UINT: + index++; + xpair->value.gfx_value_u.value_uint = + strtoull (dpair->value->data, NULL, 0); + break; + case GF_DATA_TYPE_DOUBLE: + index++; + xpair->value.gfx_value_u.value_dbl = + strtod (dpair->value->data, NULL); + break; + case GF_DATA_TYPE_STR: + index++; + xpair->value.gfx_value_u.val_string.val_string_val = dpair->value->data; + xpair->value.gfx_value_u.val_string.val_string_len = dpair->value->len; + break; + case GF_DATA_TYPE_IATT: + index++; + gfx_stat_from_iattx (&xpair->value.gfx_value_u.iatt, + (struct iatt *)dpair->value->data); + break; + case GF_DATA_TYPE_GFUUID: + index++; + memcpy (&xpair->value.gfx_value_u.uuid, + dpair->value->data, sizeof (uuid_t)); + break; + + case GF_DATA_TYPE_PTR: + index++; + /* Ideally, each type of data stored in dictionary + should have type. A pointer type shouldn't be + sent on wire */ + + /* This is done for backward compatibility as dict is + heavily used for transporting data over wire. + Ideally, whereever there is an issue, fix and move on */ + xpair->value.gfx_value_u.other.other_val = + dpair->value->data; + xpair->value.gfx_value_u.other.other_len = + dpair->value->len; + + /* Change this to INFO, after taking the above down */ + gf_msg ("dict", GF_LOG_INFO, EINVAL, + LG_MSG_DICT_SERIAL_FAILED, + "key '%s' is would not be sent on wire in future", + dpair->key); + break; + default: + /* Unknown type and ptr type is not sent on wire */ + gf_msg ("dict", GF_LOG_WARNING, EINVAL, LG_MSG_DICT_SERIAL_FAILED, + "key '%s' is not sent on wire", dpair->key); + break; + } + dpair = dpair->next; + } + + dict->pairs.pairs_len = index; + dict->count = index; + + /* This is required mainly in the RPC layer to understand the + boundary for proper payload. Hence only send the size of + variable XDR size. ie, the formula should be: + xdr_size = total size - (xdr_size + count + pairs.pairs_len)) */ + size = xdr_sizeof ((xdrproc_t) xdr_gfx_dict, dict); + + dict->xdr_size = (size > 12) ? (size - 12) : 0; + + ret = 0; +out: + return ret; +} + +static inline int +xdr_to_dict (gfx_dict *dict, dict_t **to) +{ + int ret = -1; + int index = 0; + char *key = NULL; + char *value = NULL; + gfx_dict_pair *xpair = NULL; + dict_t *this = NULL; + unsigned char *uuid = NULL; + struct iatt *iatt = NULL; + + if (!to || !dict) + goto out; + + if (dict->count < 0) { + /* indicates NULL dict was passed for encoding */ + ret = 0; + goto out; + } + + this = dict_new(); + if (!this) + goto out; + + for (index = 0; index < dict->pairs.pairs_len; index++) { + ret = -1; + xpair = &dict->pairs.pairs_val[index]; + + key = xpair->key.key_val; + switch (xpair->value.type) { + /* Add more type here */ + case GF_DATA_TYPE_INT: + ret = dict_set_int64 (this, key, + xpair->value.gfx_value_u.value_int); + break; + case GF_DATA_TYPE_UINT: + ret = dict_set_uint64 (this, key, + xpair->value.gfx_value_u.value_uint); + break; + case GF_DATA_TYPE_DOUBLE: + ret = dict_set_double (this, key, + xpair->value.gfx_value_u.value_dbl); + break; + case GF_DATA_TYPE_STR: + value = GF_CALLOC (1, xpair->value.gfx_value_u.val_string.val_string_len + 1, + gf_common_mt_char); + if (!value) { + errno = ENOMEM; + goto out; + } + memcpy (value, xpair->value.gfx_value_u.val_string.val_string_val, + xpair->value.gfx_value_u.val_string.val_string_len); + free (xpair->value.gfx_value_u.val_string.val_string_val); + ret = dict_set_dynstr (this, key, value); + break; + case GF_DATA_TYPE_GFUUID: + uuid = GF_CALLOC (1, sizeof (uuid_t), gf_common_mt_uuid_t); + if (!uuid) { + errno = ENOMEM; + goto out; + } + memcpy (uuid, xpair->value.gfx_value_u.uuid, sizeof (uuid_t)); + ret = dict_set_gfuuid (this, key, uuid, false); + break; + case GF_DATA_TYPE_IATT: + iatt = GF_CALLOC (1, sizeof (struct iatt), gf_common_mt_char); + if (!iatt) { + errno = ENOMEM; + goto out; + } + gfx_stat_to_iattx (&xpair->value.gfx_value_u.iatt, iatt); + ret = dict_set_iatt (this, key, iatt, false); + break; + case GF_DATA_TYPE_PTR: + value = GF_CALLOC (1, xpair->value.gfx_value_u.other.other_len + 1, + gf_common_mt_char); + if (!value) { + errno = ENOMEM; + goto out; + } + memcpy (value, xpair->value.gfx_value_u.other.other_val, + xpair->value.gfx_value_u.other.other_len); + free (xpair->value.gfx_value_u.other.other_val); + ret = dict_set_dynptr (this, key, value, + xpair->value.gfx_value_u.other.other_len); + break; + default: + ret = 0; + /* Unknown type and ptr type is not sent on wire */ + break; + } + if (ret) { + gf_msg_debug (THIS->name, ENOMEM, + "failed to set the key (%s) into dict", + key); + } + free (xpair->key.key_val); + } + + free (dict->pairs.pairs_val); + ret = 0; + + /* If everything is fine, assign the dictionary to target */ + *to = this; + this = NULL; + +out: + if (this) + dict_unref (this); + + return ret; +} #endif /* !_GLUSTERFS3_H */ diff --git a/rpc/xdr/src/glusterfs4-xdr.x b/rpc/xdr/src/glusterfs4-xdr.x index 9e3223b58b5..bf92c8db9de 100644 --- a/rpc/xdr/src/glusterfs4-xdr.x +++ b/rpc/xdr/src/glusterfs4-xdr.x @@ -16,6 +16,36 @@ %#include "glusterfs3-xdr.h" +/* Need to consume iattx and new dict in all the fops */ +struct gfx_iattx { + opaque ia_gfid[16]; + + unsigned hyper ia_flags; + unsigned hyper ia_ino; /* inode number */ + unsigned hyper ia_dev; /* backing device ID */ + unsigned hyper ia_rdev; /* device ID (if special file) */ + unsigned hyper ia_size; /* file size in bytes */ + unsigned hyper ia_blocks; /* number of 512B blocks allocated */ + unsigned hyper ia_attributes; /* chattr related:compressed, immutable, + * append only, encrypted etc.*/ + unsigned hyper ia_attributes_mask; /* Mask for the attributes */ + + hyper ia_atime; /* last access time */ + hyper ia_mtime; /* last modification time */ + hyper ia_ctime; /* last status change time */ + hyper ia_btime; /* creation time. Fill using statx */ + + unsigned int ia_atime_nsec; + unsigned int ia_mtime_nsec; + unsigned int ia_ctime_nsec; + unsigned int ia_btime_nsec; + unsigned int ia_nlink; /* Link count */ + unsigned int ia_uid; /* user ID of owner */ + unsigned int ia_gid; /* group ID of owner */ + unsigned int ia_blksize; /* blocksize for filesystem I/O */ + unsigned int mode; /* type of file and rwx mode */ +}; + union gfx_value switch (gf_dict_data_type_t type) { case GF_DATA_TYPE_INT: hyper value_int; @@ -26,9 +56,9 @@ union gfx_value switch (gf_dict_data_type_t type) { case GF_DATA_TYPE_STR: opaque val_string<>; case GF_DATA_TYPE_IATT: - gf_iatt iatt; + gfx_iattx iatt; case GF_DATA_TYPE_GFUUID: - opaque uuid[20]; + opaque uuid[16]; case GF_DATA_TYPE_PTR: opaque other<>; }; @@ -64,52 +94,773 @@ struct gfx_dict_pair { }; struct gfx_dict { - unsigned int count; + unsigned int xdr_size; + int count; gfx_dict_pair pairs<>; }; -/* fops */ - struct gfs3_fsetattr_req_v2 { +/* FOPS */ +struct gfx_common_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_common_iatt_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; + gfx_iattx stat; +}; + +struct gfx_common_2iatt_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; + gfx_iattx prestat; + gfx_iattx poststat; +}; + +struct gfx_common_3iatt_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gfx_iattx stat; + gfx_iattx preparent; + gfx_iattx postparent; +}; + +struct gfx_fsetattr_req { opaque gfid[16]; hyper fd; - struct gf_iatt stbuf; + gfx_iattx stbuf; int valid; - opaque xdata<>; /* Extra data */ -} ; + gfx_dict xdata; /* Extra data */ +}; - struct gfs3_rchecksum_req_v2 { +struct gfx_rchecksum_req { opaque gfid[16]; hyper fd; unsigned hyper offset; unsigned int len; - opaque xdata<>; /* Extra data */ + unsigned int flags; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_icreate_req { + opaque gfid[16]; + unsigned int mode; + gfx_dict xdata; +}; + +struct gfx_namelink_req { + opaque pargfid[16]; + string bname<>; + gfx_dict xdata; +}; + +/* Define every fops */ +/* Changes from Version 3: + 1. Dict has its own type instead of being opaque + 2. Iattx instead of iatt on wire + 3. gfid has 4 extra bytes so it can be used for future +*/ +struct gfx_stat_req { + opaque gfid[16]; + gfx_dict xdata; +}; + +struct gfx_readlink_req { + opaque gfid[16]; + unsigned int size; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_readlink_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gfx_iattx buf; + string path<>; /* NULL terminated */ +}; + +struct gfx_mknod_req { + opaque pargfid[16]; + u_quad_t dev; + unsigned int mode; + unsigned int umask; + string bname<>; /* NULL terminated */ + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_mkdir_req { + opaque pargfid[16]; + unsigned int mode; + unsigned int umask; + string bname<>; /* NULL terminated */ + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_unlink_req { + opaque pargfid[16]; + string bname<>; /* NULL terminated */ + unsigned int xflags; + gfx_dict xdata; /* Extra data */ +}; + + +struct gfx_rmdir_req { + opaque pargfid[16]; + int xflags; + string bname<>; /* NULL terminated */ + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_symlink_req { + opaque pargfid[16]; + string bname<>; + unsigned int umask; + string linkname<>; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_rename_req { + opaque oldgfid[16]; + opaque newgfid[16]; + string oldbname<>; /* NULL terminated */ + string newbname<>; /* NULL terminated */ + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_rename_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gfx_iattx stat; + gfx_iattx preoldparent; + gfx_iattx postoldparent; + gfx_iattx prenewparent; + gfx_iattx postnewparent; +}; + + + struct gfx_link_req { + opaque oldgfid[16]; + opaque newgfid[16]; + string newbname<>; + gfx_dict xdata; /* Extra data */ +}; + + struct gfx_truncate_req { + opaque gfid[16]; + u_quad_t offset; + gfx_dict xdata; /* Extra data */ +}; + + struct gfx_open_req { + opaque gfid[16]; + unsigned int flags; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_open_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + quad_t fd; +}; + +struct gfx_opendir_req { + opaque gfid[16]; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_read_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + unsigned int size; + unsigned int flag; + gfx_dict xdata; /* Extra data */ +}; + struct gfx_read_rsp { + int op_ret; + int op_errno; + gfx_iattx stat; + unsigned int size; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_lookup_req { + opaque gfid[16]; + opaque pargfid[16]; + unsigned int flags; + string bname<>; + gfx_dict xdata; /* Extra data */ +}; + + + struct gfx_write_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + unsigned int size; + unsigned int flag; + gfx_dict xdata; /* Extra data */ +}; + + struct gfx_statfs_req { + opaque gfid[16]; + gfx_dict xdata; /* Extra data */ +} ; + struct gfx_statfs_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gf_statfs statfs; +} ; + + struct gfx_lk_req { + opaque gfid[16]; + int64_t fd; + unsigned int cmd; + unsigned int type; + gf_proto_flock flock; + gfx_dict xdata; /* Extra data */ +} ; + struct gfx_lk_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gf_proto_flock flock; +} ; + +struct gfx_lease_req { + opaque gfid[16]; + gf_proto_lease lease; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_lease_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gf_proto_lease lease; +} ; + +struct gfx_recall_lease_req { + opaque gfid[16]; + unsigned int lease_type; + opaque tid[16]; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_inodelk_req { + opaque gfid[16]; + unsigned int cmd; + unsigned int type; + gf_proto_flock flock; + string volume<>; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_finodelk_req { + opaque gfid[16]; + quad_t fd; + unsigned int cmd; + unsigned int type; + gf_proto_flock flock; + string volume<>; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_flush_req { + opaque gfid[16]; + quad_t fd; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_fsync_req { + opaque gfid[16]; + quad_t fd; + unsigned int data; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_setxattr_req { + opaque gfid[16]; + unsigned int flags; + gfx_dict dict; + gfx_dict xdata; /* Extra data */ +} ; + + + + struct gfx_fsetxattr_req { + opaque gfid[16]; + int64_t fd; + unsigned int flags; + gfx_dict dict; + gfx_dict xdata; /* Extra data */ +} ; + + + + struct gfx_xattrop_req { + opaque gfid[16]; + unsigned int flags; + gfx_dict dict; + gfx_dict xdata; /* Extra data */ } ; -struct gfs4_icreate_rsp { +struct gfx_common_dict_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gfx_dict dict; + gfx_iattx prestat; + gfx_iattx poststat; +}; + + + struct gfx_fxattrop_req { + opaque gfid[16]; + quad_t fd; + unsigned int flags; + gfx_dict dict; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_getxattr_req { + opaque gfid[16]; + unsigned int namelen; + string name<>; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_fgetxattr_req { + opaque gfid[16]; + quad_t fd; + unsigned int namelen; + string name<>; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_removexattr_req { + opaque gfid[16]; + string name<>; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_fremovexattr_req { + opaque gfid[16]; + quad_t fd; + string name<>; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_fsyncdir_req { + opaque gfid[16]; + quad_t fd; + int data; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_readdir_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + unsigned int size; + gfx_dict xdata; /* Extra data */ +}; + + struct gfx_readdirp_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + unsigned int size; + gfx_dict xdata; +} ; + + +struct gfx_access_req { + opaque gfid[16]; + unsigned int mask; + gfx_dict xdata; /* Extra data */ +} ; + + +struct gfx_create_req { + opaque pargfid[16]; + unsigned int flags; + unsigned int mode; + unsigned int umask; + string bname<>; + gfx_dict xdata; /* Extra data */ +} ; +struct gfx_create_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + gfx_iattx stat; + u_quad_t fd; + gfx_iattx preparent; + gfx_iattx postparent; +} ; + +struct gfx_ftruncate_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + gfx_dict xdata; /* Extra data */ +} ; + + +struct gfx_fstat_req { + opaque gfid[16]; + quad_t fd; + gfx_dict xdata; /* Extra data */ +} ; + + +struct gfx_entrylk_req { + opaque gfid[16]; + unsigned int cmd; + unsigned int type; + u_quad_t namelen; + string name<>; + string volume<>; + gfx_dict xdata; /* Extra data */ +}; + +struct gfx_fentrylk_req { + opaque gfid[16]; + quad_t fd; + unsigned int cmd; + unsigned int type; + u_quad_t namelen; + string name<>; + string volume<>; + gfx_dict xdata; /* Extra data */ +}; + + struct gfx_setattr_req { + opaque gfid[16]; + gfx_iattx stbuf; + int valid; + gfx_dict xdata; /* Extra data */ +} ; + + struct gfx_fallocate_req { + opaque gfid[16]; + quad_t fd; + unsigned int flags; + u_quad_t offset; + u_quad_t size; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_discard_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + u_quad_t size; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_zerofill_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + u_quad_t size; + gfx_dict xdata; +} ; + +struct gfx_rchecksum_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; /* Extra data */ + unsigned int flags; + unsigned int weak_checksum; + opaque strong_checksum<>; +} ; + + +struct gfx_ipc_req { + int op; + gfx_dict xdata; +}; + + +struct gfx_seek_req { + opaque gfid[16]; + quad_t fd; + u_quad_t offset; + int what; + gfx_dict xdata; +}; + +struct gfx_seek_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; + u_quad_t offset; +}; + + + struct gfx_setvolume_req { + gfx_dict dict; +} ; + struct gfx_setvolume_rsp { + int op_ret; + int op_errno; + gfx_dict dict; +} ; + + + struct gfx_getspec_req { + unsigned int flags; + string key<>; + gfx_dict xdata; /* Extra data */ +} ; + struct gfx_getspec_rsp { + int op_ret; + int op_errno; + string spec<>; + gfx_dict xdata; /* Extra data */ +} ; + + + struct gfx_notify_req { + unsigned int flags; + string buf<>; + gfx_dict xdata; /* Extra data */ +} ; + struct gfx_notify_rsp { + int op_ret; + int op_errno; + unsigned int flags; + string buf<>; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_releasedir_req { + opaque gfid[16]; + quad_t fd; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_release_req { + opaque gfid[16]; + quad_t fd; + gfx_dict xdata; /* Extra data */ +} ; + +struct gfx_dirlist { + u_quad_t d_ino; + u_quad_t d_off; + unsigned int d_len; + unsigned int d_type; + string name<>; + gfx_dirlist *nextentry; +}; + + +struct gfx_readdir_rsp { int op_ret; int op_errno; - gf_iatt stat; - opaque xdata<>; + gfx_dict xdata; /* Extra data */ + gfx_dirlist *reply; }; -struct gfs4_icreate_req { - opaque gfid[16]; - unsigned int mode; - opaque xdata<>; +struct gfx_dirplist { + u_quad_t d_ino; + u_quad_t d_off; + unsigned int d_len; + unsigned int d_type; + string name<>; + gfx_iattx stat; + gfx_dict dict; + gfx_dirplist *nextentry; }; -struct gfs4_namelink_rsp { +struct gfx_readdirp_rsp { int op_ret; int op_errno; - gf_iatt preparent; - gf_iatt postparent; - opaque xdata<>; + gfx_dict xdata; /* Extra data */ + gfx_dirplist *reply; }; -struct gfs4_namelink_req { - opaque pargfid[16]; - string bname<>; - opaque xdata<>; +struct gfx_set_lk_ver_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; + int lk_ver; +}; + +struct gfx_set_lk_ver_req { + string uid<>; + int lk_ver; +}; + +struct gfx_event_notify_req { + int op; + gfx_dict dict; +}; + + +struct gfx_getsnap_name_uuid_req { + gfx_dict dict; +}; + +struct gfx_getsnap_name_uuid_rsp { + int op_ret; + int op_errno; + gfx_dict dict; + string op_errstr<>; +}; + +struct gfx_getactivelk_rsp { + int op_ret; + int op_errno; + gfx_dict xdata; + gfs3_locklist *reply; +}; + +struct gfx_getactivelk_req { + opaque gfid[16]; + gfx_dict xdata; +}; + +struct gfx_setactivelk_req { + opaque gfid[16]; + gfs3_locklist *request; + gfx_dict xdata; +}; + +union compound_req_v2 switch (glusterfs_fop_t fop_enum) { + case GF_FOP_STAT: gfx_stat_req compound_stat_req; + case GF_FOP_READLINK: gfx_readlink_req compound_readlink_req; + case GF_FOP_MKNOD: gfx_mknod_req compound_mknod_req; + case GF_FOP_MKDIR: gfx_mkdir_req compound_mkdir_req; + case GF_FOP_UNLINK: gfx_unlink_req compound_unlink_req; + case GF_FOP_RMDIR: gfx_rmdir_req compound_rmdir_req; + case GF_FOP_SYMLINK: gfx_symlink_req compound_symlink_req; + case GF_FOP_RENAME: gfx_rename_req compound_rename_req; + case GF_FOP_LINK: gfx_link_req compound_link_req; + case GF_FOP_TRUNCATE: gfx_truncate_req compound_truncate_req; + case GF_FOP_OPEN: gfx_open_req compound_open_req; + case GF_FOP_READ: gfx_read_req compound_read_req; + case GF_FOP_WRITE: gfx_write_req compound_write_req; + case GF_FOP_STATFS: gfx_statfs_req compound_statfs_req; + case GF_FOP_FLUSH: gfx_flush_req compound_flush_req; + case GF_FOP_FSYNC: gfx_fsync_req compound_fsync_req; + case GF_FOP_GETXATTR: gfx_getxattr_req compound_getxattr_req; + case GF_FOP_SETXATTR: gfx_setxattr_req compound_setxattr_req; + case GF_FOP_REMOVEXATTR: gfx_removexattr_req compound_removexattr_req; + case GF_FOP_OPENDIR: gfx_opendir_req compound_opendir_req; + case GF_FOP_FSYNCDIR: gfx_fsyncdir_req compound_fsyncdir_req; + case GF_FOP_ACCESS: gfx_access_req compound_access_req; + case GF_FOP_CREATE: gfx_create_req compound_create_req; + case GF_FOP_FTRUNCATE: gfx_ftruncate_req compound_ftruncate_req; + case GF_FOP_FSTAT: gfx_fstat_req compound_fstat_req; + case GF_FOP_LK: gfx_lk_req compound_lk_req; + case GF_FOP_LOOKUP: gfx_lookup_req compound_lookup_req; + case GF_FOP_READDIR: gfx_readdir_req compound_readdir_req; + case GF_FOP_INODELK: gfx_inodelk_req compound_inodelk_req; + case GF_FOP_FINODELK: gfx_finodelk_req compound_finodelk_req; + case GF_FOP_ENTRYLK: gfx_entrylk_req compound_entrylk_req; + case GF_FOP_FENTRYLK: gfx_fentrylk_req compound_fentrylk_req; + case GF_FOP_XATTROP: gfx_xattrop_req compound_xattrop_req; + case GF_FOP_FXATTROP: gfx_fxattrop_req compound_fxattrop_req; + case GF_FOP_FGETXATTR: gfx_fgetxattr_req compound_fgetxattr_req; + case GF_FOP_FSETXATTR: gfx_fsetxattr_req compound_fsetxattr_req; + case GF_FOP_RCHECKSUM: gfx_rchecksum_req compound_rchecksum_req; + case GF_FOP_SETATTR: gfx_setattr_req compound_setattr_req; + case GF_FOP_FSETATTR: gfx_fsetattr_req compound_fsetattr_req; + case GF_FOP_READDIRP: gfx_readdirp_req compound_readdirp_req; + case GF_FOP_RELEASE: gfx_release_req compound_release_req; + case GF_FOP_RELEASEDIR: gfx_releasedir_req compound_releasedir_req; + case GF_FOP_FREMOVEXATTR: gfx_fremovexattr_req compound_fremovexattr_req; + case GF_FOP_FALLOCATE: gfx_fallocate_req compound_fallocate_req; + case GF_FOP_DISCARD: gfx_discard_req compound_discard_req; + case GF_FOP_ZEROFILL: gfx_zerofill_req compound_zerofill_req; + case GF_FOP_IPC: gfx_ipc_req compound_ipc_req; + case GF_FOP_SEEK: gfx_seek_req compound_seek_req; + case GF_FOP_LEASE: gfx_lease_req compound_lease_req; + default: void; +}; + +struct gfx_compound_req { + int compound_version; + glusterfs_compound_fop_t compound_fop_enum; + compound_req_v2 compound_req_array<>; + gfx_dict xdata; +}; + +union compound_rsp_v2 switch (glusterfs_fop_t fop_enum) { + case GF_FOP_STAT: gfx_common_iatt_rsp compound_stat_rsp; + case GF_FOP_READLINK: gfx_readlink_rsp compound_readlink_rsp; + case GF_FOP_MKNOD: gfx_common_3iatt_rsp compound_mknod_rsp; + case GF_FOP_MKDIR: gfx_common_3iatt_rsp compound_mkdir_rsp; + case GF_FOP_UNLINK: gfx_common_2iatt_rsp compound_unlink_rsp; + case GF_FOP_RMDIR: gfx_common_2iatt_rsp compound_rmdir_rsp; + case GF_FOP_SYMLINK: gfx_common_3iatt_rsp compound_symlink_rsp; + case GF_FOP_RENAME: gfx_rename_rsp compound_rename_rsp; + case GF_FOP_LINK: gfx_common_3iatt_rsp compound_link_rsp; + case GF_FOP_TRUNCATE: gfx_common_2iatt_rsp compound_truncate_rsp; + case GF_FOP_OPEN: gfx_open_rsp compound_open_rsp; + case GF_FOP_READ: gfx_read_rsp compound_read_rsp; + case GF_FOP_WRITE: gfx_common_2iatt_rsp compound_write_rsp; + case GF_FOP_STATFS: gfx_statfs_rsp compound_statfs_rsp; + case GF_FOP_FLUSH: gfx_common_rsp compound_flush_rsp; + case GF_FOP_FSYNC: gfx_common_2iatt_rsp compound_fsync_rsp; + case GF_FOP_GETXATTR: gfx_common_dict_rsp compound_getxattr_rsp; + case GF_FOP_SETXATTR: gfx_common_rsp compound_setxattr_rsp; + case GF_FOP_REMOVEXATTR: gfx_common_rsp compound_removexattr_rsp; + case GF_FOP_OPENDIR: gfx_open_rsp compound_opendir_rsp; + case GF_FOP_FSYNCDIR: gfx_common_rsp compound_fsyncdir_rsp; + case GF_FOP_ACCESS: gfx_common_rsp compound_access_rsp; + case GF_FOP_CREATE: gfx_create_rsp compound_create_rsp; + case GF_FOP_FTRUNCATE: gfx_common_2iatt_rsp compound_ftruncate_rsp; + case GF_FOP_FSTAT: gfx_common_iatt_rsp compound_fstat_rsp; + case GF_FOP_LK: gfx_lk_rsp compound_lk_rsp; + case GF_FOP_LOOKUP: gfx_common_2iatt_rsp compound_lookup_rsp; + case GF_FOP_READDIR: gfx_readdir_rsp compound_readdir_rsp; + case GF_FOP_INODELK: gfx_common_rsp compound_inodelk_rsp; + case GF_FOP_FINODELK: gfx_common_rsp compound_finodelk_rsp; + case GF_FOP_ENTRYLK: gfx_common_rsp compound_entrylk_rsp; + case GF_FOP_FENTRYLK: gfx_common_rsp compound_fentrylk_rsp; + case GF_FOP_XATTROP: gfx_common_dict_rsp compound_xattrop_rsp; + case GF_FOP_FXATTROP: gfx_common_dict_rsp compound_fxattrop_rsp; + case GF_FOP_FGETXATTR: gfx_common_dict_rsp compound_fgetxattr_rsp; + case GF_FOP_FSETXATTR: gfx_common_rsp compound_fsetxattr_rsp; + case GF_FOP_RCHECKSUM: gfx_rchecksum_rsp compound_rchecksum_rsp; + case GF_FOP_SETATTR: gfx_common_2iatt_rsp compound_setattr_rsp; + case GF_FOP_FSETATTR: gfx_common_2iatt_rsp compound_fsetattr_rsp; + case GF_FOP_READDIRP: gfx_readdirp_rsp compound_readdirp_rsp; + case GF_FOP_RELEASE: gfx_common_rsp compound_release_rsp; + case GF_FOP_RELEASEDIR: gfx_common_rsp compound_releasedir_rsp; + case GF_FOP_FREMOVEXATTR: gfx_common_rsp compound_fremovexattr_rsp; + case GF_FOP_FALLOCATE: gfx_common_2iatt_rsp compound_fallocate_rsp; + case GF_FOP_DISCARD: gfx_common_2iatt_rsp compound_discard_rsp; + case GF_FOP_ZEROFILL: gfx_common_2iatt_rsp compound_zerofill_rsp; + case GF_FOP_IPC: gfx_common_rsp compound_ipc_rsp; + case GF_FOP_SEEK: gfx_seek_rsp compound_seek_rsp; + case GF_FOP_LEASE: gfx_lease_rsp compound_lease_rsp; + default: void; +}; + +struct gfx_compound_rsp { + int op_ret; + int op_errno; + compound_rsp_v2 compound_rsp_array<>; + gfx_dict xdata; }; struct gfs4_inodelk_contention_req { diff --git a/rpc/xdr/src/libgfxdr.sym b/rpc/xdr/src/libgfxdr.sym index f6aa300544a..89fc513eda7 100644 --- a/rpc/xdr/src/libgfxdr.sym +++ b/rpc/xdr/src/libgfxdr.sym @@ -249,3 +249,97 @@ xdr_to_setattr3args xdr_to_symlink3args xdr_to_write3args xdr_vector_round_up +xdr_gfx_read_rsp +xdr_gfx_iattx +xdr_gfx_value +xdr_gfx_dict_pair +xdr_gfx_dict +xdr_gfx_common_rsp +xdr_gfx_common_iatt_rsp +xdr_gfx_common_2iatt_rsp +xdr_gfx_common_3iatt_rsp +xdr_gfx_fsetattr_req +xdr_gfx_rchecksum_req +xdr_gfx_icreate_req +xdr_gfx_namelink_req +xdr_gfx_stat_req +xdr_gfx_readlink_req +xdr_gfx_readlink_rsp +xdr_gfx_mknod_req +xdr_gfx_mkdir_req +xdr_gfx_unlink_req +xdr_gfx_rmdir_req +xdr_gfx_symlink_req +xdr_gfx_rename_req +xdr_gfx_rename_rsp +xdr_gfx_link_req +xdr_gfx_truncate_req +xdr_gfx_open_req +xdr_gfx_open_rsp +xdr_gfx_opendir_req +xdr_gfx_read_req +xdr_gfx_read_rsp +xdr_gfx_lookup_req +xdr_gfx_write_req +xdr_gfx_statfs_req +xdr_gfx_statfs_rsp +xdr_gfx_lk_req +xdr_gfx_lk_rsp +xdr_gfx_lease_req +xdr_gfx_lease_rsp +xdr_gfx_recall_lease_req +xdr_gfx_inodelk_req +xdr_gfx_finodelk_req +xdr_gfx_flush_req +xdr_gfx_fsync_req +xdr_gfx_setxattr_req +xdr_gfx_fsetxattr_req +xdr_gfx_xattrop_req +xdr_gfx_common_dict_rsp +xdr_gfx_fxattrop_req +xdr_gfx_getxattr_req +xdr_gfx_fgetxattr_req +xdr_gfx_removexattr_req +xdr_gfx_fremovexattr_req +xdr_gfx_fsyncdir_req +xdr_gfx_readdir_req +xdr_gfx_readdirp_req +xdr_gfx_access_req +xdr_gfx_create_req +xdr_gfx_create_rsp +xdr_gfx_ftruncate_req +xdr_gfx_fstat_req +xdr_gfx_entrylk_req +xdr_gfx_fentrylk_req +xdr_gfx_setattr_req +xdr_gfx_fallocate_req +xdr_gfx_discard_req +xdr_gfx_zerofill_req +xdr_gfx_rchecksum_rsp +xdr_gfx_ipc_req +xdr_gfx_seek_req +xdr_gfx_seek_rsp +xdr_gfx_setvolume_req +xdr_gfx_setvolume_rsp +xdr_gfx_getspec_req +xdr_gfx_getspec_rsp +xdr_gfx_notify_req +xdr_gfx_notify_rsp +xdr_gfx_releasedir_req +xdr_gfx_release_req +xdr_gfx_dirlist +xdr_gfx_readdir_rsp +xdr_gfx_dirplist +xdr_gfx_readdirp_rsp +xdr_gfx_set_lk_ver_rsp +xdr_gfx_set_lk_ver_req +xdr_gfx_event_notify_req +xdr_gfx_getsnap_name_uuid_req +xdr_gfx_getsnap_name_uuid_rsp +xdr_gfx_getactivelk_rsp +xdr_gfx_getactivelk_req +xdr_gfx_setactivelk_req +xdr_compound_req_v2 +xdr_gfx_compound_req +xdr_compound_rsp_v2 +xdr_gfx_compound_rsp |