intermezzo_idl.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:10k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  2.  * vim:expandtab:shiftwidth=8:tabstop=8:
  3.  *
  4.  *  Copyright (C) 2001, 2002 Cluster File Systems, Inc.
  5.  *  Copyright (C) 2001 Tacit Networks, Inc.
  6.  *
  7.  *   This file is part of InterMezzo, http://www.inter-mezzo.org.
  8.  *
  9.  *   InterMezzo is free software; you can redistribute it and/or
  10.  *   modify it under the terms of version 2 of the GNU General Public
  11.  *   License as published by the Free Software Foundation.
  12.  *
  13.  *   InterMezzo is distributed in the hope that it will be useful,
  14.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *   GNU General Public License for more details.
  17.  *
  18.  *   You should have received a copy of the GNU General Public License
  19.  *   along with InterMezzo; if not, write to the Free Software
  20.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef __INTERMEZZO_IDL_H__
  23. #define __INTERMEZZO_IDL_H__
  24. #include <linux/ioctl.h>
  25. #include <linux/types.h>
  26. /* this file contains all data structures used in InterMezzo's interfaces:
  27.  * - upcalls
  28.  * - ioctl's
  29.  * - KML records
  30.  * - RCVD records
  31.  * - rpc's
  32.  */ 
  33. /* UPCALL */
  34. #define INTERMEZZO_MINOR 248   
  35. #define IZO_UPC_VERSION 0x00010002
  36. #define IZO_UPC_PERMIT        1
  37. #define IZO_UPC_CONNECT       2
  38. #define IZO_UPC_GO_FETCH_KML  3
  39. #define IZO_UPC_OPEN          4
  40. #define IZO_UPC_REVOKE_PERMIT 5
  41. #define IZO_UPC_KML           6
  42. #define IZO_UPC_BACKFETCH     7
  43. #define IZO_UPC_KML_TRUNC     8
  44. #define IZO_UPC_SET_KMLSIZE   9
  45. #define IZO_UPC_BRANCH_UNDO   10
  46. #define IZO_UPC_BRANCH_REDO   11
  47. #define IZO_UPC_GET_FILEID    12
  48. #define IZO_UPC_CLIENT_MAKE_BRANCH    13
  49. #define IZO_UPC_SERVER_MAKE_BRANCH    14
  50. #define IZO_UPC_REPSTATUS    15
  51. #define IZO_UPC_LARGEST_OPCODE 15
  52. struct izo_upcall_hdr {
  53.         __u32 u_len;
  54.         __u32 u_version;
  55.         __u32 u_opc;
  56.         __u32 u_uniq;
  57.         __u32 u_pid;
  58.         __u32 u_uid;
  59.         __u32 u_pathlen;
  60.         __u32 u_fsetlen;
  61.         __u64 u_offset;
  62.         __u64 u_length;
  63.         __u32 u_first_recno;
  64.         __u32 u_last_recno;
  65.         __u32 u_async;
  66.         __u32 u_reclen;
  67.         __u8  u_uuid[16];
  68. };
  69. /* This structure _must_ sit at the beginning of the buffer */
  70. struct izo_upcall_resp {
  71.         __u32 opcode;
  72.         __u32 unique;    
  73.         __u32 result;
  74. };
  75. /* IOCTL */
  76. #define IZO_IOCTL_VERSION 0x00010003
  77. /* maximum size supported for ioc_pbuf1 */
  78. #define KML_MAX_BUF (64*1024)
  79. struct izo_ioctl_hdr { 
  80.         __u32  ioc_len;
  81.         __u32  ioc_version;
  82. };
  83. struct izo_ioctl_data {
  84.         __u32 ioc_len;
  85.         __u32 ioc_version;
  86.         __u32 ioc_izodev;
  87.         __u32 ioc_kmlrecno;
  88.         __u64 ioc_kmlsize;
  89.         __u32 ioc_flags;
  90.         __s32 ioc_inofd;
  91.         __u64 ioc_ino;
  92.         __u64 ioc_generation;
  93.         __u32 ioc_mark_what;
  94.         __u32 ioc_and_flag;
  95.         __u32 ioc_or_flag;
  96.         __u32 ioc_dev;
  97.         __u32 ioc_offset;
  98.         __u32 ioc_slot;
  99.         __u64 ioc_uid;
  100.         __u8  ioc_uuid[16];
  101.         __u32 ioc_inllen1;   /* path */
  102.         char *ioc_inlbuf1;
  103.         __u32 ioc_inllen2;   /* fileset */
  104.         char *ioc_inlbuf2;
  105.         __u32 ioc_plen1;     /* buffers in user space (KML) */
  106.         char *ioc_pbuf1;
  107.         __u32 ioc_plen2;     /* buffers in user space (KML) */
  108.         char *ioc_pbuf2;
  109.         char  ioc_bulk[0];
  110. };
  111. #define IZO_IOC_DEVICE          _IOW ('p',0x50, void *)
  112. #define IZO_IOC_REINTKML        _IOW ('p',0x51, void *)
  113. #define IZO_IOC_GET_RCVD        _IOW ('p',0x52, void *)
  114. #define IZO_IOC_SET_IOCTL_UID   _IOW ('p',0x53, void *)
  115. #define IZO_IOC_GET_KML_SIZE    _IOW ('p',0x54, void *)
  116. #define IZO_IOC_PURGE_FILE_DATA _IOW ('p',0x55, void *)
  117. #define IZO_IOC_CONNECT         _IOW ('p',0x56, void *)
  118. #define IZO_IOC_GO_FETCH_KML    _IOW ('p',0x57, void *)
  119. #define IZO_IOC_MARK            _IOW ('p',0x58, void *)
  120. #define IZO_IOC_CLEAR_FSET      _IOW ('p',0x59, void *)
  121. #define IZO_IOC_CLEAR_ALL_FSETS _IOW ('p',0x60, void *)
  122. #define IZO_IOC_SET_FSET        _IOW ('p',0x61, void *)
  123. #define IZO_IOC_REVOKE_PERMIT   _IOW ('p',0x62, void *)
  124. #define IZO_IOC_SET_KMLSIZE     _IOW ('p',0x63, void *)
  125. #define IZO_IOC_CLIENT_MAKE_BRANCH _IOW ('p',0x64, void *)
  126. #define IZO_IOC_SERVER_MAKE_BRANCH _IOW ('p',0x65, void *)
  127. #define IZO_IOC_BRANCH_UNDO    _IOW ('p',0x66, void *)
  128. #define IZO_IOC_BRANCH_REDO    _IOW ('p',0x67, void *)
  129. #define IZO_IOC_SET_PID        _IOW ('p',0x68, void *)
  130. #define IZO_IOC_SET_CHANNEL    _IOW ('p',0x69, void *)
  131. #define IZO_IOC_GET_CHANNEL    _IOW ('p',0x70, void *)
  132. #define IZO_IOC_GET_FILEID    _IOW ('p',0x71, void *)
  133. #define IZO_IOC_ADJUST_LML    _IOW ('p',0x72, void *)
  134. #define IZO_IOC_SET_FILEID    _IOW ('p',0x73, void *)
  135. #define IZO_IOC_REPSTATUS    _IOW ('p',0x74, void *)
  136. /* marking flags for fsets */
  137. #define FSET_CLIENT_RO        0x00000001
  138. #define FSET_LENTO_RO         0x00000002
  139. #define FSET_HASPERMIT        0x00000004 /* we have a permit to WB */
  140. #define FSET_INSYNC           0x00000008 /* this fileset is in sync */
  141. #define FSET_PERMIT_WAITING   0x00000010 /* Lento is waiting for permit */
  142. #define FSET_STEAL_PERMIT     0x00000020 /* take permit if Lento is dead */
  143. #define FSET_JCLOSE_ON_WRITE  0x00000040 /* Journal closes on writes */
  144. #define FSET_DATA_ON_DEMAND   0x00000080 /* update data on file_open() */
  145. #define FSET_PERMIT_EXCLUSIVE 0x00000100 /* only one permitholder allowed */
  146. #define FSET_HAS_BRANCHES     0x00000200 /* this fileset contains branches */
  147. #define FSET_IS_BRANCH        0x00000400 /* this fileset is a branch */
  148. #define FSET_FLAT_BRANCH      0x00000800 /* this fileset is ROOT with branches */
  149. /* what to mark indicator (ioctl parameter) */
  150. #define MARK_DENTRY   101
  151. #define MARK_FSET     102
  152. #define MARK_CACHE    103
  153. #define MARK_GETFL    104
  154. /* KML */
  155. #define KML_MAJOR_VERSION 0x00010000
  156. #define KML_MINOR_VERSION 0x00000002
  157. #define KML_OPCODE_NOOP          0
  158. #define KML_OPCODE_CREATE        1
  159. #define KML_OPCODE_MKDIR         2
  160. #define KML_OPCODE_UNLINK        3
  161. #define KML_OPCODE_RMDIR         4
  162. #define KML_OPCODE_CLOSE         5
  163. #define KML_OPCODE_SYMLINK       6
  164. #define KML_OPCODE_RENAME        7
  165. #define KML_OPCODE_SETATTR       8
  166. #define KML_OPCODE_LINK          9
  167. #define KML_OPCODE_OPEN          10
  168. #define KML_OPCODE_MKNOD         11
  169. #define KML_OPCODE_WRITE         12
  170. #define KML_OPCODE_RELEASE       13
  171. #define KML_OPCODE_TRUNC         14
  172. #define KML_OPCODE_SETEXTATTR    15
  173. #define KML_OPCODE_DELEXTATTR    16
  174. #define KML_OPCODE_KML_TRUNC     17
  175. #define KML_OPCODE_GET_FILEID    18
  176. #define KML_OPCODE_NUM           19
  177. /* new stuff */
  178. struct presto_version {
  179.         __u64 pv_mtime;
  180.         __u64 pv_ctime;
  181.         __u64 pv_size;
  182. };
  183. struct kml_prefix_hdr {
  184.         __u32                    len;
  185.         __u32                    version;
  186.         __u32                    pid;
  187.         __u32                    auid;
  188.         __u32                    fsuid;
  189.         __u32                    fsgid;
  190.         __u32                    opcode;
  191.         __u32                    ngroups;
  192. };
  193. struct kml_prefix { 
  194.         struct kml_prefix_hdr    *hdr;
  195.         __u32                    *groups;
  196. };
  197. struct kml_suffix { 
  198.         __u32                    prevrec;
  199.         __u32                    recno;
  200.         __u32                    time;
  201.         __u32                    len;
  202. };
  203. struct kml_rec {
  204.         char                   *buf;
  205.         struct kml_prefix       prefix;
  206.         __u64                   offset;
  207.         char                   *path;
  208.         int                     pathlen;
  209.         char                   *name;
  210.         int                     namelen;
  211.         char                   *target;
  212.         int                     targetlen;
  213.         struct presto_version  *old_objectv;
  214.         struct presto_version  *new_objectv;
  215.         struct presto_version  *old_parentv;
  216.         struct presto_version  *new_parentv;
  217.         struct presto_version  *old_targetv;
  218.         struct presto_version  *new_targetv;
  219.         __u32                   valid;
  220.         __u32                   mode;
  221.         __u32                   uid;
  222.         __u32                   gid;
  223.         __u64                   size;
  224.         __u32                   mtime;
  225.         __u32                   ctime;
  226.         __u32                   flags;
  227.         __u32                   ino;
  228.         __u32                   rdev;
  229.         __u32                   major;
  230.         __u32                   minor;
  231.         __u32                   generation;
  232.         __u32                   old_mode;
  233.         __u32                   old_rdev;
  234.         __u64                   old_uid;
  235.         __u64                   old_gid;
  236.         char                   *old_target;
  237.         int                     old_targetlen;
  238.         struct kml_suffix      *suffix;
  239. };
  240. /* RCVD */ 
  241. /* izo_rcvd_rec fills the .intermezzo/fset/last_rcvd file and provides data about
  242.  * our view of reintegration offsets for a given peer.
  243.  *
  244.  * The only exception is the last_rcvd record which has a UUID consisting of all
  245.  * zeroes; this record's lr_local_offset field is the logical byte offset of our
  246.  * KML, which is updated when KML truncation takes place.  All other fields are
  247.  * reserved. */
  248. /* XXX - document how clean shutdowns are recorded */
  249. struct izo_rcvd_rec { 
  250.         __u8    lr_uuid[16];       /* which peer? */
  251.         __u64   lr_remote_recno;   /* last confirmed remote recno  */
  252.         __u64   lr_remote_offset;  /* last confirmed remote offset */
  253.         __u64   lr_local_recno;    /* last locally reinted recno   */
  254.         __u64   lr_local_offset;   /* last locally reinted offset  */
  255.         __u64   lr_last_ctime;     /* the largest ctime that has reintegrated */
  256. };
  257. /* Cache purge database
  258.  *
  259.  * Each DB entry is this structure followed by the path name, no trailing NUL. */
  260. struct izo_purge_entry {
  261.         __u64 p_atime;
  262.         __u32 p_pathlen;
  263. };
  264. /* RPC */
  265. #endif