[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     ! 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