cfg.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * Copyright (c) 2005 MontaVista Software, Inc.
  3. * Copyright (c) 2006-2009 Red Hat, Inc.
  4. *
  5. * All rights reserved.
  6. *
  7. * Author: Steven Dake (sdake@redhat.com)
  8. *
  9. * This software licensed under BSD license, the text of which follows:
  10. *
  11. * Redistribution and use in source and binary forms, with or without
  12. * modification, are permitted provided that the following conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above copyright notice,
  15. * this list of conditions and the following disclaimer.
  16. * - Redistributions in binary form must reproduce the above copyright notice,
  17. * this list of conditions and the following disclaimer in the documentation
  18. * and/or other materials provided with the distribution.
  19. * - Neither the name of the MontaVista Software, Inc. nor the names of its
  20. * contributors may be used to endorse or promote products derived from this
  21. * software without specific prior written permission.
  22. *
  23. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  24. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  27. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  28. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  29. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  30. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  31. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  32. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  33. * THE POSSIBILITY OF SUCH DAMAGE.
  34. */
  35. #ifndef COROSYNC_CFG_H_DEFINED
  36. #define COROSYNC_CFG_H_DEFINED
  37. #include <netinet/in.h>
  38. #include <corosync/corotypes.h>
  39. typedef uint64_t corosync_cfg_handle_t;
  40. typedef enum {
  41. COROSYNC_CFG_ADMINISTRATIVETARGET_SERVICEUNIT = 0,
  42. COROSYNC_CFG_ADMINISTRATIVETARGET_SERVICEGROUP = 1,
  43. COROSYNC_CFG_ADMINISTRATIVETARGET_COMPONENTSERVICEINSTANCE = 2,
  44. COROSYNC_CFG_ADMINISTRATIVETARGET_NODE = 3
  45. } corosync_cfg_administrative_target_t;
  46. typedef enum {
  47. COROSYNC_CFG_ADMINISTRATIVESTATE_UNLOCKED = 0,
  48. COROSYNC_CFG_ADMINISTRATIVESTATE_LOCKED = 1,
  49. COROSYNC_CFG_ADMINISTRATIVESTATE_STOPPING = 2
  50. } corosync_cfg_administrative_state_t;
  51. typedef enum {
  52. COROSYNC_CFG_OPERATIONALSTATE_ENABLED = 1,
  53. COROSYNC_CFG_OPERATIONALSTATE_DISABLED = 2
  54. } corosync_cfg_operational_state_t;
  55. typedef enum {
  56. COROSYNC_CFG_READINESSSTATE_OUTOFSERVICE = 1,
  57. COROSYNC_CFG_READINESSSTATE_INSERVICE = 2,
  58. COROSYNC_CFG_READINESSSTATE_STOPPING = 3
  59. } corosync_cfg_readiness_state_t;
  60. typedef enum {
  61. COROSYNC_CFG_PRESENCESTATE_UNINSTANTIATED = 1,
  62. COROSYNC_CFG_PRESENCESTATE_INSTANTIATING = 2,
  63. COROSYNC_CFG_PRESENCESTATE_INSTANTIATED = 3,
  64. COROSYNC_CFG_PRESENCESTATE_TERMINATING = 4,
  65. COROSYNC_CFG_PRESENCESTATE_RESTARTING = 5,
  66. COROSYNC_CFG_PRESENCESTATE_INSTANTIATION_FAILED = 6,
  67. COROSYNC_CFG_PRESENCESTATE_TERMINATION_FAILED = 7
  68. } corosync_cfg_presence_state_t;
  69. typedef enum {
  70. COROSYNC_CFG_STATETYPE_OPERATIONAL = 0,
  71. COROSYNC_CFG_STATETYPE_ADMINISTRATIVE = 1,
  72. COROSYNC_CFG_STATETYPE_READINESS = 2,
  73. COROSYNC_CFG_STATETYPE_HA = 3,
  74. COROSYNC_CFG_STATETYPE_PRESENCE = 4
  75. } corosync_cfg_state_type_t;
  76. /* Shutdown types.
  77. REQUEST is the normal shutdown. other daemons will be consulted
  78. REGARDLESS will tell other daemons but ignore their opinions
  79. IMMEDIATE will shut down straight away (but still tell other nodes)
  80. */
  81. typedef enum {
  82. COROSYNC_CFG_SHUTDOWN_FLAG_REQUEST = 0,
  83. COROSYNC_CFG_SHUTDOWN_FLAG_REGARDLESS = 1,
  84. COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE = 2,
  85. } corosync_cfg_shutdown_flags_t;
  86. typedef enum {
  87. COROSYNC_CFG_SHUTDOWN_FLAG_NO = 0,
  88. COROSYNC_CFG_SHUTDOWN_FLAG_YES = 1,
  89. } corosync_cfg_shutdown_reply_flags_t;
  90. typedef struct {
  91. cs_name_t name;
  92. corosync_cfg_state_type_t state_type;
  93. corosync_cfg_administrative_state_t administrative_state;
  94. } corosync_cfg_state_notification_t;
  95. typedef struct {
  96. uint32_t number_of_items;
  97. corosync_cfg_state_notification_t *notification;
  98. } corosync_cfg_state_notification_buffer_t;
  99. typedef void (*corosync_cfg_state_track_callback_t) (
  100. corosync_cfg_state_notification_buffer_t *notification_buffer,
  101. cs_error_t error);
  102. typedef void (*corosync_cfg_shutdown_callback_t) (
  103. corosync_cfg_handle_t cfg_handle,
  104. corosync_cfg_shutdown_flags_t flags);
  105. typedef struct {
  106. corosync_cfg_state_track_callback_t corosync_cfg_state_track_callback;
  107. corosync_cfg_shutdown_callback_t corosync_cfg_shutdown_callback;
  108. } corosync_cfg_callbacks_t;
  109. /*
  110. * A node address. This is a complete sockaddr_in[6]
  111. * To explain:
  112. * If you cast cna_address to a 'struct sockaddr', the sa_family field
  113. * will be AF_INET or AF_INET6. Armed with that knowledge you can then
  114. * cast it to a sockaddr_in or sockaddr_in6 and pull out the address.
  115. * No other sockaddr fields are valid.
  116. * Also, you must ignore any part of the sockaddr beyond the length supplied
  117. */
  118. typedef struct
  119. {
  120. int address_length; /* FIXME: set but never used */
  121. char address[sizeof(struct sockaddr_in6)];
  122. } corosync_cfg_node_address_t;
  123. /*
  124. * Interfaces
  125. */
  126. #ifdef __cplusplus
  127. extern "C" {
  128. #endif
  129. cs_error_t
  130. corosync_cfg_initialize (
  131. corosync_cfg_handle_t *cfg_handle,
  132. const corosync_cfg_callbacks_t *cfg_callbacks);
  133. cs_error_t
  134. corosync_cfg_fd_get (
  135. corosync_cfg_handle_t cfg_handle,
  136. int32_t *selection_fd);
  137. cs_error_t
  138. corosync_cfg_dispatch (
  139. corosync_cfg_handle_t cfg_handle,
  140. cs_dispatch_flags_t dispatch_flags);
  141. cs_error_t
  142. corosync_cfg_finalize (
  143. corosync_cfg_handle_t cfg_handle);
  144. cs_error_t
  145. corosync_cfg_ring_status_get (
  146. corosync_cfg_handle_t cfg_handle,
  147. char ***interface_names,
  148. char ***status,
  149. unsigned int *interface_count);
  150. cs_error_t
  151. corosync_cfg_ring_reenable (
  152. corosync_cfg_handle_t cfg_handle);
  153. cs_error_t
  154. corosync_cfg_service_load (
  155. corosync_cfg_handle_t cfg_handle,
  156. const char *service_name,
  157. unsigned int service_ver);
  158. cs_error_t
  159. corosync_cfg_service_unload (
  160. corosync_cfg_handle_t cfg_handle,
  161. const char *service_name,
  162. unsigned int service_ver);
  163. cs_error_t
  164. corosync_cfg_kill_node (
  165. corosync_cfg_handle_t cfg_handle,
  166. unsigned int nodeid,
  167. const char *reason);
  168. cs_error_t
  169. corosync_cfg_try_shutdown (
  170. corosync_cfg_handle_t cfg_handle,
  171. corosync_cfg_shutdown_flags_t flags);
  172. cs_error_t
  173. corosync_cfg_replyto_shutdown (
  174. corosync_cfg_handle_t cfg_handle,
  175. corosync_cfg_shutdown_reply_flags_t flags);
  176. cs_error_t
  177. corosync_cfg_state_track (
  178. corosync_cfg_handle_t cfg_handle,
  179. uint8_t track_flags,
  180. const corosync_cfg_state_notification_t *notification_buffer);
  181. cs_error_t
  182. corosync_cfg_state_track_stop (
  183. corosync_cfg_handle_t cfg_handle);
  184. cs_error_t
  185. corosync_cfg_get_node_addrs (
  186. corosync_cfg_handle_t cfg_handle,
  187. int nodeid,
  188. size_t max_addrs,
  189. int *num_addrs,
  190. corosync_cfg_node_address_t *addrs);
  191. cs_error_t
  192. corosync_cfg_local_get (
  193. corosync_cfg_handle_t handle,
  194. unsigned int *local_nodeid);
  195. cs_error_t
  196. corosync_cfg_crypto_set (
  197. corosync_cfg_handle_t handle,
  198. unsigned int type);
  199. #ifdef __cplusplus
  200. }
  201. #endif
  202. #endif /* COROSYNC_CFG_H_DEFINED */