1843e1988Sjohnlev /* 2843e1988Sjohnlev * Details of the "wire" protocol between Xen Store Daemon and client 3843e1988Sjohnlev * library or guest kernel. 4843e1988Sjohnlev * 5843e1988Sjohnlev * Permission is hereby granted, free of charge, to any person obtaining a copy 6843e1988Sjohnlev * of this software and associated documentation files (the "Software"), to 7843e1988Sjohnlev * deal in the Software without restriction, including without limitation the 8843e1988Sjohnlev * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9843e1988Sjohnlev * sell copies of the Software, and to permit persons to whom the Software is 10843e1988Sjohnlev * furnished to do so, subject to the following conditions: 11843e1988Sjohnlev * 12843e1988Sjohnlev * The above copyright notice and this permission notice shall be included in 13843e1988Sjohnlev * all copies or substantial portions of the Software. 14843e1988Sjohnlev * 15843e1988Sjohnlev * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16843e1988Sjohnlev * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17843e1988Sjohnlev * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18843e1988Sjohnlev * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19843e1988Sjohnlev * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20843e1988Sjohnlev * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21843e1988Sjohnlev * DEALINGS IN THE SOFTWARE. 22843e1988Sjohnlev * 23843e1988Sjohnlev * Copyright (C) 2005 Rusty Russell IBM Corporation 24843e1988Sjohnlev */ 25843e1988Sjohnlev 26843e1988Sjohnlev #ifndef _XS_WIRE_H 27843e1988Sjohnlev #define _XS_WIRE_H 28843e1988Sjohnlev 29843e1988Sjohnlev enum xsd_sockmsg_type 30843e1988Sjohnlev { 31843e1988Sjohnlev XS_DEBUG, 32843e1988Sjohnlev XS_DIRECTORY, 33843e1988Sjohnlev XS_READ, 34843e1988Sjohnlev XS_GET_PERMS, 35843e1988Sjohnlev XS_WATCH, 36843e1988Sjohnlev XS_UNWATCH, 37843e1988Sjohnlev XS_TRANSACTION_START, 38843e1988Sjohnlev XS_TRANSACTION_END, 39843e1988Sjohnlev XS_INTRODUCE, 40843e1988Sjohnlev XS_RELEASE, 41843e1988Sjohnlev XS_GET_DOMAIN_PATH, 42843e1988Sjohnlev XS_WRITE, 43843e1988Sjohnlev XS_MKDIR, 44843e1988Sjohnlev XS_RM, 45843e1988Sjohnlev XS_SET_PERMS, 46843e1988Sjohnlev XS_WATCH_EVENT, 47843e1988Sjohnlev XS_ERROR, 48a576ab5bSrab XS_IS_DOMAIN_INTRODUCED, 49*349b53ddSStuart Maybee XS_RESUME, 50*349b53ddSStuart Maybee XS_SET_TARGET 51843e1988Sjohnlev }; 52843e1988Sjohnlev 53843e1988Sjohnlev #define XS_WRITE_NONE "NONE" 54843e1988Sjohnlev #define XS_WRITE_CREATE "CREATE" 55843e1988Sjohnlev #define XS_WRITE_CREATE_EXCL "CREATE|EXCL" 56843e1988Sjohnlev 57843e1988Sjohnlev /* We hand errors as strings, for portability. */ 58843e1988Sjohnlev struct xsd_errors 59843e1988Sjohnlev { 60843e1988Sjohnlev int errnum; 61843e1988Sjohnlev const char *errstring; 62843e1988Sjohnlev }; 63843e1988Sjohnlev #define XSD_ERROR(x) { x, #x } 64843e1988Sjohnlev /* LINTED: static unused */ 65a576ab5bSrab static struct xsd_errors xsd_errors[] 66a576ab5bSrab #if defined(__GNUC__) 67a576ab5bSrab __attribute__((unused)) 68a576ab5bSrab #endif 69a576ab5bSrab = { 70843e1988Sjohnlev XSD_ERROR(EINVAL), 71843e1988Sjohnlev XSD_ERROR(EACCES), 72843e1988Sjohnlev XSD_ERROR(EEXIST), 73843e1988Sjohnlev XSD_ERROR(EISDIR), 74843e1988Sjohnlev XSD_ERROR(ENOENT), 75843e1988Sjohnlev XSD_ERROR(ENOMEM), 76843e1988Sjohnlev XSD_ERROR(ENOSPC), 77843e1988Sjohnlev XSD_ERROR(EIO), 78843e1988Sjohnlev XSD_ERROR(ENOTEMPTY), 79843e1988Sjohnlev XSD_ERROR(ENOSYS), 80843e1988Sjohnlev XSD_ERROR(EROFS), 81843e1988Sjohnlev XSD_ERROR(EBUSY), 82843e1988Sjohnlev XSD_ERROR(EAGAIN), 83843e1988Sjohnlev XSD_ERROR(EISCONN) 84843e1988Sjohnlev }; 85843e1988Sjohnlev 86843e1988Sjohnlev struct xsd_sockmsg 87843e1988Sjohnlev { 88843e1988Sjohnlev uint32_t type; /* XS_??? */ 89843e1988Sjohnlev uint32_t req_id;/* Request identifier, echoed in daemon's response. */ 90843e1988Sjohnlev uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */ 91843e1988Sjohnlev uint32_t len; /* Length of data following this. */ 92843e1988Sjohnlev 93843e1988Sjohnlev /* Generally followed by nul-terminated string(s). */ 94843e1988Sjohnlev }; 95843e1988Sjohnlev 96843e1988Sjohnlev enum xs_watch_type 97843e1988Sjohnlev { 98843e1988Sjohnlev XS_WATCH_PATH = 0, 99843e1988Sjohnlev XS_WATCH_TOKEN 100843e1988Sjohnlev }; 101843e1988Sjohnlev 102843e1988Sjohnlev /* Inter-domain shared memory communications. */ 103843e1988Sjohnlev #define XENSTORE_RING_SIZE 1024 104843e1988Sjohnlev typedef uint32_t XENSTORE_RING_IDX; 105843e1988Sjohnlev #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1)) 106843e1988Sjohnlev struct xenstore_domain_interface { 107843e1988Sjohnlev char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */ 108843e1988Sjohnlev char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ 109843e1988Sjohnlev XENSTORE_RING_IDX req_cons, req_prod; 110843e1988Sjohnlev XENSTORE_RING_IDX rsp_cons, rsp_prod; 111843e1988Sjohnlev }; 112843e1988Sjohnlev 113*349b53ddSStuart Maybee /* Violating this is very bad. See docs/misc/xenstore.txt. */ 114*349b53ddSStuart Maybee #define XENSTORE_PAYLOAD_MAX 4096 115*349b53ddSStuart Maybee 116*349b53ddSStuart Maybee /* Violating these just gets you an error back */ 117*349b53ddSStuart Maybee #define XENSTORE_ABS_PATH_MAX 3072 118*349b53ddSStuart Maybee #define XENSTORE_REL_PATH_MAX 2048 119*349b53ddSStuart Maybee 120843e1988Sjohnlev #endif /* _XS_WIRE_H */ 121843e1988Sjohnlev 122843e1988Sjohnlev /* 123843e1988Sjohnlev * Local variables: 124843e1988Sjohnlev * mode: C 125843e1988Sjohnlev * c-set-style: "BSD" 126843e1988Sjohnlev * c-basic-offset: 4 127843e1988Sjohnlev * tab-width: 4 128843e1988Sjohnlev * indent-tabs-mode: nil 129843e1988Sjohnlev * End: 130843e1988Sjohnlev */ 131