patch-2.4.20 linux-2.4.20/include/linux/intermezzo_idl.h
Next file: linux-2.4.20/include/linux/intermezzo_lib.h
Previous file: linux-2.4.20/include/linux/intermezzo_fs.h
Back to the patch index
Back to the overall index
- Lines: 301
- Date:
Thu Nov 28 15:53:15 2002
- Orig file:
linux-2.4.19/include/linux/intermezzo_idl.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -urN linux-2.4.19/include/linux/intermezzo_idl.h linux-2.4.20/include/linux/intermezzo_idl.h
@@ -0,0 +1,300 @@
+/* -*- 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
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)