+typedef struct s_smx_sem {
+ /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */
+ xbt_swag_t sleeping; /* list of sleeping process */
+ int capacity;
+ xbt_fifo_t actions; /* list of actions */
+ /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */
+
+} s_smx_sem_t;
+
+/******************************* Networking ***********************************/
+
+/** @brief Rendez-vous point datatype */
+typedef struct s_smx_rvpoint {
+ char *name;
+ smx_mutex_t read;
+ smx_mutex_t write;
+ xbt_fifo_t comm_fifo;
+ void *data;
+} s_smx_rvpoint_t;
+
+typedef struct s_smx_comm {
+
+
+ smx_comm_type_t type; /* Type of the communication (comm_send,comm_recv) */
+ smx_rdv_t rdv; /* Rendez-vous where the comm is queued */
+ smx_sem_t sem; /* Semaphore associated to the surf simulation */
+ int refcount; /* Number of processes involved in the cond */
+
+ /* Surf action data */
+ smx_process_t src_proc;
+ smx_process_t dst_proc;
+ smx_action_t src_timeout;
+ smx_action_t dst_timeout;
+ smx_action_t act;
+ double rate;
+ double task_size;
+
+ /* Data to be transfered */
+ void *src_buff;
+ void *dst_buff;
+ size_t src_buff_size;
+ size_t *dst_buff_size;
+ void *data; /* User data associated to communication */
+} s_smx_comm_t;
+
+void SIMIX_network_copy_data(smx_comm_t comm);
+smx_comm_t SIMIX_communication_new(smx_comm_type_t type);
+static inline void SIMIX_communication_use(smx_comm_t comm);
+static inline void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout);
+static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm);
+static inline void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm);
+