/* XML processor/application API for surf/simgrid.dtd.
- * Generated 2009/08/14 11:23:44.
+ * Generated 2009/09/09 17:39:05.
*
* This program was generated with the FleXML XML processor generator.
* FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved.
#ifndef _FLEXML_simgrid_H
#define _FLEXML_simgrid_H
-SG_BEGIN_DECL()
-
/* XML application entry points. */
-XBT_PUBLIC(void) STag_surfxml_platform(void);
-XBT_PUBLIC(void) ETag_surfxml_platform(void);
-XBT_PUBLIC(void) STag_surfxml_include(void);
-XBT_PUBLIC(void) ETag_surfxml_include(void);
-XBT_PUBLIC(void) STag_surfxml_trace(void);
-XBT_PUBLIC(void) ETag_surfxml_trace(void);
-XBT_PUBLIC(void) STag_surfxml_random(void);
-XBT_PUBLIC(void) ETag_surfxml_random(void);
-XBT_PUBLIC(void) STag_surfxml_trace_c_connect(void);
-XBT_PUBLIC(void) ETag_surfxml_trace_c_connect(void);
-XBT_PUBLIC(void) STag_surfxml_set(void);
-XBT_PUBLIC(void) ETag_surfxml_set(void);
-XBT_PUBLIC(void) STag_surfxml_foreach(void);
-XBT_PUBLIC(void) ETag_surfxml_foreach(void);
-XBT_PUBLIC(void) STag_surfxml_host(void);
-XBT_PUBLIC(void) ETag_surfxml_host(void);
-XBT_PUBLIC(void) STag_surfxml_prop(void);
-XBT_PUBLIC(void) ETag_surfxml_prop(void);
-XBT_PUBLIC(void) STag_surfxml_cluster(void);
-XBT_PUBLIC(void) ETag_surfxml_cluster(void);
-XBT_PUBLIC(void) STag_surfxml_router(void);
-XBT_PUBLIC(void) ETag_surfxml_router(void);
-XBT_PUBLIC(void) STag_surfxml_link(void);
-XBT_PUBLIC(void) ETag_surfxml_link(void);
-XBT_PUBLIC(void) STag_surfxml_route_c_multi(void);
-XBT_PUBLIC(void) ETag_surfxml_route_c_multi(void);
-XBT_PUBLIC(void) STag_surfxml_route(void);
-XBT_PUBLIC(void) ETag_surfxml_route(void);
-XBT_PUBLIC(void) STag_surfxml_link_c_ctn(void);
-XBT_PUBLIC(void) ETag_surfxml_link_c_ctn(void);
-XBT_PUBLIC(void) STag_surfxml_process(void);
-XBT_PUBLIC(void) ETag_surfxml_process(void);
-XBT_PUBLIC(void) STag_surfxml_argument(void);
-XBT_PUBLIC(void) ETag_surfxml_argument(void);
+XBT_PUBLIC(void ) STag_surfxml_platform(void);
+XBT_PUBLIC(void ) ETag_surfxml_platform(void);
+XBT_PUBLIC(void ) STag_surfxml_include(void);
+XBT_PUBLIC(void ) ETag_surfxml_include(void);
+XBT_PUBLIC(void ) STag_surfxml_trace(void);
+XBT_PUBLIC(void ) ETag_surfxml_trace(void);
+XBT_PUBLIC(void ) STag_surfxml_random(void);
+XBT_PUBLIC(void ) ETag_surfxml_random(void);
+XBT_PUBLIC(void ) STag_surfxml_trace_c_connect(void);
+XBT_PUBLIC(void ) ETag_surfxml_trace_c_connect(void);
+XBT_PUBLIC(void ) STag_surfxml_set(void);
+XBT_PUBLIC(void ) ETag_surfxml_set(void);
+XBT_PUBLIC(void ) STag_surfxml_foreach(void);
+XBT_PUBLIC(void ) ETag_surfxml_foreach(void);
+XBT_PUBLIC(void ) STag_surfxml_host(void);
+XBT_PUBLIC(void ) ETag_surfxml_host(void);
+XBT_PUBLIC(void ) STag_surfxml_prop(void);
+XBT_PUBLIC(void ) ETag_surfxml_prop(void);
+XBT_PUBLIC(void ) STag_surfxml_cluster(void);
+XBT_PUBLIC(void ) ETag_surfxml_cluster(void);
+XBT_PUBLIC(void ) STag_surfxml_router(void);
+XBT_PUBLIC(void ) ETag_surfxml_router(void);
+XBT_PUBLIC(void ) STag_surfxml_link(void);
+XBT_PUBLIC(void ) ETag_surfxml_link(void);
+XBT_PUBLIC(void ) STag_surfxml_route_c_multi(void);
+XBT_PUBLIC(void ) ETag_surfxml_route_c_multi(void);
+XBT_PUBLIC(void ) STag_surfxml_route(void);
+XBT_PUBLIC(void ) ETag_surfxml_route(void);
+XBT_PUBLIC(void ) STag_surfxml_link_c_ctn(void);
+XBT_PUBLIC(void ) ETag_surfxml_link_c_ctn(void);
+XBT_PUBLIC(void ) STag_surfxml_process(void);
+XBT_PUBLIC(void ) ETag_surfxml_process(void);
+XBT_PUBLIC(void ) STag_surfxml_argument(void);
+XBT_PUBLIC(void ) ETag_surfxml_argument(void);
/* XML application data. */
- typedef enum { AU_surfxml_random_generator,
- A_surfxml_random_generator_DRAND48,
- A_surfxml_random_generator_RAND
- } AT_surfxml_random_generator;
- typedef int AT_surfxml_prop_id;
+typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND } AT_surfxml_random_generator;
+typedef int AT_surfxml_prop_id;
#define AU_surfxml_prop_id NULL
- typedef int AT_surfxml_host_interference_recv;
+typedef int AT_surfxml_host_interference_recv;
#define AU_surfxml_host_interference_recv NULL
- typedef int AT_surfxml_host_id;
+typedef int AT_surfxml_host_id;
#define AU_surfxml_host_id NULL
- typedef int AT_surfxml_set_id;
+typedef int AT_surfxml_set_id;
#define AU_surfxml_set_id NULL
- typedef int AT_surfxml_link_latency_file;
+typedef int AT_surfxml_link_latency_file;
#define AU_surfxml_link_latency_file NULL
- typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,
- A_surfxml_host_state_OFF
- } AT_surfxml_host_state;
- typedef int AT_surfxml_host_interference_send_recv;
+typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state;
+typedef int AT_surfxml_host_interference_send_recv;
#define AU_surfxml_host_interference_send_recv NULL
- typedef int AT_surfxml_host_interference_send;
+typedef int AT_surfxml_host_interference_send;
#define AU_surfxml_host_interference_send NULL
- typedef int AT_surfxml_set_suffix;
+typedef int AT_surfxml_set_suffix;
#define AU_surfxml_set_suffix NULL
- typedef int AT_surfxml_route_impact_on_dst;
+typedef int AT_surfxml_route_impact_on_dst;
#define AU_surfxml_route_impact_on_dst NULL
- typedef int AT_surfxml_host_power;
+typedef int AT_surfxml_host_power;
#define AU_surfxml_host_power NULL
- typedef int AT_surfxml_router_id;
+typedef int AT_surfxml_router_id;
#define AU_surfxml_router_id NULL
- typedef int AT_surfxml_process_start_time;
+typedef int AT_surfxml_process_start_time;
#define AU_surfxml_process_start_time NULL
- typedef int AT_surfxml_cluster_suffix;
+typedef int AT_surfxml_cluster_suffix;
#define AU_surfxml_cluster_suffix NULL
- typedef int AT_surfxml_platform_xmlns_c_route;
+typedef int AT_surfxml_platform_xmlns_c_route;
#define AU_surfxml_platform_xmlns_c_route NULL
- typedef int AT_surfxml_cluster_prefix;
+typedef int AT_surfxml_cluster_prefix;
#define AU_surfxml_cluster_prefix NULL
- typedef int AT_surfxml_trace_file;
+typedef int AT_surfxml_trace_file;
#define AU_surfxml_trace_file NULL
- typedef enum { AU_surfxml_route_action, A_surfxml_route_action_POSTPEND,
- A_surfxml_route_action_PREPEND,
- A_surfxml_route_action_OVERRIDE
- } AT_surfxml_route_action;
- typedef enum { AU_surfxml_link_sharing_policy,
- A_surfxml_link_sharing_policy_SHARED,
- A_surfxml_link_sharing_policy_FATPIPE
- } AT_surfxml_link_sharing_policy;
- typedef int AT_surfxml_random_min;
+typedef enum { AU_surfxml_route_action, A_surfxml_route_action_POSTPEND,A_surfxml_route_action_PREPEND,A_surfxml_route_action_OVERRIDE } AT_surfxml_route_action;
+typedef enum { AU_surfxml_link_sharing_policy, A_surfxml_link_sharing_policy_SHARED,A_surfxml_link_sharing_policy_FATPIPE } AT_surfxml_link_sharing_policy;
+typedef int AT_surfxml_random_min;
#define AU_surfxml_random_min NULL
- typedef int AT_surfxml_process_kill_time;
+typedef int AT_surfxml_process_kill_time;
#define AU_surfxml_process_kill_time NULL
- typedef int AT_surfxml_cluster_bb_bw;
+typedef int AT_surfxml_cluster_bb_bw;
#define AU_surfxml_cluster_bb_bw NULL
- typedef int AT_surfxml_trace_c_connect_element;
+typedef int AT_surfxml_trace_c_connect_element;
#define AU_surfxml_trace_c_connect_element NULL
- typedef int AT_surfxml_argument_value;
+typedef int AT_surfxml_argument_value;
#define AU_surfxml_argument_value NULL
- typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,
- A_surfxml_link_state_OFF
- } AT_surfxml_link_state;
- typedef int AT_surfxml_route_impact_on_src;
+typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state;
+typedef int AT_surfxml_route_impact_on_src;
#define AU_surfxml_route_impact_on_src NULL
- typedef int AT_surfxml_link_bandwidth;
+typedef int AT_surfxml_link_bandwidth;
#define AU_surfxml_link_bandwidth NULL
- typedef int AT_surfxml_cluster_id;
+typedef int AT_surfxml_cluster_id;
#define AU_surfxml_cluster_id NULL
- typedef int AT_surfxml_random_mean;
+typedef int AT_surfxml_random_mean;
#define AU_surfxml_random_mean NULL
- typedef int AT_surfxml_cluster_bb_lat;
+typedef int AT_surfxml_cluster_bb_lat;
#define AU_surfxml_cluster_bb_lat NULL
- typedef int AT_surfxml_link_latency;
+typedef int AT_surfxml_link_latency;
#define AU_surfxml_link_latency NULL
- typedef int AT_surfxml_platform_xmlns_c_link;
+typedef int AT_surfxml_platform_xmlns_c_link;
#define AU_surfxml_platform_xmlns_c_link NULL
- typedef int AT_surfxml_link_bandwidth_file;
+typedef int AT_surfxml_link_bandwidth_file;
#define AU_surfxml_link_bandwidth_file NULL
- typedef int AT_surfxml_random_id;
+typedef int AT_surfxml_random_id;
#define AU_surfxml_random_id NULL
- typedef int AT_surfxml_set_radical;
+typedef int AT_surfxml_set_radical;
#define AU_surfxml_set_radical NULL
- typedef int AT_surfxml_random_max;
+typedef int AT_surfxml_random_max;
#define AU_surfxml_random_max NULL
- typedef int AT_surfxml_link_id;
+typedef int AT_surfxml_link_id;
#define AU_surfxml_link_id NULL
- typedef int AT_surfxml_process_host;
+typedef int AT_surfxml_process_host;
#define AU_surfxml_process_host NULL
- typedef int AT_surfxml_host_availability_file;
+typedef int AT_surfxml_host_availability_file;
#define AU_surfxml_host_availability_file NULL
- typedef int AT_surfxml_cluster_lat;
+typedef int AT_surfxml_cluster_lat;
#define AU_surfxml_cluster_lat NULL
- typedef int AT_surfxml_trace_periodicity;
+typedef int AT_surfxml_trace_periodicity;
#define AU_surfxml_trace_periodicity NULL
- typedef int AT_surfxml_foreach_set_id;
+typedef int AT_surfxml_foreach_set_id;
#define AU_surfxml_foreach_set_id NULL
- typedef int AT_surfxml_route_impact_on_dst_with_other_send;
+typedef int AT_surfxml_route_impact_on_dst_with_other_send;
#define AU_surfxml_route_impact_on_dst_with_other_send NULL
- typedef int AT_surfxml_prop_value;
+typedef int AT_surfxml_prop_value;
#define AU_surfxml_prop_value NULL
- typedef int AT_surfxml_route_impact_on_src_with_other_recv;
+typedef int AT_surfxml_route_impact_on_src_with_other_recv;
#define AU_surfxml_route_impact_on_src_with_other_recv NULL
- typedef int AT_surfxml_trace_timestep;
+typedef int AT_surfxml_trace_timestep;
#define AU_surfxml_trace_timestep NULL
- typedef int AT_surfxml_link_state_file;
+typedef int AT_surfxml_link_state_file;
#define AU_surfxml_link_state_file NULL
- typedef int AT_surfxml_set_prefix;
+typedef int AT_surfxml_set_prefix;
#define AU_surfxml_set_prefix NULL
- typedef int AT_surfxml_cluster_power;
+typedef int AT_surfxml_cluster_power;
#define AU_surfxml_cluster_power NULL
- typedef int AT_surfxml_process_function;
+typedef int AT_surfxml_process_function;
#define AU_surfxml_process_function NULL
- typedef int AT_surfxml_host_max_outgoing_rate;
+typedef int AT_surfxml_host_max_outgoing_rate;
#define AU_surfxml_host_max_outgoing_rate NULL
- typedef int AT_surfxml_link_c_ctn_id;
+typedef int AT_surfxml_link_c_ctn_id;
#define AU_surfxml_link_c_ctn_id NULL
- typedef int AT_surfxml_host_availability;
+typedef int AT_surfxml_host_availability;
#define AU_surfxml_host_availability NULL
- typedef int AT_surfxml_route_src;
+typedef int AT_surfxml_route_src;
#define AU_surfxml_route_src NULL
- typedef int AT_surfxml_route_c_multi_src;
+typedef int AT_surfxml_route_c_multi_src;
#define AU_surfxml_route_c_multi_src NULL
- typedef enum { AU_surfxml_route_c_multi_action,
- A_surfxml_route_c_multi_action_POSTPEND,
- A_surfxml_route_c_multi_action_PREPEND,
- A_surfxml_route_c_multi_action_OVERRIDE
- } AT_surfxml_route_c_multi_action;
- typedef int AT_surfxml_trace_c_connect_trace;
+typedef enum { AU_surfxml_route_c_multi_action, A_surfxml_route_c_multi_action_POSTPEND,A_surfxml_route_c_multi_action_PREPEND,A_surfxml_route_c_multi_action_OVERRIDE } AT_surfxml_route_c_multi_action;
+typedef int AT_surfxml_trace_c_connect_trace;
#define AU_surfxml_trace_c_connect_trace NULL
- typedef int AT_surfxml_trace_id;
+typedef int AT_surfxml_trace_id;
#define AU_surfxml_trace_id NULL
- typedef int AT_surfxml_cluster_radical;
+typedef int AT_surfxml_cluster_radical;
#define AU_surfxml_cluster_radical NULL
- typedef int AT_surfxml_include_file;
+typedef int AT_surfxml_include_file;
#define AU_surfxml_include_file NULL
- typedef int AT_surfxml_random_std_deviation;
+typedef int AT_surfxml_random_std_deviation;
#define AU_surfxml_random_std_deviation NULL
- typedef enum { AU_surfxml_trace_c_connect_kind,
- A_surfxml_trace_c_connect_kind_HOST_AVAIL,
- A_surfxml_trace_c_connect_kind_POWER,
- A_surfxml_trace_c_connect_kind_LINK_AVAIL,
- A_surfxml_trace_c_connect_kind_BANDWIDTH,
- A_surfxml_trace_c_connect_kind_LATENCY
- } AT_surfxml_trace_c_connect_kind;
- typedef int AT_surfxml_route_c_multi_dst;
+typedef enum { AU_surfxml_trace_c_connect_kind, A_surfxml_trace_c_connect_kind_HOST_AVAIL,A_surfxml_trace_c_connect_kind_POWER,A_surfxml_trace_c_connect_kind_LINK_AVAIL,A_surfxml_trace_c_connect_kind_BANDWIDTH,A_surfxml_trace_c_connect_kind_LATENCY } AT_surfxml_trace_c_connect_kind;
+typedef int AT_surfxml_route_c_multi_dst;
#define AU_surfxml_route_c_multi_dst NULL
- typedef int AT_surfxml_host_state_file;
+typedef int AT_surfxml_host_state_file;
#define AU_surfxml_host_state_file NULL
- typedef enum { AU_surfxml_route_c_multi_symmetric,
- A_surfxml_route_c_multi_symmetric_YES,
- A_surfxml_route_c_multi_symmetric_NO
- } AT_surfxml_route_c_multi_symmetric;
- typedef int AT_surfxml_route_dst;
+typedef enum { AU_surfxml_route_c_multi_symmetric, A_surfxml_route_c_multi_symmetric_YES,A_surfxml_route_c_multi_symmetric_NO } AT_surfxml_route_c_multi_symmetric;
+typedef int AT_surfxml_route_dst;
#define AU_surfxml_route_dst NULL
- typedef int AT_surfxml_cluster_bw;
+typedef int AT_surfxml_cluster_bw;
#define AU_surfxml_cluster_bw NULL
- typedef int AT_surfxml_platform_version;
+typedef int AT_surfxml_platform_version;
#define AU_surfxml_platform_version NULL
/* FleXML-provided data. */
-XBT_PUBLIC_DATA(int) surfxml_pcdata_ix;
+XBT_PUBLIC_DATA(int ) surfxml_pcdata_ix;
XBT_PUBLIC_DATA(char *) surfxml_bufferstack;
#define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix)
-XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator;
+XBT_PUBLIC_DATA(AT_surfxml_random_generator ) AX_surfxml_random_generator;
#define A_surfxml_random_generator AX_surfxml_random_generator
-XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id;
+XBT_PUBLIC_DATA(AT_surfxml_prop_id ) AX_surfxml_prop_id;
#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
-XBT_PUBLIC_DATA(AT_surfxml_host_interference_recv)
- AX_surfxml_host_interference_recv;
+XBT_PUBLIC_DATA(AT_surfxml_host_interference_recv ) AX_surfxml_host_interference_recv;
#define A_surfxml_host_interference_recv (surfxml_bufferstack + AX_surfxml_host_interference_recv)
-XBT_PUBLIC_DATA(AT_surfxml_host_id) AX_surfxml_host_id;
+XBT_PUBLIC_DATA(AT_surfxml_host_id ) AX_surfxml_host_id;
#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
-XBT_PUBLIC_DATA(AT_surfxml_set_id) AX_surfxml_set_id;
+XBT_PUBLIC_DATA(AT_surfxml_set_id ) AX_surfxml_set_id;
#define A_surfxml_set_id (surfxml_bufferstack + AX_surfxml_set_id)
-XBT_PUBLIC_DATA(AT_surfxml_link_latency_file) AX_surfxml_link_latency_file;
+XBT_PUBLIC_DATA(AT_surfxml_link_latency_file ) AX_surfxml_link_latency_file;
#define A_surfxml_link_latency_file (surfxml_bufferstack + AX_surfxml_link_latency_file)
-XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
+XBT_PUBLIC_DATA(AT_surfxml_host_state ) AX_surfxml_host_state;
#define A_surfxml_host_state AX_surfxml_host_state
-XBT_PUBLIC_DATA(AT_surfxml_host_interference_send_recv)
- AX_surfxml_host_interference_send_recv;
+XBT_PUBLIC_DATA(AT_surfxml_host_interference_send_recv ) AX_surfxml_host_interference_send_recv;
#define A_surfxml_host_interference_send_recv (surfxml_bufferstack + AX_surfxml_host_interference_send_recv)
-XBT_PUBLIC_DATA(AT_surfxml_host_interference_send)
- AX_surfxml_host_interference_send;
+XBT_PUBLIC_DATA(AT_surfxml_host_interference_send ) AX_surfxml_host_interference_send;
#define A_surfxml_host_interference_send (surfxml_bufferstack + AX_surfxml_host_interference_send)
-XBT_PUBLIC_DATA(AT_surfxml_set_suffix) AX_surfxml_set_suffix;
+XBT_PUBLIC_DATA(AT_surfxml_set_suffix ) AX_surfxml_set_suffix;
#define A_surfxml_set_suffix (surfxml_bufferstack + AX_surfxml_set_suffix)
-XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_dst)
- AX_surfxml_route_impact_on_dst;
+XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_dst ) AX_surfxml_route_impact_on_dst;
#define A_surfxml_route_impact_on_dst (surfxml_bufferstack + AX_surfxml_route_impact_on_dst)
-XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power;
+XBT_PUBLIC_DATA(AT_surfxml_host_power ) AX_surfxml_host_power;
#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
-XBT_PUBLIC_DATA(AT_surfxml_router_id) AX_surfxml_router_id;
+XBT_PUBLIC_DATA(AT_surfxml_router_id ) AX_surfxml_router_id;
#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
-XBT_PUBLIC_DATA(AT_surfxml_process_start_time) AX_surfxml_process_start_time;
+XBT_PUBLIC_DATA(AT_surfxml_process_start_time ) AX_surfxml_process_start_time;
#define A_surfxml_process_start_time (surfxml_bufferstack + AX_surfxml_process_start_time)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix) AX_surfxml_cluster_suffix;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix ) AX_surfxml_cluster_suffix;
#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
-XBT_PUBLIC_DATA(AT_surfxml_platform_xmlns_c_route)
- AX_surfxml_platform_xmlns_c_route;
+XBT_PUBLIC_DATA(AT_surfxml_platform_xmlns_c_route ) AX_surfxml_platform_xmlns_c_route;
#define A_surfxml_platform_xmlns_c_route (surfxml_bufferstack + AX_surfxml_platform_xmlns_c_route)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix ) AX_surfxml_cluster_prefix;
#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
-XBT_PUBLIC_DATA(AT_surfxml_trace_file) AX_surfxml_trace_file;
+XBT_PUBLIC_DATA(AT_surfxml_trace_file ) AX_surfxml_trace_file;
#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
-XBT_PUBLIC_DATA(AT_surfxml_route_action) AX_surfxml_route_action;
+XBT_PUBLIC_DATA(AT_surfxml_route_action ) AX_surfxml_route_action;
#define A_surfxml_route_action AX_surfxml_route_action
-XBT_PUBLIC_DATA(AT_surfxml_link_sharing_policy)
- AX_surfxml_link_sharing_policy;
+XBT_PUBLIC_DATA(AT_surfxml_link_sharing_policy ) AX_surfxml_link_sharing_policy;
#define A_surfxml_link_sharing_policy AX_surfxml_link_sharing_policy
-XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min;
+XBT_PUBLIC_DATA(AT_surfxml_random_min ) AX_surfxml_random_min;
#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
-XBT_PUBLIC_DATA(AT_surfxml_process_kill_time) AX_surfxml_process_kill_time;
+XBT_PUBLIC_DATA(AT_surfxml_process_kill_time ) AX_surfxml_process_kill_time;
#define A_surfxml_process_kill_time (surfxml_bufferstack + AX_surfxml_process_kill_time)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb_bw) AX_surfxml_cluster_bb_bw;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb_bw ) AX_surfxml_cluster_bb_bw;
#define A_surfxml_cluster_bb_bw (surfxml_bufferstack + AX_surfxml_cluster_bb_bw)
-XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_element)
- AX_surfxml_trace_c_connect_element;
+XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_element ) AX_surfxml_trace_c_connect_element;
#define A_surfxml_trace_c_connect_element (surfxml_bufferstack + AX_surfxml_trace_c_connect_element)
-XBT_PUBLIC_DATA(AT_surfxml_argument_value) AX_surfxml_argument_value;
+XBT_PUBLIC_DATA(AT_surfxml_argument_value ) AX_surfxml_argument_value;
#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
-XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
+XBT_PUBLIC_DATA(AT_surfxml_link_state ) AX_surfxml_link_state;
#define A_surfxml_link_state AX_surfxml_link_state
-XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_src)
- AX_surfxml_route_impact_on_src;
+XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_src ) AX_surfxml_route_impact_on_src;
#define A_surfxml_route_impact_on_src (surfxml_bufferstack + AX_surfxml_route_impact_on_src)
-XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth;
+XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth ) AX_surfxml_link_bandwidth;
#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_id ) AX_surfxml_cluster_id;
#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
-XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean;
+XBT_PUBLIC_DATA(AT_surfxml_random_mean ) AX_surfxml_random_mean;
#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb_lat) AX_surfxml_cluster_bb_lat;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb_lat ) AX_surfxml_cluster_bb_lat;
#define A_surfxml_cluster_bb_lat (surfxml_bufferstack + AX_surfxml_cluster_bb_lat)
-XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency;
+XBT_PUBLIC_DATA(AT_surfxml_link_latency ) AX_surfxml_link_latency;
#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
-XBT_PUBLIC_DATA(AT_surfxml_platform_xmlns_c_link)
- AX_surfxml_platform_xmlns_c_link;
+XBT_PUBLIC_DATA(AT_surfxml_platform_xmlns_c_link ) AX_surfxml_platform_xmlns_c_link;
#define A_surfxml_platform_xmlns_c_link (surfxml_bufferstack + AX_surfxml_platform_xmlns_c_link)
-XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth_file)
- AX_surfxml_link_bandwidth_file;
+XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth_file ) AX_surfxml_link_bandwidth_file;
#define A_surfxml_link_bandwidth_file (surfxml_bufferstack + AX_surfxml_link_bandwidth_file)
-XBT_PUBLIC_DATA(AT_surfxml_random_id) AX_surfxml_random_id;
+XBT_PUBLIC_DATA(AT_surfxml_random_id ) AX_surfxml_random_id;
#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
-XBT_PUBLIC_DATA(AT_surfxml_set_radical) AX_surfxml_set_radical;
+XBT_PUBLIC_DATA(AT_surfxml_set_radical ) AX_surfxml_set_radical;
#define A_surfxml_set_radical (surfxml_bufferstack + AX_surfxml_set_radical)
-XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max;
+XBT_PUBLIC_DATA(AT_surfxml_random_max ) AX_surfxml_random_max;
#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
-XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id;
+XBT_PUBLIC_DATA(AT_surfxml_link_id ) AX_surfxml_link_id;
#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
-XBT_PUBLIC_DATA(AT_surfxml_process_host) AX_surfxml_process_host;
+XBT_PUBLIC_DATA(AT_surfxml_process_host ) AX_surfxml_process_host;
#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
-XBT_PUBLIC_DATA(AT_surfxml_host_availability_file)
- AX_surfxml_host_availability_file;
+XBT_PUBLIC_DATA(AT_surfxml_host_availability_file ) AX_surfxml_host_availability_file;
#define A_surfxml_host_availability_file (surfxml_bufferstack + AX_surfxml_host_availability_file)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_lat) AX_surfxml_cluster_lat;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_lat ) AX_surfxml_cluster_lat;
#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
-XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity;
+XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity ) AX_surfxml_trace_periodicity;
#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
-XBT_PUBLIC_DATA(AT_surfxml_foreach_set_id) AX_surfxml_foreach_set_id;
+XBT_PUBLIC_DATA(AT_surfxml_foreach_set_id ) AX_surfxml_foreach_set_id;
#define A_surfxml_foreach_set_id (surfxml_bufferstack + AX_surfxml_foreach_set_id)
-XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_dst_with_other_send)
- AX_surfxml_route_impact_on_dst_with_other_send;
+XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_dst_with_other_send ) AX_surfxml_route_impact_on_dst_with_other_send;
#define A_surfxml_route_impact_on_dst_with_other_send (surfxml_bufferstack + AX_surfxml_route_impact_on_dst_with_other_send)
-XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value;
+XBT_PUBLIC_DATA(AT_surfxml_prop_value ) AX_surfxml_prop_value;
#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
-XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_src_with_other_recv)
- AX_surfxml_route_impact_on_src_with_other_recv;
+XBT_PUBLIC_DATA(AT_surfxml_route_impact_on_src_with_other_recv ) AX_surfxml_route_impact_on_src_with_other_recv;
#define A_surfxml_route_impact_on_src_with_other_recv (surfxml_bufferstack + AX_surfxml_route_impact_on_src_with_other_recv)
-XBT_PUBLIC_DATA(AT_surfxml_trace_timestep) AX_surfxml_trace_timestep;
+XBT_PUBLIC_DATA(AT_surfxml_trace_timestep ) AX_surfxml_trace_timestep;
#define A_surfxml_trace_timestep (surfxml_bufferstack + AX_surfxml_trace_timestep)
-XBT_PUBLIC_DATA(AT_surfxml_link_state_file) AX_surfxml_link_state_file;
+XBT_PUBLIC_DATA(AT_surfxml_link_state_file ) AX_surfxml_link_state_file;
#define A_surfxml_link_state_file (surfxml_bufferstack + AX_surfxml_link_state_file)
-XBT_PUBLIC_DATA(AT_surfxml_set_prefix) AX_surfxml_set_prefix;
+XBT_PUBLIC_DATA(AT_surfxml_set_prefix ) AX_surfxml_set_prefix;
#define A_surfxml_set_prefix (surfxml_bufferstack + AX_surfxml_set_prefix)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_power) AX_surfxml_cluster_power;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_power ) AX_surfxml_cluster_power;
#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
-XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function;
+XBT_PUBLIC_DATA(AT_surfxml_process_function ) AX_surfxml_process_function;
#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
-XBT_PUBLIC_DATA(AT_surfxml_host_max_outgoing_rate)
- AX_surfxml_host_max_outgoing_rate;
+XBT_PUBLIC_DATA(AT_surfxml_host_max_outgoing_rate ) AX_surfxml_host_max_outgoing_rate;
#define A_surfxml_host_max_outgoing_rate (surfxml_bufferstack + AX_surfxml_host_max_outgoing_rate)
-XBT_PUBLIC_DATA(AT_surfxml_link_c_ctn_id) AX_surfxml_link_c_ctn_id;
+XBT_PUBLIC_DATA(AT_surfxml_link_c_ctn_id ) AX_surfxml_link_c_ctn_id;
#define A_surfxml_link_c_ctn_id (surfxml_bufferstack + AX_surfxml_link_c_ctn_id)
-XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability;
+XBT_PUBLIC_DATA(AT_surfxml_host_availability ) AX_surfxml_host_availability;
#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src;
+XBT_PUBLIC_DATA(AT_surfxml_route_src ) AX_surfxml_route_src;
#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
-XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_src) AX_surfxml_route_c_multi_src;
+XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_src ) AX_surfxml_route_c_multi_src;
#define A_surfxml_route_c_multi_src (surfxml_bufferstack + AX_surfxml_route_c_multi_src)
-XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_action)
- AX_surfxml_route_c_multi_action;
+XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_action ) AX_surfxml_route_c_multi_action;
#define A_surfxml_route_c_multi_action AX_surfxml_route_c_multi_action
-XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_trace)
- AX_surfxml_trace_c_connect_trace;
+XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_trace ) AX_surfxml_trace_c_connect_trace;
#define A_surfxml_trace_c_connect_trace (surfxml_bufferstack + AX_surfxml_trace_c_connect_trace)
-XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id;
+XBT_PUBLIC_DATA(AT_surfxml_trace_id ) AX_surfxml_trace_id;
#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_radical) AX_surfxml_cluster_radical;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_radical ) AX_surfxml_cluster_radical;
#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
-XBT_PUBLIC_DATA(AT_surfxml_include_file) AX_surfxml_include_file;
+XBT_PUBLIC_DATA(AT_surfxml_include_file ) AX_surfxml_include_file;
#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
-XBT_PUBLIC_DATA(AT_surfxml_random_std_deviation)
- AX_surfxml_random_std_deviation;
+XBT_PUBLIC_DATA(AT_surfxml_random_std_deviation ) AX_surfxml_random_std_deviation;
#define A_surfxml_random_std_deviation (surfxml_bufferstack + AX_surfxml_random_std_deviation)
-XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_kind)
- AX_surfxml_trace_c_connect_kind;
+XBT_PUBLIC_DATA(AT_surfxml_trace_c_connect_kind ) AX_surfxml_trace_c_connect_kind;
#define A_surfxml_trace_c_connect_kind AX_surfxml_trace_c_connect_kind
-XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_dst) AX_surfxml_route_c_multi_dst;
+XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_dst ) AX_surfxml_route_c_multi_dst;
#define A_surfxml_route_c_multi_dst (surfxml_bufferstack + AX_surfxml_route_c_multi_dst)
-XBT_PUBLIC_DATA(AT_surfxml_host_state_file) AX_surfxml_host_state_file;
+XBT_PUBLIC_DATA(AT_surfxml_host_state_file ) AX_surfxml_host_state_file;
#define A_surfxml_host_state_file (surfxml_bufferstack + AX_surfxml_host_state_file)
-XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_symmetric)
- AX_surfxml_route_c_multi_symmetric;
+XBT_PUBLIC_DATA(AT_surfxml_route_c_multi_symmetric ) AX_surfxml_route_c_multi_symmetric;
#define A_surfxml_route_c_multi_symmetric AX_surfxml_route_c_multi_symmetric
-XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst;
+XBT_PUBLIC_DATA(AT_surfxml_route_dst ) AX_surfxml_route_dst;
#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bw) AX_surfxml_cluster_bw;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bw ) AX_surfxml_cluster_bw;
#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
-XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version;
+XBT_PUBLIC_DATA(AT_surfxml_platform_version ) AX_surfxml_platform_version;
#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
/* XML application utilities. */
-XBT_PUBLIC(int) surfxml_element_context(int);
+XBT_PUBLIC(int ) surfxml_element_context(int);
/* XML processor entry point. */
-XBT_PUBLIC(int) yylex(void);
+XBT_PUBLIC(int ) yylex(void);
/* Flexml error handling function (useful only when -q flag passed to flexml) */
- const char *surfxml_parse_err_msg(void);
-
-SG_END_DECL()
+const char * surfxml_parse_err_msg(void);
#endif
--- /dev/null
+/* $Id$ */
+
+/* Copyright (c) 2009 Cristian Rosa.
+ All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include "private.h"
+#include "xbt/log.h"
+
+/******************************************************************************/
+/* Rendez-Vous Points */
+/******************************************************************************/
+
+/**
+ * \brief Creates a new rendez-vous point
+ * \param name The name of the rendez-vous point
+ * \return The created rendez-vous point
+ */
+smx_rvpoint_t SIMIX_rvpoint_create(char *name)
+{
+ smx_rvpoint_t rvp = xbt_new0(s_smx_rvpoint_t, 1);
+ rvp->name = xbt_strdup(name);
+ rvp->read = SIMIX_mutex_init();
+ rvp->write = SIMIX_mutex_init();
+ rvp->comm_mutex = SIMIX_mutex_init();
+ rvp->comm_fifo = xbt_fifo_new();
+
+ return rvp;
+}
+
+/**
+ * \brief Destroy a rendez-vous point
+ * \param name The rendez-vous point to destroy
+ */
+void SIMIX_rvpoint_destroy(smx_rvpoint_t rvp)
+{
+ xbt_free(rvp->name);
+ SIMIX_mutex_destroy(rvp->read);
+ SIMIX_mutex_destroy(rvp->write);
+ SIMIX_mutex_destroy(rvp->comm_mutex);
+ xbt_fifo_free(rvp->comm_fifo);
+ xbt_free(rvp);
+}
+
+/**
+ * \brief Push a communication request into a rendez-vous point
+ * The communications request are dequeued by the two functions below
+ * \param rvp The rendez-vous point
+ * \param comm The communication request
+ */
+static inline void SIMIX_rvpoint_push(smx_rvpoint_t rvp, smx_comm_t comm)
+{
+ xbt_fifo_push(rvp->comm_fifo, comm);
+}
+
+/**
+ * \brief Checks if there is a receive communication request queued in a rendez-vous
+ * \param rvp The rendez-vous with the queue
+ * \return The communication request if found, NULL otherwise.
+ */
+smx_comm_t SIMIX_rvpoint_get_receiver(smx_rvpoint_t rvp)
+{
+ /* Get a communication request from the rendez-vous queue. If it is a receive
+ request then return it, otherwise put it again in the queue and return NULL
+ */
+ smx_comm_t comm_head = xbt_fifo_shift(rvp->comm_fifo);
+
+ if(comm_head != NULL && comm_head->dst_host != NULL)
+ return comm_head;
+
+ xbt_fifo_unshift(rvp->comm_fifo, comm_head);
+ return NULL;
+}
+
+/**
+ * \brief Checks if there is a send communication request queued in a rendez-vous
+ * \param rvp The rendez-vous with the queue
+ * \return The communication request if found, NULL otherwise.
+ */
+smx_comm_t SIMIX_rvpoint_get_sender(smx_rvpoint_t rvp)
+{
+ /* Get a communication request from the rendez-vous queue. If it is a send
+ request then return it, otherwise put it again in the queue and return NULL
+ */
+ smx_comm_t comm_head = xbt_fifo_shift(rvp->comm_fifo);
+
+ if(comm_head != NULL && comm_head->src_host != NULL)
+ return comm_head;
+
+ xbt_fifo_unshift(rvp->comm_fifo, comm_head);
+ return NULL;
+}
+
+/**
+ * \brief Get the communication mutex of the rendez-vous point
+ * \param rvp The rendez-vous point
+ */
+static inline smx_mutex_t SIMIX_rvpoint_get_comm_mutex(smx_rvpoint_t rvp)
+{
+ return rvp->comm_mutex;
+}
+
+/******************************************************************************/
+/* Communication Requests */
+/******************************************************************************/
+
+/**
+ * \brief Creates a new communication request
+ * \param sender The process starting the communication (by send)
+ * \param receiver The process receiving the communication (by recv)
+ * \return the communication request
+ */
+smx_comm_t SIMIX_communication_new(smx_host_t src_host, smx_host_t dst_host,
+ smx_rvpoint_t rdv)
+{
+ /* alloc structures */
+ smx_comm_t comm = xbt_new0(s_smx_comm_t, 1);
+ comm->cond = SIMIX_cond_init();
+
+ /* initialize them */
+ comm->src_host = src_host;
+ comm->dst_host = dst_host;
+ comm->rdv = rdv;
+
+ return comm;
+}
+
+/**
+ * \brief Destroy a communication request
+ * \param comm The request to be destroyed
+ */
+void SIMIX_communication_destroy(smx_comm_t comm)
+{
+ comm->refcount--;
+ if(comm->refcount == 0){
+ if(comm->act != NULL)
+ SIMIX_action_destroy(comm->act);
+
+ if(comm->data != NULL)
+ xbt_free(comm->data);
+
+ xbt_free(comm->cond);
+ xbt_free(comm);
+ }
+}
+
+/**
+ * \brief Increase the number of users of the communication.
+ * \param comm The communication request
+ * Each communication request can be used by more than one process, so it is
+ * necessary to know number of them at destroy time, to avoid freeing stuff that
+ * maybe is in use by others.
+ * \
+ */
+static inline void SIMIX_communication_use(smx_comm_t comm)
+{
+ comm->refcount++;
+}
+
+/**
+ * \brief Start the simulation of a communication request
+ * \param comm The communicatino request
+ */
+static inline void SIMIX_communication_start(smx_comm_t comm)
+{
+ comm->act = SIMIX_action_communicate(comm->src_host, comm->dst_host, NULL,
+ comm->data_size, comm->rate);
+
+ SIMIX_register_action_to_condition(comm->act, comm->cond);
+ __SIMIX_cond_wait(comm->cond);
+ SIMIX_unregister_action_to_condition(comm->act, comm->cond);
+}
+
+/******************************************************************************/
+/* Synchronous Communication */
+/******************************************************************************/
+
+void SIMIX_network_send(smx_rvpoint_t rdv, void *data, size_t size, double timeout, double rate)
+{
+ /*double start_time = SIMIX_get_clock();*/
+ void *smx_net_data;
+ smx_host_t my_host = SIMIX_host_self();
+ smx_comm_t comm;
+ smx_mutex_t rvp_comm_mutex = SIMIX_rvpoint_get_comm_mutex(rdv);
+
+ /* Lock the rendez-vous point */
+ SIMIX_mutex_lock(rvp_comm_mutex);
+ /* Copy the message to the network */
+ /*FIXME here the MC should allocate the space from the network storage area */
+ smx_net_data = xbt_malloc(size);
+ memcpy(smx_net_data, data, size);
+
+ /* Check if there is already a receive waiting in the rendez-vous point */
+ if((comm = SIMIX_rvpoint_get_receiver(rdv)) != NULL){
+ comm->src_host = my_host;
+ comm->data = smx_net_data;
+ comm->data_size = size;
+ comm->rate = rate;
+ SIMIX_communication_use(comm);
+
+ /* Unlock the rendez-vous point and start the communication action.*/
+ /* FIXME: if the semantic is non blocking, it shouldn't wait on the condition here */
+ SIMIX_mutex_unlock(rvp_comm_mutex);
+ SIMIX_communication_start(comm);
+
+ /* Nobody is at the rendez-vous point, so push the comm action into it */
+ }else{
+ comm = SIMIX_communication_new(my_host, NULL, rdv);
+ comm->data = smx_net_data;
+ comm->data_size = size;
+ comm->rate = rate;
+ SIMIX_communication_use(comm);
+ SIMIX_rvpoint_push(rdv, comm);
+
+ /* Wait for communication completion */
+ /* FIXME: if the semantic is non blocking, it shouldn't wait on the condition here */
+ /* FIXME: add timeout checking stuff */
+ SIMIX_mutex_unlock (rvp_comm_mutex);
+ __SIMIX_cond_wait(comm->cond);
+ }
+
+ /* Check for errors */
+ if (SIMIX_host_get_state(comm->dst_host) == 0){
+ THROW1(host_error, 0, "Destination host %s failed", comm->dst_host->name);
+ }else if(SIMIX_action_get_state(comm->act) == SURF_ACTION_FAILED){
+ THROW0(network_error, 0, "Link failure");
+ }
+
+ SIMIX_communication_destroy(comm);
+ return;
+}
+
+void SIMIX_network_recv(smx_rvpoint_t rdv, void **data, size_t *size, double timeout)
+{
+ /*double start_time = SIMIX_get_clock();*/
+ smx_comm_t comm;
+ smx_host_t my_host = SIMIX_host_self();
+ smx_mutex_t rvp_comm_mutex = SIMIX_rvpoint_get_comm_mutex(rdv);
+
+ /* Lock the rendez-vous point */
+ SIMIX_mutex_lock(rvp_comm_mutex);
+
+ /* Check if there is already a send waiting in the rendez-vous point */
+ if((comm = SIMIX_rvpoint_get_sender(rdv)) != NULL){
+ comm->dst_host = my_host;
+ comm->dest_buff = data;
+ SIMIX_communication_use(comm);
+
+ /* Unlock the rendez-vous point and start the communication action.*/
+ /* FIXME: if the semantic is non blocking, it shouldn't wait on the condition here */
+ SIMIX_mutex_unlock(rvp_comm_mutex);
+ SIMIX_communication_start(comm);
+
+ /* Nobody is at the rendez-vous point, so push the comm action into it */
+ }else{
+ comm = SIMIX_communication_new(NULL, my_host, rdv);
+ comm->dest_buff = data;
+ SIMIX_communication_use(comm);
+ SIMIX_rvpoint_push(rdv, comm);
+
+ /* Wait for communication completion */
+ /* FIXME: if the semantic is non blocking, it shouldn't wait on the condition here */
+ /* FIXME: add timeout checking stuff*/
+ SIMIX_mutex_unlock (rvp_comm_mutex);
+ __SIMIX_cond_wait(comm->cond);
+ }
+
+ /* Check for errors */
+ if (SIMIX_host_get_state(comm->src_host) == 0){
+ THROW1(host_error, 0, "Source host %s failed", comm->src_host->name);
+ }else if(SIMIX_action_get_state(comm->act) == SURF_ACTION_FAILED){
+ THROW0(network_error, 0, "Link failure");
+ }
+
+ /* We are OK, let's copy the message to receiver's buffer */
+ *size = *size < comm->data_size ? *size : comm->data_size;
+ memcpy(*data, comm->data, *size);
+
+ SIMIX_communication_destroy(comm);
+ return;
+}
+
+/******************************************************************************/
+/* Asynchronous Communication */
+/******************************************************************************/
+
+/*
+void SIMIX_network_wait(smx_action_t comm, double timeout)
+{
+ if (timeout > 0)
+ SIMIX_cond_wait_timeout(rvp_cond, rvp_comm_mutex, timeout - start_time);
+ else
+ SIMIX_cond_wait(rvp_cond, rvp_comm_mutex);
+
+}
+
+
+XBT_PUBLIC(int) SIMIX_network_test(smx_action_t comm)
+{
+ if(SIMIX_action_get_state (comm) == SURF_ACTION_DONE){
+ memcpy(comm->data
+
+ return SIMIX_action_get_state (comm) == SURF_ACTION_DONE ? TRUE : FALSE;
+}*/
+
+
+
+
+
+
+