brintos

brintos / linux-shallow public Read only

0
0
Text · 3.3 KiB · b623654 Raw
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