cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xs_wire.h (3381B)


      1/* SPDX-License-Identifier: MIT */
      2/*
      3 * Details of the "wire" protocol between Xen Store Daemon and client
      4 * library or guest kernel.
      5 * Copyright (C) 2005 Rusty Russell IBM Corporation
      6 */
      7
      8#ifndef _XS_WIRE_H
      9#define _XS_WIRE_H
     10
     11enum xsd_sockmsg_type
     12{
     13    XS_CONTROL,
     14#define XS_DEBUG XS_CONTROL
     15    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_errors
     49{
     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_sockmsg
     73{
     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_type
     83{
     84    XS_WATCH_PATH = 0,
     85    XS_WATCH_TOKEN
     86};
     87
     88/* Inter-domain shared memory communications. */
     89#define XENSTORE_RING_SIZE 1024
     90typedef 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 4096
    104
    105/* Violating these just gets you an error back */
    106#define XENSTORE_ABS_PATH_MAX 3072
    107#define XENSTORE_REL_PATH_MAX 2048
    108
    109/* The ability to reconnect a ring */
    110#define XENSTORE_SERVER_FEATURE_RECONNECTION 1
    111/* The presence of the "error" field in the ring page */
    112#define XENSTORE_SERVER_FEATURE_ERROR        2
    113
    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 */