xs_wire.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. #ifndef _XS_WIRE_H
  26. #define _XS_WIRE_H
  27. enum xsd_sockmsg_type
  28. {
  29. XS_DEBUG,
  30. XS_DIRECTORY,
  31. XS_READ,
  32. XS_GET_PERMS,
  33. XS_WATCH,
  34. XS_UNWATCH,
  35. XS_TRANSACTION_START,
  36. XS_TRANSACTION_END,
  37. XS_INTRODUCE,
  38. XS_RELEASE,
  39. XS_GET_DOMAIN_PATH,
  40. XS_WRITE,
  41. XS_MKDIR,
  42. XS_RM,
  43. XS_SET_PERMS,
  44. XS_WATCH_EVENT,
  45. XS_ERROR,
  46. XS_IS_DOMAIN_INTRODUCED,
  47. XS_RESUME,
  48. XS_SET_TARGET,
  49. XS_RESTRICT,
  50. XS_RESET_WATCHES
  51. };
  52. #define XS_WRITE_NONE "NONE"
  53. #define XS_WRITE_CREATE "CREATE"
  54. #define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
  55. /* We hand errors as strings, for portability. */
  56. struct xsd_errors
  57. {
  58. int errnum;
  59. const char *errstring;
  60. };
  61. #ifdef EINVAL
  62. #define XSD_ERROR(x) { x, #x }
  63. /* LINTED: static unused */
  64. static struct xsd_errors xsd_errors[]
  65. #if defined(__GNUC__)
  66. __attribute__((unused))
  67. #endif
  68. = {
  69. XSD_ERROR(EINVAL),
  70. XSD_ERROR(EACCES),
  71. XSD_ERROR(EEXIST),
  72. XSD_ERROR(EISDIR),
  73. XSD_ERROR(ENOENT),
  74. XSD_ERROR(ENOMEM),
  75. XSD_ERROR(ENOSPC),
  76. XSD_ERROR(EIO),
  77. XSD_ERROR(ENOTEMPTY),
  78. XSD_ERROR(ENOSYS),
  79. XSD_ERROR(EROFS),
  80. XSD_ERROR(EBUSY),
  81. XSD_ERROR(EAGAIN),
  82. XSD_ERROR(EISCONN),
  83. XSD_ERROR(E2BIG)
  84. };
  85. #endif
  86. struct xsd_sockmsg
  87. {
  88. uint32_t type; /* XS_??? */
  89. uint32_t req_id;/* Request identifier, echoed in daemon's response. */
  90. uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */
  91. uint32_t len; /* Length of data following this. */
  92. /* Generally followed by nul-terminated string(s). */
  93. };
  94. enum xs_watch_type
  95. {
  96. XS_WATCH_PATH = 0,
  97. XS_WATCH_TOKEN
  98. };
  99. /*
  100. * `incontents 150 xenstore_struct XenStore wire protocol.
  101. *
  102. * Inter-domain shared memory communications. */
  103. #define XENSTORE_RING_SIZE 1024
  104. typedef uint32_t XENSTORE_RING_IDX;
  105. #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))
  106. struct xenstore_domain_interface {
  107. char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */
  108. char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */
  109. XENSTORE_RING_IDX req_cons, req_prod;
  110. XENSTORE_RING_IDX rsp_cons, rsp_prod;
  111. };
  112. /* Violating this is very bad. See docs/misc/xenstore.txt. */
  113. #define XENSTORE_PAYLOAD_MAX 4096
  114. /* Violating these just gets you an error back */
  115. #define XENSTORE_ABS_PATH_MAX 3072
  116. #define XENSTORE_REL_PATH_MAX 2048
  117. #endif /* _XS_WIRE_H */
  118. /*
  119. * Local variables:
  120. * mode: C
  121. * c-file-style: "BSD"
  122. * c-basic-offset: 4
  123. * tab-width: 4
  124. * indent-tabs-mode: nil
  125. * End:
  126. */