OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [intermezzo_idl.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.