00001 #ifndef __YPROTOCOL_H 00002 #define __YPROTOCOL_H 00003 /******************************************************************************/ 00004 /* */ 00005 /* Y P r o t o c o l . h h */ 00006 /* */ 00007 /* (c) 2012 by the Board of Trustees of the Leland Stanford, Jr., University */ 00008 /* All Rights Reserved */ 00009 /* Produced by Andrew Hanushevsky for Stanford University under contract */ 00010 /* DE-AC02-76-SFO0515 with the Department of Energy */ 00011 /* */ 00012 /* This file is part of the XRootD software suite. */ 00013 /* */ 00014 /* XRootD is free software: you can redistribute it and/or modify it under */ 00015 /* the terms of the GNU Lesser General Public License as published by the */ 00016 /* Free Software Foundation, either version 3 of the License, or (at your */ 00017 /* option) any later version. */ 00018 /* */ 00019 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */ 00020 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ 00021 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */ 00022 /* License for more details. */ 00023 /* */ 00024 /* The XRootD protocol definition, documented in this file, is distributed */ 00025 /* under a modified BSD license and may be freely used to reimplement it. */ 00026 /* Any references to "source" in this license refers to this file or any */ 00027 /* other file that specifically contains the following license. */ 00028 /* */ 00029 /* Redistribution and use in source and binary forms, with or without */ 00030 /* modification, are permitted provided that the following conditions */ 00031 /* are met: */ 00032 /* */ 00033 /* 1. Redistributions of source code must retain the above copyright notice, */ 00034 /* this list of conditions and the following disclaimer. */ 00035 /* */ 00036 /* 2. Redistributions in binary form must reproduce the above copyright */ 00037 /* notice, this list of conditions and the following disclaimer in the */ 00038 /* documentation and/or other materials provided with the distribution. */ 00039 /* */ 00040 /* 3. Neither the name of the copyright holder nor the names of its */ 00041 /* contributors may be used to endorse or promote products derived from */ 00042 /* this software without specific prior written permission. */ 00043 /* */ 00044 /* 4. Derived software may not use the name XRootD or cmsd (regardless of */ 00045 /* capitilization) in association with the derived work if the protocol */ 00046 /* documented in this file is changed in any way. */ 00047 /* */ 00048 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ 00049 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ 00050 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */ 00051 /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ 00052 /* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ 00053 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ 00054 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ 00055 /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */ 00056 /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ 00057 /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */ 00058 /******************************************************************************/ 00059 00060 #ifdef __CINT__ 00061 #define __attribute__(x) 00062 #endif 00063 00064 #include "XProtocol/XPtypes.hh" 00065 00066 // We need to pack structures sent all over the net! 00067 // __attribute__((packed)) assures no padding bytes. 00068 // 00069 // Note all binary values shall be in network byte order. 00070 // 00071 // Data is serialized as explained in XrdOucPup. 00072 00073 /******************************************************************************/ 00074 /* C o m m o n R e q u e s t S e c t i o n */ 00075 /******************************************************************************/ 00076 00077 namespace XrdCms 00078 { 00079 00080 static const unsigned char kYR_Version = 3; 00081 00082 struct CmsRRHdr 00083 { kXR_unt32 streamid; // Essentially opaque 00084 kXR_char rrCode; // Request or Response code 00085 kXR_char modifier; // RR dependent 00086 kXR_unt16 datalen; 00087 }; 00088 00089 enum CmsReqCode // Request Codes 00090 { kYR_login = 0, // Same as kYR_data 00091 kYR_chmod = 1, 00092 kYR_locate = 2, 00093 kYR_mkdir = 3, 00094 kYR_mkpath = 4, 00095 kYR_mv = 5, 00096 kYR_prepadd = 6, 00097 kYR_prepdel = 7, 00098 kYR_rm = 8, 00099 kYR_rmdir = 9, 00100 kYR_select = 10, 00101 kYR_stats = 11, 00102 kYR_avail = 12, 00103 kYR_disc = 13, 00104 kYR_gone = 14, 00105 kYR_have = 15, 00106 kYR_load = 16, 00107 kYR_ping = 17, 00108 kYR_pong = 18, 00109 kYR_space = 19, 00110 kYR_state = 20, 00111 kYR_statfs = 21, 00112 kYR_status = 22, 00113 kYR_trunc = 23, 00114 kYR_try = 24, 00115 kYR_update = 25, 00116 kYR_usage = 26, 00117 kYR_xauth = 27, 00118 kYR_MaxReq // Count of request numbers (highest + 1) 00119 }; 00120 00121 // The hopcount is used for forwarded requests. It is incremented upon each 00122 // forwarding until it wraps to zero. At this point the forward is not done. 00123 // Forwarding applies to: chmod, have, mkdir, mkpath, mv, prepdel, rm, and 00124 // rmdir. Any other modifiers must be encoded in the low order 6 bits. 00125 // 00126 enum CmsFwdModifier 00127 { kYR_hopcount = 0xc0, 00128 kYR_hopincr = 0x40 00129 }; 00130 00131 enum CmsReqModifier 00132 { kYR_raw = 0x20, // Modifier: Unmarshalled data 00133 kYR_dnf = 0x10 // Modifier: mv, rm, rmdir (do not forward) 00134 }; 00135 00136 /******************************************************************************/ 00137 /* C o m m o n R e s p o n s e S e c t i o n */ 00138 /******************************************************************************/ 00139 00140 enum CmsRspCode // Response codes 00141 { kYR_data = 0, // Same as kYR_login 00142 kYR_error = 1, 00143 kYR_redirect= 2, 00144 kYR_wait = 3, 00145 kYR_waitresp= 4, 00146 kYR_yauth = 5 00147 }; 00148 00149 enum YErrorCode 00150 { kYR_ENOENT = 1, // -> ENOENT 00151 kYR_EPERM, // -> ENOENT 00152 kYR_EACCES, // -> EACCES 00153 kYR_EINVAL, // -> EINVALO 00154 kYR_EIO, // -> EIO 00155 kYR_ENOMEM, // -> ENOMEM 00156 kYR_ENOSPC, // -> ENOSPC 00157 kYR_ENAMETOOLONG, // -> ENAMETOOLONG 00158 kYR_ENETUNREACH, // -> ENETUNREACH 00159 kYR_ENOTBLK, // -> ENOTBLK 00160 kYR_EISDIR, // -> EISDIR 00161 kYR_FSError, // -> ENODEV 00162 kYR_SrvError, // -> EFAULT 00163 kYR_RWConflict, // -> EEXIST 00164 kYR_noReplicas // -> EADDRNOTAVAIL 00165 }; 00166 00167 struct CmsResponse 00168 { CmsRRHdr Hdr; 00169 00170 enum {kYR_async = 128 // Modifier: Reply to prev waitresp 00171 }; 00172 00173 kXR_unt32 Val; // Port, Wait val, rc, asyncid 00174 // kXR_char Data[Hdr.datalen-4];// Target host, more data, or emessage 00175 }; 00176 00177 /******************************************************************************/ 00178 /* a v a i l R e q u e s t */ 00179 /******************************************************************************/ 00180 00181 // Request: avail <diskFree> <diskUtil> 00182 // Respond: n/a 00183 // 00184 struct CmsAvailRequest 00185 { CmsRRHdr Hdr; 00186 // kXR_int32 diskFree; 00187 // kXR_int32 diskUtil; 00188 }; 00189 00190 /******************************************************************************/ 00191 /* c h m o d R e q u e s t */ 00192 /******************************************************************************/ 00193 00194 // Request: chmod <ident> <mode> <path> 00195 // Respond: n/a 00196 // 00197 struct CmsChmodRequest 00198 { CmsRRHdr Hdr; 00199 // kXR_string Ident; 00200 // kXR_string Mode; 00201 // kXR_string Path; 00202 }; 00203 00204 /******************************************************************************/ 00205 /* d i s c R e q u e s t */ 00206 /******************************************************************************/ 00207 00208 // Request: disc 00209 // Respond: n/a 00210 // 00211 struct CmsDiscRequest 00212 { CmsRRHdr Hdr; 00213 }; 00214 00215 /******************************************************************************/ 00216 /* g o n e R e q u e s t */ 00217 /******************************************************************************/ 00218 00219 // Request: gone <path> 00220 // Respond: n/a 00221 // 00222 struct CmsGoneRequest 00223 { CmsRRHdr Hdr; 00224 // kXR_string Path; 00225 }; 00226 00227 /******************************************************************************/ 00228 /* h a v e R e q u e s t */ 00229 /******************************************************************************/ 00230 00231 // Request: have <path> 00232 // Respond: n/a 00233 // 00234 struct CmsHaveRequest 00235 { CmsRRHdr Hdr; 00236 enum {Online = 1, Pending = 2}; // Modifiers 00237 // kXR_string Path; 00238 }; 00239 00240 /******************************************************************************/ 00241 /* l o c a t e R e q u e s t */ 00242 /******************************************************************************/ 00243 00244 struct CmsLocateRequest 00245 { CmsRRHdr Hdr; 00246 // kXR_string Ident; 00247 // kXR_unt32 Opts; 00248 00249 enum {kYR_refresh = 0x0001, 00250 kYR_retname = 0x0002, 00251 kYR_retuniq = 0x0004, 00252 kYR_asap = 0x0080, 00253 kYR_retipv4 = 0x0000, // Client is only IPv4 00254 kYR_retipv46= 0x1000, // Client is IPv4 IPv6 00255 kYR_retipv6 = 0x2000, // Client is only IPv6 00256 kYR_retipv64= 0x3000, // Client is IPv6 IPv4 00257 kYR_retipmsk= 0x3000, // Mask to isolate retipcxx bits 00258 kYR_retipsft= 12, // Shift to convert retipcxx bits 00259 kYR_listall = 0x4000, // List everything regardless of other settings 00260 kYR_prvtnet = 0x8000 // Client is using a private address 00261 }; 00262 // kXR_string Path; 00263 00264 static const int RHLen =266; // Max length of each host response item 00265 }; 00266 00267 /******************************************************************************/ 00268 /* l o g i n R e q u e s t */ 00269 /******************************************************************************/ 00270 00271 // Request: login <login_data> 00272 // Respond: xauth <auth_data> 00273 // login <login_data> 00274 // 00275 00276 struct CmsLoginData 00277 { kXR_unt16 Size; // Temp area for packing purposes 00278 kXR_unt16 Version; 00279 kXR_unt32 Mode; // From LoginMode 00280 kXR_int32 HoldTime; // Hold time in ms(managers) 00281 kXR_unt32 tSpace; // Tot Space GB (servers) 00282 kXR_unt32 fSpace; // Free Space MB (servers) 00283 kXR_unt32 mSpace; // Minf Space MB (servers) 00284 kXR_unt16 fsNum; // File Systems (servers /supervisors) 00285 kXR_unt16 fsUtil; // FS Utilization (servers /supervisors) 00286 kXR_unt16 dPort; // Data port (servers /supervisors) 00287 kXR_unt16 sPort; // Subs port (managers/supervisors) 00288 kXR_char *SID; // Server ID (servers/ supervisors) 00289 kXR_char *Paths; // Exported paths (servers/ supervisors) 00290 kXR_char *ifList; // Exported interfaces 00291 kXR_char *envCGI; // Exported environment 00292 00293 enum LoginMode 00294 {kYR_director= 0x00000001, 00295 kYR_manager = 0x00000002, 00296 kYR_peer = 0x00000004, 00297 kYR_server = 0x00000008, 00298 kYR_proxy = 0x00000010, 00299 kYR_subman = 0x00000020, 00300 kYR_blredir = 0x00000040, // Supports or is bl redir 00301 kYR_suspend = 0x00000100, // Suspended login 00302 kYR_nostage = 0x00000200, // Staging unavailable 00303 kYR_trying = 0x00000400, // Extensive login retries 00304 kYR_debug = 0x80000000, 00305 kYR_share = 0x7f000000, // Mask to isolate share 00306 kYR_shift = 24, // Share shift position 00307 kYR_tzone = 0x00f80000, // Mask to isolate time zone 00308 kYR_shifttz = 19 // TZone shift position 00309 }; 00310 }; 00311 00312 struct CmsLoginRequest 00313 { CmsRRHdr Hdr; 00314 CmsLoginData Data; 00315 }; 00316 00317 struct CmsLoginResponse 00318 { CmsRRHdr Hdr; 00319 CmsLoginData Data; 00320 }; 00321 00322 /******************************************************************************/ 00323 /* l o a d R e q u e s t */ 00324 /******************************************************************************/ 00325 00326 // Request: load <cpu> <io> <load> <mem> <pag> <util> <dskfree> 00327 // Respond: n/a 00328 // 00329 struct CmsLoadRequest 00330 { CmsRRHdr Hdr; 00331 enum {cpuLoad=0, netLoad, xeqLoad, memLoad, pagLoad, dskLoad, 00332 numLoad}; 00333 // kXR_char theLoad[numload]; 00334 // kXR_int dskFree; 00335 }; 00336 00337 /******************************************************************************/ 00338 /* m k d i r R e q u e s t */ 00339 /******************************************************************************/ 00340 00341 // Request: mkdir <ident> <mode> <path> 00342 // Respond: n/a 00343 // 00344 struct CmsMkdirRequest 00345 { CmsRRHdr Hdr; 00346 // kXR_string Ident; 00347 // kXR_string Mode; 00348 // kXR_string Path; 00349 }; 00350 00351 /******************************************************************************/ 00352 /* m k p a t h R e q u e s t */ 00353 /******************************************************************************/ 00354 00355 // Request: <id> mkpath <mode> <path> 00356 // Respond: n/a 00357 // 00358 struct CmsMkpathRequest 00359 { CmsRRHdr Hdr; 00360 // kXR_string Ident; 00361 // kXR_string Mode; 00362 // kXR_string Path; 00363 }; 00364 00365 /******************************************************************************/ 00366 /* m v R e q u e s t */ 00367 /******************************************************************************/ 00368 00369 // Request: <id> mv <old_name> <new_name> 00370 // Respond: n/a 00371 // 00372 struct CmsMvRequest { 00373 CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00374 // kXR_string Ident; 00375 // kXR_string Old_Path; 00376 // kXR_string New_Path; 00377 }; 00378 00379 /******************************************************************************/ 00380 /* p i n g R e q u e s t */ 00381 /******************************************************************************/ 00382 00383 // Request: ping 00384 // Respond: n/a 00385 // 00386 struct CmsPingRequest { 00387 CmsRRHdr Hdr; 00388 }; 00389 00390 /******************************************************************************/ 00391 /* p o n g R e q u e s t */ 00392 /******************************************************************************/ 00393 00394 // Request: pong 00395 // Respond: n/a 00396 // 00397 struct CmsPongRequest { 00398 CmsRRHdr Hdr; 00399 }; 00400 00401 /******************************************************************************/ 00402 /* p r e p a d d R e q u e s t */ 00403 /******************************************************************************/ 00404 00405 // Request: <id> prepadd <reqid> <usr> <prty> <mode> <path>\n 00406 // Respond: No response. 00407 // 00408 struct CmsPrepAddRequest 00409 { CmsRRHdr Hdr; // Modifier used with following options 00410 00411 enum {kYR_stage = 0x0001, // Stage the data 00412 kYR_write = 0x0002, // Prepare for writing 00413 kYR_coloc = 0x0004, // Prepare for co-location 00414 kYR_fresh = 0x0008, // Prepare by time refresh 00415 kYR_metaman = 0x0010 // Prepare via meta-manager 00416 }; 00417 // kXR_string Ident; 00418 // kXR_string reqid; 00419 // kXR_string user; 00420 // kXR_string prty; 00421 // kXR_string mode; 00422 // kXR_string Path; 00423 // kXR_string Opaque; // Optional 00424 }; 00425 00426 /******************************************************************************/ 00427 /* p r e p d e l R e q u e s t */ 00428 /******************************************************************************/ 00429 00430 // Request: <id> prepdel <reqid> 00431 // Respond: No response. 00432 // 00433 struct CmsPrepDelRequest 00434 { CmsRRHdr Hdr; 00435 // kXR_string Ident; 00436 // kXR_string reqid; 00437 }; 00438 00439 /******************************************************************************/ 00440 /* r m R e q u e s t */ 00441 /******************************************************************************/ 00442 00443 // Request: <id> rm <path> 00444 // Respond: n/a 00445 // 00446 struct CmsRmRequest 00447 { CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00448 // kXR_string Ident; 00449 // kXR_string Path; 00450 }; 00451 00452 /******************************************************************************/ 00453 /* r m d i r R e q u e s t */ 00454 /******************************************************************************/ 00455 00456 // Request: <id> rmdir <path> 00457 // Respond: n/a 00458 // 00459 struct CmsRmdirRequest 00460 { CmsRRHdr Hdr; // Subject to kYR_dnf modifier! 00461 // kXR_string Ident; 00462 // kXR_string Path; 00463 }; 00464 00465 /******************************************************************************/ 00466 /* s e l e c t R e q u e s t */ 00467 /******************************************************************************/ 00468 00469 // Request: <id> select[s] {c | d | m | r | w | s | t | x} <path> [-host] 00470 00471 // Note: selects - requests a cache refresh for <path> 00472 // kYR_refresh - refresh file location cache 00473 // kYR_create c - file will be created 00474 // kYR_delete d - file will be created or truncated 00475 // kYR_metaop m - inod will only be modified 00476 // kYR_read r - file will only be read 00477 // kYR_replica - file will replicated 00478 // kYR_write w - file will be read and writen 00479 // kYR_stats s - only stat information will be obtained 00480 // kYR_online x - consider only online files 00481 // may be combined with kYR_stats (file must be resident) 00482 // - - the host failed to deliver the file. 00483 00484 00485 struct CmsSelectRequest 00486 { CmsRRHdr Hdr; 00487 // kXR_string Ident; 00488 // kXR_unt32 Opts; 00489 00490 enum {kYR_refresh = 0x00000001, 00491 kYR_create = 0x00000002, // May combine with trunc -> delete 00492 kYR_online = 0x00000004, 00493 kYR_read = 0x00000008, // Default 00494 kYR_trunc = 0x00000010, // -> write 00495 kYR_write = 0x00000020, 00496 kYR_stat = 0x00000040, // Exclsuive 00497 kYR_metaop = 0x00000080, 00498 kYR_replica = 0x00000100, // Only in combination with create 00499 kYR_mwfiles = 0x00000200, // Multiple writables files are OK 00500 kYR_retipv4 = 0x00000000, // Client is only IPv4 00501 kYR_retipv46= 0x00001000, // Client is IPv4 IPv6 00502 kYR_retipv6 = 0x00002000, // Client is only IPv6 00503 kYR_retipv64= 0x00003000, // Client is IPv6 IPv4 00504 kYR_retipmsk= 0x00003000, // Mask to isolate retipcxx bits 00505 kYR_retipsft= 12, // Shift to convert retipcxx bits 00506 kYR_prvtnet = 0x00008000, // Client is using a private address 00507 00508 kYR_tryMISS = 0x00000000, // Retry due to missing file (triedrc=enoent) 00509 kYR_tryIOER = 0x00010000, // Retry due to I/O error (triedrc=ioerr) 00510 kYR_tryFSER = 0x00020000, // Retry due to FS error (triedrc=fserr) 00511 kYR_trySVER = 0x00030000, // Retry due to server error (triedrc=srverr) 00512 kYR_tryMASK = 0x00030000, // Mask to isolate retry reason 00513 kYR_trySHFT = 16, // Amount to shift right 00514 kYR_tryRSEL = 0x00040000, // Retry for reselection LCL (triedrc=resel) 00515 kYR_tryRSEG = 0x00080000, // Retry for reselection GBL (triedrc=resel) 00516 kYR_tryMSRC = 0x000C0000, // Retry for multisource operation 00517 kYR_aWeak = 0x00100000, // Affinity: weak 00518 kYR_aStrong = 0x00200000, // Affinity: strong 00519 kYR_aStrict = 0x00300000, // Affinity: strict 00520 kYR_aNone = 0x00400000, // Affinity: none 00521 kYR_aSpec = 0x00700000, // Mask to test if any affinity specified 00522 kYR_aPack = 0x00300000, // Mask to test if the affinity packs choice 00523 kYR_aWait = 0x00200000 // Mask to test if the affinity must wait 00524 }; 00525 // kXR_string Path; 00526 // kXR_string Opaque; // Optional 00527 // kXR_string Host; // Optional 00528 }; 00529 00530 /******************************************************************************/ 00531 /* s p a c e R e q u e s t */ 00532 /******************************************************************************/ 00533 00534 // Request: space 00535 // 00536 00537 struct CmsSpaceRequest 00538 { CmsRRHdr Hdr; 00539 }; 00540 00541 /******************************************************************************/ 00542 /* s t a t e R e q u e s t */ 00543 /******************************************************************************/ 00544 00545 // Request: state <path> 00546 // 00547 00548 struct CmsStateRequest 00549 { CmsRRHdr Hdr; 00550 // kXR_string Path; 00551 00552 enum {kYR_refresh = 0x01, // Modifier 00553 kYR_noresp = 0x02, 00554 kYR_metaman = 0x08 00555 }; 00556 }; 00557 00558 /******************************************************************************/ 00559 /* s t a t f s R e q u e s t */ 00560 /******************************************************************************/ 00561 00562 // Request: statfs <path> 00563 // 00564 00565 struct CmsStatfsRequest 00566 { CmsRRHdr Hdr; // Modifier used with following options 00567 // kXR_string Path; 00568 00569 enum {kYR_qvfs = 0x0001 // Virtual file system query 00570 }; 00571 }; 00572 00573 /******************************************************************************/ 00574 /* s t a t s R e q u e s t */ 00575 /******************************************************************************/ 00576 00577 // Request: stats or statsz (determined by modifier) 00578 // 00579 00580 struct CmsStatsRequest 00581 { CmsRRHdr Hdr; 00582 00583 enum {kYR_size = 1 // Modifier 00584 }; 00585 }; 00586 00587 /******************************************************************************/ 00588 /* s t a t u s R e q u e s t */ 00589 /******************************************************************************/ 00590 00591 // Request: status 00592 // 00593 struct CmsStatusRequest 00594 { CmsRRHdr Hdr; 00595 00596 enum {kYR_Stage = 0x01, kYR_noStage = 0x02, // Modifier 00597 kYR_Resume = 0x04, kYR_Suspend = 0x08, 00598 kYR_Reset = 0x10 // Exclusive 00599 }; 00600 }; 00601 00602 /******************************************************************************/ 00603 /* t r u n c R e q u e s t */ 00604 /******************************************************************************/ 00605 00606 // Request: <id> trunc <path> 00607 // Respond: n/a 00608 // 00609 struct CmsTruncRequest 00610 { CmsRRHdr Hdr; 00611 // kXR_string Ident; 00612 // kXR_string Size; 00613 // kXR_string Path; 00614 }; 00615 00616 /******************************************************************************/ 00617 /* t r y R e q u e s t */ 00618 /******************************************************************************/ 00619 00620 // Request: try 00621 // 00622 struct CmsTryRequest 00623 { CmsRRHdr Hdr; 00624 kXR_unt16 sLen; // This is the string length in PUP format 00625 00626 // kYR_string {ipaddr:port}[up to STMax]; 00627 00628 enum {kYR_permtop = 0x01 // Modifier Permanent redirect to top level 00629 }; 00630 }; 00631 00632 /******************************************************************************/ 00633 /* u p d a t e R e q u e s t */ 00634 /******************************************************************************/ 00635 00636 // Request: update 00637 // 00638 struct CmsUpdateRequest 00639 { CmsRRHdr Hdr; 00640 }; 00641 00642 /******************************************************************************/ 00643 /* u s a g e R e q u e s t */ 00644 /******************************************************************************/ 00645 00646 // Request: usage 00647 // 00648 struct CmsUsageRequest 00649 { CmsRRHdr Hdr; 00650 }; 00651 00652 }; // namespace XrdCms 00653 #endif