[BACK]Return to xfs_message.h CVS log [TXT][DIR] Up to [local] / sys / xfs

Annotation of sys/xfs/xfs_message.h, Revision 1.1.1.1

1.1       nbrk        1: /*
                      2:  * Copyright (c) 1995 - 2002 Kungliga Tekniska Högskolan
                      3:  * (Royal Institute of Technology, Stockholm, Sweden).
                      4:  * All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  *
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  *
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  *
                     17:  * 3. Neither the name of the Institute nor the names of its contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
                     25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  */
                     33:
                     34: /* $arla: xfs_message.h,v 1.55 2002/09/27 09:43:21 lha Exp $ */
                     35:
                     36: #ifndef _xmsg_h
                     37: #define _xmsg_h
                     38:
                     39: /* bump this for any incompatible changes */
                     40:
                     41: #define NNPFS_VERSION 18
                     42:
                     43: #include <xfs/xfs_attr.h>
                     44:
                     45: /* Temporary hack? */
                     46: #define MAX_XMSG_SIZE (1024*64)
                     47:
                     48: typedef uint32_t xfs_pag_t;
                     49:
                     50: /*
                     51:  * The xfs_cred, if pag == 0, use uid
                     52:  */
                     53: typedef struct xfs_cred {
                     54:     uint32_t uid;
                     55:     xfs_pag_t pag;
                     56: } xfs_cred;
                     57:
                     58: typedef uint32_t xfs_locktype_t;
                     59: typedef uint32_t xfs_lockid_t;
                     60:
                     61:
                     62: #define MAXHANDLE (4*4)
                     63: #define MAXRIGHTS 8
                     64:
                     65: #define NNPFS_ANONYMOUSID 32766
                     66:
                     67: typedef struct xfs_handle {
                     68:     uint32_t a, b, c, d;
                     69: } xfs_handle;
                     70:
                     71: #define xfs_handle_eq(p, q) \
                     72: ((p)->a == (q)->a && (p)->b == (q)->b && (p)->c == (q)->c && (p)->d == (q)->d)
                     73:
                     74: /*
                     75:  * This should be the maximum size of any `file handle'
                     76:  */
                     77:
                     78: #define CACHEHANDLESIZE 80
                     79:
                     80: typedef struct xfs_cache_handle {
                     81:     u_char data[CACHEHANDLESIZE];
                     82: } xfs_cache_handle;
                     83:
                     84: /*
                     85:  * Tokens that apply to nodes, open modes and attributes. Shared
                     86:  * reading might be used for exec and exclusive write for remove.
                     87:  */
                     88: #define NNPFS_OPEN_MASK        0x000f
                     89: #define NNPFS_OPEN_NR  0x0001         /* Normal reading, data might change */
                     90: #define NNPFS_OPEN_SR  0x0002         /* Shared reading, data won't change */
                     91: #define NNPFS_OPEN_NW  0x0004         /* Normal writing, multiple writers */
                     92: #define NNPFS_OPEN_EW  0x0008         /* Exclusive writing (open really) */
                     93:
                     94: #define NNPFS_ATTR_MASK        0x0030
                     95: #define NNPFS_ATTR_R   0x0010         /* Attributes valid */
                     96: #define NNPFS_ATTR_W   0x0020         /* Attributes valid and modifiable */
                     97:
                     98: /*
                     99:  * Tokens that apply to node data.
                    100:  */
                    101: #define NNPFS_DATA_MASK        0x00c0
                    102: #define NNPFS_DATA_R   0x0040         /* Data valid */
                    103: #define NNPFS_DATA_W   0x0080         /* Data valid and modifiable */
                    104: #define NNPFS_LOCK_MASK        0x0300
                    105: #define NNPFS_LOCK_R   0x0100         /* Data Shared locks */
                    106: #define NNPFS_LOCK_W   0x0200         /* Data Exclusive locks */
                    107:
                    108: #define NNPFS_ATTR_VALID               NNPFS_ATTR_R
                    109: #define NNPFS_DATA_VALID               NNPFS_DATA_W
                    110:
                    111: /* xfs_node.flags
                    112:  * The lower 16 bit flags are reserved for common xfs flags
                    113:  * The upper 16 bit flags are reserved for operating system dependent
                    114:  * flags.
                    115:  */
                    116:
                    117: #define NNPFS_DATA_DIRTY       0x0001
                    118: #define NNPFS_ATTR_DIRTY       0x0002
                    119: #define NNPFS_AFSDIR           0x0004
                    120: #define NNPFS_STALE            0x0008
                    121: #define NNPFS_XDELETED         0x0010
                    122: #define NNPFS_VMOPEN           0x0020
                    123:
                    124: /*
                    125:  * Token match macros, NNPFS_TOKEN_GOT is depricated and
                    126:  * NNPFS_TOKEN_GOT_* should be used instead.
                    127:  */
                    128:
                    129: /* Are necessary tokens available? */
                    130: #define NNPFS_TOKEN_GOT(xn, tok)      ((xn)->tokens & (tok))          /* deprecated */
                    131: #define NNPFS_TOKEN_GOT_ANY(xn, tok)  ((xn)->tokens & (tok))          /* at least one must match */
                    132: #define NNPFS_TOKEN_GOT_ALL(xn, tok)  (((xn)->tokens & (tok)) == (tok)) /* all tokens must match */
                    133: #define NNPFS_TOKEN_SET(xn, tok, mask) ((xn)->tokens |= ((tok) & (mask)))
                    134: #define NNPFS_TOKEN_CLEAR(xn, tok, mask)       ((xn)->tokens &= ~((tok) & (mask)))
                    135:
                    136: /* definitions for the rights fields */
                    137: #define NNPFS_RIGHT_R  0x01            /* may read? */
                    138: #define NNPFS_RIGHT_W  0x02            /* may write? */
                    139: #define NNPFS_RIGHT_X  0x04            /* may execute? */
                    140:
                    141: /* Max name length passed in xfs messages */
                    142:
                    143: #define NNPFS_MAX_NAME 256
                    144: #define NNPFS_MAX_SYMLINK_CONTENT 2048
                    145:
                    146: struct xfs_msg_node {
                    147:     xfs_handle handle;
                    148:     uint32_t tokens;
                    149:     uint32_t pad1;
                    150:     struct xfs_attr attr;
                    151:     xfs_pag_t id[MAXRIGHTS];
                    152:     u_char rights[MAXRIGHTS];
                    153:     u_char anonrights;
                    154:     uint16_t pad2;
                    155:     uint32_t pad3;
                    156: };
                    157:
                    158: /*
                    159:  * Messages passed through the  xfs_dev.
                    160:  */
                    161: struct xfs_message_header {
                    162:   uint32_t size;
                    163:   uint32_t opcode;
                    164:   uint32_t sequence_num;               /* Private */
                    165:   uint32_t pad1;
                    166: };
                    167:
                    168: /*
                    169:  * Used by putdata flag
                    170:  */
                    171: enum { NNPFS_READ     = 0x01,
                    172:        NNPFS_WRITE    = 0x02,
                    173:        NNPFS_NONBLOCK = 0x04,
                    174:        NNPFS_APPEND   = 0x08,
                    175:        NNPFS_FSYNC    = 0x10};
                    176:
                    177: /*
                    178:  * Flags for inactivenode
                    179:  */
                    180: enum { NNPFS_NOREFS = 1, NNPFS_DELETE = 2 };
                    181:
                    182: /*
                    183:  * Flags for installdata
                    184:  */
                    185:
                    186: enum { NNPFS_ID_INVALID_DNLC = 0x01, NNPFS_ID_AFSDIR = 0x02,
                    187:        NNPFS_ID_HANDLE_VALID = 0x04 };
                    188:
                    189: /*
                    190:  * Defined message types and their opcodes.
                    191:  */
                    192: #define NNPFS_MSG_VERSION              0
                    193: #define NNPFS_MSG_WAKEUP               1
                    194:
                    195: #define NNPFS_MSG_GETROOT              2
                    196: #define NNPFS_MSG_INSTALLROOT  3
                    197:
                    198: #define NNPFS_MSG_GETNODE              4
                    199: #define NNPFS_MSG_INSTALLNODE  5
                    200:
                    201: #define NNPFS_MSG_GETATTR              6
                    202: #define NNPFS_MSG_INSTALLATTR  7
                    203:
                    204: #define NNPFS_MSG_GETDATA              8
                    205: #define NNPFS_MSG_INSTALLDATA  9
                    206:
                    207: #define NNPFS_MSG_INACTIVENODE 10
                    208: #define NNPFS_MSG_INVALIDNODE  11
                    209:                /* XXX Must handle dropped/revoked tokens better */
                    210:
                    211: #define NNPFS_MSG_OPEN         12
                    212:
                    213: #define NNPFS_MSG_PUTDATA              13
                    214: #define NNPFS_MSG_PUTATTR              14
                    215:
                    216: /* Directory manipulating messages. */
                    217: #define NNPFS_MSG_CREATE               15
                    218: #define NNPFS_MSG_MKDIR                16
                    219: #define NNPFS_MSG_LINK         17
                    220: #define NNPFS_MSG_SYMLINK              18
                    221:
                    222: #define NNPFS_MSG_REMOVE               19
                    223: #define NNPFS_MSG_RMDIR                20
                    224:
                    225: #define NNPFS_MSG_RENAME               21
                    226:
                    227: #define NNPFS_MSG_PIOCTL               22
                    228: #define NNPFS_MSG_WAKEUP_DATA  23
                    229:
                    230: #define NNPFS_MSG_UPDATEFID    24
                    231:
                    232: #define NNPFS_MSG_ADVLOCK              25
                    233:
                    234: #define NNPFS_MSG_GC_NODES     26
                    235:
                    236: #define NNPFS_MSG_COUNT                27
                    237:
                    238: /* NNPFS_MESSAGE_VERSION */
                    239: struct xfs_message_version {
                    240:   struct xfs_message_header header;
                    241:   uint32_t ret;
                    242: };
                    243:
                    244: /* NNPFS_MESSAGE_WAKEUP */
                    245: struct xfs_message_wakeup {
                    246:   struct xfs_message_header header;
                    247:   uint32_t sleepers_sequence_num;      /* Where to send wakeup */
                    248:   uint32_t error;                      /* Return value */
                    249: };
                    250:
                    251: /* NNPFS_MESSAGE_GETROOT */
                    252: struct xfs_message_getroot {
                    253:   struct xfs_message_header header;
                    254:   struct xfs_cred cred;
                    255: };
                    256:
                    257: /* NNPFS_MESSAGE_INSTALLROOT */
                    258: struct xfs_message_installroot {
                    259:   struct xfs_message_header header;
                    260:   struct xfs_msg_node node;
                    261: };
                    262:
                    263: /* NNPFS_MESSAGE_GETNODE */
                    264: struct xfs_message_getnode {
                    265:   struct xfs_message_header header;
                    266:   struct xfs_cred cred;
                    267:   xfs_handle parent_handle;
                    268:   char name[NNPFS_MAX_NAME];
                    269: };
                    270:
                    271: /* NNPFS_MESSAGE_INSTALLNODE */
                    272: struct xfs_message_installnode {
                    273:   struct xfs_message_header header;
                    274:   xfs_handle parent_handle;
                    275:   char name[NNPFS_MAX_NAME];
                    276:   struct xfs_msg_node node;
                    277: };
                    278:
                    279: /* NNPFS_MESSAGE_GETATTR */
                    280: struct xfs_message_getattr {
                    281:   struct xfs_message_header header;
                    282:   struct xfs_cred cred;
                    283:   xfs_handle handle;
                    284: };
                    285:
                    286: /* NNPFS_MESSAGE_INSTALLATTR */
                    287: struct xfs_message_installattr {
                    288:   struct xfs_message_header header;
                    289:   struct xfs_msg_node node;
                    290: };
                    291:
                    292: /* NNPFS_MESSAGE_GETDATA */
                    293: struct xfs_message_getdata {
                    294:   struct xfs_message_header header;
                    295:   struct xfs_cred cred;
                    296:   xfs_handle handle;
                    297:   uint32_t tokens;
                    298:   uint32_t pad1;
                    299:   uint32_t offset;
                    300:   uint32_t pad2;
                    301: };
                    302:
                    303: /* NNPFS_MESSAGE_INSTALLDATA */
                    304: struct xfs_message_installdata {
                    305:   struct xfs_message_header header;
                    306:   struct xfs_msg_node node;
                    307:   char cache_name[NNPFS_MAX_NAME];
                    308:   struct xfs_cache_handle cache_handle;
                    309:   uint32_t flag;
                    310:   uint32_t pad1;
                    311:   uint32_t offset;
                    312:   uint32_t pad2;
                    313: };
                    314:
                    315: /* NNPFS_MSG_INACTIVENODE */
                    316: struct xfs_message_inactivenode {
                    317:   struct xfs_message_header header;
                    318:   xfs_handle handle;
                    319:   uint32_t flag;
                    320:   uint32_t pad1;
                    321: };
                    322:
                    323: /* NNPFS_MSG_INVALIDNODE */
                    324: struct xfs_message_invalidnode {
                    325:   struct xfs_message_header header;
                    326:   xfs_handle handle;
                    327: };
                    328:
                    329: /* NNPFS_MSG_OPEN */
                    330: struct xfs_message_open {
                    331:   struct xfs_message_header header;
                    332:   struct xfs_cred cred;
                    333:   xfs_handle handle;
                    334:   uint32_t tokens;
                    335:   uint32_t pad1;
                    336: };
                    337:
                    338: /* NNPFS_MSG_PUTDATA */
                    339: struct xfs_message_putdata {
                    340:   struct xfs_message_header header;
                    341:   xfs_handle handle;
                    342:   struct xfs_attr attr;                /* XXX ??? */
                    343:   struct xfs_cred cred;
                    344:   uint32_t flag;
                    345:   uint32_t pad1;
                    346: };
                    347:
                    348: /* NNPFS_MSG_PUTATTR */
                    349: struct xfs_message_putattr {
                    350:   struct xfs_message_header header;
                    351:   xfs_handle handle;
                    352:   struct xfs_attr attr;
                    353:   struct xfs_cred cred;
                    354: };
                    355:
                    356: /* NNPFS_MSG_CREATE */
                    357: struct xfs_message_create {
                    358:   struct xfs_message_header header;
                    359:   xfs_handle parent_handle;
                    360:   char name[NNPFS_MAX_NAME];
                    361:   struct xfs_attr attr;
                    362:   uint32_t mode;
                    363:   uint32_t pad1;
                    364:   struct xfs_cred cred;
                    365: };
                    366:
                    367: /* NNPFS_MSG_MKDIR */
                    368: struct xfs_message_mkdir {
                    369:   struct xfs_message_header header;
                    370:   xfs_handle parent_handle;
                    371:   char name[NNPFS_MAX_NAME];
                    372:   struct xfs_attr attr;
                    373:   struct xfs_cred cred;
                    374: };
                    375:
                    376: /* NNPFS_MSG_LINK */
                    377: struct xfs_message_link {
                    378:   struct xfs_message_header header;
                    379:   xfs_handle parent_handle;
                    380:   char name[NNPFS_MAX_NAME];
                    381:   xfs_handle from_handle;
                    382:   struct xfs_cred cred;
                    383: };
                    384:
                    385: /* NNPFS_MSG_SYMLINK */
                    386: struct xfs_message_symlink {
                    387:   struct xfs_message_header header;
                    388:   xfs_handle parent_handle;
                    389:   char name[NNPFS_MAX_NAME];
                    390:   char contents[NNPFS_MAX_SYMLINK_CONTENT];
                    391:   struct xfs_attr attr;
                    392:   struct xfs_cred cred;
                    393: };
                    394:
                    395: /* NNPFS_MSG_REMOVE */
                    396: struct xfs_message_remove {
                    397:   struct xfs_message_header header;
                    398:   xfs_handle parent_handle;
                    399:   char name[NNPFS_MAX_NAME];
                    400:   struct xfs_cred cred;
                    401: };
                    402:
                    403: /* NNPFS_MSG_RMDIR */
                    404: struct xfs_message_rmdir {
                    405:   struct xfs_message_header header;
                    406:   xfs_handle parent_handle;
                    407:   char name[NNPFS_MAX_NAME];
                    408:   struct xfs_cred cred;
                    409: };
                    410:
                    411: /* NNPFS_MSG_RENAME */
                    412: struct xfs_message_rename {
                    413:   struct xfs_message_header header;
                    414:   xfs_handle old_parent_handle;
                    415:   char old_name[NNPFS_MAX_NAME];
                    416:   xfs_handle new_parent_handle;
                    417:   char new_name[NNPFS_MAX_NAME];
                    418:   struct xfs_cred cred;
                    419: };
                    420:
                    421: #define NNPFS_MSG_MAX_DATASIZE 2048
                    422:
                    423: /* NNPFS_MSG_PIOCTL */
                    424: struct xfs_message_pioctl {
                    425:   struct xfs_message_header header;
                    426:   uint32_t opcode ;
                    427:   uint32_t pad1;
                    428:   xfs_cred cred;
                    429:   uint32_t insize;
                    430:   uint32_t outsize;
                    431:   char msg[NNPFS_MSG_MAX_DATASIZE];
                    432:   xfs_handle handle;
                    433: };
                    434:
                    435:
                    436: /* NNPFS_MESSAGE_WAKEUP_DATA */
                    437: struct xfs_message_wakeup_data {
                    438:   struct xfs_message_header header;
                    439:   uint32_t sleepers_sequence_num;      /* Where to send wakeup */
                    440:   uint32_t error;                      /* Return value */
                    441:   uint32_t len;
                    442:   uint32_t pad1;
                    443:   char msg[NNPFS_MSG_MAX_DATASIZE];
                    444: };
                    445:
                    446: /* NNPFS_MESSAGE_UPDATEFID */
                    447: struct xfs_message_updatefid {
                    448:   struct xfs_message_header header;
                    449:   xfs_handle old_handle;
                    450:   xfs_handle new_handle;
                    451: };
                    452:
                    453: /* NNPFS_MESSAGE_ADVLOCK */
                    454: struct xfs_message_advlock {
                    455:   struct xfs_message_header header;
                    456:   xfs_handle handle;
                    457:   struct xfs_cred cred;
                    458:   xfs_locktype_t locktype;
                    459: #define NNPFS_WR_LOCK 1 /* Write lock */
                    460: #define NNPFS_RD_LOCK 2 /* Read lock */
                    461: #define NNPFS_UN_LOCK 3 /* Unlock */
                    462: #define NNPFS_BR_LOCK 4 /* Break lock (inform that we don't want the lock) */
                    463:   xfs_lockid_t lockid;
                    464: };
                    465:
                    466: /* NNPFS_MESSAGE_GC_NODES */
                    467: struct xfs_message_gc_nodes {
                    468:   struct xfs_message_header header;
                    469: #define NNPFS_GC_NODES_MAX_HANDLE 50
                    470:   uint32_t len;
                    471:   uint32_t pad1;
                    472:   xfs_handle handle[NNPFS_GC_NODES_MAX_HANDLE];
                    473: };
                    474:
                    475: #if 0
                    476: struct xfs_name {
                    477:     u_int16_t name;
                    478:     char name[1];
                    479: };
                    480: #endif
                    481:
                    482: struct xfs_message_bulkgetnode {
                    483:   struct xfs_message_header header;
                    484:   xfs_handle parent_handle;
                    485:   uint32_t flags;
                    486: #define NNPFS_BGN_LAZY         0x1
                    487:   uint32_t numnodes;
                    488:   struct xfs_handle handles[1];
                    489: };
                    490:
                    491: #endif /* _xmsg_h */

CVSweb