فهرست منبع

(Logical change 1.135)

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@487 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 21 سال پیش
والد
کامیت
309fc1bf8b
3فایلهای تغییر یافته به همراه601 افزوده شده و 0 حذف شده
  1. 329 0
      include/ipc_ckpt.h
  2. 267 0
      include/saCkpt.h
  3. 5 0
      test/sa_error.h

+ 329 - 0
include/ipc_ckpt.h

@@ -0,0 +1,329 @@
+/*
+ * Copyright (c) 2002-2005 MontaVista Software, Inc.
+ *
+ * All rights reserved.
+ *
+ * Author: Steven Dake (sdake@mvista.com)
+ *
+ * This software licensed under BSD license, the text of which follows:
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the MontaVista Software, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef IPC_CKPT_H_DEFINED
+#define IPC_CKPT_H_DEFINED
+
+#include "../include/ipc_gen.h"
+#include "../include/ais_types.h"
+#include "../include/saCkpt.h"
+
+enum req_lib_ckpt_checkpoint_types {
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTOPEN = 1,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTOPENASYNC,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTCLOSE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTUNLINK,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTRETENTIONDURATIONSET,
+	MESSAGE_REQ_CKPT_CHECKPOINT_ACTIVEREPLICASET,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTSTATUSGET,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONCREATE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONDELETE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONEXPIRATIONTIMESET,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONWRITE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONOVERWRITE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_SECTIONREAD,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTSYNCHRONIZE,
+	MESSAGE_REQ_CKPT_CHECKPOINT_CHECKPOINTSYNCHRONIZEASYNC,
+	MESSAGE_REQ_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE,
+	MESSAGE_REQ_CKPT_SECTIONITERATOR_SECTIONITERATORNEXT
+};
+
+enum res_lib_ckpt_checkpoint_types {
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTOPEN,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTOPENASYNC,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTCLOSE,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTUNLINK,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTRETENTIONDURATIONSET,
+	MESSAGE_RES_CKPT_CHECKPOINT_ACTIVEREPLICASET,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTSTATUSGET,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONCREATE,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONDELETE,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONEXPIRATIONTIMESET,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONWRITE,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONOVERWRITE,
+	MESSAGE_RES_CKPT_CHECKPOINT_SECTIONREAD,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTSYNCHRONIZE,
+	MESSAGE_RES_CKPT_CHECKPOINT_CHECKPOINTSYNCHRONIZEASYNC,
+	MESSAGE_RES_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE,
+	MESSAGE_RES_CKPT_SECTIONITERATOR_SECTIONITERATORNEXT
+};
+
+struct req_exec_ckpt_checkpointclose {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+};
+
+struct req_exec_ckpt_checkpointretentiondurationset {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	SaTimeT retentionDuration;
+};
+
+struct req_exec_ckpt_checkpointretentiondurationexpire {
+	struct req_header header;
+	SaNameT checkpointName;
+};
+
+struct req_lib_ckpt_checkpointopen {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaCkptCheckpointCreationAttributesT checkpointCreationAttributes;
+	SaCkptCheckpointOpenFlagsT checkpointOpenFlags;
+};
+
+struct res_lib_ckpt_checkpointopen {
+	struct res_header header;
+};
+
+struct req_exec_ckpt_checkpointopen {
+	struct req_header header;
+	struct message_source source;
+	struct req_lib_ckpt_checkpointopen req_lib_ckpt_checkpointopen;
+};
+
+
+struct req_lib_ckpt_checkpointopenasync {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaCkptCheckpointCreationAttributesT checkpointCreationAttributes;
+	SaCkptCheckpointOpenFlagsT checkpointOpenFlags;
+	SaInvocationT invocation;
+};
+
+struct res_lib_ckpt_checkpointopenasync {
+	struct res_header header;
+	SaCkptCheckpointHandleT checkpointHandle;
+	SaInvocationT invocation;
+};
+
+struct req_lib_ckpt_checkpointclose {
+	struct req_header header;
+	SaNameT checkpointName;
+};
+
+struct res_lib_ckpt_checkpointclose {
+	struct res_header header;
+};
+
+struct req_lib_ckpt_checkpointunlink {
+	struct req_header header;
+	SaNameT checkpointName;
+};
+
+struct res_lib_ckpt_checkpointunlink {
+	struct res_header header;
+};
+
+struct req_exec_ckpt_checkpointunlink {
+	struct req_header header;
+	struct message_source source;
+	struct req_lib_ckpt_checkpointunlink req_lib_ckpt_checkpointunlink;
+};
+
+struct req_lib_ckpt_checkpointretentiondurationset {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaTimeT retentionDuration;
+};
+struct res_lib_ckpt_checkpointretentiondurationset {
+	struct res_header header;
+};
+
+struct req_lib_ckpt_activereplicaset {
+	struct req_header header;
+};
+
+struct res_lib_ckpt_activereplicaset {
+	struct res_header header;
+};
+
+struct req_lib_ckpt_checkpointstatusget {
+	struct req_header header;
+	SaNameT checkpointName;
+};
+
+struct res_lib_ckpt_checkpointstatusget {
+	struct res_header header;
+	SaCkptCheckpointDescriptorT checkpointDescriptor;
+};
+
+struct req_lib_ckpt_sectioncreate {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+	SaTimeT expirationTime;
+	SaUint32T initialDataSize;
+};
+
+struct res_lib_ckpt_sectioncreate {
+	struct res_header header;
+};
+
+struct req_exec_ckpt_sectioncreate {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectioncreate req_lib_ckpt_sectioncreate; /* this must be last */
+};
+
+struct req_lib_ckpt_sectiondelete {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+};
+
+struct res_lib_ckpt_sectiondelete {
+	struct res_header header;
+};
+struct req_exec_ckpt_sectiondelete {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectiondelete req_lib_ckpt_sectiondelete; /* this must be last */
+};
+
+struct req_lib_ckpt_sectionexpirationtimeset {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+	SaTimeT expirationTime;
+};
+
+struct res_lib_ckpt_sectionexpirationtimeset {
+	struct res_header header;
+};
+
+struct req_exec_ckpt_sectionexpirationtimeset {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectionexpirationtimeset req_lib_ckpt_sectionexpirationtimeset;
+};
+
+struct req_lib_ckpt_sectioniteratorinitialize {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaCkptSectionsChosenT sectionsChosen;
+	SaTimeT expirationTime;
+};
+
+struct res_lib_ckpt_sectioniteratorinitialize {
+	struct res_header header;
+};
+
+struct req_lib_ckpt_sectioniteratornext {
+	struct req_header header;
+};
+
+struct res_lib_ckpt_sectioniteratornext {
+	struct res_header header;
+	SaCkptSectionDescriptorT sectionDescriptor;
+};
+
+struct req_lib_ckpt_sectionwrite {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+	SaOffsetT dataOffset;
+	SaOffsetT dataSize;
+};
+
+struct res_lib_ckpt_sectionwrite {
+	struct res_header header;
+};
+
+struct req_exec_ckpt_sectionwrite {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectionwrite req_lib_ckpt_sectionwrite;
+};
+
+struct req_lib_ckpt_sectionoverwrite {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+	SaUint32T dataSize;
+};
+
+struct res_lib_ckpt_sectionoverwrite {
+	struct res_header header;
+};
+	
+struct req_exec_ckpt_sectionoverwrite {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectionoverwrite req_lib_ckpt_sectionoverwrite;
+};
+
+struct req_lib_ckpt_sectionread {
+	struct req_header header;
+	SaNameT checkpointName;
+	SaUint32T idLen;
+	SaOffsetT dataOffset;
+	SaOffsetT dataSize;
+};
+
+struct res_lib_ckpt_sectionread {
+	struct res_header header;
+	SaSizeT dataRead;
+};
+
+struct req_exec_ckpt_sectionread {
+	struct req_header header;
+	struct message_source source;
+	SaNameT checkpointName;
+	struct req_lib_ckpt_sectionread req_lib_ckpt_sectionread;
+};
+
+struct req_lib_ckpt_checkpointsynchronize {
+	struct req_header header;
+};
+
+struct res_lib_ckpt_checkpointsynchronize {
+	struct res_header header;
+};
+
+struct req_lib_ckpt_checkpointsynchronizeasync {
+	struct req_header header;
+	SaInvocationT invocation;
+};
+
+struct res_lib_ckpt_checkpointsynchronizeasync {
+	struct res_header header;
+};
+
+#endif /* IPC_CKPT_H_DEFINED */

