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