xref: /onnv-gate/usr/src/uts/common/xen/public/io/xs_wire.h (revision 10175:dd9708d1f561)
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