+ 267 - 0
include/saCkpt.h

@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2002-2005 MontaVista Software, Inc.
+ *
+ * All rights reserved.
+ *
+ * Author: Steven Dake (sdake@mvista.com)
+ *
+ * This software licensed under BSD license, the text of which follows:
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of the MontaVista Software, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SACKPT_H_DEFINED
+#define SACKPT_H_DEFINED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef SaUint64T SaCkptHandleT;
+
+typedef SaUint64T SaCkptCheckpointHandleT;
+
+typedef SaUint64T SaCkptSectionIterationHandleT;
+
+#define SA_CKPT_WR_ALL_REPLICAS	0x01
+#define SA_CKPT_WR_ACTIVE_REPLICA	0x2
+#define SA_CKPT_WR_ACTIVE_REPLICA_WEAK	0x4
+#define SA_CKPT_CHECKPOINT_COLLOCATED	0x8
+
+typedef SaUint32T SaCkptCheckpointCreationFlagsT;
+
+typedef struct {
+	SaCkptCheckpointCreationFlagsT creationFlags;
+	SaSizeT checkpointSize;
+	SaTimeT retentionDuration;
+	SaUint32T maxSections;
+	SaSizeT maxSectionSize;
+	SaSizeT maxSectionIdSize;
+} SaCkptCheckpointCreationAttributesT;
+
+#define SA_CKPT_CHECKPOINT_READ		0x1
+#define SA_CKPT_CHECKPOINT_WRITE	0x2
+#define SA_CKPT_CHECKPOINT_CREATE	0x4
+
+typedef SaUint32T SaCkptCheckpointOpenFlagsT;
+
+#define SA_CKPT_DEFAULT_SECTION_ID { 0, 0 }
+#define SA_CKPT_GENERATED_SECTION_ID { 0, 0 }
+
+typedef struct {
+	SaUint16T idLen;
+	SaUint8T *id;
+} SaCkptSectionIdT;
+
+typedef struct {
+	SaCkptSectionIdT *sectionId;
+	SaTimeT expirationTime;
+} SaCkptSectionCreationAttributesT;
+
+typedef enum {
+	SA_CKPT_SECTION_VALID = 1,
+	SA_CKPT_SECTION_CORRUPTED = 2
+} SaCkptSectionStateT;
+
+typedef struct {
+	SaCkptSectionIdT sectionId;
+	SaTimeT expirationTime;
+	SaSizeT sectionSize;
+	SaCkptSectionStateT sectionState;
+	SaTimeT lastUpdate;
+} SaCkptSectionDescriptorT;
+
+typedef enum {
+	SA_CKPT_SECTIONS_FOREVER = 1,
+	SA_CKPT_SECTIONS_LEQ_EXPIRATION_TIME = 2,
+	SA_CKPT_SECTIONS_GEQ_EXPIRATION_TIME = 3,
+	SA_CKPT_SECTIONS_CORRUPTED = 4,
+	SA_CKPT_SECTIONS_ANY = 5
+} SaCkptSectionsChosenT;
+
+typedef SaUint32T SaOffsetT;
+
+typedef struct {
+	SaCkptSectionIdT sectionId;
+	void *dataBuffer;
+	SaSizeT dataSize;
+	SaOffsetT dataOffset;
+	SaSizeT readSize;
+} SaCkptIOVectorElementT;
+
+typedef struct {
+	SaCkptCheckpointCreationAttributesT checkpointCreationAttributes;
+	SaUint32T numberOfSections;
+	SaUint32T memoryUsed;
+} SaCkptCheckpointDescriptorT;
+
+typedef void (*SaCkptCheckpointOpenCallbackT) (
+	SaInvocationT invocation,	
+	const SaCkptCheckpointHandleT checkpointHandle,
+	SaAisErrorT error);
+
+typedef void (*SaCkptCheckpointSynchronizeCallbackT) (
+	SaInvocationT invocation,	
+	SaAisErrorT error);
+
+typedef struct {
+	SaCkptCheckpointOpenCallbackT saCkptCheckpointOpenCallback;
+	SaCkptCheckpointSynchronizeCallbackT saCkptCheckpointSynchronizeCallback;
+} SaCkptCallbacksT;
+
+
+SaAisErrorT
+saCkptInitialize (
+	SaCkptHandleT *ckptHandle,
+	const SaCkptCallbacksT *callbacks,
+	SaVersionT *version);
+
+SaAisErrorT
+saCkptSelectionObjectGet (
+	SaCkptHandleT ckptHandle,
+	SaSelectionObjectT *selectionObject);
+
+SaAisErrorT
+saCkptDispatch (
+	SaCkptHandleT ckptHandle,
+	SaDispatchFlagsT dispatchFlags);
+
+SaAisErrorT
+saCkptFinalize (
+	SaCkptHandleT ckptHandle);
+
+SaAisErrorT
+saCkptCheckpointOpen (
+	SaCkptHandleT ckptHandle,
+	const SaNameT *checkpointName,
+	const SaCkptCheckpointCreationAttributesT *checkpointCreationAttributes,
+	SaCkptCheckpointOpenFlagsT checkpointOpenFlags,
+	SaTimeT timeout,
+	SaCkptCheckpointHandleT *checkpointHandle);
+
+SaAisErrorT
+saCkptCheckpointOpenAsync (
+	SaCkptHandleT ckptHandle,
+	SaInvocationT invocation,	
+	const SaNameT *checkpointName,
+	const SaCkptCheckpointCreationAttributesT *checkpointCreationAttributes,
+	SaCkptCheckpointOpenFlagsT checkpointOpenFlags);
+
+SaAisErrorT
+saCkptCheckpointClose (
+	SaCkptCheckpointHandleT checkpointHandle);
+
+SaAisErrorT
+saCkptCheckpointUnlink (
+	SaCkptCheckpointHandleT checkpointHandle,
+	const SaNameT *checkpointName);
+
+SaAisErrorT
+saCkptCheckpointRetentionDurationSet (
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaTimeT retentionDuration);
+
+SaAisErrorT
+saCkptActiveReplicaSet (
+	const SaCkptCheckpointHandleT checkpointHandle);
+
+SaAisErrorT
+saCkptCheckpointStatusGet (
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaCkptCheckpointDescriptorT *checkpointStatus);
+
+SaAisErrorT
+saCkptSectionCreate (
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaCkptSectionCreationAttributesT *sectionCreationAttributes,
+	const void *initialData,
+	SaUint32T initialDataSize);
+
+
+SaAisErrorT
+saCkptSectionDelete (
+	SaCkptCheckpointHandleT checkpointHandle,
+	const SaCkptSectionIdT *sectionId);
+
+SaAisErrorT
+saCkptSectionExpirationTimeSet (
+	SaCkptCheckpointHandleT checkpointHandle,
+	const SaCkptSectionIdT *sectionId,
+	SaTimeT expirationTime);
+
+SaAisErrorT
+saCkptSectionIterationInitialize (
+	const SaCkptCheckpointHandleT checkpointHandle,
+	SaCkptSectionsChosenT sectionsChosen,
+	SaTimeT expirationTime,
+	SaCkptSectionIterationHandleT *sectionIterationHandle);
+
+SaAisErrorT
+saCkptSectionIterationNext (
+	SaCkptSectionIterationHandleT sectionIterationHandle,
+	SaCkptSectionDescriptorT *sectionDescriptor);
+
+SaAisErrorT
+saCkptSectionIterationFinalize (
+	SaCkptSectionIterationHandleT sectionIterationHandle);
+
+SaAisErrorT
+saCkptCheckpointWrite (
+	SaCkptCheckpointHandleT checkpointHandle,
+	const SaCkptIOVectorElementT *ioVector,
+	SaUint32T numberOfElements,
+	SaUint32T *erroneousVectorIndex);
+
+SaAisErrorT
+saCkptSectionOverwrite (
+	SaCkptCheckpointHandleT checkpointHandle,
+	const SaCkptSectionIdT *secitonId,
+	const void *dataBuffer,
+	SaSizeT dataSize);
+
+SaAisErrorT
+saCkptCheckpointRead (
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaCkptIOVectorElementT *ioVector,
+	SaUint32T numberOfElements,
+	SaUint32T *erroneousVectorIndex);
+
+SaAisErrorT
+saCkptCheckpointSynchronize (
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaTimeT timeout);
+
+SaAisErrorT
+saCkptCheckpointSynchronizeAsync (
+	SaCkptHandleT ckptHandle,
+	SaCkptCheckpointHandleT checkpointHandle,
+	SaInvocationT invocation);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SACKPT_H_DEFINED */

+ 5 - 0
test/sa_error.h

@@ -0,0 +1,5 @@
+extern int get_sa_error(SaErrorT error, char *str, int len);
+
+extern char *get_sa_error_b (SaAisErrorT error);
+
+extern char *get_test_output (SaAisErrorT result, SaAisErrorT expected);