📄 rticore.h
字号:
/*---------------------------------------------------------------------------*//* RTI core interface. *//* Author(s): Steve Ferenci, Thom McLean, Kalyan Perumalla. *//* $Revision: 1.3 $ $Name: v26apr05 $ $Date: 2003/12/12 02:41:21 $ *//*---------------------------------------------------------------------------*/#ifndef __RTICORE_H#define __RTICORE_H/*---------------------------------------------------------------------------*/#include <stdlib.h>#include <string.h>#include <stdio.h>#include "fm.h"#include "mcast.h"#include "tm.h"#include "heap.h"/*----------------------------------------------------------------------------*//* Kalyan: Eliminated older RTIKIT wrapper via these macros. *//*----------------------------------------------------------------------------*/int SESSION_Init( void );#define RTIKIT_VERSION "$Date: 2003/12/12 02:41:21 $ $Name: v26apr05 $"#define RTIKIT_nodeid FM_nodeid#define RTIKIT_numnodes FM_numnodes#define RTIKIT_MAX_PEs MAX_PE#define RTIKIT_UsingMCAST() (void)0#define RTIKIT_UsingTM() (void)0#define RTIKIT_Barrier FML_Barrier#define RTIKIT_FinalBarrier FML_FinalBarrier#define RTIKIT_SetGroupLAByHandle Core_SetGroupLAByHandle /*KALYAN*/#define RTIKIT_SetGroupLAByName Core_SetGroupLAByName /*KALYAN*/#define RTIKIT_FinalizeTopology Core_FinalizeTopology /*KALYAN*/#define RTIKIT_Tick() do{ FM_extract(~0); TM_Tick(); }while(0)#define RTIKIT_Init(ac,av) do{ \ printf("%ld: Initializing RTI (version %s)...\n", \ FM_nodeid, RTIKIT_VERSION); fflush(stdout); \ SESSION_Init(); FML_FMInit(); MCAST_Init(); TM_Init(0); \ FML_Barrier(); \ printf("%ld: RTI initialized.\n",FM_nodeid); fflush(stdout); \ }while(0)/*---------------------------------------------------------------------------*/typedef enum { /* * General messages */ fdkSUCCEEDED = 0, /* "Succeeded." */ fdkINCOMPLETE, /* "Succeeded, but incomplete."*/ fdkFAILED, /* "Failed." */ fdkOUTOFMEMORY, /* "Out of Memory." */ fdkBADFD, /* "Bad File Descriptor." */ /* * RTICore specific error messages */ fdkNLBTSERROR, /* "Attempt to defer more than one LBTS computation."*/ fdkCNSLBTS, /* "Could not start LBTS computation." */ fdkLMLTLBTS, /* "Local Min less than LBTS." */ fdkTMPENDING, /* "Time Management Request pending." */ fdkTIMEPASSED, /* "Requested time already passed." */ fdkTMESMALL, /* "TM_EPSILON too small." */ fdkTMINCON, /* "State of time managment is inconsistent." */ /* registration errors (certain functions must be registered) */ fdkDOMNR, /* "DeliverOneMessage is not registered." */ fdkDTSOENR, /* "DeliverTSOEvents is not registered." */ fdkDROENR, /* "DeliverROEvents is not registered." */ fdkTAGNR, /* "TimeAdvanceGrant is not registered." */ fdkTSOMNR, /* "TSOMin is not registered." */ fdkTSOPNR, /* "TSOPop is not registered." */ /* * RTI errors for DeliverOneMessage, DeliverROEvents, * and DeliverTSOEvents */ fdkDOMIMT, /* "Invalid message type." */ /* * GuardValue */ fdkMAXERROR /* "Invalid fdkErrorCode." */} fdkErrorCode;/*---------------------------------------------------------------------------*//* * Returns an error message for the given fdkErrorCode. * The error messages can be stored in an array and indexed * by fdkErrorCode. */const char *fdkErrorMessage(fdkErrorCode ec);/*---------------------------------------------------------------------------*/#define ISDELIVERABLE 0#define NOTDELIVERABLE 1#define RETRACTABLE 0#define NOTRETRACTABLE 1#define NOTRETRACTABLENE 2#define RHMFATALERROR -1/*---------------------------------------------------------------------------*/typedef unsigned long CoreRetractionNumber;/*---------------------------------------------------------------------------*/typedef struct{ CoreRetractionNumber rn; unsigned long fedID;}CoreRetractionHandle;/*---------------------------------------------------------------------------*/typedef struct{ CoreRetractionHandle rh; TM_Time ts; MCAST_Handle mh;}CoreRetractInfo;/*---------------------------------------------------------------------------*//* Macros to make RetractionID network safe.*/#define hton_RetractionID(/*RetractionID **/_r) ((*(_r)) = htonl(*(_r)))#define ntoh_RetractionID(/*RetractionID **/_r) ((*(_r)) = ntohl(*(_r)))/*---------------------------------------------------------------------------*//* Prototypes of functions the RTI must register with RTI Core*/typedef fdkErrorCode (*DeliverOneMessageProc)(TM_Time, char *, long, long);typedef fdkErrorCode (*DeliverROEventsProc)(void);typedef fdkErrorCode (*DeliverTSOEventsProc)(TM_Time);typedef void (*TimeAdvanceGrantProc)(TM_Time);typedef TM_Time (*TSOMinProc)(void);typedef char * (*TSOPopProc)(TM_Time *, long *, long *);/*---------------------------------------------------------------------------*//* ID Functions*/int Core_nodeID(void);int Core_federateID(void);/*---------------------------------------------------------------------------*//* Time Managment Functions */fdkErrorCode Core_InitRTI(void);fdkErrorCode Core_InitDebug(FILE *fout); fdkErrorCode Core_RegisterDeliverOneMessage(DeliverOneMessageProc p);fdkErrorCode Core_RegisterDeliverROEvents(DeliverROEventsProc p);fdkErrorCode Core_RegisterDeliverTSOEvents(DeliverTSOEventsProc p);fdkErrorCode Core_RegisterTimeAdvanceGrant(TimeAdvanceGrantProc p);fdkErrorCode Core_RegisterTSOMin(TSOMinProc p);fdkErrorCode Core_RegisterTSOPop(TSOPopProc p);TM_Time Core_GetCurrentTime(void);TM_TimeQual Core_GetCurrentQual(void);TM_Time Core_GetLookAhead(void);TM_Time Core_GetLBTS(void);fdkErrorCode Core_SetLookAhead(TM_Time newLA);int Core_ValidateTimestamp(TM_Time timestamp);void Core_ConsiderIncomingTSOMsg(TM_Time msg_ts,TM_TagType tm_tag);/*KALYAN*/void Core_ConsiderOutgoingTSOMsg(TM_Time msg_ts, int count); /*KALYAN*/fdkErrorCode Core_TSOifyGroup(MCAST_Handle handle); /*KALYAN*/fdkErrorCode Core_FinalizeTopology(void); /*KALYAN*/fdkErrorCode Core_DisableLBTS (void);fdkErrorCode Core_EnableLBTS (void);fdkErrorCode Core_EnsureRequestTimeNotPast (TM_Time RequestTime); fdkErrorCode Core_EnsureRequestNotPending ();fdkErrorCode Core_NextEventRequest(TM_Time RequestTime);fdkErrorCode Core_NextEventRequestAvailable(TM_Time RequestTime);fdkErrorCode Core_TimeAdvanceRequest(TM_Time RequestTime);fdkErrorCode Core_TimeAdvanceRequestAvailable(TM_Time RequestTime);fdkErrorCode Core_FlushQueueRequest(TM_Time RequestTime);fdkErrorCode Core_tick(void);fdkErrorCode Core_PrintRTIState(FILE *out);/*----------------------------------------------------------------------------*//* General Retraction Handle Management Functions*/fdkErrorCode Core_InitRHMDebug(FILE *fout);/*----------------------------------------------------------------------------*//* Sender Retraction Handle Management Functions*/fdkErrorCode RHM_PutTag(TM_Time ts, MCAST_Handle mh, CoreRetractionHandle *rid);int RHM_IsRetractable(CoreRetractionHandle rID, CoreRetractInfo *ri);fdkErrorCode RHM_PrintSenderRetractionTable(FILE *out);/*----------------------------------------------------------------------------*//* Receiver Retraction Handle Management Functions*/fdkErrorCode RHM_In(CoreRetractionHandle rID, TM_Time ts, MCAST_Addr Msg, int MsgSize, long MsgType);int RHM_IsDeliverable(CoreRetractionHandle rID, MCAST_Addr *Msg, int *MsgSize);fdkErrorCode RHM_PrintReceiverRetractionTable(FILE *out);/*---------------------------------------------------------------------------*/#endif /* __RTICORE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -