2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
9 * Portions Copyright (c) 2006-2008 Sine Nomine Associates
15 Institution: The Information Technology Center, Carnegie-Mellon University
23 #define FSYNC_PROTO_VERSION 3
27 * FSYNC command codes.
30 FSYNC_VOL_ON = SYNC_COM_CODE_DECL(0), /**< bring Volume online */
31 FSYNC_VOL_OFF = SYNC_COM_CODE_DECL(1), /**< take Volume offline */
32 FSYNC_VOL_LISTVOLUMES = SYNC_COM_CODE_DECL(2), /**< Update local volume list */
33 FSYNC_VOL_NEEDVOLUME = SYNC_COM_CODE_DECL(3), /**< Put volume in whatever mode (offline, or whatever)
34 * best fits the attachment mode provided in reason */
35 FSYNC_VOL_MOVE = SYNC_COM_CODE_DECL(4), /**< Generate temporary relocation information
36 * for this volume to another site, to be used
37 * if this volume disappears */
38 FSYNC_VOL_BREAKCBKS = SYNC_COM_CODE_DECL(5), /**< Break all the callbacks on this volume */
39 FSYNC_VOL_DONE = SYNC_COM_CODE_DECL(6), /**< Done with this volume (used after a delete).
40 * Don't put online, but remove from list */
41 FSYNC_VOL_QUERY = SYNC_COM_CODE_DECL(7), /**< query the volume state */
42 FSYNC_VOL_QUERY_HDR = SYNC_COM_CODE_DECL(8), /**< query the volume disk data structure */
43 FSYNC_VOL_QUERY_VOP = SYNC_COM_CODE_DECL(9), /**< query the volume for pending vol op info */
44 FSYNC_VOL_STATS_GENERAL = SYNC_COM_CODE_DECL(10), /**< query the general volume package statistics */
45 FSYNC_VOL_STATS_VICEP = SYNC_COM_CODE_DECL(11), /**< query the per-partition volume package stats */
46 FSYNC_VOL_STATS_HASH = SYNC_COM_CODE_DECL(12), /**< query the per hash-chain volume package stats */
47 FSYNC_VOL_STATS_HDR = SYNC_COM_CODE_DECL(13), /**< query the volume header cache statistics */
48 FSYNC_VOL_STATS_VLRU = SYNC_COM_CODE_DECL(14), /**< query the VLRU statistics */
49 FSYNC_VOL_ATTACH = SYNC_COM_CODE_DECL(15), /**< Force volume online */
50 FSYNC_VOL_FORCE_ERROR = SYNC_COM_CODE_DECL(16), /**< force volume into error state */
51 FSYNC_VOL_LEAVE_OFF = SYNC_COM_CODE_DECL(17), /**< end vol op, but leave volume offline */
52 FSYNC_VOL_QUERY_VNODE = SYNC_COM_CODE_DECL(18), /**< query vnode state */
59 enum FSYNCReasonCode {
60 FSYNC_WHATEVER = SYNC_REASON_CODE_DECL(0), /**< XXXX */
61 FSYNC_SALVAGE = SYNC_REASON_CODE_DECL(1), /**< volume is being salvaged */
62 FSYNC_MOVE = SYNC_REASON_CODE_DECL(2), /**< volume is being moved */
63 FSYNC_OPERATOR = SYNC_REASON_CODE_DECL(3), /**< operator forced volume offline */
64 FSYNC_EXCLUSIVE = SYNC_REASON_CODE_DECL(4), /**< somebody else has the volume offline */
65 FSYNC_UNKNOWN_VOLID = SYNC_REASON_CODE_DECL(5), /**< volume id not known by fileserver */
66 FSYNC_HDR_NOT_ATTACHED = SYNC_REASON_CODE_DECL(6), /**< volume header not currently attached */
67 FSYNC_NO_PENDING_VOL_OP = SYNC_REASON_CODE_DECL(7), /**< no volume operation pending */
68 FSYNC_VOL_PKG_ERROR = SYNC_REASON_CODE_DECL(8), /**< error in the volume package */
69 FSYNC_UNKNOWN_VNID = SYNC_REASON_CODE_DECL(9), /**< vnode id not known by fileserver */
70 FSYNC_WRONG_PART = SYNC_REASON_CODE_DECL(10),/**< volume attached on different partition */
71 FSYNC_BAD_STATE = SYNC_REASON_CODE_DECL(11),/**< current volume state does not allow this operation */
75 /* FSYNC response codes */
77 /* FSYNC flag codes */
85 * fssync protocol volume operation request message.
87 typedef struct FSSYNC_VolOp_hdr {
88 afs_uint32 volume; /**< volume id associated with request */
89 char partName[16]; /**< partition name, e.g. /vicepa */
92 typedef struct FSSYNC_VolOp_command {
93 SYNC_command_hdr * hdr;
94 FSSYNC_VolOp_hdr * vop;
96 struct offlineInfo * v;
97 struct offlineInfo * volumes;
98 } FSSYNC_VolOp_command;
102 * volume operation processing state.
104 enum FSSYNC_VolOpState {
105 FSSYNC_VolOpPending = 0, /**< volume operation request received */
106 FSSYNC_VolOpDenied = 1, /**< volume operation request denied */
107 FSSYNC_VolOpRunningOnline = 2, /**< volume operation is running while volume is online */
108 FSSYNC_VolOpRunningOffline = 3, /**< volume operation is running while volume is offline */
109 FSSYNC_VolOpRunningUnknown = 4 /**< volume operation is running; VVolOpLeaveOnline_r resolution unknown */
113 * volume operation information node.
115 * @note this structure is attached to a struct Volume to signify that
116 * a volume operation is in-progress.
119 * @see VRegisterVolOp_r
120 * @see VDeregisterVolOp_r
122 typedef struct FSSYNC_VolOp_info {
123 SYNC_command_hdr com;
124 FSSYNC_VolOp_hdr vop;
125 enum FSSYNC_VolOpState vol_op_state;
130 * fssync protocol volume package statistics request node.
132 typedef struct FSSYNC_StatsOp_hdr {
134 afs_uint32 vlru_generation; /**< vlru generation id */
135 afs_uint32 hash_bucket; /**< volume hash bucket */
136 char partName[16]; /**< partition name */
138 } FSSYNC_StatsOp_hdr;
140 typedef struct FSSYNC_StatsOp_command {
141 SYNC_command_hdr * hdr;
142 FSSYNC_StatsOp_hdr * sop;
144 } FSSYNC_StatsOp_command;
147 * fssync protocol vnode query request message.
149 typedef struct FSSYNC_VnQry_hdr {
150 afs_uint32 volume; /**< volume id */
151 afs_uint32 vnode; /**< vnode id */
152 afs_uint32 unique; /**< uniqifier */
153 afs_uint32 spare; /**< reserved for future use */
154 char partName[16]; /**< partition name */
158 #define FSSYNC_IN_PORT 2040
159 #define FSSYNC_UN_PATH "fssync.sock"
160 #define FSSYNC_ENDPOINT_DECL SYNC_ENDPOINT_DECL(FSSYNC_IN_PORT, FSSYNC_UN_PATH)
165 extern void FSYNC_Init(void);
168 * fsync client interfaces
170 extern void FSYNC_clientFinis(void);
171 extern int FSYNC_clientInit(void);
172 extern int FSYNC_clientChildProcReconnect(void);
174 /* generic low-level interface */
175 extern afs_int32 FSYNC_askfs(SYNC_command * com, SYNC_response * res);
177 /* generic higher-level interface */
178 extern afs_int32 FSYNC_GenericOp(void * ext_hdr, size_t ext_len,
179 int command, int reason,
180 SYNC_response * res);
182 /* volume operations interface */
183 extern afs_int32 FSYNC_VolOp(VolumeId volume, char *partName, int com, int reason,
184 SYNC_response * res);
186 /* statistics query interface */
187 extern afs_int32 FSYNC_StatsOp(FSSYNC_StatsOp_hdr * scom, int command, int reason,
188 SYNC_response * res_in);
190 #endif /* __fssync_h_ */