summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/glusterfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/glusterfs.h')
-rw-r--r--libglusterfs/src/glusterfs.h277
1 files changed, 277 insertions, 0 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
new file mode 100644
index 00000000000..76891f5b05f
--- /dev/null
+++ b/libglusterfs/src/glusterfs.h
@@ -0,0 +1,277 @@
+/*
+ Copyright (c) 2006, 2007, 2008 Z RESEARCH, Inc. <http://www.zresearch.com>
+ This file is part of GlusterFS.
+
+ GlusterFS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ GlusterFS is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _GLUSTERFS_H
+#define _GLUSTERFS_H
+
+#ifndef _CONFIG_H
+#define _CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <netdb.h>
+#include <errno.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <arpa/inet.h>
+#include <sys/poll.h>
+#include <pthread.h>
+
+#include "list.h"
+#include "logging.h"
+
+#define GF_YES 1
+#define GF_NO 0
+
+#ifndef O_LARGEFILE
+/* savannah bug #20053, patch for compiling on darwin */
+#define O_LARGEFILE 0
+#endif
+
+#ifndef O_DIRECT
+/* savannah bug #20050, #20052 */
+#define O_DIRECT 0 /* From asm/fcntl.h */
+#endif
+
+#ifndef O_DIRECTORY
+/* FreeBSD does not need O_DIRECTORY */
+#define O_DIRECTORY 0
+#endif
+
+#define ZR_FILE_CONTENT_STR "glusterfs.file."
+#define ZR_FILE_CONTENT_STRLEN 15
+
+#define GLUSTERFS_OPEN_FD_COUNT "glusterfs.open-fd-count"
+
+#define ZR_FILE_CONTENT_REQUEST(key) (!strncmp(key, ZR_FILE_CONTENT_STR, \
+ ZR_FILE_CONTENT_STRLEN))
+
+/* TODO: Should we use PATH-MAX? On some systems it may save space */
+#define ZR_PATH_MAX 4096
+
+/* This is used as the maximum permitted filename length over FS.
+ * If the backend FS supports higher than this, it should be changed.
+ */
+#define ZR_FILENAME_MAX 256
+
+
+/* NOTE: add members ONLY at the end (just before _MAXVALUE) */
+typedef enum {
+ GF_FOP_STAT, /* 0 */
+ GF_FOP_READLINK, /* 1 */
+ GF_FOP_MKNOD, /* 2 */
+ GF_FOP_MKDIR,
+ GF_FOP_UNLINK,
+ GF_FOP_RMDIR, /* 5 */
+ GF_FOP_SYMLINK,
+ GF_FOP_RENAME,
+ GF_FOP_LINK,
+ GF_FOP_CHMOD,
+ GF_FOP_CHOWN, /* 10 */
+ GF_FOP_TRUNCATE,
+ GF_FOP_OPEN,
+ GF_FOP_READ,
+ GF_FOP_WRITE,
+ GF_FOP_STATFS, /* 15 */
+ GF_FOP_FLUSH,
+ GF_FOP_FSYNC,
+ GF_FOP_SETXATTR,
+ GF_FOP_GETXATTR,
+ GF_FOP_REMOVEXATTR,/* 20 */
+ GF_FOP_OPENDIR,
+ GF_FOP_GETDENTS,
+ GF_FOP_FSYNCDIR,
+ GF_FOP_ACCESS,
+ GF_FOP_CREATE, /* 25 */
+ GF_FOP_FTRUNCATE,
+ GF_FOP_FSTAT,
+ GF_FOP_LK,
+ GF_FOP_UTIMENS,
+ GF_FOP_FCHMOD, /* 30 */
+ GF_FOP_FCHOWN,
+ GF_FOP_LOOKUP,
+ GF_FOP_SETDENTS,
+ GF_FOP_READDIR,
+ GF_FOP_INODELK, /* 35 */
+ GF_FOP_FINODELK,
+ GF_FOP_ENTRYLK,
+ GF_FOP_FENTRYLK,
+ GF_FOP_CHECKSUM,
+ GF_FOP_XATTROP, /* 40 */
+ GF_FOP_FXATTROP,
+ GF_FOP_MAXVALUE,
+} glusterfs_fop_t;
+
+/* NOTE: add members ONLY at the end (just before _MAXVALUE) */
+typedef enum {
+ GF_MOP_SETVOLUME, /* 0 */
+ GF_MOP_GETVOLUME, /* 1 */
+ GF_MOP_STATS,
+ GF_MOP_SETSPEC,
+ GF_MOP_GETSPEC,
+ GF_MOP_PING,
+ GF_MOP_MAXVALUE /* 5 */
+} glusterfs_mop_t;
+
+typedef enum {
+ GF_CBK_FORGET, /* 0 */
+ GF_CBK_RELEASE, /* 1 */
+ GF_CBK_RELEASEDIR, /* 2 */
+ GF_CBK_MAXVALUE /* 3 */
+} glusterfs_cbk_t;
+
+typedef enum {
+ GF_OP_TYPE_FOP_REQUEST = 1,
+ GF_OP_TYPE_MOP_REQUEST,
+ GF_OP_TYPE_CBK_REQUEST,
+ GF_OP_TYPE_FOP_REPLY,
+ GF_OP_TYPE_MOP_REPLY,
+ GF_OP_TYPE_CBK_REPLY
+} glusterfs_op_type_t;
+
+/* NOTE: all the miscellaneous flags used by GlusterFS should be listed here */
+typedef enum {
+ GF_LK_GETLK = 0,
+ GF_LK_SETLK,
+ GF_LK_SETLKW,
+} glusterfs_lk_cmds_t;
+
+typedef enum {
+ GF_LK_F_RDLCK = 0,
+ GF_LK_F_WRLCK,
+ GF_LK_F_UNLCK
+} glusterfs_lk_types_t;
+
+typedef enum {
+ GF_LOCK_POSIX,
+ GF_LOCK_INTERNAL
+} gf_lk_domain_t;
+
+typedef enum {
+ ENTRYLK_LOCK,
+ ENTRYLK_UNLOCK,
+ ENTRYLK_LOCK_NB
+} entrylk_cmd;
+
+typedef enum {
+ ENTRYLK_RDLCK,
+ ENTRYLK_WRLCK
+} entrylk_type;
+
+typedef enum {
+ GF_GET_ALL = 1,
+ GF_GET_DIR_ONLY,
+ GF_GET_SYMLINK_ONLY,
+ GF_GET_REGULAR_FILES_ONLY,
+} glusterfs_getdents_flags_t;
+
+typedef enum {
+ GF_XATTROP_ADD_ARRAY,
+} gf_xattrop_flags_t;
+
+#define GF_SET_IF_NOT_PRESENT 0x1 /* default behaviour */
+#define GF_SET_OVERWRITE 0x2 /* Overwrite with the buf given */
+#define GF_SET_DIR_ONLY 0x4
+#define GF_SET_EPOCH_TIME 0x8 /* used by afr dir lookup selfheal */
+
+
+struct _xlator_cmdline_option {
+ struct list_head cmd_args;
+ char *volume;
+ char *key;
+ char *value;
+};
+typedef struct _xlator_cmdline_option xlator_cmdline_option_t;
+
+struct _cmd_args {
+ /* basic options */
+ char *volfile_server;
+ char *volume_file;
+ gf_loglevel_t log_level;
+ char *log_file;
+ /* advanced options */
+ uint32_t volfile_server_port;
+ char *volfile_server_transport;
+ char *pid_file;
+ int no_daemon_mode;
+ char *run_id;
+ int debug_mode;
+ struct list_head xlator_options; /* list of xlator_option_t */
+
+ /* fuse options */
+ int fuse_direct_io_mode_flag;
+ unsigned int fuse_entry_timeout;
+ unsigned int fuse_attribute_timeout;
+ char *volume_name;
+ int non_local; /* Used only by darwin os,
+ used for '-o local' option */
+ char *icon_name; /* This string will appear as
+ Desktop icon name when mounted
+ on darwin */
+ int fuse_nodev;
+ int fuse_nosuid;
+
+ /* key args */
+ char *mount_point;
+ char *volfile_id;
+};
+typedef struct _cmd_args cmd_args_t;
+
+struct _glusterfs_ctx {
+ cmd_args_t cmd_args;
+ char *process_uuid;
+ FILE *specfp;
+ FILE *pidfp;
+ char fin;
+ void *timer;
+ void *ib;
+ void *pool;
+ void *graph;
+ void *top; /* either fuse or server protocol */
+ void *event_pool;
+ pthread_mutex_t lock;
+ int xl_count;
+};
+
+typedef struct _glusterfs_ctx glusterfs_ctx_t;
+
+typedef enum {
+ GF_EVENT_PARENT_UP = 1,
+ GF_EVENT_POLLIN,
+ GF_EVENT_POLLOUT,
+ GF_EVENT_POLLERR,
+ GF_EVENT_CHILD_UP,
+ GF_EVENT_CHILD_DOWN,
+ GF_EVENT_CHILD_CONNECTING,
+ GF_EVENT_TRANSPORT_CLEANUP,
+ GF_EVENT_TRANSPORT_CONNECTED,
+} glusterfs_event_t;
+
+#define GF_MUST_CHECK __attribute__((warn_unused_result))
+
+#endif /* _GLUSTERFS_H */