cfg.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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. /**
  77. * Shutdown types.
  78. */
  79. typedef enum {
  80. /**
  81. * REQUEST is the normal shutdown.
  82. * Other daemons will be consulted.
  83. */
  84. COROSYNC_CFG_SHUTDOWN_FLAG_REQUEST = 0,
  85. /**
  86. * REGARDLESS will tell other daemons but ignore their opinions.
  87. */
  88. COROSYNC_CFG_SHUTDOWN_FLAG_REGARDLESS = 1,
  89. /**
  90. * IMMEDIATE will shut down straight away
  91. * (but still tell other nodes).
  92. */
  93. COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE = 2,
  94. } corosync_cfg_shutdown_flags_t;
  95. typedef enum {
  96. COROSYNC_CFG_SHUTDOWN_FLAG_NO = 0,
  97. COROSYNC_CFG_SHUTDOWN_FLAG_YES = 1,
  98. } corosync_cfg_shutdown_reply_flags_t;
  99. typedef struct {
  100. cs_name_t name;
  101. corosync_cfg_state_type_t state_type;
  102. corosync_cfg_administrative_state_t administrative_state;
  103. } corosync_cfg_state_notification_t;
  104. typedef struct {
  105. uint32_t number_of_items;
  106. corosync_cfg_state_notification_t *notification;
  107. } corosync_cfg_state_notification_buffer_t;
  108. typedef void (*corosync_cfg_state_track_callback_t) (
  109. corosync_cfg_state_notification_buffer_t *notification_buffer,
  110. cs_error_t error);
  111. typedef void (*corosync_cfg_shutdown_callback_t) (
  112. corosync_cfg_handle_t cfg_handle,
  113. corosync_cfg_shutdown_flags_t flags);
  114. typedef struct {
  115. corosync_cfg_state_track_callback_t corosync_cfg_state_track_callback;
  116. corosync_cfg_shutdown_callback_t corosync_cfg_shutdown_callback;
  117. } corosync_cfg_callbacks_t;
  118. /**
  119. * A node address. This is a complete sockaddr_in[6]
  120. *
  121. * To explain:
  122. * If you cast cna_address to a 'struct sockaddr', the sa_family field
  123. * will be AF_INET or AF_INET6. Armed with that knowledge you can then
  124. * cast it to a sockaddr_in or sockaddr_in6 and pull out the address.
  125. * No other sockaddr fields are valid.
  126. * Also, you must ignore any part of the sockaddr beyond the length supplied
  127. */
  128. typedef struct
  129. {
  130. int address_length; /**< @todo FIXME: set but never used */
  131. char address[sizeof(struct sockaddr_in6)];
  132. } corosync_cfg_node_address_t;
  133. /*
  134. * Interfaces
  135. */
  136. #ifdef __cplusplus
  137. extern "C" {
  138. #endif
  139. cs_error_t
  140. corosync_cfg_initialize (
  141. corosync_cfg_handle_t *cfg_handle,
  142. const corosync_cfg_callbacks_t *cfg_callbacks);
  143. cs_error_t
  144. corosync_cfg_fd_get (
  145. corosync_cfg_handle_t cfg_handle,
  146. int32_t *selection_fd);
  147. cs_error_t
  148. corosync_cfg_dispatch (
  149. corosync_cfg_handle_t cfg_handle,
  150. cs_dispatch_flags_t dispatch_flags);
  151. cs_error_t
  152. corosync_cfg_finalize (
  153. corosync_cfg_handle_t cfg_handle);
  154. cs_error_t
  155. corosync_cfg_ring_status_get (
  156. corosync_cfg_handle_t cfg_handle,
  157. char ***interface_names,
  158. char ***status,
  159. unsigned int *interface_count);
  160. cs_error_t
  161. corosync_cfg_ring_reenable (
  162. corosync_cfg_handle_t cfg_handle);
  163. cs_error_t
  164. corosync_cfg_service_load (
  165. corosync_cfg_handle_t cfg_handle,
  166. const char *service_name,
  167. unsigned int service_ver);
  168. cs_error_t
  169. corosync_cfg_service_unload (
  170. corosync_cfg_handle_t cfg_handle,
  171. const char *service_name,
  172. unsigned int service_ver);
  173. cs_error_t
  174. corosync_cfg_kill_node (
  175. corosync_cfg_handle_t cfg_handle,
  176. unsigned int nodeid,
  177. const char *reason);
  178. cs_error_t
  179. corosync_cfg_try_shutdown (
  180. corosync_cfg_handle_t cfg_handle,
  181. corosync_cfg_shutdown_flags_t flags);
  182. cs_error_t
  183. corosync_cfg_replyto_shutdown (
  184. corosync_cfg_handle_t cfg_handle,
  185. corosync_cfg_shutdown_reply_flags_t flags);
  186. cs_error_t
  187. corosync_cfg_state_track (
  188. corosync_cfg_handle_t cfg_handle,
  189. uint8_t track_flags,
  190. const corosync_cfg_state_notification_t *notification_buffer);
  191. cs_error_t
  192. corosync_cfg_state_track_stop (
  193. corosync_cfg_handle_t cfg_handle);
  194. cs_error_t
  195. corosync_cfg_get_node_addrs (
  196. corosync_cfg_handle_t cfg_handle,
  197. int nodeid,
  198. size_t max_addrs,
  199. int *num_addrs,
  200. corosync_cfg_node_address_t *addrs);
  201. cs_error_t
  202. corosync_cfg_local_get (
  203. corosync_cfg_handle_t handle,
  204. unsigned int *local_nodeid);
  205. cs_error_t
  206. corosync_cfg_crypto_set (
  207. corosync_cfg_handle_t handle,
  208. unsigned int type);
  209. #ifdef __cplusplus
  210. }
  211. #endif
  212. #endif /* COROSYNC_CFG_H_DEFINED */