xrootd
YProtocol.hh
Go to the documentation of this file.
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