amf.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  1. /*
  2. * Copyright (c) 2002-2005 MontaVista Software, Inc.
  3. * Author: Steven Dake (sdake@mvista.com)
  4. *
  5. * Copyright (c) 2006 Ericsson AB.
  6. * Author: Hans Feldt
  7. * Description: - Reworked to match AMF B.02 information model
  8. * - New state machine design
  9. *
  10. * All rights reserved.
  11. * This software licensed under BSD license, the text of which follows:
  12. *
  13. * Redistribution and use in source and binary forms, with or without
  14. * modification, are permitted provided that the following conditions are met:
  15. *
  16. * - Redistributions of source code must retain the above copyright notice,
  17. * this list of conditions and the following disclaimer.
  18. * - Redistributions in binary form must reproduce the above copyright notice,
  19. * this list of conditions and the following disclaimer in the documentation
  20. * and/or other materials provided with the distribution.
  21. * - Neither the name of the MontaVista Software, Inc. nor the names of its
  22. * contributors may be used to endorse or promote products derived from this
  23. * software without specific prior written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  29. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  30. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  31. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  32. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  33. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  34. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  35. * THE POSSIBILITY OF SUCH DAMAGE.
  36. */
  37. #ifndef AMF_H_DEFINED
  38. #define AMF_H_DEFINED
  39. #include <limits.h>
  40. #include "../include/saAis.h"
  41. #include "../include/saAmf.h"
  42. #include "../include/list.h"
  43. #include "../include/ipc_gen.h"
  44. #include "objdb.h"
  45. #include "timer.h"
  46. enum escalation_levels {
  47. ESCALATION_LEVEL_NO_ESCALATION = 1, /* execute component restart */
  48. ESCALATION_LEVEL_ONE = 2, /* escalate to service unit restart */
  49. ESCALATION_LEVEL_TWO = 3, /* escalate to service unit failover */
  50. ESCALATION_LEVEL_THREE = 4 /* escalate to node failover */
  51. };
  52. enum clc_component_types {
  53. clc_component_sa_aware = 0, /* sa aware */
  54. clc_component_proxied_pre = 1, /* proxied, pre-instantiable */
  55. clc_component_proxied_non_pre = 2, /* proxied, non pre-instantiable */
  56. clc_component_non_proxied_non_sa_aware = 3 /* non-proxied, non sa aware */
  57. };
  58. struct amf_si_assignment;
  59. struct amf_csi_assignment;
  60. struct amf_healthcheck;
  61. struct amf_cluster {
  62. /* Configuration Attributes */
  63. SaNameT name;
  64. int saAmfClusterStartupTimeout;
  65. SaNameT saAmfClusterClmCluster;
  66. /* Runtime Attributes */
  67. SaAmfAdminStateT saAmfClusterAdminState;
  68. /* Relations */
  69. struct amf_node *node_head;
  70. struct amf_application *application_head;
  71. /* Implementation */
  72. openais_timer_handle timeout_handle;
  73. };
  74. struct amf_node {
  75. /* Configuration Attributes */
  76. SaNameT name;
  77. SaNameT saAmfNodeClmNode;
  78. int saAmfNodeSuFailOverProb;
  79. SaUint32T saAmfNodeSuFailoverMax;
  80. SaBoolT saAmfNodeAutoRepair;
  81. SaBoolT saAmfNodeRebootOnInstantiationFailure;
  82. SaBoolT saAmfNodeRebootOnTerminationFailure;
  83. /* Runtime Attributes */
  84. SaAmfAdminStateT saAmfNodeAdminState;
  85. SaAmfOperationalStateT saAmfNodeOperState;
  86. /* Relations */
  87. struct amf_cluster *cluster;
  88. /* Implementation */
  89. struct amf_node *next;
  90. };
  91. struct amf_application {
  92. /* Configuration Attributes */
  93. SaNameT name;
  94. /* Runtime Attributes */
  95. SaAmfAdminStateT saAmfApplicationAdminState;
  96. SaUint32T saAmfApplicationCurrNumSG;
  97. /* Relations */
  98. struct amf_cluster *cluster;
  99. struct amf_sg *sg_head;
  100. struct amf_si *si_head;
  101. /* Implementation */
  102. char clccli_path[PATH_MAX];
  103. char binary_path[PATH_MAX];
  104. struct amf_application *next;
  105. };
  106. struct amf_sg {
  107. /* Configuration Attributes */
  108. SaNameT name;
  109. saAmfRedundancyModelT saAmfSGRedundancyModel;
  110. SaBoolT saAmfSGAutoAdjust;
  111. SaUint32T saAmfSGNumPrefActiveSUs;
  112. SaUint32T saAmfSGNumPrefStandbySUs;
  113. SaUint32T saAmfSGNumPrefInserviceSUs;
  114. SaUint32T saAmfSGNumPrefAssignedSUs;
  115. SaUint32T saAmfSGMaxActiveSIsperSUs;
  116. SaUint32T saAmfSGMaxStandbySIsperSUs;
  117. SaTimeT saAmfSGCompRestartProb;
  118. SaUint32T saAmfSGCompRestartMax;
  119. SaTimeT saAmfSGSuRestartProb;
  120. SaUint32T saAmfSGSuRestartMax;
  121. SaTimeT saAmfSGAutoAdjustProb;
  122. SaBoolT saAmfSGAutoRepair;
  123. /* Runtime Attributes */
  124. SaAmfAdminStateT saAmfSGAdminState;
  125. SaUint32T saAmfSGNumCurrAssignedSUs;
  126. SaUint32T saAmfSGNumCurrNonInstantiatedSpareSUs;
  127. SaUint32T saAmfSGNumCurrInstantiatedSpareSUs;
  128. /* Relations */
  129. struct amf_application *application;
  130. struct amf_su *su_head;
  131. /* Implementation */
  132. char clccli_path[PATH_MAX];
  133. char binary_path[PATH_MAX];
  134. struct amf_sg *next;
  135. };
  136. struct amf_su {
  137. /* Configuration Attributes */
  138. SaNameT name;
  139. SaUint32T saAmfSURank;
  140. SaUint32T saAmfSUNumComponents;
  141. SaBoolT saAmfSUIsExternal;
  142. SaBoolT saAmfSUFailover;
  143. /* Runtime Attributes */
  144. SaBoolT saAmfSUPreInstantiable;
  145. SaAmfOperationalStateT saAmfSUOperState;
  146. SaAmfAdminStateT saAmfSUAdminState;
  147. SaAmfReadinessStateT saAmfSUReadinessState;
  148. SaAmfPresenceStateT saAmfSUPresenceState;
  149. SaNameT saAmfSUAssignedSIs;
  150. SaNameT saAmfSUHostedByNode;
  151. SaUint32T saAmfSUNumCurrActiveSIs;
  152. SaUint32T saAmfSUNumCurrStandbySIs;
  153. SaUint32T saAmfSURestartCount;
  154. /* Relations */
  155. struct amf_sg *sg;
  156. struct amf_comp *comp_head;
  157. struct amf_si_assignment *assigned_sis;
  158. /* Implementation */
  159. char clccli_path[PATH_MAX];
  160. char binary_path[PATH_MAX];
  161. SaUint32T su_failover_cnt; /* missing in SAF specs? */
  162. enum escalation_levels escalation_level;
  163. struct amf_su *next;
  164. };
  165. struct amf_comp {
  166. /* Configuration Attributes */
  167. SaNameT name;
  168. SaNameT **saAmfCompCsTypes;
  169. saAmfCompCategoryT saAmfCompCategory;
  170. saAmfCompCapabilityModelT saAmfCompCapability;
  171. SaUint32T saAmfCompNumMaxActiveCsi;
  172. SaUint32T saAmfCompNumMaxStandbyCsi;
  173. SaStringT *saAmfCompCmdEnv;
  174. int saAmfCompDefaultClcCliTimeout;
  175. int saAmfCompDefaultCallbackTimeOut;
  176. SaStringT saAmfCompInstantiateCmd;
  177. SaStringT saAmfCompInstantiateCmdArgv;
  178. int saAmfCompInstantiateTimeout;
  179. SaUint32T saAmfCompInstantiationLevel;
  180. SaUint32T saAmfCompNumMaxInstantiateWithoutDelay;
  181. SaUint32T saAmfCompNumMaxInstantiateWithDelay;
  182. int saAmfCompDelayBetweenInstantiateAttempts;
  183. SaStringT saAmfCompTerminateCmd;
  184. int saAmfCompTerminateTimeout;
  185. SaStringT saAmfCompTerminateCmdArgv;
  186. SaStringT saAmfCompCleanupCmd;
  187. int saAmfCompCleanupTimeout;
  188. SaStringT saAmfCompCleanupCmdArgv;
  189. SaStringT saAmfCompAmStartCmd;
  190. int saAmfCompAmStartTimeout;
  191. SaStringT saAmfCompAmStartCmdArgv;
  192. SaUint32T saAmfCompNumMaxAmStartAttempt;
  193. SaStringT saAmfCompAmStopCmd;
  194. int saAmfCompAmStopTimeout;
  195. SaStringT saAmfCompAmStopCmdArgv;
  196. SaUint32T saAmfCompNumMaxAmStopAttempt;
  197. int saAmfCompTerminateCallbackTimeout;
  198. int saAmfCompCSISetCallbackTimeout;
  199. int saAmfCompQuiescingCompleteTimeout;
  200. int saAmfCompCSIRmvCallbackTimeout;
  201. SaAmfRecommendedRecoveryT saAmfCompRecoveryOnError;
  202. SaBoolT saAmfCompDisableRestart;
  203. SaNameT saAmfCompProxyCsi;
  204. /* Runtime Attributes */
  205. SaAmfOperationalStateT saAmfCompOperState;
  206. SaAmfReadinessStateT saAmfCompReadinessState;
  207. SaAmfPresenceStateT saAmfCompPresenceState;
  208. SaUint32T saAmfCompRestartCount;
  209. SaUint32T saAmfCompNumCurrActiveCsi;
  210. SaUint32T saAmfCompNumCurrStandbyCsi;
  211. SaNameT saAmfCompAssignedCsi;
  212. SaNameT saAmfCompCurrProxyName;
  213. SaNameT saAmfCompCurrProxiedNames;
  214. /* Relations */
  215. struct amf_comp *proxy_comp;
  216. struct amf_su *su;
  217. struct amf_csi_assignment *assigned_csis;
  218. /* Implementation */
  219. char clccli_path[PATH_MAX];
  220. char binary_path[PATH_MAX];
  221. struct amf_comp *next;
  222. void *conn;
  223. enum clc_component_types comptype;
  224. struct amf_healthcheck *healthcheck_head;
  225. };
  226. struct amf_healthcheck {
  227. /* Configuration Attributes */
  228. SaAmfHealthcheckKeyT safHealthcheckKey;
  229. int saAmfHealthcheckMaxDuration;
  230. int saAmfHealthcheckPeriod;
  231. /* Relations */
  232. struct amf_comp *comp;
  233. /* Implementation */
  234. struct amf_healthcheck *next;
  235. int active;
  236. SaAmfHealthcheckInvocationT invocationType;
  237. SaAmfRecommendedRecoveryT recommendedRecovery;
  238. openais_timer_handle timer_handle_duration;
  239. openais_timer_handle timer_handle_period;
  240. };
  241. struct amf_si {
  242. /* Configuration Attributes */
  243. SaNameT name;
  244. SaNameT saAmfSIProtectedbySG;
  245. SaUint32T saAmfSIRank;
  246. SaUint32T saAmfSINumCSIs;
  247. SaUint32T saAmfSIPrefActiveAssignments;
  248. SaUint32T saAmfSIPrefStandbyAssignments;
  249. /* Runtime Attributes */
  250. SaAmfAdminStateT saAmfSIAdminState;
  251. SaAmfAssignmentStateT saAmfSIAssignmentState;
  252. SaUint32T saAmfSINumCurrActiveAssignments;
  253. SaUint32T saAmfSINumCurrStandbyAssignments;
  254. /* Relations */
  255. struct amf_application *application;
  256. struct amf_csi *csi_head;
  257. struct amf_si_assignment *si_assignments;
  258. struct amf_si_dependency *depends_on;
  259. struct amf_si_ranked_su *ranked_sus;
  260. /* Implementation */
  261. struct amf_si *next;
  262. };
  263. struct amf_si_ranked_su {
  264. /* Configuration Attributes */
  265. SaNameT name;
  266. SaUint32T saAmfRank;
  267. /* Relations */
  268. struct amf_si *si;
  269. struct amf_su *su;
  270. /* Implementation */
  271. struct amf_si_ranked_su *su_next;
  272. struct amf_si_ranked_su *si_next;
  273. };
  274. struct amf_si_dependency {
  275. /* Configuration Attributes */
  276. SaNameT name;
  277. int saAmfToleranceTime;
  278. /* Relations */
  279. /* Implementation */
  280. struct amf_si_dependency *next;
  281. };
  282. struct amf_si_assignment {
  283. /* Runtime Attributes */
  284. SaNameT name;
  285. SaAmfHAStateT saAmfSISUHAState;
  286. /* Relations */
  287. struct amf_si *si;
  288. /* Implementation */
  289. struct amf_si_assignment *next;
  290. };
  291. struct amf_csi {
  292. /* Configuration Attributes */
  293. SaNameT name;
  294. SaNameT saAmfCSTypeName;
  295. SaNameT **saAmfCSIDependencies;
  296. /* Relations */
  297. struct amf_si *si;
  298. struct amf_csi_assignment *csi_assignments;
  299. struct amf_csi_attribute *attributes_head;
  300. /* Implementation */
  301. struct amf_csi *next;
  302. int pg_set;
  303. };
  304. struct amf_csi_attribute {
  305. /* Configuration Attributes */
  306. SaStringT name;
  307. SaStringT *value;
  308. /* Implementation */
  309. struct amf_csi_attribute *next;
  310. };
  311. struct amf_csi_assignment {
  312. /* Runtime Attributes */
  313. SaNameT name;
  314. SaAmfHAStateT saAmfCSICompHAState; /* confirmed HA state */
  315. /* Relations */
  316. struct amf_csi *csi;
  317. struct amf_comp *comp;
  318. /* Implementation */
  319. SaAmfHAStateT requested_ha_state;
  320. struct amf_csi_assignment *comp_next;
  321. struct amf_csi_assignment *csi_next;
  322. };
  323. enum amf_response_interfaces {
  324. AMF_RESPONSE_HEALTHCHECKCALLBACK = 1,
  325. AMF_RESPONSE_CSISETCALLBACK = 2,
  326. AMF_RESPONSE_CSIREMOVECALLBACK = 3,
  327. AMF_RESPONSE_COMPONENTTERMINATECALLBACK = 4
  328. };
  329. enum amf_message_req_types {
  330. MESSAGE_REQ_EXEC_AMF_COMPONENT_REGISTER = 0,
  331. MESSAGE_REQ_EXEC_AMF_COMPONENT_ERROR_REPORT = 1,
  332. MESSAGE_REQ_EXEC_AMF_CLC_CLEANUP_COMPLETED = 2,
  333. MESSAGE_REQ_EXEC_AMF_HEALTHCHECK_TMO = 3,
  334. MESSAGE_REQ_EXEC_AMF_RESPONSE = 4
  335. };
  336. struct req_exec_amf_clc_cleanup_completed {
  337. mar_req_header_t header;
  338. SaNameT compName;
  339. };
  340. struct req_exec_amf_healthcheck_tmo {
  341. mar_req_header_t header;
  342. SaNameT compName;
  343. SaAmfHealthcheckKeyT safHealthcheckKey;
  344. };
  345. /*===========================================================================*/
  346. /* amfutil.c */
  347. extern int amf_config_read (struct amf_cluster *cluster, char **error_string);
  348. extern char *amf_serialize (struct amf_cluster *cluster);
  349. extern int amf_deserialize (char *buf, struct amf_cluster *cluster);
  350. extern void amf_state_print (struct amf_cluster *cluster);
  351. extern void amf_runtime_attributes_print (struct amf_cluster *cluster);
  352. extern int amf_enabled (struct objdb_iface_ver0 *objdb);
  353. extern int amf_invocation_create (int interface, void *data);
  354. extern int amf_invocation_get_and_destroy (
  355. int invocation, int *interface, void **data);
  356. extern void amf_invocation_destroy_by_data (void *data);
  357. extern const char *amf_admin_state (int state);
  358. extern const char *amf_op_state (int state);
  359. extern const char *amf_presence_state (int state);
  360. extern const char *amf_ha_state (int state);
  361. extern const char *amf_readiness_state (int state);
  362. /*===========================================================================*/
  363. /* amfnode.c */
  364. /* General methods */
  365. extern struct amf_node *amf_node_create (void);
  366. extern int amf_node_serialize (
  367. struct amf_node *node, char **buf, int *offset);
  368. extern struct amf_node *amf_node_deserialize (
  369. char **buf, int *size, struct amf_cluster *cluster);
  370. /* Event methods */
  371. extern void amf_node_sync_ready (struct amf_node *node);
  372. extern void amf_node_leave (struct amf_node *node);
  373. extern void amf_node_failover (struct amf_node *node);
  374. extern void amf_node_switchover (struct amf_node *node);
  375. extern void amf_node_failfast (struct amf_node *node);
  376. extern void amf_node_comp_restart_req (
  377. struct amf_node *node, struct amf_comp *comp);
  378. extern void amf_node_comp_failover_req (
  379. struct amf_node *node, struct amf_comp *comp);
  380. enum amf_reboot_reason {
  381. TERMINATION_FAILED = 1,
  382. INSTANTIATION_FAILED = 2
  383. };
  384. extern int amf_node_reboot (
  385. struct amf_node *node, enum amf_reboot_reason reason);
  386. /* Response event methods */
  387. extern void amf_node_application_started (
  388. struct amf_node *node, struct amf_application *app);
  389. extern void amf_node_application_workload_assigned (
  390. struct amf_node *node, struct amf_application *app);
  391. /* Timer event methods */
  392. extern void timer_function_node_probation_period_expired (void *node);
  393. /*===========================================================================*/
  394. /* amfcluster.c */
  395. /* General methods */
  396. extern void amf_cluster_init (void);
  397. extern int amf_cluster_serialize (
  398. struct amf_cluster *cluster, char **buf, int *offset);
  399. extern struct amf_cluster *amf_cluster_deserialize (
  400. char **buf, int *size, struct amf_cluster *cluster);
  401. /* Event methods */
  402. extern void amf_cluster_start (struct amf_cluster *cluster);
  403. /* Response event methods */
  404. extern void amf_cluster_application_started (
  405. struct amf_cluster *cluster, struct amf_application *app);
  406. extern void amf_cluster_application_workload_assigned (
  407. struct amf_cluster *cluster, struct amf_application *app);
  408. /*===========================================================================*/
  409. /* amfapp.c */
  410. /* General methods */
  411. extern void amf_application_init (void);
  412. extern struct amf_application *amf_application_create (void);
  413. extern int amf_application_calc_and_set_si_dependency_level (
  414. struct amf_application *app);
  415. extern int amf_application_serialize (
  416. struct amf_application *application, char **buf, int *offset);
  417. extern struct amf_application *amf_application_deserialize (
  418. char **buf, int *size, struct amf_cluster *cluster);
  419. extern int amf_application_si_count_get (struct amf_application *app);
  420. /* Event methods */
  421. extern void amf_application_start (
  422. struct amf_application *app, struct amf_node *node);
  423. extern void amf_application_assign_workload (
  424. struct amf_application *app, struct amf_node *node);
  425. /* Response event methods */
  426. extern void amf_application_sg_started (
  427. struct amf_application *app, struct amf_sg *sg, struct amf_node *node);
  428. extern void amf_application_sg_assigned (
  429. struct amf_application *app, struct amf_sg *sg);
  430. /*===========================================================================*/
  431. /* amfsg.c */
  432. /* General methods */
  433. extern void amf_sg_init (void);
  434. extern struct amf_sg *amf_sg_create (void);
  435. extern int amf_sg_serialize (
  436. struct amf_sg *sg, char **buf, int *offset);
  437. extern struct amf_sg *amf_sg_deserialize (
  438. char **buf, int *size, struct amf_cluster *cluster);
  439. /* Event methods */
  440. extern void amf_sg_start (struct amf_sg *sg, struct amf_node *node);
  441. extern void amf_sg_assign_si (struct amf_sg *sg, int dependency_level);
  442. extern void amf_sg_failover_node_req (
  443. struct amf_sg *sg, struct amf_node *node);
  444. extern void amf_sg_failover_su_req (
  445. struct amf_sg *sg, struct amf_node *node);
  446. extern void amf_sg_failover_comp_req (
  447. struct amf_sg *sg, struct amf_node *node);
  448. extern void amf_sg_switchover_node_req (
  449. struct amf_sg *sg, struct amf_node *node);
  450. /* Response event methods */
  451. extern void amf_sg_su_state_changed (
  452. struct amf_sg *sg, struct amf_su *su, SaAmfStateT type, int state);
  453. extern void amf_sg_si_ha_state_changed (
  454. struct amf_sg *sg, struct amf_si *si, int state);
  455. extern void amf_sg_su_assignment_removed (
  456. struct amf_sg *sg, struct amf_su *su);
  457. /* Timer event methods */
  458. //static void timer_function_auto_adjust_tmo (void *sg);
  459. /*===========================================================================*/
  460. /* amfsu.c */
  461. /* General methods */
  462. extern void amf_su_init (void);
  463. extern struct amf_su *amf_su_create (void);
  464. extern int amf_su_serialize (
  465. struct amf_su *su, char **buf, int *offset);
  466. extern struct amf_su *amf_su_deserialize (
  467. char **buf, int *size, struct amf_cluster *cluster);
  468. extern int amf_su_is_local (struct amf_su *su);
  469. /* Event methods */
  470. extern void amf_su_instantiate (struct amf_su *su);
  471. extern void amf_su_assign_si (
  472. struct amf_su *su, struct amf_si *si, SaAmfHAStateT ha_state);
  473. extern void amf_su_restart_req (struct amf_su *su);
  474. extern void amf_su_terminate (struct amf_su *su);
  475. extern struct amf_node *amf_su_get_node (struct amf_su *su);
  476. extern void amf_su_escalation_level_reset (struct amf_su *su);
  477. extern void amf_su_remove_assignment (struct amf_su *su);
  478. /* Response event methods */
  479. extern void amf_su_comp_state_changed (
  480. struct amf_su *su, struct amf_comp *comp, SaAmfStateT type, int state);
  481. extern void amf_su_comp_hastate_changed (
  482. struct amf_su *su, struct amf_comp *comp,
  483. struct amf_csi_assignment *csi_assignment);
  484. extern void amf_su_comp_error_suspected (
  485. struct amf_su *su,
  486. struct amf_comp *comp,
  487. SaAmfRecommendedRecoveryT recommended_recovery);
  488. /* Timer event methods */
  489. //static void timer_function_su_probation_period_expired(void *data);
  490. /*===========================================================================*/
  491. /* amfcomp.c */
  492. /* General methods */
  493. extern void amf_comp_init (void);
  494. extern struct amf_comp *amf_comp_create (struct amf_su *su);
  495. extern char *amf_comp_dn_make (struct amf_comp *comp, SaNameT *name);
  496. extern struct amf_comp *amf_comp_find (
  497. struct amf_cluster *cluster, SaNameT *name);
  498. extern int amf_comp_serialize (
  499. struct amf_comp *comp, char **buf, int *offset);
  500. extern struct amf_comp *amf_comp_deserialize (
  501. char **buf, int *size, struct amf_cluster *cluster);
  502. /* Event methods */
  503. extern void amf_comp_instantiate (struct amf_comp *comp);
  504. extern void amf_comp_terminate (struct amf_comp *comp);
  505. extern void amf_comp_hastate_set (
  506. struct amf_comp *comp,
  507. struct amf_csi_assignment *csi_assignment,
  508. SaAmfHAStateT requested_ha_state);
  509. extern void amf_comp_restart (struct amf_comp *comp);
  510. extern void amf_comp_operational_state_set (
  511. struct amf_comp *comp, SaAmfOperationalStateT opstate);
  512. extern void amf_comp_readiness_state_set (
  513. struct amf_comp *comp, SaAmfReadinessStateT state);
  514. extern struct amf_healthcheck *amf_comp_find_healthcheck (
  515. struct amf_comp *comp, SaAmfHealthcheckKeyT *key);
  516. extern void amf_comp_healthcheck_tmo (
  517. struct amf_comp *comp, struct amf_healthcheck *healthcheck);
  518. extern void amf_comp_cleanup_completed (struct amf_comp *comp);
  519. /*
  520. * Originates from library
  521. */
  522. extern SaAisErrorT amf_comp_healthcheck_start (
  523. struct amf_comp *comp,
  524. SaAmfHealthcheckKeyT *healthcheckKey,
  525. SaAmfHealthcheckInvocationT invocationType,
  526. SaAmfRecommendedRecoveryT recommendedRecovery);
  527. extern SaAisErrorT amf_comp_healthcheck_stop (
  528. struct amf_comp *comp,
  529. SaAmfHealthcheckKeyT *healthcheckKey);
  530. extern SaAisErrorT amf_comp_register (struct amf_comp *comp);
  531. extern void amf_comp_unregister (struct amf_comp *comp);
  532. extern void amf_comp_error_report (
  533. struct amf_comp *comp, SaAmfRecommendedRecoveryT recommendedRecovery);
  534. extern int amf_comp_response_1 (
  535. SaInvocationT invocation, SaAisErrorT error, SaAisErrorT *retval);
  536. extern struct amf_comp *amf_comp_response_2 (
  537. SaInvocationT invocation, SaAisErrorT error, SaAisErrorT *retval);
  538. extern SaAisErrorT amf_comp_hastate_get (
  539. struct amf_comp *comp, SaNameT *csi_name, SaAmfHAStateT *ha_state);
  540. extern SaAisErrorT amf_comp_healthcheck_confirm (
  541. struct amf_comp *comp,
  542. SaAmfHealthcheckKeyT *healthcheckKey,
  543. SaAisErrorT healthcheckResult);
  544. /*===========================================================================*/
  545. /* amfsi.c */
  546. /* General methods */
  547. extern void amf_si_init (void);
  548. extern struct amf_si *amf_si_create (void);
  549. extern int amf_si_calc_and_set_csi_dependency_level (struct amf_si *si);
  550. extern int amf_si_serialize (
  551. struct amf_si *si, char **buf, int *offset);
  552. extern struct amf_si *amf_si_deserialize (
  553. char **buf, int *size, struct amf_cluster *cluster);
  554. /* Event methods */
  555. extern void amf_si_activate (
  556. struct amf_si *si,
  557. void (*activated_callback_fn)(struct amf_si *si, int result));
  558. extern void amf_si_deactivate (
  559. struct amf_si *si,
  560. struct amf_csi *csi,
  561. void (*deactivated_callback_fn)(struct amf_si *si, int result));
  562. extern void amf_si_set_ha_state (
  563. struct amf_si *si,
  564. SaAmfHAStateT ha_state,
  565. void (*set_ha_state_callback_fn)(struct amf_si *si, int result));
  566. /* Response event methods */
  567. extern void amf_si_comp_set_ha_state_done (
  568. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  569. extern void amf_si_comp_set_ha_state_failed (
  570. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  571. /* General methods */
  572. extern struct amf_csi *amf_csi_create (void);
  573. extern int amf_csi_serialize (
  574. struct amf_csi *csi, char **buf, int *offset);
  575. extern struct amf_csi *amf_csi_deserialize (
  576. char **buf, int *size, struct amf_cluster *cluster);
  577. extern char *amf_csi_dn_make (struct amf_csi *csi, SaNameT *name);
  578. /*===========================================================================*/
  579. extern struct amf_node *this_amf_node;
  580. extern struct amf_cluster amf_cluster;
  581. #endif /* AMF_H_DEFINED */