intermezzo_idl.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:10k
源码类别:
Linux/Unix编程
开发平台:
Unix_Linux
- /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- * Copyright (C) 2001 Tacit Networks, Inc.
- *
- * This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- * InterMezzo is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * InterMezzo 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 InterMezzo; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- #ifndef __INTERMEZZO_IDL_H__
- #define __INTERMEZZO_IDL_H__
- #include <linux/ioctl.h>
- #include <linux/types.h>
- /* this file contains all data structures used in InterMezzo's interfaces:
- * - upcalls
- * - ioctl's
- * - KML records
- * - RCVD records
- * - rpc's
- */
- /* UPCALL */
- #define INTERMEZZO_MINOR 248
- #define IZO_UPC_VERSION 0x00010002
- #define IZO_UPC_PERMIT 1
- #define IZO_UPC_CONNECT 2
- #define IZO_UPC_GO_FETCH_KML 3
- #define IZO_UPC_OPEN 4
- #define IZO_UPC_REVOKE_PERMIT 5
- #define IZO_UPC_KML 6
- #define IZO_UPC_BACKFETCH 7
- #define IZO_UPC_KML_TRUNC 8
- #define IZO_UPC_SET_KMLSIZE 9
- #define IZO_UPC_BRANCH_UNDO 10
- #define IZO_UPC_BRANCH_REDO 11
- #define IZO_UPC_GET_FILEID 12
- #define IZO_UPC_CLIENT_MAKE_BRANCH 13
- #define IZO_UPC_SERVER_MAKE_BRANCH 14
- #define IZO_UPC_REPSTATUS 15
- #define IZO_UPC_LARGEST_OPCODE 15
- struct izo_upcall_hdr {
- __u32 u_len;
- __u32 u_version;
- __u32 u_opc;
- __u32 u_uniq;
- __u32 u_pid;
- __u32 u_uid;
- __u32 u_pathlen;
- __u32 u_fsetlen;
- __u64 u_offset;
- __u64 u_length;
- __u32 u_first_recno;
- __u32 u_last_recno;
- __u32 u_async;
- __u32 u_reclen;
- __u8 u_uuid[16];
- };
- /* This structure _must_ sit at the beginning of the buffer */
- struct izo_upcall_resp {
- __u32 opcode;
- __u32 unique;
- __u32 result;
- };
- /* IOCTL */
- #define IZO_IOCTL_VERSION 0x00010003
- /* maximum size supported for ioc_pbuf1 */
- #define KML_MAX_BUF (64*1024)
- struct izo_ioctl_hdr {
- __u32 ioc_len;
- __u32 ioc_version;
- };
- struct izo_ioctl_data {
- __u32 ioc_len;
- __u32 ioc_version;
- __u32 ioc_izodev;
- __u32 ioc_kmlrecno;
- __u64 ioc_kmlsize;
- __u32 ioc_flags;
- __s32 ioc_inofd;
- __u64 ioc_ino;
- __u64 ioc_generation;
- __u32 ioc_mark_what;
- __u32 ioc_and_flag;
- __u32 ioc_or_flag;
- __u32 ioc_dev;
- __u32 ioc_offset;
- __u32 ioc_slot;
- __u64 ioc_uid;
- __u8 ioc_uuid[16];
- __u32 ioc_inllen1; /* path */
- char *ioc_inlbuf1;
- __u32 ioc_inllen2; /* fileset */
- char *ioc_inlbuf2;
- __u32 ioc_plen1; /* buffers in user space (KML) */
- char *ioc_pbuf1;
- __u32 ioc_plen2; /* buffers in user space (KML) */
- char *ioc_pbuf2;
- char ioc_bulk[0];
- };
- #define IZO_IOC_DEVICE _IOW ('p',0x50, void *)
- #define IZO_IOC_REINTKML _IOW ('p',0x51, void *)
- #define IZO_IOC_GET_RCVD _IOW ('p',0x52, void *)
- #define IZO_IOC_SET_IOCTL_UID _IOW ('p',0x53, void *)
- #define IZO_IOC_GET_KML_SIZE _IOW ('p',0x54, void *)
- #define IZO_IOC_PURGE_FILE_DATA _IOW ('p',0x55, void *)
- #define IZO_IOC_CONNECT _IOW ('p',0x56, void *)
- #define IZO_IOC_GO_FETCH_KML _IOW ('p',0x57, void *)
- #define IZO_IOC_MARK _IOW ('p',0x58, void *)
- #define IZO_IOC_CLEAR_FSET _IOW ('p',0x59, void *)
- #define IZO_IOC_CLEAR_ALL_FSETS _IOW ('p',0x60, void *)
- #define IZO_IOC_SET_FSET _IOW ('p',0x61, void *)
- #define IZO_IOC_REVOKE_PERMIT _IOW ('p',0x62, void *)
- #define IZO_IOC_SET_KMLSIZE _IOW ('p',0x63, void *)
- #define IZO_IOC_CLIENT_MAKE_BRANCH _IOW ('p',0x64, void *)
- #define IZO_IOC_SERVER_MAKE_BRANCH _IOW ('p',0x65, void *)
- #define IZO_IOC_BRANCH_UNDO _IOW ('p',0x66, void *)
- #define IZO_IOC_BRANCH_REDO _IOW ('p',0x67, void *)
- #define IZO_IOC_SET_PID _IOW ('p',0x68, void *)
- #define IZO_IOC_SET_CHANNEL _IOW ('p',0x69, void *)
- #define IZO_IOC_GET_CHANNEL _IOW ('p',0x70, void *)
- #define IZO_IOC_GET_FILEID _IOW ('p',0x71, void *)
- #define IZO_IOC_ADJUST_LML _IOW ('p',0x72, void *)
- #define IZO_IOC_SET_FILEID _IOW ('p',0x73, void *)
- #define IZO_IOC_REPSTATUS _IOW ('p',0x74, void *)
- /* marking flags for fsets */
- #define FSET_CLIENT_RO 0x00000001
- #define FSET_LENTO_RO 0x00000002
- #define FSET_HASPERMIT 0x00000004 /* we have a permit to WB */
- #define FSET_INSYNC 0x00000008 /* this fileset is in sync */
- #define FSET_PERMIT_WAITING 0x00000010 /* Lento is waiting for permit */
- #define FSET_STEAL_PERMIT 0x00000020 /* take permit if Lento is dead */
- #define FSET_JCLOSE_ON_WRITE 0x00000040 /* Journal closes on writes */
- #define FSET_DATA_ON_DEMAND 0x00000080 /* update data on file_open() */
- #define FSET_PERMIT_EXCLUSIVE 0x00000100 /* only one permitholder allowed */
- #define FSET_HAS_BRANCHES 0x00000200 /* this fileset contains branches */
- #define FSET_IS_BRANCH 0x00000400 /* this fileset is a branch */
- #define FSET_FLAT_BRANCH 0x00000800 /* this fileset is ROOT with branches */
- /* what to mark indicator (ioctl parameter) */
- #define MARK_DENTRY 101
- #define MARK_FSET 102
- #define MARK_CACHE 103
- #define MARK_GETFL 104
- /* KML */
- #define KML_MAJOR_VERSION 0x00010000
- #define KML_MINOR_VERSION 0x00000002
- #define KML_OPCODE_NOOP 0
- #define KML_OPCODE_CREATE 1
- #define KML_OPCODE_MKDIR 2
- #define KML_OPCODE_UNLINK 3
- #define KML_OPCODE_RMDIR 4
- #define KML_OPCODE_CLOSE 5
- #define KML_OPCODE_SYMLINK 6
- #define KML_OPCODE_RENAME 7
- #define KML_OPCODE_SETATTR 8
- #define KML_OPCODE_LINK 9
- #define KML_OPCODE_OPEN 10
- #define KML_OPCODE_MKNOD 11
- #define KML_OPCODE_WRITE 12
- #define KML_OPCODE_RELEASE 13
- #define KML_OPCODE_TRUNC 14
- #define KML_OPCODE_SETEXTATTR 15
- #define KML_OPCODE_DELEXTATTR 16
- #define KML_OPCODE_KML_TRUNC 17
- #define KML_OPCODE_GET_FILEID 18
- #define KML_OPCODE_NUM 19
- /* new stuff */
- struct presto_version {
- __u64 pv_mtime;
- __u64 pv_ctime;
- __u64 pv_size;
- };
- struct kml_prefix_hdr {
- __u32 len;
- __u32 version;
- __u32 pid;
- __u32 auid;
- __u32 fsuid;
- __u32 fsgid;
- __u32 opcode;
- __u32 ngroups;
- };
- struct kml_prefix {
- struct kml_prefix_hdr *hdr;
- __u32 *groups;
- };
- struct kml_suffix {
- __u32 prevrec;
- __u32 recno;
- __u32 time;
- __u32 len;
- };
- struct kml_rec {
- char *buf;
- struct kml_prefix prefix;
- __u64 offset;
- char *path;
- int pathlen;
- char *name;
- int namelen;
- char *target;
- int targetlen;
- struct presto_version *old_objectv;
- struct presto_version *new_objectv;
- struct presto_version *old_parentv;
- struct presto_version *new_parentv;
- struct presto_version *old_targetv;
- struct presto_version *new_targetv;
- __u32 valid;
- __u32 mode;
- __u32 uid;
- __u32 gid;
- __u64 size;
- __u32 mtime;
- __u32 ctime;
- __u32 flags;
- __u32 ino;
- __u32 rdev;
- __u32 major;
- __u32 minor;
- __u32 generation;
- __u32 old_mode;
- __u32 old_rdev;
- __u64 old_uid;
- __u64 old_gid;
- char *old_target;
- int old_targetlen;
- struct kml_suffix *suffix;
- };
- /* RCVD */
- /* izo_rcvd_rec fills the .intermezzo/fset/last_rcvd file and provides data about
- * our view of reintegration offsets for a given peer.
- *
- * The only exception is the last_rcvd record which has a UUID consisting of all
- * zeroes; this record's lr_local_offset field is the logical byte offset of our
- * KML, which is updated when KML truncation takes place. All other fields are
- * reserved. */
- /* XXX - document how clean shutdowns are recorded */
- struct izo_rcvd_rec {
- __u8 lr_uuid[16]; /* which peer? */
- __u64 lr_remote_recno; /* last confirmed remote recno */
- __u64 lr_remote_offset; /* last confirmed remote offset */
- __u64 lr_local_recno; /* last locally reinted recno */
- __u64 lr_local_offset; /* last locally reinted offset */
- __u64 lr_last_ctime; /* the largest ctime that has reintegrated */
- };
- /* Cache purge database
- *
- * Each DB entry is this structure followed by the path name, no trailing NUL. */
- struct izo_purge_entry {
- __u64 p_atime;
- __u32 p_pathlen;
- };
- /* RPC */
- #endif