iPXE
include
xen
io
xs_wire.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: MIT */
2
/*
3
* Details of the "wire" protocol between Xen Store Daemon and client
4
* library or guest kernel.
5
*
6
* Copyright (C) 2005 Rusty Russell IBM Corporation
7
*/
8
9
#ifndef _XS_WIRE_H
10
#define _XS_WIRE_H
11
12
FILE_LICENCE
( MIT );
13
FILE_SECBOOT
( PERMITTED );
14
15
enum
xsd_sockmsg_type
16
{
17
XS_CONTROL
,
18
#define XS_DEBUG XS_CONTROL
19
XS_DIRECTORY
,
20
XS_READ
,
21
XS_GET_PERMS
,
22
XS_WATCH
,
23
XS_UNWATCH
,
24
XS_TRANSACTION_START
,
25
XS_TRANSACTION_END
,
26
XS_INTRODUCE
,
27
XS_RELEASE
,
28
XS_GET_DOMAIN_PATH
,
29
XS_WRITE
,
30
XS_MKDIR
,
31
XS_RM
,
32
XS_SET_PERMS
,
33
XS_WATCH_EVENT
,
34
XS_ERROR
,
35
XS_IS_DOMAIN_INTRODUCED
,
36
XS_RESUME
,
37
XS_SET_TARGET
,
38
/* XS_RESTRICT has been removed */
39
XS_RESET_WATCHES
=
XS_SET_TARGET
+ 2,
40
XS_DIRECTORY_PART
,
41
42
XS_TYPE_COUNT
,
/* Number of valid types. */
43
44
XS_INVALID
= 0xffff
/* Guaranteed to remain an invalid type */
45
};
46
47
#define XS_WRITE_NONE "NONE"
48
#define XS_WRITE_CREATE "CREATE"
49
#define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
50
51
/* We hand errors as strings, for portability. */
52
struct
xsd_errors
53
{
54
int
errnum
;
55
const
char
*
errstring
;
56
};
57
#ifdef EINVAL
58
#define XSD_ERROR(x) { x, #x }
59
/* LINTED: static unused */
60
static
const
struct
xsd_errors
xsd_errors
[]
61
#
if
defined(__GNUC__)
62
__attribute__
((
unused
))
63
#endif
64
= {
65
/* /!\ New errors should be added at the end of the array. */
66
XSD_ERROR(
EINVAL
),
67
XSD_ERROR(
EACCES
),
68
XSD_ERROR(
EEXIST
),
69
XSD_ERROR(
EISDIR
),
70
XSD_ERROR(
ENOENT
),
71
XSD_ERROR(
ENOMEM
),
72
XSD_ERROR(
ENOSPC
),
73
XSD_ERROR(
EIO
),
74
XSD_ERROR(
ENOTEMPTY
),
75
XSD_ERROR(
ENOSYS
),
76
XSD_ERROR(
EROFS
),
77
XSD_ERROR(
EBUSY
),
78
XSD_ERROR(
EAGAIN
),
79
XSD_ERROR(
EISCONN
),
80
XSD_ERROR(
E2BIG
),
81
XSD_ERROR(
EPERM
),
82
};
83
#endif
84
85
struct
xsd_sockmsg
86
{
87
uint32_t
type
;
/* XS_??? */
88
uint32_t
req_id
;
/* Request identifier, echoed in daemon's response. */
89
uint32_t
tx_id
;
/* Transaction id (0 if not related to a transaction). */
90
uint32_t
len
;
/* Length of data following this. */
91
92
/* Generally followed by nul-terminated string(s). */
93
};
94
95
enum
xs_watch_type
96
{
97
XS_WATCH_PATH
= 0,
98
XS_WATCH_TOKEN
99
};
100
101
/*
102
* `incontents 150 xenstore_struct XenStore wire protocol.
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
uint32_t
server_features
;
/* Bitmap of features supported by the server */
114
uint32_t
connection
;
115
uint32_t
error
;
116
};
117
118
/* Violating this is very bad. See docs/misc/xenstore.txt. */
119
#define XENSTORE_PAYLOAD_MAX 4096
120
121
/* Violating these just gets you an error back */
122
#define XENSTORE_ABS_PATH_MAX 3072
123
#define XENSTORE_REL_PATH_MAX 2048
124
125
/* The ability to reconnect a ring */
126
#define XENSTORE_SERVER_FEATURE_RECONNECTION 1
127
/* The presence of the "error" field in the ring page */
128
#define XENSTORE_SERVER_FEATURE_ERROR 2
129
130
/* Valid values for the connection field */
131
#define XENSTORE_CONNECTED 0
/* the steady-state */
132
#define XENSTORE_RECONNECT 1
/* reconnect in progress */
133
134
/* Valid values for the error field */
135
#define XENSTORE_ERROR_NONE 0
/* No error */
136
#define XENSTORE_ERROR_COMM 1
/* Communication problem */
137
#define XENSTORE_ERROR_RINGIDX 2
/* Invalid ring index */
138
#define XENSTORE_ERROR_PROTO 3
/* Protocol violation (payload too long) */
139
140
#endif
/* _XS_WIRE_H */
141
142
/*
143
* Local variables:
144
* mode: C
145
* c-file-style: "BSD"
146
* c-basic-offset: 4
147
* tab-width: 4
148
* indent-tabs-mode: nil
149
* End:
150
*/
XS_RESUME
Definition:
xs_wire.h:36
EINVAL
#define EINVAL
Invalid argument.
Definition:
errno.h:429
xenstore_domain_interface::server_features
uint32_t server_features
Definition:
xs_wire.h:113
XS_WATCH_EVENT
Definition:
xs_wire.h:33
XS_CONTROL
Definition:
xs_wire.h:17
XS_RM
Definition:
xs_wire.h:31
EBUSY
#define EBUSY
Device or resource busy.
Definition:
errno.h:339
EISCONN
#define EISCONN
Socket is connected.
Definition:
errno.h:439
XENSTORE_RING_IDX
uint32_t XENSTORE_RING_IDX
Definition:
xs_wire.h:106
xenstore_domain_interface
Definition:
xs_wire.h:108
xenstore_domain_interface::req
char req[XENSTORE_RING_SIZE]
Definition:
xs_wire.h:109
xsd_errors::errnum
int errnum
Definition:
xs_wire.h:54
EEXIST
#define EEXIST
File exists.
Definition:
errno.h:389
XS_WRITE
Definition:
xs_wire.h:29
XS_WATCH_PATH
Definition:
xs_wire.h:97
EISDIR
#define EISDIR
Is a directory.
Definition:
errno.h:444
xenstore_domain_interface::rsp_cons
XENSTORE_RING_IDX rsp_cons
Definition:
xs_wire.h:112
ENOENT
#define ENOENT
No such file or directory.
Definition:
errno.h:515
xsd_sockmsg::req_id
uint32_t req_id
Definition:
xs_wire.h:88
EACCES
#define EACCES
Permission denied.
Definition:
errno.h:299
XS_WATCH
Definition:
xs_wire.h:22
xsd_errors
Definition:
xs_wire.h:52
xs_watch_type
xs_watch_type
Definition:
xs_wire.h:95
ENOTEMPTY
#define ENOTEMPTY
Directory not empty.
Definition:
errno.h:580
FILE_SECBOOT
FILE_SECBOOT(PERMITTED)
ENOMEM
#define ENOMEM
Not enough space.
Definition:
errno.h:535
XS_WATCH_TOKEN
Definition:
xs_wire.h:98
XS_TRANSACTION_END
Definition:
xs_wire.h:25
XS_SET_TARGET
Definition:
xs_wire.h:37
XS_GET_PERMS
Definition:
xs_wire.h:21
__attribute__
A 16-bit general register.
Definition:
registers.h:24
E2BIG
#define E2BIG
Argument list too long.
Definition:
errno.h:294
XS_INTRODUCE
Definition:
xs_wire.h:26
XS_MKDIR
Definition:
xs_wire.h:30
XS_IS_DOMAIN_INTRODUCED
Definition:
xs_wire.h:35
XS_INVALID
Definition:
xs_wire.h:44
xenstore_domain_interface::rsp_prod
XENSTORE_RING_IDX rsp_prod
Definition:
xs_wire.h:112
uint32_t
unsigned int uint32_t
Definition:
stdint.h:12
xsd_sockmsg::type
uint32_t type
Definition:
xs_wire.h:87
EAGAIN
#define EAGAIN
Resource temporarily unavailable.
Definition:
errno.h:319
unused
uint8_t unused
Unused.
Definition:
librm.h:140
XS_TRANSACTION_START
Definition:
xs_wire.h:24
xenstore_domain_interface::req_prod
XENSTORE_RING_IDX req_prod
Definition:
xs_wire.h:111
FILE_LICENCE
FILE_LICENCE(MIT)
xsd_sockmsg::tx_id
uint32_t tx_id
Definition:
xs_wire.h:89
EPERM
#define EPERM
Operation not permitted.
Definition:
errno.h:615
ENOSPC
#define ENOSPC
No space left on device.
Definition:
errno.h:550
XS_RELEASE
Definition:
xs_wire.h:27
xsd_sockmsg
Definition:
xs_wire.h:85
XS_READ
Definition:
xs_wire.h:20
EIO
#define EIO
Input/output error.
Definition:
errno.h:434
xenstore_domain_interface::req_cons
XENSTORE_RING_IDX req_cons
Definition:
xs_wire.h:111
XS_DIRECTORY
Definition:
xs_wire.h:19
xsd_sockmsg_type
xsd_sockmsg_type
Definition:
xs_wire.h:15
XS_ERROR
Definition:
xs_wire.h:34
ENOSYS
#define ENOSYS
Function not implemented.
Definition:
errno.h:565
EROFS
#define EROFS
Read-only file system.
Definition:
errno.h:645
xenstore_domain_interface::rsp
char rsp[XENSTORE_RING_SIZE]
Definition:
xs_wire.h:110
XS_SET_PERMS
Definition:
xs_wire.h:32
XS_TYPE_COUNT
Definition:
xs_wire.h:42
XS_RESET_WATCHES
Definition:
xs_wire.h:39
xsd_errors::errstring
const char * errstring
Definition:
xs_wire.h:55
XS_UNWATCH
Definition:
xs_wire.h:23
xsd_sockmsg::len
uint32_t len
Definition:
xs_wire.h:90
xenstore_domain_interface::connection
uint32_t connection
Definition:
xs_wire.h:114
XENSTORE_RING_SIZE
#define XENSTORE_RING_SIZE
Definition:
xs_wire.h:105
XS_GET_DOMAIN_PATH
Definition:
xs_wire.h:28
if
if(natsemi->flags &NATSEMI_64BIT) return 1
XS_DIRECTORY_PART
Definition:
xs_wire.h:40
xenstore_domain_interface::error
uint32_t error
Definition:
xs_wire.h:115
Generated by
1.8.15