|
|
1.1 root 1: /*
2: * Details of the "wire" protocol between Xen Store Daemon and client
3: * library or guest kernel.
4: *
5: * Permission is hereby granted, free of charge, to any person obtaining a copy
6: * of this software and associated documentation files (the "Software"), to
7: * deal in the Software without restriction, including without limitation the
8: * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9: * sell copies of the Software, and to permit persons to whom the Software is
10: * furnished to do so, subject to the following conditions:
11: *
12: * The above copyright notice and this permission notice shall be included in
13: * all copies or substantial portions of the Software.
14: *
15: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21: * DEALINGS IN THE SOFTWARE.
22: *
23: * Copyright (C) 2005 Rusty Russell IBM Corporation
24: */
25:
26: #ifndef _XS_WIRE_H
27: #define _XS_WIRE_H
28:
29: enum xsd_sockmsg_type
30: {
31: XS_DEBUG,
32: XS_DIRECTORY,
33: XS_READ,
34: XS_GET_PERMS,
35: XS_WATCH,
36: XS_UNWATCH,
37: XS_TRANSACTION_START,
38: XS_TRANSACTION_END,
39: XS_INTRODUCE,
40: XS_RELEASE,
41: XS_GET_DOMAIN_PATH,
42: XS_WRITE,
43: XS_MKDIR,
44: XS_RM,
45: XS_SET_PERMS,
46: XS_WATCH_EVENT,
47: XS_ERROR,
48: XS_IS_DOMAIN_INTRODUCED,
49: XS_RESUME,
50: XS_SET_TARGET
51: };
52:
53: #define XS_WRITE_NONE "NONE"
54: #define XS_WRITE_CREATE "CREATE"
55: #define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
56:
57: #ifdef linux_specific
58: /* We hand errors as strings, for portability. */
59: struct xsd_errors
60: {
61: int errnum;
62: const char *errstring;
63: };
64: #define XSD_ERROR(x) { x, #x }
65: /* LINTED: static unused */
66: static struct xsd_errors xsd_errors[]
67: #if defined(__GNUC__)
68: __attribute__((unused))
69: #endif
70: = {
71: XSD_ERROR(EINVAL),
72: XSD_ERROR(EACCES),
73: XSD_ERROR(EEXIST),
74: XSD_ERROR(EISDIR),
75: XSD_ERROR(ENOENT),
76: XSD_ERROR(ENOMEM),
77: XSD_ERROR(ENOSPC),
78: XSD_ERROR(EIO),
79: XSD_ERROR(ENOTEMPTY),
80: XSD_ERROR(ENOSYS),
81: XSD_ERROR(EROFS),
82: XSD_ERROR(EBUSY),
83: XSD_ERROR(EAGAIN),
84: XSD_ERROR(EISCONN)
85: };
86: #endif
87:
88: struct xsd_sockmsg
89: {
90: uint32_t type; /* XS_??? */
91: uint32_t req_id;/* Request identifier, echoed in daemon's response. */
92: uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */
93: uint32_t len; /* Length of data following this. */
94:
95: /* Generally followed by nul-terminated string(s). */
96: };
97:
98: enum xs_watch_type
99: {
100: XS_WATCH_PATH = 0,
101: XS_WATCH_TOKEN
102: };
103:
104: /* Inter-domain shared memory communications. */
105: #define XENSTORE_RING_SIZE 1024
106: typedef uint32_t XENSTORE_RING_IDX;
107: #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))
108: struct xenstore_domain_interface {
109: char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */
110: char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */
111: XENSTORE_RING_IDX req_cons, req_prod;
112: XENSTORE_RING_IDX rsp_cons, rsp_prod;
113: };
114:
115: /* Violating this is very bad. See docs/misc/xenstore.txt. */
116: #define XENSTORE_PAYLOAD_MAX 4096
117:
118: /* Violating these just gets you an error back */
119: #define XENSTORE_ABS_PATH_MAX 3072
120: #define XENSTORE_REL_PATH_MAX 2048
121:
122: #endif /* _XS_WIRE_H */
123:
124: /*
125: * Local variables:
126: * mode: C
127: * c-set-style: "BSD"
128: * c-basic-offset: 4
129: * tab-width: 4
130: * indent-tabs-mode: nil
131: * End:
132: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.