OpenClovis Logo

clAmsUtils.h
1 /*
2  * Copyright (C) 2002-2012 OpenClovis Solutions Inc. All Rights Reserved.
3  *
4  * This file is available under a commercial license from the
5  * copyright holder or the GNU General Public License Version 2.0.
6  *
7  * The source code for this program is not published or otherwise
8  * divested of its trade secrets, irrespective of what has been
9  * deposited with the U.S. Copyright office.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * For more information, see the file COPYING provided with this
17  * material.
18  */
19 /*******************************************************************************
20  * ModuleName : amf
21  * File : clAmsUtils.h
22  *******************************************************************************/
23 
24 /*******************************************************************************
25  * Description :
26  * This header file contains utility definitions required by AMS.
27  ***************************** Editor Commands ********************************
28  * For vi/vim
29  * :set shiftwidth=4
30  * :set softtabstop=4
31  * :set expandtab
32  *****************************************************************************/
33 
34 #ifndef _CL_AMS_UTILS_H_
35 #define _CL_AMS_UTILS_H_
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 /******************************************************************************
42  * Include files needed to compile this file
43  *****************************************************************************/
44 
45 #include <stdio.h>
46 #include <string.h>
47 
48 #include <clCommon.h>
49 #include <clOsalApi.h>
50 #include <clDebugApi.h>
51 #include <clAmsErrors.h>
52 #include <clAmsMgmtCommon.h>
53 
54 /******************************************************************************
55  * Debug Defines
56  *****************************************************************************/
57 
58 extern char *clAmsFormatMsg(char *fmt, ...);
59 extern void clAmsLogMsgClient( const ClUint32T level, char *buffer);
60 
61 /******************************************************************************
62  * Common Error Checking Defines
63  *****************************************************************************/
64 
65 #define AMS_CLIENT_LOG(LEVEL, MSG) \
66 { \
67  clAmsLogMsgClient( LEVEL, clAmsFormatMsg MSG ); \
68 }
69 
70 #ifndef AMS_SERVER
71 #define AMS_LOG(LEVEL, MSG) AMS_CLIENT_LOG(LEVEL,MSG)
72 #endif
73 
74 #define AMS_CHECK_BAD_CLNAME(name) \
75 { \
76  if ( (name).length > CL_MAX_NAME_LENGTH ) \
77  { \
78  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
79  ("ALERT [%s:%d] : Invalid ClNameT structure\n", \
80  __FUNCTION__, __LINE__)); \
81  rc = CL_ERR_BUFFER_OVERRUN; \
82  goto exitfn; \
83  } \
84 }
85 
86 #define AMS_CHECK_ENTITY_TYPE(type) \
87 { \
88  if ( (type) > CL_AMS_ENTITY_TYPE_MAX ) \
89  { \
90  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
91  ("ERROR: Invalid entity type = %d\n", type)); \
92  return CL_AMS_RC(CL_AMS_ERR_INVALID_ENTITY); \
93  } \
94 }
95 
96 #define AMS_CHECK_ENTITY_TYPE_AND_EXIT(type) \
97 { \
98  if ( (type) > CL_AMS_ENTITY_TYPE_MAX ) \
99  { \
100  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
101  ("ERROR: Invalid entity type = %d\n", type)); \
102  rc = CL_AMS_RC (CL_AMS_ERR_INVALID_ENTITY); \
103  goto exitfn; \
104  } \
105 }
106 
107 #define AMS_CHECK_RC_ERROR(fn) \
108 { \
109  rc = (fn); \
110  \
111  if ( (rc) != CL_OK ) \
112  { \
113  goto exitfn; \
114  } \
115 }
116 
117 #define AMS_CHECK_RC_UNLOCK(fn) do { \
118  rc = (fn); \
119  if ( (rc) != CL_OK ) \
120  { \
121  goto out_unlock; \
122  } \
123 }while(0)
124 
125 #define AMS_CHECKPTR_SILENT(x) \
126 { \
127  if ( (x) != CL_FALSE ) \
128  { \
129  return CL_AMS_RC(CL_ERR_NULL_POINTER); \
130  } \
131 }
132 
133 #define AMS_CHECK_NO_MEMORY(x) \
134 { \
135  if ( (x) == NULL ) \
136  { \
137  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
138  ("ALERT [%s:%d] : Expression (%s) is True. No Memory\n", \
139  __FUNCTION__, __LINE__, #x)); \
140  return CL_AMS_RC(CL_ERR_NO_MEMORY); \
141  } \
142 }
143 
144 #define AMS_CHECK_NO_MEMORY_AND_EXIT(x) \
145 { \
146  if ( (x) == NULL ) \
147  { \
148  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
149  ("ALERT [%s:%d] : Expression (%s) is True. No Memory\n", \
150  __FUNCTION__, __LINE__, #x)); \
151  rc = CL_ERR_NO_MEMORY; \
152  goto exitfn; \
153  } \
154 }
155 
156 #define AMS_CHECKPTR_AND_EXIT(x) \
157 { \
158  if ( (x) != CL_FALSE ) \
159  { \
160  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
161  ("ALERT [%s:%d] : Expression (%s) is True. Null Pointer\n", \
162  __FUNCTION__, __LINE__, #x)); \
163  rc = CL_ERR_NULL_POINTER; \
164  goto exitfn; \
165  } \
166 }
167 
168 #define AMS_CHECKPTR(x) \
169 { \
170  if ( (x) != CL_FALSE ) \
171  { \
172  AMS_CLIENT_LOG(CL_DEBUG_ERROR, \
173  ("ALERT [%s:%d] : Expression (%s) is True. Null Pointer\n", \
174  __FUNCTION__, __LINE__, #x)); \
175  return CL_AMS_RC(CL_ERR_NULL_POINTER); \
176  } \
177 }
178 
179 /******************************************************************************
180  * Utility Functions
181  *****************************************************************************/
182 
183 #define AMS_MIN(x,y) ( (x) < (y) ) ? (x) : (y);
184 #define AMS_MAX(x,y) ( (x) > (y) ) ? (x) : (y);
185 
186 #define clAmsFreeMemory(mPtr) \
187 { \
188  if ( (mPtr) !=NULL ) \
189  { \
190  clHeapFree(mPtr); \
191  } \
192  mPtr = NULL; \
193 }
194 
195 /******************************************************************************
196  * Printing Related Defines
197  *****************************************************************************/
198 
199 #define CL_AMS_COLUMN_1_WIDTH 45
200 #define CL_AMS_COLUMN_2_WIDTH 35
201 #define CL_AMS_COLUMN_1_DELIMITER "--------------------------------------"
202 #define CL_AMS_COLUMN_2_DELIMITER "---------------------------------"
203 #define CL_AMS_DELIMITER \
204  "==========================================================================="
205 
206 #define CL_AMS_PRINT_TWO_COL(A,B,C) \
207 { \
208  if ( debugPrintFP != NULL ) \
209  { \
210  fprintf(debugPrintFP,"%-*s | ", CL_AMS_COLUMN_1_WIDTH, A); \
211  fprintf(debugPrintFP,B, C); \
212  fprintf(debugPrintFP,"\n"); \
213  } \
214 }
215 
216 #define CL_AMS_PRINT_DELIMITER() \
217 { \
218  if ( debugPrintFP != NULL ) \
219  { \
220  fprintf(debugPrintFP,"%s\n", CL_AMS_DELIMITER); \
221  } \
222 }
223 
224 #define CL_AMS_PRINT_EMPTY_LINE() \
225 { \
226  if ( debugPrintFP != NULL ) \
227  { \
228  fprintf(debugPrintFP,"\n\n"); \
229  } \
230 }
231 
232 
233 #define CL_AMS_PRINT_SUMMARY 1
234 #define CL_AMS_PRINT_DETAILS 2
235 
236 #define CL_AMS_PRINT_HEADER(TITLE,FORMAT,STRING) \
237 { \
238  CL_AMS_PRINT_DELIMITER(); \
239  CL_AMS_PRINT_TWO_COL(TITLE, FORMAT, STRING); \
240  CL_AMS_PRINT_DELIMITER(); \
241 }
242 
243 #define CL_AMS_PRINT_OPEN_TAG(tag) \
244 { \
245  fprintf(debugPrintFP, "<%s>\n", tag); \
246 }
247 
248 #define CL_AMS_PRINT_CLOSE_TAG(tag) \
249 { \
250  fprintf(debugPrintFP, "</%s>\n", tag); \
251 }
252 
253 #define CL_AMS_PRINT_TAG_ATTR(tag, s, value) \
254 { \
255  fprintf(debugPrintFP, "<%s value=\""s"\"/>\n", tag, value); \
256 }
257 
258 #define CL_AMS_PRINT_TAG_VALUE(tag, s, value) \
259 { \
260  fprintf(debugPrintFP, "<%s>"s"</%s>\n", tag, value, tag); \
261 }
262 
263 #define CL_AMS_PRINT_OPEN_TAG_ATTR(tag, s, value) \
264 { \
265  fprintf(debugPrintFP, "<%s value=\""s"\">\n", tag, value); \
266 }
267 
268 /******************************************************************************
269  * Strings for AMS Types
270  *****************************************************************************/
271 
272 #define CL_AMS_STRING_BOOLEAN(S) ( (S) ? "True" : "False" )
273 
274 #define CL_AMS_STRING_SERVICE_STATE(S) \
275 ( ((S) == CL_AMS_SERVICE_STATE_RUNNING ) ? "Running" : \
276  ((S) == CL_AMS_SERVICE_STATE_STOPPED) ? "Stopped" : \
277  ((S) == CL_AMS_SERVICE_STATE_STARTINGUP) ? "Starting Up" : \
278  ((S) == CL_AMS_SERVICE_STATE_SHUTTINGDOWN) ? "Shutting Down" : \
279  ((S) == CL_AMS_SERVICE_STATE_UNAVAILABLE) ? "Unavailable" : \
280  ((S) == CL_AMS_SERVICE_STATE_HOT_STANDBY) ? "Hot standby" : \
281  ((S) == CL_AMS_SERVICE_STATE_NONE) ? "None" : \
282  "Unknown" )
283 
284 #define CL_AMS_STRING_INSTANTIATE_MODE(S) \
285 ( ((S)&CL_AMS_INSTANTIATE_MODE_ACTIVE) ? "Active Mode" : \
286  ((S)&CL_AMS_INSTANTIATE_MODE_STANDBY) ? "Standby Mode": \
287  "Unknown" )
288 
289 #define CL_AMS_STRING_A_STATE(S) \
290 ( ((S) == CL_AMS_ADMIN_STATE_UNLOCKED) ? "Unlocked" : \
291  ((S) == CL_AMS_ADMIN_STATE_LOCKED_A) ? "Locked Assignment" : \
292  ((S) == CL_AMS_ADMIN_STATE_LOCKED_I) ? "Locked Instantiation" : \
293  ((S) == CL_AMS_ADMIN_STATE_SHUTTINGDOWN) ? "Shutting Down" : \
294  ((S) == CL_AMS_ADMIN_STATE_NONE) ? "None" : \
295  "Unknown" )
296 
297 #define CL_AMS_STRING_O_STATE(S) \
298 ( ((S) == CL_AMS_OPER_STATE_ENABLED) ? "Enabled" : \
299  ((S) == CL_AMS_OPER_STATE_DISABLED) ? "Disabled" : \
300  ((S) == CL_AMS_OPER_STATE_NONE) ? "None" : \
301  "Unknown" )
302 
303 #define CL_AMS_STRING_P_STATE(S) \
304 ( ((S) == CL_AMS_PRESENCE_STATE_UNINSTANTIATED) ? "Uninstantiated" : \
305  ((S) == CL_AMS_PRESENCE_STATE_INSTANTIATING) ? "Instantiating" : \
306  ((S) == CL_AMS_PRESENCE_STATE_INSTANTIATED) ? "Instantiated" : \
307  ((S) == CL_AMS_PRESENCE_STATE_TERMINATING) ? "Terminating" : \
308  ((S) == CL_AMS_PRESENCE_STATE_RESTARTING) ? "Restarting" : \
309  ((S) == CL_AMS_PRESENCE_STATE_INSTANTIATION_FAILED) ? "Instantiation Failed" : \
310  ((S) == CL_AMS_PRESENCE_STATE_TERMINATION_FAILED) ? "Termination Failed" : \
311  ((S) == CL_AMS_PRESENCE_STATE_FAULT) ? "Fault" : \
312  ((S) == CL_AMS_PRESENCE_STATE_FAULT_WTR) ? "Fault WTR" : \
313  ((S) == CL_AMS_PRESENCE_STATE_FAULT_WTC) ? "Fault WTC" : \
314  ((S) == CL_AMS_PRESENCE_STATE_NONE) ? "None" : \
315  "Unknown" )
316 
317 #define CL_AMS_STRING_R_STATE(S) \
318 ( ((S) == CL_AMS_READINESS_STATE_INSERVICE) ? "In Service" : \
319  ((S) == CL_AMS_READINESS_STATE_STOPPING) ? "Stopping" : \
320  ((S) == CL_AMS_READINESS_STATE_OUTOFSERVICE)? "Out of Service" : \
321  ((S) == CL_AMS_READINESS_STATE_NONE) ? "None" : \
322  "Unknown" )
323 
324 #define CL_AMS_STRING_H_STATE(S) \
325 ( ((ClAmsHAStateT)(S) == CL_AMS_HA_STATE_ACTIVE) ? "Active" : \
326  ((ClAmsHAStateT)(S) == CL_AMS_HA_STATE_STANDBY) ? "Standby" : \
327  ((ClAmsHAStateT)(S) == CL_AMS_HA_STATE_QUIESCED) ? "Quiesced" : \
328  ((ClAmsHAStateT)(S) == CL_AMS_HA_STATE_QUIESCING) ? "Quiescing" : \
329  ((ClAmsHAStateT)(S) == CL_AMS_HA_STATE_NONE) ? "None" : \
330  "Unknown" )
331 
332 #define CL_AMS_STRING_TIMER(S) \
333 ( ((S) == CL_AMS_NODE_TIMER_SUFAILOVER) ? "Node-SUFailover" : \
334  ((S) == CL_AMS_SG_TIMER_INSTANTIATE) ? "SG-Instantiate" : \
335  ((S) == CL_AMS_SG_TIMER_ADJUST) ? "SG-Adjust" : \
336  ((S) == CL_AMS_SG_TIMER_ADJUST_PROBATION) ? "SG-Adjust-Probation" : \
337  ((S) == CL_AMS_SU_TIMER_SURESTART) ? "SU-SURestart" : \
338  ((S) == CL_AMS_SU_TIMER_PROBATION) ? "SU-SUProbation" : \
339  ((S) == CL_AMS_SU_TIMER_COMPRESTART) ? "SU-CompRestart" : \
340  ((S) == CL_AMS_SU_TIMER_ASSIGNMENT) ? "SU-Assignment-Delay" : \
341  ((S) == CL_AMS_COMP_TIMER_INSTANTIATE) ? "Comp-Instantiate" : \
342  ((S) == CL_AMS_COMP_TIMER_INSTANTIATEDELAY) ? "Comp-InstantiateDelay" : \
343  ((S) == CL_AMS_COMP_TIMER_TERMINATE) ? "Comp-Terminate" : \
344  ((S) == CL_AMS_COMP_TIMER_CLEANUP) ? "Comp-Cleanup" : \
345  ((S) == CL_AMS_COMP_TIMER_AMSTART) ? "Comp-AMStart" : \
346  ((S) == CL_AMS_COMP_TIMER_AMSTOP) ? "Comp-AMStop" : \
347  ((S) == CL_AMS_COMP_TIMER_QUIESCINGCOMPLETE) ? "Comp-QuiescingComplete" : \
348  ((S) == CL_AMS_COMP_TIMER_CSISET) ? "Comp-CSISet" : \
349  ((S) == CL_AMS_COMP_TIMER_CSIREMOVE) ? "Comp-CSIRemove" : \
350  ((S) == CL_AMS_COMP_TIMER_PROXIEDCOMPINSTANTIATE)? "Comp-ProxiedCompInstantiate": \
351  ((S) == CL_AMS_COMP_TIMER_PROXIEDCOMPCLEANUP) ? "Comp-ProxiedCompCleanup": \
352  "Unknown" )
353 
354 #define CL_AMS_STRING_NODE_CLASSTYPE(S) \
355 ( ((S) == CL_AMS_NODE_CLASS_A) ? "Class A" : \
356  ((S) == CL_AMS_NODE_CLASS_B) ? "Class B" : \
357  ((S) == CL_AMS_NODE_CLASS_C) ? "Class C" : \
358  ((S) == CL_AMS_NODE_CLASS_D) ? "Class D" : \
359  ((S) == CL_AMS_NODE_CLASS_NONE) ? "None" : \
360  "Unknown" )
361 
362 #define CL_AMS_STRING_NODE_ISCLUSTERMEMBER(S) \
363 ( ((S) == CL_AMS_NODE_IS_CLUSTER_MEMBER) ? "True" : \
364  ((S) == CL_AMS_NODE_IS_LEAVING_CLUSTER) ? "Leaving" : \
365  "False" )
366 
367 #define CL_AMS_STRING_SG_REDUNDANCY_MODEL(S) \
368 ( ((S) == CL_AMS_SG_REDUNDANCY_MODEL_NO_REDUNDANCY) ? "No Redundancy" : \
369  ((S) == CL_AMS_SG_REDUNDANCY_MODEL_TWO_N) ? "2N (1+1)" : \
370  ((S) == CL_AMS_SG_REDUNDANCY_MODEL_M_PLUS_N) ? "M + N" : \
371  ((S) == CL_AMS_SG_REDUNDANCY_MODEL_N_WAY) ? "N-Way" : \
372  ((S) == CL_AMS_SG_REDUNDANCY_MODEL_N_WAY_ACTIVE) ? "N-Way-Active" : \
373  ((S) == CL_AMS_SG_REDUNDANCY_MODEL_CUSTOM) ? "CUSTOM" : \
374  "Unknown" )
375 
376 #define CL_AMS_STRING_SG_LOADING_STRATEGY(S) \
377 ( ((S) == CL_AMS_SG_LOADING_STRATEGY_LEAST_SI_PER_SU) ? "Least SI per SU" : \
378  ((S) == CL_AMS_SG_LOADING_STRATEGY_LEAST_SU_ASSIGNED) ? "Least SU Assigned" : \
379  ((S) == CL_AMS_SG_LOADING_STRATEGY_LEAST_LOAD_PER_SU) ? "Least Load per SU" : \
380  ((S) == CL_AMS_SG_LOADING_STRATEGY_BY_SI_PREFERENCE) ? "By SI Perference" : \
381  ((S) == CL_AMS_SG_LOADING_STRATEGY_USER_DEFINED) ? "User Defined" : \
382  "Unknown" )
383 
384 #define CL_AMS_STRING_RECOVERY(S) \
385 ( ((S) == CL_AMS_RECOVERY_NO_RECOMMENDATION) ? "No Recommendation" : \
386  ((S) == CL_AMS_RECOVERY_COMP_RESTART) ? "Component Restart" : \
387  ((S) == CL_AMS_RECOVERY_COMP_FAILOVER) ? "Component Failover" : \
388  ((S) == CL_AMS_RECOVERY_NODE_SWITCHOVER) ? "Node Switchover" : \
389  ((S) == CL_AMS_RECOVERY_NODE_FAILOVER) ? "Node Failover" : \
390  ((S) == CL_AMS_RECOVERY_NODE_FAILFAST) ? "Node Failfast" : \
391  ((S) == CL_AMS_RECOVERY_APP_RESTART) ? "Application Restart" : \
392  ((S) == CL_AMS_RECOVERY_CLUSTER_RESET) ? "Cluster Restart" : \
393  ((S) == CL_AMS_RECOVERY_INTERNALLY_RECOVERED) ? "Internally Recovered" : \
394  ((S) == CL_AMS_RECOVERY_SU_RESTART) ? "SU Restart" : \
395  ((S) == CL_AMS_RECOVERY_NONE) ? "None" : \
396  ((S) == CL_AMS_EXTERNAL_RECOVERY_RESET) ? "External Component Reset" : \
397  ((S) == CL_AMS_EXTERNAL_RECOVERY_REBOOT) ? "External Component Reboot" : \
398  ((S) == CL_AMS_EXTERNAL_RECOVERY_POWER_ON) ? "External Component PowerOn" : \
399  ((S) == CL_AMS_EXTERNAL_RECOVERY_POWER_OFF) ? "External Component PowerOff" : \
400  ((S) == CL_AMS_RECOVERY_NODE_HALT) ? "Node halt" : \
401  "Unknown" )
402 
403 #define CL_AMS_STRING_COMP_PROPERTY(S) \
404 ( ((S) == CL_AMS_COMP_PROPERTY_SA_AWARE) ? \
405  "SA Aware" : \
406  ((S) == CL_AMS_COMP_PROPERTY_PROXIED_PREINSTANTIABLE) ? \
407  "Proxied Preinstantiable": \
408  ((S) == CL_AMS_COMP_PROPERTY_PROXIED_NON_PREINSTANTIABLE) ? \
409  "Proxied Non Preinstantiable": \
410  ((S) == CL_AMS_COMP_PROPERTY_NON_PROXIED_NON_PREINSTANTIABLE) ? \
411  "Non Proxied Non Preinstantiable": \
412  "Unknown" )
413 
414 #define CL_AMS_STRING_COMP_CAP(S) \
415 ( ((S) == CL_AMS_COMP_CAP_X_ACTIVE_AND_Y_STANDBY) ? "X-Active AND Y-Standby" : \
416  ((S) == CL_AMS_COMP_CAP_X_ACTIVE_OR_Y_STANDBY) ? "X-Active OR Y-Standby" : \
417  ((S) == CL_AMS_COMP_CAP_ONE_ACTIVE_OR_X_STANDBY) ? "1-Active OR Y-Standby" : \
418  ((S) == CL_AMS_COMP_CAP_ONE_ACTIVE_OR_ONE_STANDBY) ? "1-Active OR 1-Standby" : \
419  ((S) == CL_AMS_COMP_CAP_X_ACTIVE) ? "X-Active" : \
420  ((S) == CL_AMS_COMP_CAP_ONE_ACTIVE) ? "1-Active" : \
421  ((S) == CL_AMS_COMP_CAP_NON_PREINSTANTIABLE) ? "Non Preinstantiable" : \
422  "Unknown" )
423 
424 #define CL_AMS_STRING_CSI_FLAGS(S) \
425 ( ((S) & CL_AMS_CSI_FLAG_ADD_ONE) ? "ADD_ONE" : \
426  ((S) & CL_AMS_CSI_FLAG_TARGET_ONE) ? "TARGET_ONE" : \
427  ((S) & CL_AMS_CSI_FLAG_TARGET_ALL) ? "TARGET_ALL" : \
428  "Unknown" )
429 
430 #define CL_AMS_STRING_CSI_TRAN_DESCR(S) \
431 ( ((S) == CL_AMS_CSI_NEW_ASSIGN) ? "NEW_ASSIGN" : \
432  ((S) == CL_AMS_CSI_QUIESCED) ? "CSI_QUIESCED" : \
433  ((S) == CL_AMS_CSI_NOT_QUIESCED) ? "CSI_NOT_QUIESCED" : \
434  ((S) == CL_AMS_CSI_STILL_ACTIVE) ? "CSI_STILL_ACTIVE" : \
435  "Unknown" )
436 
437 #define CL_AMS_STRING_ENTITY_TYPE(S) \
438 ( ((S) == CL_AMS_ENTITY_TYPE_ENTITY ) ? "entity" : \
439  ((S) == CL_AMS_ENTITY_TYPE_NODE) ? "node" : \
440  ((S) == CL_AMS_ENTITY_TYPE_SG) ? "sg" : \
441  ((S) == CL_AMS_ENTITY_TYPE_SU) ? "su" : \
442  ((S) == CL_AMS_ENTITY_TYPE_SI) ? "si" : \
443  ((S) == CL_AMS_ENTITY_TYPE_COMP) ? "comp" : \
444  ((S) == CL_AMS_ENTITY_TYPE_CSI) ? "csi" : \
445  ((S) == CL_AMS_ENTITY_TYPE_CLUSTER) ? "cluster" : \
446  "unknown" )
447 
448 #ifdef __cplusplus
449 }
450 #endif
451 
452 #endif /* _CL_AMS_UTILS_H_ */
Typical defines found in any software project.
Header file of error Messages that are AMS specific.
Header file of Debug Service Related APIs.
Operating System Abstraction Layer API.

Generated on Tue Jan 10 10:29:15 PST 2012 for OpenClovis SDK using Doxygen