amf.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134
  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 <sys/types.h>
  41. #include <regex.h>
  42. #include "../include/saAis.h"
  43. #include "../include/saAmf.h"
  44. #include "../include/list.h"
  45. #include "../include/ipc_gen.h"
  46. #include "objdb.h"
  47. #include "timer.h"
  48. #include "aispoll.h"
  49. #define AMF_PROTOCOL_VERSION 1
  50. enum scsm_states {
  51. IDLE = 1,
  52. PROBING_1,
  53. PROBING_2,
  54. CREATING_CLUSTER_MODEL,
  55. SYNCHRONIZING,
  56. NORMAL_OPERATION,
  57. UPDATING_CLUSTER_MODEL,
  58. UNCONFIGURED
  59. };
  60. /**
  61. * State descriptor for the AMF Synchronisation Control State
  62. * Machine (SCSM).
  63. */
  64. struct scsm_descriptor {
  65. enum scsm_states state;
  66. poll_timer_handle timer_handle;
  67. /* node ID of current sync master */
  68. unsigned int sync_master;
  69. unsigned int *joined_list;
  70. unsigned int joined_list_entries;
  71. struct amf_cluster *cluster;
  72. struct amf_node *node;
  73. struct amf_application *app;
  74. int app_sync_completed;
  75. struct amf_sg *sg;
  76. int sg_sync_completed;
  77. struct amf_su *su;
  78. int su_sync_completed;
  79. struct amf_comp *comp;
  80. int comp_sync_completed;
  81. struct amf_healthcheck *healthcheck;
  82. struct amf_si *si;
  83. int si_sync_completed;
  84. struct amf_si_assignment *si_assignment;
  85. struct amf_csi *csi;
  86. int csi_sync_completed;
  87. struct amf_csi_assignment *csi_assignment;
  88. struct amf_csi_attribute *csi_attribute;
  89. };
  90. enum clc_component_types {
  91. clc_component_sa_aware = 0, /* sa aware */
  92. clc_component_proxied_pre = 1, /* proxied, pre-instantiable */
  93. clc_component_proxied_non_pre = 2, /* proxied, non pre-instantiable */
  94. clc_component_non_proxied_non_sa_aware = 3 /* non-proxied, non sa aware */
  95. };
  96. /*
  97. * Node Error Escallation State
  98. */
  99. typedef enum {
  100. NODE_EESM_IDLE,
  101. NODE_EESM_ESCALLATION_LEVEL_2,
  102. NODE_EESM_ESCALLATION_LEVEL_3
  103. } amf_node_eesm_state_t;
  104. typedef enum {
  105. APP_AC_UNINSTANTIATED = 1,
  106. APP_AC_STARTING_SGS,
  107. APP_AC_STARTED,
  108. APP_AC_ASSIGNING_WORKLOAD,
  109. APP_AC_WORKLOAD_ASSIGNED
  110. } app_avail_control_state_t;
  111. typedef enum {
  112. NODE_ACSM_REPAIR_NEEDED = 1,
  113. NODE_ACSM_ESCALLATION_LEVEL_0,
  114. NODE_ACSM_ESCALLATION_LEVEL_2,
  115. NODE_ACSM_ESCALLATION_LEVEL_3,
  116. NODE_ACSM_FAILING_FAST_REBOOTING_NODE,
  117. NODE_ACSM_FAILING_FAST_ACTIVATING_STANDBY_NODE,
  118. NODE_ACSM_FAILING_GRACEFULLY_SWITCHING_OVER,
  119. NODE_ACSM_FAILING_GRACEFULLY_FAILING_OVER,
  120. NODE_ACSM_FAILING_GRACEFULLY_REBOOTING_NODE,
  121. NODE_ACSM_LEAVING_SPONTANEOUSLY_FAILING_OVER,
  122. NODE_ACSM_LEAVING_SPONTANEOUSLY_WAITING_FOR_NODE_TO_JOIN,
  123. NODE_ACSM_JOINING_STARTING_APPLICATIONS,
  124. NODE_ACSM_JOINING_ASSIGNING_WORKLOAD
  125. } amf_node_acsm_state_t;
  126. typedef enum {
  127. SG_AC_Idle = 0,
  128. SG_AC_DeactivatingDependantWorkload,
  129. SG_AC_TerminatingSuspected,
  130. SG_AC_ActivatingStandby,
  131. SG_AC_AssigningStandbyToSpare,
  132. SG_AC_ReparingComponent,
  133. SG_AC_ReparingSu,
  134. SG_AC_AssigningOnRequest,
  135. SG_AC_InstantiatingServiceUnits,
  136. SG_AC_RemovingAssignment,
  137. SG_AC_AssigningActiveworkload,
  138. SG_AC_AssigningAutoAdjust,
  139. SG_AC_AssigningStandBy,
  140. SG_AC_WaitingAfterOperationFailed
  141. } sg_avail_control_state_t;
  142. typedef enum amf_sg_event_type {
  143. SG_UNKNOWN_EV,
  144. SG_FAILOVER_SU_EV,
  145. SG_FAILOVER_NODE_EV,
  146. SG_FAILOVER_COMP_EV,
  147. SG_SWITCH_OVER_NODE_EV,
  148. SG_START_EV,
  149. SG_AUTO_ADJUST_EV,
  150. SG_ASSIGN_SI_EV
  151. } amf_sg_event_type_t;
  152. typedef enum {
  153. SU_RC_ESCALATION_LEVEL_0 = 0,
  154. SU_RC_ESCALATION_LEVEL_1,
  155. SU_RC_ESCALATION_LEVEL_2,
  156. SU_RC_RESTART_COMP_DEACTIVATING,
  157. SU_RC_RESTART_COMP_RESTARTING,
  158. SU_RC_RESTART_COMP_SETTING,
  159. SU_RC_RESTART_COMP_ACTIVATING,
  160. SU_RC_RESTART_SU_DEACTIVATING,
  161. SU_RC_RESTART_SU_TERMINATING,
  162. SU_RC_RESTART_SU_INSTANTIATING,
  163. SU_RC_RESTART_SU_SETTING,
  164. SU_RC_RESTART_SU_ACTIVATING
  165. } su_restart_control_state_t;
  166. typedef enum {
  167. AMF_NONE,
  168. AMF_APPLICATION,
  169. AMF_CLUSTER,
  170. AMF_NODE,
  171. AMF_SG,
  172. AMF_SU,
  173. AMF_COMP,
  174. AMF_COMP_ENV_VAR,
  175. AMF_COMP_CS_TYPE,
  176. AMF_SI,
  177. AMF_SI_ASSIGNMENT,
  178. AMF_SI_RANKED_SU,
  179. AMF_SI_DEPENDENCY,
  180. AMF_CSI,
  181. AMF_CSI_ASSIGNMENT,
  182. AMF_CSI_ATTRIBUTE,
  183. AMF_HEALTHCHECK,
  184. AMF_CSI_DEPENDENCIES,
  185. AMF_CS_TYPE,
  186. } amf_object_type_t;
  187. struct amf_si_assignment;
  188. struct amf_csi_assignment;
  189. struct amf_healthcheck;
  190. typedef enum {
  191. CLUSTER_AC_UNINSTANTIATED = 1,
  192. CLUSTER_AC_STARTING_APPLICATIONS,
  193. CLUSTER_AC_WAITING_OVER_TIME,
  194. CLUSTER_AC_ASSIGNING_WORKLOAD,
  195. CLUSTER_AC_STARTED,
  196. CLUSTER_AC_TERMINATING_APPLICATIONS,
  197. CLUSTER_AC_WORKLOAD_REMOVESD,
  198. CLUSTER_AC_REMOVING_WORKLOAD,
  199. CLUSTER_AC_DEACTIVATING_WORKLOAD,
  200. CLUSTER_AC_QUISING
  201. } cluster_avail_control_state_t;
  202. typedef enum amf_cluster_event_type {
  203. CLUSTER_SYNC_READY_EV,
  204. CLUSTER_EVENT_TYPE_CNT
  205. } amf_cluster_event_type_t;
  206. typedef enum amf_application_event_type {
  207. APPLICATION_ASSIGN_WORKLOAD_EV,
  208. APPLICATION_START_EV,
  209. APPLICATION_EVENT_TYPE_CNT
  210. } amf_application_event_type_t;
  211. typedef struct amf_fifo {
  212. int entry_type;
  213. struct amf_fifo *next;
  214. int size_of_data;
  215. uint8_t data[];
  216. } amf_fifo_t;
  217. typedef struct amf_cluster {
  218. /* Configuration Attributes */
  219. SaNameT name;
  220. SaUint32T saAmfClusterStartupTimeout;
  221. SaNameT saAmfClusterClmCluster;
  222. /* Runtime Attributes */
  223. SaAmfAdminStateT saAmfClusterAdminState;
  224. /* Relations */
  225. struct amf_node *node_head;
  226. struct amf_application *application_head;
  227. /* Implementation */
  228. poll_timer_handle timeout_handle;
  229. cluster_avail_control_state_t acsm_state;
  230. amf_fifo_t *deferred_events;
  231. } amf_cluster_t;
  232. typedef struct amf_node {
  233. /* Configuration Attributes */
  234. SaNameT name;
  235. SaNameT saAmfNodeClmNode;
  236. SaUint32T saAmfNodeSuFailOverProb;
  237. SaUint32T saAmfNodeSuFailoverMax;
  238. SaBoolT saAmfNodeAutoRepair;
  239. SaBoolT saAmfNodeRebootOnInstantiationFailure;
  240. SaBoolT saAmfNodeRebootOnTerminationFailure;
  241. /* Runtime Attributes */
  242. SaAmfAdminStateT saAmfNodeAdminState;
  243. SaAmfOperationalStateT saAmfNodeOperState;
  244. /* Relations */
  245. struct amf_cluster *cluster;
  246. /* Implementation */
  247. unsigned int nodeid;
  248. struct amf_node *next;
  249. amf_node_acsm_state_t acsm_state;
  250. } amf_node_t;
  251. typedef struct amf_application {
  252. /* Configuration Attributes */
  253. SaNameT name;
  254. /* Runtime Attributes */
  255. SaAmfAdminStateT saAmfApplicationAdminState;
  256. SaUint32T saAmfApplicationCurrNumSG;
  257. /* Relations */
  258. struct amf_cluster *cluster;
  259. struct amf_sg *sg_head;
  260. /* ordered list of SUs */
  261. struct amf_si *si_head;
  262. /* Implementation */
  263. SaStringT clccli_path;
  264. struct amf_application *next;
  265. struct amf_node *node_to_start;
  266. app_avail_control_state_t acsm_state;
  267. amf_fifo_t *deferred_events;
  268. } amf_application_t;
  269. struct sg_recovery_scope {
  270. amf_sg_event_type_t event_type;
  271. struct amf_si **sis;
  272. struct amf_su **sus;
  273. struct amf_comp *comp;
  274. struct amf_node *node;
  275. };
  276. typedef struct amf_sg {
  277. /* Configuration Attributes */
  278. SaNameT name;
  279. saAmfRedundancyModelT saAmfSGRedundancyModel;
  280. SaBoolT saAmfSGAutoAdjust;
  281. SaUint32T saAmfSGNumPrefActiveSUs;
  282. SaUint32T saAmfSGNumPrefStandbySUs;
  283. SaUint32T saAmfSGNumPrefInserviceSUs;
  284. SaUint32T saAmfSGNumPrefAssignedSUs;
  285. SaUint32T saAmfSGMaxActiveSIsperSUs;
  286. SaUint32T saAmfSGMaxStandbySIsperSUs;
  287. SaUint32T saAmfSGCompRestartProb;
  288. SaUint32T saAmfSGCompRestartMax;
  289. SaUint32T saAmfSGSuRestartProb;
  290. SaUint32T saAmfSGSuRestartMax;
  291. SaUint32T saAmfSGAutoAdjustProb;
  292. SaBoolT saAmfSGAutoRepair;
  293. /* Runtime Attributes */
  294. SaAmfAdminStateT saAmfSGAdminState;
  295. SaUint32T saAmfSGNumCurrAssignedSUs;
  296. SaUint32T saAmfSGNumCurrNonInstantiatedSpareSUs;
  297. SaUint32T saAmfSGNumCurrInstantiatedSpareSUs;
  298. /* Relations */
  299. struct amf_application *application;
  300. /* ordered list of SUs */
  301. struct amf_su *su_head;
  302. /* Implementation */
  303. SaStringT clccli_path;
  304. struct amf_sg *next;
  305. sg_avail_control_state_t avail_state;
  306. struct sg_recovery_scope recovery_scope;
  307. struct amf_node *node_to_start;
  308. amf_fifo_t *deferred_events;
  309. } amf_sg_t;
  310. typedef struct amf_su {
  311. /* Configuration Attributes */
  312. SaNameT name;
  313. SaUint32T saAmfSURank;
  314. SaUint32T saAmfSUNumComponents;
  315. SaBoolT saAmfSUIsExternal;
  316. SaBoolT saAmfSUFailover;
  317. /* Runtime Attributes */
  318. SaBoolT saAmfSUPreInstantiable;
  319. SaAmfOperationalStateT saAmfSUOperState;
  320. SaAmfAdminStateT saAmfSUAdminState;
  321. /* SaAmfReadinessStateT saAmfSUReadinessState; */
  322. SaAmfPresenceStateT saAmfSUPresenceState;
  323. /* SaNameT saAmfSUAssignedSIs; */
  324. SaNameT saAmfSUHostedByNode;
  325. /* SaUint32T saAmfSUNumCurrActiveSIs; */
  326. /* SaUint32T saAmfSUNumCurrStandbySIs; */
  327. SaUint32T saAmfSURestartCount;
  328. /* Relations */
  329. struct amf_sg *sg;
  330. struct amf_comp *comp_head;
  331. /* Implementation */
  332. su_restart_control_state_t restart_control_state;
  333. su_restart_control_state_t escalation_level_history_state;
  334. SaStringT clccli_path;
  335. SaUint32T su_failover_cnt; /* missing in SAF specs? */
  336. struct amf_su *next;
  337. } amf_su_t;
  338. typedef struct amf_comp {
  339. /* Configuration Attributes */
  340. SaNameT name;
  341. SaNameT **saAmfCompCsTypes;
  342. saAmfCompCategoryT saAmfCompCategory;
  343. saAmfCompCapabilityModelT saAmfCompCapability;
  344. SaUint32T saAmfCompNumMaxActiveCsi;
  345. SaUint32T saAmfCompNumMaxStandbyCsi;
  346. SaStringT *saAmfCompCmdEnv;
  347. SaUint32T saAmfCompDefaultClcCliTimeout;
  348. SaUint32T saAmfCompDefaultCallbackTimeOut;
  349. SaStringT saAmfCompInstantiateCmd;
  350. SaStringT saAmfCompInstantiateCmdArgv;
  351. SaUint32T saAmfCompInstantiateTimeout;
  352. SaUint32T saAmfCompInstantiationLevel;
  353. SaUint32T saAmfCompNumMaxInstantiateWithoutDelay;
  354. SaUint32T saAmfCompNumMaxInstantiateWithDelay;
  355. SaUint32T saAmfCompDelayBetweenInstantiateAttempts;
  356. SaStringT saAmfCompTerminateCmd;
  357. SaUint32T saAmfCompTerminateTimeout;
  358. SaStringT saAmfCompTerminateCmdArgv;
  359. SaStringT saAmfCompCleanupCmd;
  360. SaUint32T saAmfCompCleanupTimeout;
  361. SaStringT saAmfCompCleanupCmdArgv;
  362. SaStringT saAmfCompAmStartCmd;
  363. SaUint32T saAmfCompAmStartTimeout;
  364. SaStringT saAmfCompAmStartCmdArgv;
  365. SaUint32T saAmfCompNumMaxAmStartAttempt;
  366. SaStringT saAmfCompAmStopCmd;
  367. SaUint32T saAmfCompAmStopTimeout;
  368. SaStringT saAmfCompAmStopCmdArgv;
  369. SaUint32T saAmfCompNumMaxAmStopAttempt;
  370. SaUint32T saAmfCompTerminateCallbackTimeout;
  371. SaUint32T saAmfCompCSISetCallbackTimeout;
  372. SaUint32T saAmfCompQuiescingCompleteTimeout;
  373. SaUint32T saAmfCompCSIRmvCallbackTimeout;
  374. SaAmfRecommendedRecoveryT saAmfCompRecoveryOnError;
  375. SaBoolT saAmfCompDisableRestart;
  376. SaNameT saAmfCompProxyCsi;
  377. /* Runtime Attributes */
  378. SaAmfOperationalStateT saAmfCompOperState;
  379. /* SaAmfReadinessStateT saAmfCompReadinessState; */
  380. SaAmfPresenceStateT saAmfCompPresenceState;
  381. SaUint32T saAmfCompRestartCount;
  382. /* SaUint32T saAmfCompNumCurrActiveCsi; */
  383. /* SaUint32T saAmfCompNumCurrStandbyCsi; */
  384. /*SaNameT saAmfCompAssignedCsi; */
  385. SaNameT saAmfCompCurrProxyName;
  386. SaNameT **saAmfCompCurrProxiedNames;
  387. /* Relations */
  388. struct amf_comp *proxy_comp;
  389. struct amf_su *su;
  390. /* Implementation */
  391. SaStringT clccli_path;
  392. struct amf_comp *next;
  393. void *conn;
  394. enum clc_component_types comptype;
  395. struct amf_healthcheck *healthcheck_head;
  396. poll_timer_handle instantiate_timeout_handle;
  397. /*
  398. * Flag that indicates of this component has a suspected error
  399. */
  400. SaUint32T error_suspected;
  401. } amf_comp_t;
  402. typedef struct amf_healthcheck {
  403. /* Configuration Attributes */
  404. SaAmfHealthcheckKeyT safHealthcheckKey;
  405. SaUint32T saAmfHealthcheckMaxDuration;
  406. SaUint32T saAmfHealthcheckPeriod;
  407. /* Relations */
  408. struct amf_comp *comp;
  409. /* Implementation */
  410. struct amf_healthcheck *next;
  411. SaUint32T active;
  412. SaAmfHealthcheckInvocationT invocationType;
  413. SaAmfRecommendedRecoveryT recommendedRecovery;
  414. poll_timer_handle timer_handle_duration;
  415. poll_timer_handle timer_handle_period;
  416. } amf_healthcheck_t;
  417. typedef struct amf_si {
  418. /* Configuration Attributes */
  419. SaNameT name;
  420. SaNameT saAmfSIProtectedbySG;
  421. SaUint32T saAmfSIRank;
  422. SaUint32T saAmfSINumCSIs;
  423. SaUint32T saAmfSIPrefActiveAssignments;
  424. SaUint32T saAmfSIPrefStandbyAssignments;
  425. /* Runtime Attributes */
  426. SaAmfAdminStateT saAmfSIAdminState;
  427. /* SaAmfAssignmentStateT saAmfSIAssignmentState; */
  428. /* SaUint32T saAmfSINumCurrActiveAssignments; */
  429. /* SaUint32T saAmfSINumCurrStandbyAssignments; */
  430. /* Relations */
  431. struct amf_application *application;
  432. struct amf_csi *csi_head;
  433. struct amf_si_assignment *assigned_sis;
  434. struct amf_si_dependency *depends_on;
  435. struct amf_si_ranked_su *ranked_sus;
  436. /* Implementation */
  437. struct amf_si *next;
  438. } amf_si_t;
  439. typedef struct amf_si_ranked_su {
  440. /* Configuration Attributes */
  441. SaNameT name;
  442. SaUint32T saAmfRank;
  443. /* Relations */
  444. struct amf_si *si;
  445. struct amf_su *su;
  446. /* Implementation */
  447. struct amf_si_ranked_su *su_next;
  448. struct amf_si_ranked_su *si_next;
  449. } amf_si_ranked_su_t;
  450. typedef struct amf_si_dependency {
  451. /* Configuration Attributes */
  452. SaNameT name;
  453. int saAmfToleranceTime;
  454. /* Relations */
  455. /* Implementation */
  456. struct amf_si_dependency *next;
  457. } amf_si_dependency_t;
  458. typedef struct amf_si_assignment {
  459. /* Runtime Attributes */
  460. SaNameT name;
  461. SaAmfHAStateT saAmfSISUHAState;
  462. /* Relations */
  463. struct amf_si *si;
  464. struct amf_su *su;
  465. /* Implementation */
  466. SaAmfHAStateT requested_ha_state;
  467. struct amf_si_assignment *next;
  468. void (*assumed_callback_fn) (
  469. struct amf_si_assignment *si_assignment, int result);
  470. } amf_si_assignment_t;
  471. typedef struct amf_csi {
  472. /* Configuration Attributes */
  473. SaNameT name;
  474. SaNameT saAmfCSTypeName;
  475. SaNameT **saAmfCSIDependencies;
  476. /* Relations */
  477. struct amf_si *si;
  478. struct amf_csi_assignment *assigned_csis;
  479. struct amf_csi_attribute *attributes_head;
  480. /* Implementation */
  481. struct amf_csi *next;
  482. } amf_csi_t;
  483. typedef struct amf_csi_attribute {
  484. /* Configuration Attributes */
  485. SaStringT name;
  486. SaStringT *value;
  487. /* Implementation */
  488. struct amf_csi_attribute *next;
  489. } amf_csi_attribute_t;
  490. typedef struct amf_csi_assignment {
  491. /* Runtime Attributes */
  492. SaNameT name;
  493. SaAmfHAStateT saAmfCSICompHAState; /* confirmed HA state */
  494. /* Relations */
  495. struct amf_csi *csi;
  496. struct amf_comp *comp;
  497. /* Implementation */
  498. SaAmfHAStateT requested_ha_state;
  499. struct amf_csi_assignment *next;
  500. struct amf_si_assignment *si_assignment;
  501. } amf_csi_assignment_t;
  502. enum amf_response_interfaces {
  503. AMF_RESPONSE_HEALTHCHECKCALLBACK = 1,
  504. AMF_RESPONSE_CSISETCALLBACK = 2,
  505. AMF_RESPONSE_CSIREMOVECALLBACK = 3,
  506. AMF_RESPONSE_COMPONENTTERMINATECALLBACK = 4
  507. };
  508. enum amf_message_req_types {
  509. MESSAGE_REQ_EXEC_AMF_COMPONENT_REGISTER = 0,
  510. MESSAGE_REQ_EXEC_AMF_COMPONENT_ERROR_REPORT = 1,
  511. MESSAGE_REQ_EXEC_AMF_COMPONENT_INSTANTIATE = 2,
  512. MESSAGE_REQ_EXEC_AMF_CLC_CLEANUP_COMPLETED = 3,
  513. MESSAGE_REQ_EXEC_AMF_HEALTHCHECK_TMO = 4,
  514. MESSAGE_REQ_EXEC_AMF_RESPONSE = 5,
  515. MESSAGE_REQ_EXEC_AMF_SYNC_START = 6,
  516. MESSAGE_REQ_EXEC_AMF_SYNC_DATA = 7,
  517. MESSAGE_REQ_EXEC_AMF_SYNC_READY = 8,
  518. MESSAGE_REQ_EXEC_AMF_CLUSTER_START_TMO = 9,
  519. MESSAGE_REQ_EXEC_AMF_SYNC_REQUEST = 10,
  520. MESSAGE_REQ_EXEC_AMF_COMPONENT_INSTANTIATE_TMO = 11
  521. };
  522. struct req_exec_amf_clc_cleanup_completed {
  523. mar_req_header_t header;
  524. SaNameT compName;
  525. };
  526. struct req_exec_amf_healthcheck_tmo {
  527. mar_req_header_t header;
  528. SaNameT compName;
  529. SaAmfHealthcheckKeyT safHealthcheckKey;
  530. };
  531. struct req_exec_amf_comp_instantiate {
  532. mar_req_header_t header;
  533. SaNameT compName;
  534. };
  535. struct req_exec_amf_comp_instantiate_tmo {
  536. mar_req_header_t header;
  537. SaNameT compName;
  538. };
  539. struct req_exec_amf_cluster_start_tmo {
  540. mar_req_header_t header;
  541. };
  542. /*===========================================================================*/
  543. /* amfutil.c */
  544. extern struct amf_cluster *amf_config_read (char **error_string);
  545. extern void amf_runtime_attributes_print (struct amf_cluster *cluster);
  546. extern int amf_enabled (struct objdb_iface_ver0 *objdb);
  547. extern void *_amf_malloc (size_t size, char *file, unsigned int line);
  548. #define amf_malloc(size) _amf_malloc ((size), __FILE__, __LINE__)
  549. extern void *_amf_calloc (size_t nmemb, size_t size, char *file,
  550. unsigned int line);
  551. #define amf_calloc(nmemb,size) _amf_calloc ((nmemb), (size), __FILE__, __LINE__)
  552. extern const char *amf_admin_state (int state);
  553. extern const char *amf_op_state (int state);
  554. extern const char *amf_presence_state (int state);
  555. extern const char *amf_ha_state (int state);
  556. extern const char *amf_readiness_state (int state);
  557. extern const char *amf_assignment_state (int state);
  558. extern char *amf_serialize_SaNameT (
  559. char *buf, int *size, int *offset, SaNameT *name);
  560. extern char *amf_serialize_SaStringT (
  561. char *buf, int *size, int *offset, SaStringT str);
  562. extern char *amf_serialize_SaUint16T (
  563. char *buf, int *size, int *offset, SaUint16T num);
  564. extern char *amf_serialize_SaUint32T (
  565. char *buf, int *size, int *offset, SaUint32T num);
  566. extern char *amf_serialize_SaUint64T (char *buf, SaUint64T num);
  567. extern char *amf_serialize_opaque (
  568. char *buf, int *size, int *offset, void *cp, int cnt);
  569. extern char *amf_deserialize_SaNameT (char *buf, SaNameT *name);
  570. extern char *amf_deserialize_SaStringT (char *buf, SaStringT *str);
  571. extern char *amf_deserialize_SaUint16T (char *buf, SaUint16T *num);
  572. extern char *amf_deserialize_SaUint32T (char *buf, SaUint32T *num);
  573. extern char *amf_deserialize_SaUint64T (char *buf, SaUint64T *num);
  574. extern char *amf_deserialize_opaque (char *buf, void *dst, int *cnt);
  575. extern int amf_msg_mcast (int msg_id, void *buf, size_t len);
  576. extern void amf_util_init (void);
  577. extern void amf_fifo_put (int entry_type, amf_fifo_t **root,
  578. int size_of_data, void *data);
  579. extern int amf_fifo_get (amf_fifo_t **root, void *data);
  580. typedef void (*async_func_t)(void *param);
  581. extern void amf_call_function_asynchronous (async_func_t async_func, void *param);
  582. /*===========================================================================*/
  583. /* amfnode.c */
  584. /* General methods */
  585. extern struct amf_node *amf_node_new (struct amf_cluster *cluster, char *name);
  586. extern void amf_node_init (void);
  587. extern void *amf_node_serialize (struct amf_node *node, int *len);
  588. extern struct amf_node *amf_node_deserialize (
  589. struct amf_cluster *cluster, char *buf);
  590. extern struct amf_node *amf_node_find (SaNameT *name);
  591. extern struct amf_node *amf_node_find_by_nodeid (unsigned int nodeid);
  592. extern struct amf_node *amf_node_find_by_hostname (const char *hostname);
  593. extern void amf_node_sg_failed_over (struct amf_node *node,
  594. struct amf_sg *sg_in);
  595. /* Event methods */
  596. extern void amf_node_sync_ready (struct amf_node *node);
  597. extern void amf_node_leave (struct amf_node *node);
  598. extern void amf_node_failover (struct amf_node *node);
  599. extern void amf_node_switchover (struct amf_node *node);
  600. extern void amf_node_failfast (struct amf_node *node);
  601. extern void amf_node_comp_restart_req (
  602. struct amf_node *node, struct amf_comp *comp);
  603. extern void amf_node_comp_failover_req (
  604. struct amf_node *node, struct amf_comp *comp);
  605. enum amf_reboot_reason {
  606. TERMINATION_FAILED = 1,
  607. INSTANTIATION_FAILED = 2
  608. };
  609. extern int amf_node_reboot (
  610. struct amf_node *node, enum amf_reboot_reason reason);
  611. /* Response event methods */
  612. extern void amf_node_application_started (
  613. struct amf_node *node, struct amf_application *app);
  614. extern void amf_node_application_workload_assigned (
  615. struct amf_node *node, struct amf_application *app);
  616. /* Timer event methods */
  617. extern void timer_function_node_probation_period_expired (void *node);
  618. /*===========================================================================*/
  619. /* amfcluster.c */
  620. /* General methods */
  621. extern void amf_cluster_init (void);
  622. extern struct amf_cluster *amf_cluster_new (void);
  623. extern void *amf_cluster_serialize (struct amf_cluster *cluster, int *len);
  624. extern struct amf_cluster *amf_cluster_deserialize (char *buf);
  625. extern int amf_cluster_applications_assigned (struct amf_cluster *cluster);
  626. extern int amf_cluster_applications_started_with_no_starting_sgs (
  627. struct amf_cluster *cluster);
  628. /* Event methods */
  629. extern void amf_cluster_start_tmo_event (int is_sync_master,
  630. struct amf_cluster *cluster);
  631. extern void amf_cluster_sync_ready (struct amf_cluster *cluster,
  632. struct amf_node *node);
  633. /**
  634. *
  635. * @param cluster
  636. * @param app
  637. */
  638. extern void amf_cluster_start_applications(struct amf_cluster *cluster);
  639. extern void amf_cluster_assign_workload (struct amf_cluster *cluster);
  640. /* Response event methods */
  641. extern void amf_cluster_application_started (
  642. struct amf_cluster *cluster, struct amf_application *app);
  643. extern void amf_cluster_application_workload_assigned (
  644. struct amf_cluster *cluster, struct amf_application *app);
  645. /*===========================================================================*/
  646. /* amfapp.c */
  647. /* General methods */
  648. extern void amf_application_init (void);
  649. extern struct amf_application *amf_application_find (
  650. struct amf_cluster *cluster, char *name);
  651. extern struct amf_application *amf_application_new (
  652. struct amf_cluster *cluster);
  653. extern void amf_application_delete (struct amf_application *app);
  654. extern int amf_application_calc_and_set_si_dependency_level (
  655. struct amf_application *app);
  656. extern void *amf_application_serialize (
  657. struct amf_application *application, int *len);
  658. extern struct amf_application *amf_application_deserialize (
  659. struct amf_cluster *cluster, char *buf);
  660. extern int amf_application_all_sg_started (struct amf_application *app);
  661. /* Event methods */
  662. extern void amf_application_start (
  663. struct amf_application *app, struct amf_node *node);
  664. extern void amf_application_assign_workload (
  665. struct amf_application *app, struct amf_node *node);
  666. /* Response event methods */
  667. extern void amf_application_sg_started (
  668. struct amf_application *app, struct amf_sg *sg, struct amf_node *node);
  669. extern void amf_application_sg_assigned (
  670. struct amf_application *app, struct amf_sg *sg);
  671. /*===========================================================================*/
  672. /* amfsg.c */
  673. /* General methods */
  674. extern void amf_sg_init (void);
  675. extern struct amf_sg *amf_sg_find (struct amf_application *app, char *name);
  676. extern struct amf_sg *amf_sg_new (struct amf_application *app, char *name);
  677. extern void amf_sg_delete (struct amf_sg *sg);
  678. extern void *amf_sg_serialize (struct amf_sg *sg, int *len);
  679. extern struct amf_sg *amf_sg_deserialize (
  680. struct amf_application *app, char *buf);
  681. /**
  682. * Request SG to start (instantiate all SUs)
  683. *
  684. * @param sg
  685. * @param node - NULL start all SUs in the SG
  686. * @param node - !NULL start all SUs in the SG for the specified
  687. * node.
  688. */
  689. extern void amf_sg_start (struct amf_sg *sg, struct amf_node *node);
  690. /**
  691. * Assign SIs on a certain dependency level to SUs
  692. * @param sg
  693. * @param dependency_level
  694. */
  695. extern int amf_sg_assign_si_req (struct amf_sg *sg, int dependency_level);
  696. extern void amf_sg_failover_node_req (
  697. struct amf_sg *sg, struct amf_node *node);
  698. extern void amf_sg_failover_su_req (
  699. struct amf_sg *sg, struct amf_su *su, struct amf_node *node);
  700. extern void amf_sg_failover_comp_req (
  701. struct amf_sg *sg, struct amf_node *node);
  702. extern void amf_sg_switchover_node_req (
  703. struct amf_sg *sg, struct amf_node *node);
  704. /* Response event methods */
  705. extern void amf_sg_su_state_changed (
  706. struct amf_sg *sg, struct amf_su *su, SaAmfStateT type, int state);
  707. extern void amf_sg_si_ha_state_changed (
  708. struct amf_sg *sg, struct amf_si *si, int state);
  709. extern void amf_sg_su_assignment_removed (
  710. struct amf_sg *sg, struct amf_su *su);
  711. extern void amf_sg_si_activated (
  712. struct amf_sg *sg, struct amf_si *si);
  713. /*===========================================================================*/
  714. /* amfsu.c */
  715. /* General methods */
  716. extern void amf_su_init (void);
  717. extern struct amf_su *amf_su_find (
  718. struct amf_cluster *cluster, SaNameT *name);
  719. extern struct amf_su *amf_su_new (struct amf_sg *sg, char *name);
  720. extern void amf_su_delete (struct amf_su *su);
  721. extern char *amf_su_dn_make (struct amf_su *su, SaNameT *name);
  722. extern void *amf_su_serialize (struct amf_su *su, int *len);
  723. extern struct amf_su *amf_su_deserialize (
  724. struct amf_sg *sg, char *buf);
  725. extern int amf_su_is_local (struct amf_su *su);
  726. extern struct amf_si_assignment *amf_su_get_next_si_assignment (
  727. struct amf_su *su, const struct amf_si_assignment *si_assignment);
  728. extern void amf_su_foreach_si_assignment (
  729. struct amf_su *su,
  730. void (*foreach_fn)(struct amf_su *su,
  731. struct amf_si_assignment *si_assignment));
  732. extern int amf_su_get_saAmfSUNumCurrActiveSIs (struct amf_su *su);
  733. extern int amf_su_get_saAmfSUNumCurrStandbySIs (struct amf_su *su);
  734. extern SaAmfReadinessStateT amf_su_get_saAmfSUReadinessState (
  735. struct amf_su *su);
  736. extern int amf_su_presence_state_all_comps_in_su_are_set (struct amf_su *su,
  737. SaAmfPresenceStateT state);
  738. /* Event methods */
  739. extern void amf_su_instantiate (struct amf_su *su);
  740. extern void amf_su_assign_si (
  741. struct amf_su *su, struct amf_si *si, SaAmfHAStateT ha_state);
  742. extern void amf_su_restart_req (struct amf_su *su);
  743. /**
  744. * Request termination of all component in an SU
  745. * @param su
  746. */
  747. extern void amf_su_terminate (struct amf_su *su);
  748. extern struct amf_node *amf_su_get_node (struct amf_su *su);
  749. extern void amf_su_escalation_level_reset (struct amf_su *su);
  750. extern void amf_su_remove_assignment (struct amf_su *su);
  751. /* Response event methods */
  752. extern void amf_su_comp_state_changed (
  753. struct amf_su *su, struct amf_comp *comp, SaAmfStateT type, int state);
  754. extern void amf_su_comp_error_suspected (
  755. struct amf_su *su,
  756. struct amf_comp *comp,
  757. SaAmfRecommendedRecoveryT recommended_recovery);
  758. /*===========================================================================*/
  759. /* amfcomp.c */
  760. /* General methods */
  761. extern void amf_comp_init (void);
  762. extern struct amf_comp *amf_comp_new (struct amf_su *su, char *name);
  763. extern void amf_comp_delete (struct amf_comp *comp);
  764. extern char *amf_comp_dn_make (struct amf_comp *comp, SaNameT *name);
  765. extern struct amf_comp *amf_comp_find (
  766. struct amf_cluster *cluster, SaNameT *name);
  767. extern void *amf_comp_serialize (struct amf_comp *comp, int *len);
  768. extern struct amf_comp *amf_comp_deserialize (
  769. struct amf_su *su, char *buf);
  770. extern void amf_comp_foreach_csi_assignment (
  771. struct amf_comp *component,
  772. void (*foreach_fn)(struct amf_comp *component,
  773. struct amf_csi_assignment *csi_assignment));
  774. extern struct amf_csi_assignment *amf_comp_get_next_csi_assignment (
  775. struct amf_comp *component, const struct amf_csi_assignment *csi_assignment);
  776. extern SaAmfReadinessStateT amf_comp_get_saAmfCompReadinessState (
  777. struct amf_comp *comp);
  778. /* Event methods */
  779. extern void amf_comp_instantiate (struct amf_comp *comp);
  780. extern void amf_comp_terminate (struct amf_comp *comp);
  781. extern void amf_comp_node_left (struct amf_comp *comp);
  782. extern void amf_comp_instantiate_event(struct amf_comp *comp);
  783. extern void amf_comp_instantiate_tmo_event (struct amf_comp *comp);
  784. /**
  785. * Request the component to assume a HA state
  786. * @param comp
  787. * @param csi_assignment
  788. * @param requested_ha_state
  789. */
  790. extern void amf_comp_hastate_set (
  791. struct amf_comp *comp,
  792. struct amf_csi_assignment *csi_assignment);
  793. extern void amf_comp_restart (struct amf_comp *comp);
  794. extern void amf_comp_operational_state_set (
  795. struct amf_comp *comp, SaAmfOperationalStateT opstate);
  796. extern void amf_comp_readiness_state_set (
  797. struct amf_comp *comp, SaAmfReadinessStateT state);
  798. extern struct amf_healthcheck *amf_comp_find_healthcheck (
  799. struct amf_comp *comp, SaAmfHealthcheckKeyT *key);
  800. extern void amf_comp_healthcheck_tmo (
  801. struct amf_comp *comp, struct amf_healthcheck *healthcheck);
  802. extern void amf_comp_cleanup_completed (struct amf_comp *comp);
  803. /**
  804. * Count number of active CSI assignments
  805. * @param component
  806. *
  807. * @return int
  808. */
  809. extern int amf_comp_get_saAmfCompNumCurrActiveCsi(struct amf_comp *component);
  810. /**
  811. * Count number of standby CSI assignments
  812. * @param component
  813. *
  814. * @return int
  815. */
  816. extern int amf_comp_get_saAmfCompNumCurrStandbyCsi(struct amf_comp *component);
  817. /*
  818. * Originates from library
  819. */
  820. extern SaAisErrorT amf_comp_healthcheck_start (
  821. struct amf_comp *comp,
  822. SaAmfHealthcheckKeyT *healthcheckKey,
  823. SaAmfHealthcheckInvocationT invocationType,
  824. SaAmfRecommendedRecoveryT recommendedRecovery);
  825. extern SaAisErrorT amf_comp_healthcheck_stop (
  826. struct amf_comp *comp,
  827. SaAmfHealthcheckKeyT *healthcheckKey);
  828. extern SaAisErrorT amf_comp_register (struct amf_comp *comp);
  829. extern void amf_comp_unregister (struct amf_comp *comp);
  830. extern void amf_comp_error_report (
  831. struct amf_comp *comp, SaAmfRecommendedRecoveryT recommendedRecovery);
  832. extern int amf_comp_response_1 (
  833. SaInvocationT invocation, SaAisErrorT error, SaAisErrorT *retval,
  834. SaUint32T *interface, SaNameT *dn);
  835. extern struct amf_comp *amf_comp_response_2 (
  836. SaUint32T interface, SaNameT *dn, SaAisErrorT error, SaAisErrorT *retval);
  837. extern SaAisErrorT amf_comp_hastate_get (
  838. struct amf_comp *comp, SaNameT *csi_name, SaAmfHAStateT *ha_state);
  839. extern SaAisErrorT amf_comp_healthcheck_confirm (
  840. struct amf_comp *comp,
  841. SaAmfHealthcheckKeyT *healthcheckKey,
  842. SaAisErrorT healthcheckResult);
  843. extern amf_healthcheck_t *amf_healthcheck_new (struct amf_comp *comp);
  844. extern void *amf_healthcheck_serialize (
  845. struct amf_healthcheck *healthcheck, int *len);
  846. extern struct amf_healthcheck *amf_healthcheck_deserialize (
  847. struct amf_comp *comp, char *buf);
  848. /*===========================================================================*/
  849. /* amfsi.c */
  850. /* General methods */
  851. extern void amf_si_init (void);
  852. extern struct amf_si *amf_si_find (struct amf_application *app, char *name);
  853. extern struct amf_si *amf_si_new (struct amf_application *app, char *name);
  854. extern void amf_si_delete (struct amf_si *si);
  855. extern int amf_si_calc_and_set_csi_dependency_level (struct amf_si *si);
  856. extern void *amf_si_serialize (struct amf_si *si, int *len);
  857. extern struct amf_si *amf_si_deserialize (
  858. struct amf_application *app, char *buf);
  859. extern void *amf_si_assignment_serialize (
  860. struct amf_si_assignment *si_assignment, int *len);
  861. extern struct amf_si_assignment *amf_si_assignment_deserialize (
  862. struct amf_si *si, char *buf);
  863. #if 0
  864. char *amf_si_assignment_dn_make (struct amf_su *su, struct amf_si *si,
  865. SaNameT *name);
  866. #endif
  867. /**
  868. * Get number of active assignments for the specified SI
  869. * @param si
  870. *
  871. * @return int
  872. */
  873. extern int amf_si_get_saAmfSINumCurrActiveAssignments (struct amf_si *si);
  874. /**
  875. * Get number of active assignments for the specified SI and SU
  876. * @param si
  877. * @param su
  878. *
  879. * @return int
  880. */
  881. extern int amf_si_su_get_saAmfSINumCurrActiveAssignments (struct amf_si *si,
  882. struct amf_su *su);
  883. /**
  884. * Get number of standby assignments for the specified SI
  885. * @param si
  886. *
  887. * @return int
  888. */
  889. extern int amf_si_get_saAmfSINumCurrStandbyAssignments (struct amf_si *si);
  890. /**
  891. * Get number of standby assignments for the specified SI and SU
  892. * @param si
  893. *
  894. * @return int
  895. */
  896. extern int amf_si_su_get_saAmfSINumCurrStandbyAssignments (struct amf_si *si,
  897. struct amf_su *su);
  898. /**
  899. * Get assignment state for the specified SI.
  900. * @param si
  901. *
  902. * @return SaAmfAssignmentStateT
  903. */
  904. extern SaAmfAssignmentStateT amf_si_get_saAmfSIAssignmentState (
  905. struct amf_si *si);
  906. /* Event methods */
  907. /**
  908. * Activate all active assignments. Request component to change
  909. * HA state to active.
  910. * @param si
  911. * @param activated_callback_fn
  912. */
  913. extern void amf_si_activate (
  914. struct amf_si *si,
  915. void (*activated_callback_fn)(struct amf_si *si, int result));
  916. /**
  917. * Deactivate all active assignments. Request component to
  918. * change HA state to quiesced.
  919. *
  920. * @param si_assignment
  921. * @param deactivated_callback_fn
  922. *
  923. * @return int 1 - deactived immediately
  924. * @return int 0 - asynchronous response through callback
  925. */
  926. /***/
  927. extern int amf_si_deactivate (
  928. struct amf_si_assignment *si_assignment,
  929. void (*deactivated_callback_fn)(struct amf_si_assignment *si_assignment,
  930. int result));
  931. /**
  932. * Request SI (SU) to assume a HA state (request component)
  933. *
  934. * @param si_assignment
  935. * @param assumed_ha_state_callback_fn
  936. */
  937. extern void amf_si_ha_state_assume (
  938. struct amf_si_assignment *si_assignment,
  939. void (*assumed_ha_state_callback_fn)(struct amf_si_assignment *si_assignment,
  940. int result));
  941. /**
  942. * Component reports to SI that a workload assignment succeeded.
  943. *
  944. * @param si
  945. * @param csi_assignment
  946. */
  947. extern void amf_si_comp_set_ha_state_done (
  948. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  949. /**
  950. * Component reports to SI that a workload assignment failed.
  951. * @param si
  952. * @param csi_assignment
  953. */
  954. extern void amf_si_comp_set_ha_state_failed (
  955. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  956. /**
  957. * Request a CSI to delete all CSI assignments.
  958. *
  959. * @param component
  960. * @param csi
  961. */
  962. extern void amf_csi_delete_assignments (struct amf_csi *csi, struct amf_su *su);
  963. /* General methods */
  964. extern struct amf_csi *amf_csi_new (struct amf_si *si);
  965. extern struct amf_csi *amf_csi_find (struct amf_si *si, char *name);
  966. extern void amf_csi_delete (struct amf_csi *csi);
  967. extern void *amf_csi_serialize (struct amf_csi *csi, int *len);
  968. extern struct amf_csi *amf_csi_deserialize (
  969. struct amf_si *si, char *buf);
  970. extern void *amf_csi_assignment_serialize (
  971. struct amf_csi_assignment *csi_assignment, int *len);
  972. extern struct amf_csi_assignment *amf_csi_assignment_deserialize (
  973. struct amf_csi *csi, char *buf);
  974. extern char *amf_csi_dn_make (struct amf_csi *csi, SaNameT *name);
  975. extern char *amf_csi_assignment_dn_make (
  976. struct amf_csi_assignment *csi_assignment, SaNameT *name);
  977. extern struct amf_csi_assignment *amf_csi_assignment_find (
  978. struct amf_cluster *cluster, SaNameT *name);
  979. extern struct amf_csi_attribute *amf_csi_attribute_new (struct amf_csi *csi);
  980. extern void *amf_csi_attribute_serialize (
  981. struct amf_csi_attribute *csi_attribute, int *len);
  982. extern struct amf_csi_attribute *amf_csi_attribute_deserialize (
  983. struct amf_csi *csi, char *buf);
  984. /* extern int sa_amf_grep(const char *string, char *pattern, size_t nmatch, */
  985. /* char** sub_match_array); */
  986. extern int sa_amf_grep(const char *string, char *pattern, size_t nmatch,
  987. SaNameT *sub_match_array);
  988. /*===========================================================================*/
  989. extern struct amf_node *this_amf_node;
  990. extern struct amf_cluster *amf_cluster;
  991. #endif /* AMF_H_DEFINED */