125 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Details of the "wire" protocol between Xen Store Daemon and client4 * library or guest kernel.5 * Copyright (C) 2005 Rusty Russell IBM Corporation6 */7 8#ifndef _XS_WIRE_H9#define _XS_WIRE_H10 11enum xsd_sockmsg_type12{13 XS_CONTROL,14#define XS_DEBUG XS_CONTROL15 XS_DIRECTORY,16 XS_READ,17 XS_GET_PERMS,18 XS_WATCH,19 XS_UNWATCH,20 XS_TRANSACTION_START,21 XS_TRANSACTION_END,22 XS_INTRODUCE,23 XS_RELEASE,24 XS_GET_DOMAIN_PATH,25 XS_WRITE,26 XS_MKDIR,27 XS_RM,28 XS_SET_PERMS,29 XS_WATCH_EVENT,30 XS_ERROR,31 XS_IS_DOMAIN_INTRODUCED,32 XS_RESUME,33 XS_SET_TARGET,34 /* XS_RESTRICT has been removed */35 XS_RESET_WATCHES = XS_SET_TARGET + 2,36 XS_DIRECTORY_PART,37 38 XS_TYPE_COUNT, /* Number of valid types. */39 40 XS_INVALID = 0xffff /* Guaranteed to remain an invalid type */41};42 43#define XS_WRITE_NONE "NONE"44#define XS_WRITE_CREATE "CREATE"45#define XS_WRITE_CREATE_EXCL "CREATE|EXCL"46 47/* We hand errors as strings, for portability. */48struct xsd_errors49{50 int errnum;51 const char *errstring;52};53#define XSD_ERROR(x) { x, #x }54static struct xsd_errors xsd_errors[] __attribute__((unused)) = {55 XSD_ERROR(EINVAL),56 XSD_ERROR(EACCES),57 XSD_ERROR(EEXIST),58 XSD_ERROR(EISDIR),59 XSD_ERROR(ENOENT),60 XSD_ERROR(ENOMEM),61 XSD_ERROR(ENOSPC),62 XSD_ERROR(EIO),63 XSD_ERROR(ENOTEMPTY),64 XSD_ERROR(ENOSYS),65 XSD_ERROR(EROFS),66 XSD_ERROR(EBUSY),67 XSD_ERROR(EAGAIN),68 XSD_ERROR(EISCONN),69 XSD_ERROR(E2BIG)70};71 72struct xsd_sockmsg73{74 uint32_t type; /* XS_??? */75 uint32_t req_id;/* Request identifier, echoed in daemon's response. */76 uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */77 uint32_t len; /* Length of data following this. */78 79 /* Generally followed by nul-terminated string(s). */80};81 82enum xs_watch_type83{84 XS_WATCH_PATH = 0,85 XS_WATCH_TOKEN86};87 88/* Inter-domain shared memory communications. */89#define XENSTORE_RING_SIZE 102490typedef uint32_t XENSTORE_RING_IDX;91#define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))92struct xenstore_domain_interface {93 char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */94 char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */95 XENSTORE_RING_IDX req_cons, req_prod;96 XENSTORE_RING_IDX rsp_cons, rsp_prod;97 uint32_t server_features; /* Bitmap of features supported by the server */98 uint32_t connection;99 uint32_t error;100};101 102/* Violating this is very bad. See docs/misc/xenstore.txt. */103#define XENSTORE_PAYLOAD_MAX 4096104 105/* Violating these just gets you an error back */106#define XENSTORE_ABS_PATH_MAX 3072107#define XENSTORE_REL_PATH_MAX 2048108 109/* The ability to reconnect a ring */110#define XENSTORE_SERVER_FEATURE_RECONNECTION 1111/* The presence of the "error" field in the ring page */112#define XENSTORE_SERVER_FEATURE_ERROR 2113 114/* Valid values for the connection field */115#define XENSTORE_CONNECTED 0 /* the steady-state */116#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */117 118/* Valid values for the error field */119#define XENSTORE_ERROR_NONE 0 /* No error */120#define XENSTORE_ERROR_COMM 1 /* Communication problem */121#define XENSTORE_ERROR_RINGIDX 2 /* Invalid ring index */122#define XENSTORE_ERROR_PROTO 3 /* Protocol violation (payload too long) */123 124#endif /* _XS_WIRE_H */125