amf.h 36 KB

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