📄 intermezzo_idl.h
字号:
/* -*- 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 15struct 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -