|
xrootd
|
00001 #ifndef __YPROTOCOL_H 00002 #define __YPROTOCOL_H 00003 00004 #ifdef __CINT__ 00005 #define __attribute__(x) 00006 #endif 00007 00008 // $Id$ 00009 00010 #include "XProtocol/XPtypes.hh" 00011 00012 // We need to pack structures sent all over the net! 00013 // __attribute__((packed)) assures no padding bytes. 00014 // 00015 // Note all binary values shall be in network byte order. 00016 // 00017 // Data is serialized as explained in XrdOucPup. 00018 00019 /******************************************************************************/ 00020 /* C o m m o n R e q u e s t S e c t i o n */ 00021 /******************************************************************************/ 00022 00023 namespace XrdCms 00024 { 00025 00026 static const char kYR_Version = 2; 00027 00028 struct CmsRRHdr 00029 { kXR_unt32 streamid; // Essentially opaque 00030 kXR_char rrCode; // Request or Response code 00031 kXR_char modifier; // RR dependent 00032 kXR_unt16 datalen; 00033 }; 00034 00035 enum CmsReqCode // Request Codes 00036 { kYR_login = 0, // Same as kYR_data 00037 kYR_chmod = 1, 00038 kYR_locate = 2, 00039 kYR_mkdir = 3, 00040 kYR_mkpath = 4, 00041 kYR_mv = 5, 00042 kYR_prepadd = 6, 00043 kYR_prepdel = 7, 00044 kYR_rm = 8, 00045 kYR_rmdir = 9, 00046 kYR_select = 10, 00047 kYR_stats = 11, 00048 kYR_avail = 12, 00049 kYR_disc = 13, 00050 kYR_gone = 14, 00051 kYR_have = 15, 00052 kYR_load = 16, 00053 kYR_ping = 17, 00054 kYR_pong = 18, 00055 kYR_space = 19, 00056 kYR_state = 20, 00057 kYR_statfs = 21, 00058 kYR_status = 22, 00059 kYR_trunc = 23, 00060 kYR_try = 24, 00061 kYR_update = 25, 00062 kYR_usage = 26, 00063 kYR_xauth = 27, 00064 kYR_MaxReq // Count of request numbers (highest + 1) 00065 }; 00066 00067 // The hopcount is used for forwarded requests. It is incremented upon each 00068 // forwarding until it wraps to zero. At this point the forward is not done. 00069 // Forwarding applies to: chmod, have, mkdir, mkpath, mv, prepdel, rm, and 00070 // rmdir. Any other modifiers must be encoded in the low order 6 bits. 00071 // 00072 enum CmsFwdModifier 00073 { kYR_hopcount = 0xc0, 00074 kYR_hopincr = 0x40 00075 }; 00076 00077 enum CmsReqModifier 00078 { kYR_raw = 0x20, // Modifier: Unmarshalled data 00079 kYR_dnf = 0x10 // Modifier: mv, rm, rmdir (do not forward) 00080 }; 00081 00082 /******************************************************************************/ 00083 /* C o m m o n R e s p o n s e S e c t i o n */ 00084 /******************************************************************************/ 00085 00086 enum CmsRspCode // Response codes 00087 { kYR_data = 0, // Same as kYR_login 00088 kYR_error = 1, 00089 kYR_redirect= 2, 00090 kYR_wait = 3, 00091 kYR_waitresp= 4, 00092 kYR_yauth = 5 00093 }; 00094 00095 enum YErrorCode 00096 { kYR_ENOENT = 1, 00097 kYR_EPERM, 00098 kYR_EACCES, 00099 kYR_EINVAL, 00100 kYR_EIO, 00101 kYR_ENOMEM, 00102 kYR_ENOSPC, 00103 kYR_ENAMETOOLONG, 00104 kYR_ENETUNREACH, 00105 kYR_ENOTBLK, 00106 kYR_EISDIR 00107 }; 00108 00109 struct CmsResponse 00110 { CmsRRHdr Hdr; 00111 00112 enum {kYR_async = 128 // Modifier: Reply to prev waitresp 00113 }; 00114 00115 kXR_unt32 Val; // Port, Wait val, rc, asyncid 00116 // kXR_char Data[Hdr.datalen-4];// Target host, more data, or emessage 00117 }; 00118 00119 /******************************************************************************/ 00120 /* a v a i l R e q u e s t */ 00121 /******************************************************************************/ 00122 00123 // Request: avail <diskFree> <diskUtil> 00124 // Respond: n/a 00125 // 00126 struct CmsAvailRequest 00127 { CmsRRHdr Hdr; 00128 // kXR_int32 diskFree; 00129 // kXR_int32 diskUtil; 00130 }; 00131 00132 /******************************************************************************/ 00133 /* c h m o d R e q u e s t */ 00134 /******************************************************************************/ 00135 00136 // Request: chmod <ident> <mode> <path> 00137 // Respond: n/a 00138 // 00139 struct CmsChmodRequest 00140 { CmsRRHdr Hdr; 00141 // kXR_string Ident; 00142 // kXR_string Mode; 00143 // kXR_string Path; 00144 }; 00145 00146 /******************************************************************************/ 00147 /* d i s c R e q u e s t */ 00148 /******************************************************************************/ 00149 00150 // Request: disc 00151 // Respond: n/a 00152 // 00153 struct CmsDiscRequest 00154 { CmsRRHdr Hdr; 00155 }; 00156 00157 /******************************************************************************/ 00158 /* g o n e R e q u e s t */ 00159 /******************************************************************************/ 00160 00161 // Request: gone <path> 00162 // Respond: n/a 00163 // 00164 struct CmsGoneRequest 00165 { CmsRRHdr Hdr; 00166 // kXR_string Path; 00167 }; 00168 00169 /******************************************************************************/ 00170 /* h a v e R e q u e s t */ 00171 /******************************************************************************/ 00172 00173 // Request: have <path> 00174 // Respond: n/a 00175 // 00176 struct CmsHaveRequest 00177 { CmsRRHdr Hdr; 00178 enum {Online = 1, Pending = 2}; // Modifiers 00179 // kXR_string Path; 00180 }; 00181 00182 /******************************************************************************/ 00183 /* l o c a t e R e q u e s t */ 00184 /******************************************************************************/ 00185 00186 struct CmsLocateRequest 00187 { CmsRRHdr Hdr; 00188 // kXR_string Ident; 00189 // kXR_unt32 Opts; 00190 00191 enum {kYR_refresh = 0x01, 00192 kYR_asap = 0x80 00193 }; 00194 // kXR_string Path; 00195 00196 static const int RILen = 32; // Max length of each response item 00197 }; 00198 00199 /******************************************************************************/ 00200 /* l o g i n R e q u e s t */ 00201 /******************************************************************************/ 00202 00203 // Request: login <login_data> 00204 // Respond: xauth <auth_data> 00205 // login <login_data> 00206 // 00207 00208 struct CmsLoginData 00209 { kXR_unt16 Size; // Temp area for packing purposes 00210 kXR_unt16 Version; 00211 kXR_unt32 Mode; // From LoginMode 00212 kXR_int32 HoldTime; // Hold time in ms(managers) 00213 kXR_unt32 tSpace; // Tot Space GB (servers) 00214 kXR_unt32 fSpace; // Free Space MB (servers) 00215 kXR_unt32 mSpace; // Minf Space MB (servers) 00216 kXR_unt16 fsNum; // File Systems (servers /supervisors) 00217 kXR_unt16 fsUtil; // FS Utilization (servers /supervisors) 00218 kXR_unt16 dPort; // Data port (servers /supervisors) 00219 kXR_unt16 sPort; // Subs port (managers/supervisors) 00220 kXR_char *SID; // Server ID (servers/ supervisors) 00221 kXR_char *Paths; // Exported paths (servers/ supervisors) 00222 00223 enum LoginMode 00224 {kYR_director= 0x00000001, 00225 kYR_manager = 0x00000002, 00226 kYR_peer = 0x00000004, 00227 kYR_server = 0x00000008, 00228 kYR_proxy = 0x00000010, 00229 kYR_suspend = 0x00000100, // Suspended login 00230 kYR_nostage = 0x00000200, // Staging unavailable 00231 kYR_trying = 0x00000400, // Extensive login retries 00232 kYR_debug = 0x80000000, 00233 kYR_share = 0x7f000000, // Mask to isolate share 00234 kYR_shift = 24 // Share shift position 00235 }; 00236 }; 00237 00238 struct CmsLoginRequest 00239 { CmsRRHdr Hdr; 00240 CmsLoginData Data; 00241 }; 00242 00243 struct CmsLoginResponse 00244 { CmsRRHdr Hdr; 00245 CmsLoginData Data; 00246 }; 00247 00248 /******************************************************************************/ 00249 /* l o a d R e q u e s t */ 00250 /******************************************************************************/ 00251 00252 // Request: load <cpu> <io> <load> <mem> <pag> <util> <dskfree> 00253 // Respond: n/a 00254 // 00255 struct CmsLoadRequest 00256 { CmsRRHdr Hdr; 00257 enum {cpuLoad=0, netLoad, xeqLoad, memLoad, pagLoad, dskLoad, 00258 numLoad}; 00259 // kXR_char theLoad[numload]; 00260 // kXR_int dskFree; 00261 }; 00262 00263 /******************************************************************************/ 00264 /* m k d i r R e q u e s t */ 00265 /******************************************************************************/ 00266 00267 // Request: mkdir <ident> <mode> <path> 00268 // Respond: n/a 00269 // 00270 struct CmsMkdirRequest 00271 { CmsRRHdr Hdr; 00272 // kXR_string Ident; 00273 // kXR_string Mode; 00274 // kXR_string Path; 00275 }; 00276 00277 /******************************************************************************/ 00278 /* m k p a t h R e q u e s t */ 00279 /******************************************************************************/ 00280 00281 // Request: <id> mkpath <mode> <path> 00282 // Respond: n/a 00283 // 00284 struct CmsMkpathRequest 00285 { CmsRRHdr Hdr; 00286 // kXR_string Ident; 00287 // kXR_string Mode; 00288 // kXR_string Path; 00289 }; 00290 00291 /******************************************************************************/ 00292 /* m v R e q u e s t */ 00293 /******************************************************************************/ 00294 00295 // Request: <id> mv <old_name> <new_name> 00296 // Respond: n/a 00297 // 00298 struct CmsMvRequest { 00299 CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00300 // kXR_string Ident; 00301 // kXR_string Old_Path; 00302 // kXR_string New_Path; 00303 }; 00304 00305 /******************************************************************************/ 00306 /* p i n g R e q u e s t */ 00307 /******************************************************************************/ 00308 00309 // Request: ping 00310 // Respond: n/a 00311 // 00312 struct CmsPingRequest { 00313 CmsRRHdr Hdr; 00314 }; 00315 00316 /******************************************************************************/ 00317 /* p o n g R e q u e s t */ 00318 /******************************************************************************/ 00319 00320 // Request: pong 00321 // Respond: n/a 00322 // 00323 struct CmsPongRequest { 00324 CmsRRHdr Hdr; 00325 }; 00326 00327 /******************************************************************************/ 00328 /* p r e p a d d R e q u e s t */ 00329 /******************************************************************************/ 00330 00331 // Request: <id> prepadd <reqid> <usr> <prty> <mode> <path>\n 00332 // Respond: No response. 00333 // 00334 struct CmsPrepAddRequest 00335 { CmsRRHdr Hdr; // Modifier used with following options 00336 00337 enum {kYR_stage = 0x0001, // Stage the data 00338 kYR_write = 0x0002, // Prepare for writing 00339 kYR_coloc = 0x0004, // Prepare for co-location 00340 kYR_fresh = 0x0008, // Prepare by time refresh 00341 kYR_metaman = 0x0010 // Prepare via meta-manager 00342 }; 00343 // kXR_string Ident; 00344 // kXR_string reqid; 00345 // kXR_string user; 00346 // kXR_string prty; 00347 // kXR_string mode; 00348 // kXR_string Path; 00349 // kXR_string Opaque; // Optional 00350 }; 00351 00352 /******************************************************************************/ 00353 /* p r e p d e l R e q u e s t */ 00354 /******************************************************************************/ 00355 00356 // Request: <id> prepdel <reqid> 00357 // Respond: No response. 00358 // 00359 struct CmsPrepDelRequest 00360 { CmsRRHdr Hdr; 00361 // kXR_string Ident; 00362 // kXR_string reqid; 00363 }; 00364 00365 /******************************************************************************/ 00366 /* r m R e q u e s t */ 00367 /******************************************************************************/ 00368 00369 // Request: <id> rm <path> 00370 // Respond: n/a 00371 // 00372 struct CmsRmRequest 00373 { CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00374 // kXR_string Ident; 00375 // kXR_string Path; 00376 }; 00377 00378 /******************************************************************************/ 00379 /* r m d i r R e q u e s t */ 00380 /******************************************************************************/ 00381 00382 // Request: <id> rmdir <path> 00383 // Respond: n/a 00384 // 00385 struct CmsRmdirRequest 00386 { CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00387 // kXR_string Ident; 00388 // kXR_string Path; 00389 }; 00390 00391 /******************************************************************************/ 00392 /* s e l e c t R e q u e s t */ 00393 /******************************************************************************/ 00394 00395 // Request: <id> select[s] {c | d | m | r | w | s | t | x} <path> [-host] 00396 00397 // Note: selects - requests a cache refresh for <path> 00398 // kYR_refresh - refresh file location cache 00399 // kYR_create c - file will be created 00400 // kYR_delete d - file will be created or truncated 00401 // kYR_metaop m - inod will only be modified 00402 // kYR_read r - file will only be read 00403 // kYR_replica - file will replicated 00404 // kYR_write w - file will be read and writen 00405 // kYR_stats s - only stat information will be obtained 00406 // kYR_online x - consider only online files 00407 // may be combined with kYR_stats (file must be resident) 00408 // - - the host failed to deliver the file. 00409 00410 00411 struct CmsSelectRequest 00412 { CmsRRHdr Hdr; 00413 // kXR_string Ident; 00414 // kXR_unt32 Opts; 00415 00416 enum {kYR_refresh = 0x0001, 00417 kYR_create = 0x0002, // May combine with trunc -> delete 00418 kYR_online = 0x0004, 00419 kYR_read = 0x0008, // Default 00420 kYR_trunc = 0x0010, // -> write 00421 kYR_write = 0x0020, 00422 kYR_stat = 0x0040, // Exclsuive 00423 kYR_metaop = 0x0080, 00424 kYR_replica = 0x0100 // Only in combination with create 00425 }; 00426 // kXR_string Path; 00427 // kXR_string Opaque; // Optional 00428 // kXR_string Host; // Optional 00429 }; 00430 00431 /******************************************************************************/ 00432 /* s p a c e R e q u e s t */ 00433 /******************************************************************************/ 00434 00435 // Request: space 00436 // 00437 00438 struct CmsSpaceRequest 00439 { CmsRRHdr Hdr; 00440 }; 00441 00442 /******************************************************************************/ 00443 /* s t a t e R e q u e s t */ 00444 /******************************************************************************/ 00445 00446 // Request: state <path> 00447 // 00448 00449 struct CmsStateRequest 00450 { CmsRRHdr Hdr; 00451 // kXR_string Path; 00452 00453 enum {kYR_refresh = 0x01, // Modifier 00454 kYR_noresp = 0x02, 00455 kYR_metaman = 0x08 00456 }; 00457 }; 00458 00459 /******************************************************************************/ 00460 /* s t a t f s R e q u e s t */ 00461 /******************************************************************************/ 00462 00463 // Request: statfs <path> 00464 // 00465 00466 struct CmsStatfsRequest 00467 { CmsRRHdr Hdr; 00468 // kXR_string Path; 00469 }; 00470 00471 /******************************************************************************/ 00472 /* s t a t s R e q u e s t */ 00473 /******************************************************************************/ 00474 00475 // Request: stats or statsz (determined by modifier) 00476 // 00477 00478 struct CmsStatsRequest 00479 { CmsRRHdr Hdr; 00480 00481 enum {kYR_size = 1 // Modifier 00482 }; 00483 }; 00484 00485 /******************************************************************************/ 00486 /* s t a t u s R e q u e s t */ 00487 /******************************************************************************/ 00488 00489 // Request: status 00490 // 00491 struct CmsStatusRequest 00492 { CmsRRHdr Hdr; 00493 00494 enum {kYR_Stage = 0x01, kYR_noStage = 0x02, // Modifier 00495 kYR_Resume = 0x04, kYR_Suspend = 0x08, 00496 kYR_Reset = 0x10 // Exclusive 00497 }; 00498 }; 00499 00500 /******************************************************************************/ 00501 /* t r u n c R e q u e s t */ 00502 /******************************************************************************/ 00503 00504 // Request: <id> trunc <path> 00505 // Respond: n/a 00506 // 00507 struct CmsTruncRequest 00508 { CmsRRHdr Hdr; 00509 // kXR_string Ident; 00510 // kXR_string Size; 00511 // kXR_string Path; 00512 }; 00513 00514 /******************************************************************************/ 00515 /* t r y R e q u e s t */ 00516 /******************************************************************************/ 00517 00518 // Request: try 00519 // 00520 struct CmsTryRequest 00521 { CmsRRHdr Hdr; 00522 kXR_unt16 sLen; // This is the string length in PUP format 00523 00524 // kYR_string {ipaddr:port}[up to STMax]; 00525 }; 00526 00527 /******************************************************************************/ 00528 /* u p d a t e R e q u e s t */ 00529 /******************************************************************************/ 00530 00531 // Request: update 00532 // 00533 struct CmsUpdateRequest 00534 { CmsRRHdr Hdr; 00535 }; 00536 00537 /******************************************************************************/ 00538 /* u s a g e R e q u e s t */ 00539 /******************************************************************************/ 00540 00541 // Request: usage 00542 // 00543 struct CmsUsageRequest 00544 { CmsRRHdr Hdr; 00545 }; 00546 00547 }; // namespace XrdCms 00548 #endif
1.7.5