reactor-c 1.0
C Runtime for Lingua Franca
Loading...
Searching...
No Matches
rti_common.h File Reference

Common declarations for runtime infrastructure (RTI) for scheduling enclaves and distributed Lingua Franca programs. More...

#include <errno.h>
#include <assert.h>
#include "low_level_platform.h"
#include "util.h"
#include "tag.h"
#include "tracepoint.h"

Go to the source code of this file.

Data Structures

struct  minimum_delay_t
 Struct for minimum delays from upstream nodes. More...
struct  rti_common_t
 Common RTI data structure for both remote standalone RTI and local RTI used in enclaved execution. More...
struct  scheduling_node_t
 Information about the scheduling nodes coordinated by the RTI. More...
struct  tag_advance_grant_t

Typedefs

typedef enum execution_mode_t execution_mode_t
 Mode of execution of a federate.
typedef struct minimum_delay_t minimum_delay_t
 Struct for minimum delays from upstream nodes.
typedef struct rti_common_t rti_common_t
 Common RTI data structure for both remote standalone RTI and local RTI used in enclaved execution.
typedef enum scheduling_node_state_t scheduling_node_state_t
 State of the scheduling node during execution.
typedef struct scheduling_node_t scheduling_node_t
 Information about the scheduling nodes coordinated by the RTI.

Enumerations

enum  execution_mode_t { FAST , REALTIME }
 Mode of execution of a federate. More...
enum  scheduling_node_state_t { NOT_CONNECTED , GRANTED , PENDING }
 State of the scheduling node during execution. More...

Functions

void _logical_tag_complete (scheduling_node_t *e, tag_t completed)
 Update the completed tag for the specified node.
tag_t downstream_next_event_tag (scheduling_node_t *node, uint16_t node_sending_new_net_id)
 Determine whether the specified scheduling node is needed to receive a downstream next event tag (DNET), and, if so, return the details.
tag_t earliest_future_incoming_message_tag (scheduling_node_t *e)
 Given a node (enclave or federate), find the tag of the earliest possible incoming message (EIMT) from upstream enclaves or federates, which will be the smallest upstream NET plus the least delay.
tag_t eimt_strict (scheduling_node_t *e)
 Given a node (enclave or federate), find the earliest incoming message tag (EIMT) from any immediately upstream node that is not part of zero-delay cycle (ZDC).
void free_scheduling_nodes (scheduling_node_t **scheduling_nodes, uint16_t number_of_scheduling_nodes)
 Free dynamically allocated memory on the scheduling nodes and the scheduling node array itself.
tag_t get_dnet_candidate (tag_t next_event_tag, tag_t minimum_delay)
 Find the tag g that is the latest tag that satisfies lf_tag_add(g, minimum_delay) < next_event_tag.
void initialize_rti_common (rti_common_t *rti_common)
 Initialize the fields of the rti_common struct.
void initialize_scheduling_node (scheduling_node_t *e, uint16_t id)
 Initialize the scheduling node with the specified ID.
void invalidate_min_delays ()
 Invalidate the min_delays, num_min_delays, and the fields that indicate cycles of all nodes.
bool is_in_cycle (scheduling_node_t *node)
 Return true if the node is in a cycle (possibly a zero-delay cycle).
bool is_in_zero_delay_cycle (scheduling_node_t *node)
 Return true if the node is in a zero-delay cycle.
void notify_advance_grant_if_safe (scheduling_node_t *e)
 Either send to a federate or unblock an enclave to give it a tag.
void notify_downstream_advance_grant_if_safe (scheduling_node_t *e, bool visited[])
 For all scheduling nodes downstream of the specified node, determine whether they should be notified of a TAG or PTAG and notify them if so.
void notify_downstream_next_event_tag (scheduling_node_t *e, tag_t tag)
 Notify a downstream next event tag (DNET) signal to the specified scheduling node.
void notify_provisional_tag_advance_grant (scheduling_node_t *e, tag_t tag)
 Notify a provisional tag advance grant (PTAG) message to the specified scheduling node.
void notify_tag_advance_grant (scheduling_node_t *e, tag_t tag)
 Notify a tag advance grant (TAG) message to the specified scheduling node.
tag_advance_grant_t tag_advance_grant_if_safe (scheduling_node_t *e)
 Determine whether the specified scheduling node is eligible for a tag advance grant, (TAG) and, if so, return the details.
void update_min_delays ()
 If necessary, update the min_delays and the fields that indicate cycles.
void update_scheduling_node_next_event_tag_locked (scheduling_node_t *e, tag_t next_event_tag)
 Update the next event tag of an scheduling node.

Detailed Description

Common declarations for runtime infrastructure (RTI) for scheduling enclaves and distributed Lingua Franca programs.

Author
Edward A. Lee
Soroush Bateni
Erling Jellum
Chadlia Jerad