15084Sjohnlev /* 25084Sjohnlev * Details of the "wire" protocol between Xen Store Daemon and client 35084Sjohnlev * library or guest kernel. 45084Sjohnlev * 55084Sjohnlev * Permission is hereby granted, free of charge, to any person obtaining a copy 65084Sjohnlev * of this software and associated documentation files (the "Software"), to 75084Sjohnlev * deal in the Software without restriction, including without limitation the 85084Sjohnlev * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 95084Sjohnlev * sell copies of the Software, and to permit persons to whom the Software is 105084Sjohnlev * furnished to do so, subject to the following conditions: 115084Sjohnlev * 125084Sjohnlev * The above copyright notice and this permission notice shall be included in 135084Sjohnlev * all copies or substantial portions of the Software. 145084Sjohnlev * 155084Sjohnlev * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 165084Sjohnlev * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 175084Sjohnlev * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 185084Sjohnlev * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 195084Sjohnlev * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 205084Sjohnlev * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 215084Sjohnlev * DEALINGS IN THE SOFTWARE. 225084Sjohnlev * 235084Sjohnlev * Copyright (C) 2005 Rusty Russell IBM Corporation 245084Sjohnlev */ 255084Sjohnlev 265084Sjohnlev #ifndef _XS_WIRE_H 275084Sjohnlev #define _XS_WIRE_H 285084Sjohnlev 295084Sjohnlev enum xsd_sockmsg_type 305084Sjohnlev { 315084Sjohnlev XS_DEBUG, 325084Sjohnlev XS_DIRECTORY, 335084Sjohnlev XS_READ, 345084Sjohnlev XS_GET_PERMS, 355084Sjohnlev XS_WATCH, 365084Sjohnlev XS_UNWATCH, 375084Sjohnlev XS_TRANSACTION_START, 385084Sjohnlev XS_TRANSACTION_END, 395084Sjohnlev XS_INTRODUCE, 405084Sjohnlev XS_RELEASE, 415084Sjohnlev XS_GET_DOMAIN_PATH, 425084Sjohnlev XS_WRITE, 435084Sjohnlev XS_MKDIR, 445084Sjohnlev XS_RM, 455084Sjohnlev XS_SET_PERMS, 465084Sjohnlev XS_WATCH_EVENT, 475084Sjohnlev XS_ERROR, 486144Srab XS_IS_DOMAIN_INTRODUCED, 49*10175SStuart.Maybee@Sun.COM XS_RESUME, 50*10175SStuart.Maybee@Sun.COM XS_SET_TARGET 515084Sjohnlev }; 525084Sjohnlev 535084Sjohnlev #define XS_WRITE_NONE "NONE" 545084Sjohnlev #define XS_WRITE_CREATE "CREATE" 555084Sjohnlev #define XS_WRITE_CREATE_EXCL "CREATE|EXCL" 565084Sjohnlev 575084Sjohnlev /* We hand errors as strings, for portability. */ 585084Sjohnlev struct xsd_errors 595084Sjohnlev { 605084Sjohnlev int errnum; 615084Sjohnlev const char *errstring; 625084Sjohnlev }; 635084Sjohnlev #define XSD_ERROR(x) { x, #x } 645084Sjohnlev /* LINTED: static unused */ 656144Srab static struct xsd_errors xsd_errors[] 666144Srab #if defined(__GNUC__) 676144Srab __attribute__((unused)) 686144Srab #endif 696144Srab = { 705084Sjohnlev XSD_ERROR(EINVAL), 715084Sjohnlev XSD_ERROR(EACCES), 725084Sjohnlev XSD_ERROR(EEXIST), 735084Sjohnlev XSD_ERROR(EISDIR), 745084Sjohnlev XSD_ERROR(ENOENT), 755084Sjohnlev XSD_ERROR(ENOMEM), 765084Sjohnlev XSD_ERROR(ENOSPC), 775084Sjohnlev XSD_ERROR(EIO), 785084Sjohnlev XSD_ERROR(ENOTEMPTY), 795084Sjohnlev XSD_ERROR(ENOSYS), 805084Sjohnlev XSD_ERROR(EROFS), 815084Sjohnlev XSD_ERROR(EBUSY), 825084Sjohnlev XSD_ERROR(EAGAIN), 835084Sjohnlev XSD_ERROR(EISCONN) 845084Sjohnlev }; 855084Sjohnlev 865084Sjohnlev struct xsd_sockmsg 875084Sjohnlev { 885084Sjohnlev uint32_t type; /* XS_??? */ 895084Sjohnlev uint32_t req_id;/* Request identifier, echoed in daemon's response. */ 905084Sjohnlev uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */ 915084Sjohnlev uint32_t len; /* Length of data following this. */ 925084Sjohnlev 935084Sjohnlev /* Generally followed by nul-terminated string(s). */ 945084Sjohnlev }; 955084Sjohnlev 965084Sjohnlev enum xs_watch_type 975084Sjohnlev { 985084Sjohnlev XS_WATCH_PATH = 0, 995084Sjohnlev XS_WATCH_TOKEN 1005084Sjohnlev }; 1015084Sjohnlev 1025084Sjohnlev /* Inter-domain shared memory communications. */ 1035084Sjohnlev #define XENSTORE_RING_SIZE 1024 1045084Sjohnlev typedef uint32_t XENSTORE_RING_IDX; 1055084Sjohnlev #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1)) 1065084Sjohnlev struct xenstore_domain_interface { 1075084Sjohnlev char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */ 1085084Sjohnlev char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ 1095084Sjohnlev XENSTORE_RING_IDX req_cons, req_prod; 1105084Sjohnlev XENSTORE_RING_IDX rsp_cons, rsp_prod; 1115084Sjohnlev }; 1125084Sjohnlev 113*10175SStuart.Maybee@Sun.COM /* Violating this is very bad. See docs/misc/xenstore.txt. */ 114*10175SStuart.Maybee@Sun.COM #define XENSTORE_PAYLOAD_MAX 4096 115*10175SStuart.Maybee@Sun.COM 116*10175SStuart.Maybee@Sun.COM /* Violating these just gets you an error back */ 117*10175SStuart.Maybee@Sun.COM #define XENSTORE_ABS_PATH_MAX 3072 118*10175SStuart.Maybee@Sun.COM #define XENSTORE_REL_PATH_MAX 2048 119*10175SStuart.Maybee@Sun.COM 1205084Sjohnlev #endif /* _XS_WIRE_H */ 1215084Sjohnlev 1225084Sjohnlev /* 1235084Sjohnlev * Local variables: 1245084Sjohnlev * mode: C 1255084Sjohnlev * c-set-style: "BSD" 1265084Sjohnlev * c-basic-offset: 4 1275084Sjohnlev * tab-width: 4 1285084Sjohnlev * indent-tabs-mode: nil 1295084Sjohnlev * End: 1305084Sjohnlev */ 131