Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
authorAdrien Lebre <alebre@dhcp-2-16.rech172-28.emn.fr>
Mon, 8 Dec 2014 09:20:23 +0000 (10:20 +0100)
committerAdrien Lebre <alebre@dhcp-2-16.rech172-28.emn.fr>
Mon, 8 Dec 2014 09:20:23 +0000 (10:20 +0100)
93 files changed:
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/Distrib.cmake
buildtools/Cmake/MakeExe.cmake
doc/doxygen/options.doc
examples/msg/chord/chord.c
include/simgrid/modelchecker.h
include/surf/simgrid_dtd.h
include/xbt/graphxml.h
src/include/mc/datatypes.h
src/include/mc/mc.h
src/mc/mc_base.c [new file with mode: 0644]
src/mc/mc_base.h [new file with mode: 0644]
src/mc/mc_checkpoint.c
src/mc/mc_comm_determinism.c
src/mc/mc_comm_pattern.h [new file with mode: 0644]
src/mc/mc_compare.cpp
src/mc/mc_config.c
src/mc/mc_diff.c
src/mc/mc_dwarf.c
src/mc/mc_dwarf_expression.c
src/mc/mc_forward.h [new file with mode: 0644]
src/mc/mc_global.c
src/mc/mc_ignore.c
src/mc/mc_liveness.c
src/mc/mc_liveness.h [new file with mode: 0644]
src/mc/mc_location.h [new file with mode: 0644]
src/mc/mc_member.c
src/mc/mc_memory.c
src/mc/mc_memory_map.h [new file with mode: 0644]
src/mc/mc_mmalloc.h [new file with mode: 0644]
src/mc/mc_mmu.h
src/mc/mc_model_checker.h [new file with mode: 0644]
src/mc/mc_object_info.h [new file with mode: 0644]
src/mc/mc_page_snapshot.cpp
src/mc/mc_page_store.h
src/mc/mc_pair.c
src/mc/mc_private.h
src/mc/mc_record.c [new file with mode: 0644]
src/mc/mc_record.h [new file with mode: 0644]
src/mc/mc_request.c
src/mc/mc_request.h [new file with mode: 0644]
src/mc/mc_safety.c
src/mc/mc_safety.h [new file with mode: 0644]
src/mc/mc_snapshot.c
src/mc/mc_snapshot.h [new file with mode: 0644]
src/mc/mc_state.c
src/mc/mc_state.h [new file with mode: 0644]
src/mc/mc_visited.c
src/mc/memory_map.c
src/simdag/dax_dtd.c
src/simdag/dax_dtd.h
src/simgrid/sg_config.c
src/simix/libsmx.c
src/simix/popping_accessors.h
src/simix/popping_bodies.c
src/simix/popping_enum.h
src/simix/popping_generated.c
src/simix/popping_private.h
src/simix/simcalls.in
src/simix/simcalls.py
src/simix/smx_global.c
src/simix/smx_host.c
src/simix/smx_network.c
src/simix/smx_process.c
src/smpi/colls/allgatherv-mpich-rdb.c
src/smpi/instr_smpi.c
src/smpi/private.h
src/smpi/smpi_base.c
src/smpi/smpi_bench.c
src/smpi/smpi_f77.c
src/smpi/smpi_global.c
src/smpi/smpi_pmpi.c
src/smpi/smpi_rma.c
src/surf/simgrid_dtd.c
src/xbt/config.c
src/xbt/graphxml.c
src/xbt/mmalloc/mm_module.c
src/xbt/mmalloc/mmprivate.h
teshsuite/mc/dwarf/dwarf.c
teshsuite/mc/dwarf_expression/dwarf_expression.c
teshsuite/mc/replay/CMakeLists.txt [new file with mode: 0644]
teshsuite/mc/replay/random_bug.c [new file with mode: 0644]
teshsuite/mc/replay/random_bug.tesh [new file with mode: 0644]
teshsuite/mc/replay/random_bug.xml [new file with mode: 0644]
teshsuite/mc/replay/random_bug_replay.tesh [new file with mode: 0644]
teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/rma/testlist
teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/rma/testlist
teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/testlist
teshsuite/xbt/log_large/log_large_test.tesh

index a626862..e7c1838 100644 (file)
@@ -95,11 +95,15 @@ IF(NOT enable_memcheck)
   ENDIF()
   # END TESH TESTS
 
+  ADD_TESH(mc-replay-random-bug                  --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/replay --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay random_bug_replay.tesh)
+
   ### MC ###
   IF(HAVE_MC)
     ADD_TESH(tesh-mc-dwarf                       --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf dwarf.tesh)
     ADD_TESH(tesh-mc-dwarf-expression            --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf_expression --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf_expression dwarf_expression.tesh)
 
+    ADD_TESH(mc-record-random-bug                --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/replay --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay random_bug.tesh)
+
     ADD_TESH_FACTORIES(mc-bugged1                "ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1.tesh)
     ADD_TESH_FACTORIES(mc-bugged2                "ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged2.tesh)
     IF(CONTEXT_UCONTEXT AND PROCESSOR_x86_64) # liveness model-checking works only on 64bits (for now ...)
@@ -590,11 +594,13 @@ FOREACH (tesh
     no-error3
     no-error
     )
-  ADD_TESH(umpire_${tesh}
-    --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire
-    --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/isp/umpire
-    --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire
-    ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire/${tesh}.tesh)
+  IF(HAVE_MC)
+    ADD_TESH(mc-umpire-${tesh}
+      --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire
+      --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/isp/umpire
+      --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire
+      ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire/${tesh}.tesh)
+  ENDIF()
 ENDFOREACH()
 endif()
 
index fe63858..790a06d 100644 (file)
@@ -7,6 +7,7 @@ set(EXTRA_DIST
   src/include/mc/mc.h
   src/mc/mc_mmu.h
   src/mc/mc_page_store.h
+  src/mc/mc_record.h
   src/include/simgrid/platf_interface.h
   src/include/simgrid/sg_config.h
   src/include/smpi/smpi_interface.h
@@ -583,33 +584,54 @@ set(JEDULE_SRC
   src/instr/jedule/jedule_sd_binding.c
   )
 
+set(MC_SRC_BASE
+  src/mc/mc_base.c
+  src/mc/mc_base.h
+  src/mc/mc_record.h
+  src/mc/mc_record.c
+  src/mc/mc_config.c
+  src/mc/mc_global.c
+  )
+
 set(MC_SRC
+  src/mc/mc_forward.h
+  src/mc/mc_mmalloc.h
+  src/mc/mc_model_checker.h
+  src/mc/mc_object_info.h
   src/mc/mc_checkpoint.c
+  src/mc/mc_snapshot.h
   src/mc/mc_snapshot.c
+  src/mc/mc_page_store.h
   src/mc/mc_page_store.cpp
   src/mc/mc_page_snapshot.cpp
+  src/mc/mc_comm_pattern.h
   src/mc/mc_comm_determinism.c
   src/mc/mc_compare.cpp
-  src/mc/mc_config.c
   src/mc/mc_diff.c
   src/mc/mc_dwarf.c
   src/mc/mc_dwarf_attrnames.h
   src/mc/mc_dwarf_expression.c
   src/mc/mc_dwarf_tagnames.h
-  src/mc/mc_global.c
   src/mc/mc_hash.c
   src/mc/mc_ignore.c
   src/mc/mc_interface.h
+  src/mc/mc_liveness.h
+  src/mc/mc_location.h
   src/mc/mc_liveness.c
+  src/mc/mc_record.c
   src/mc/mc_member.c
   src/mc/mc_memory.c
   src/mc/mc_pair.c
   src/mc/mc_private.h
+  src/mc/mc_request.h
   src/mc/mc_request.c
+  src/mc/mc_safety.h
   src/mc/mc_safety.c
   src/mc/mc_set.cpp
+  src/mc/mc_state.h
   src/mc/mc_state.c
   src/mc/mc_visited.c
+  src/mc/mc_memory_map.h
   src/mc/memory_map.c
   )
 
@@ -760,6 +782,11 @@ else()
     )
 endif()
 
+set(simgrid_sources
+  ${simgrid_sources}
+  ${MC_SRC_BASE}
+  )
+
 if(HAVE_MC)
   set(simgrid_sources
     ${simgrid_sources}
@@ -1022,6 +1049,7 @@ set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/mc/CMakeLists.txt
   teshsuite/mc/dwarf/CMakeLists.txt
   teshsuite/mc/dwarf_expression/CMakeLists.txt
+  teshsuite/mc/replay/CMakeLists.txt
   teshsuite/msg/CMakeLists.txt
   teshsuite/msg/get_sender/CMakeLists.txt
   teshsuite/msg/host_on_off/CMakeLists.txt
index 1fcd9e2..428db7c 100644 (file)
@@ -203,6 +203,7 @@ set(source_to_pack
   ${JSURF_SWIG_SRC_EXTRA}
   ${JSURF_C_SRC}
   ${LUA_SRC}
+  ${MC_SRC_BASE}
   ${MC_SRC}
   ${MSG_SRC}
   ${NS3_SRC}
index 59ac10f..5cd1d98 100644 (file)
@@ -88,6 +88,7 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/java/sleep_host_off)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf_expression)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay)
 
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender)
index 6abd745..f8a018e 100644 (file)
@@ -306,7 +306,7 @@ void MC_assert(int prop);
 
 If you want to specify liveness properties (beware, that's
 experimental), you have to pass them on the command line, specifying
-the name of the file containing the property, as formated by the
+the name of the file containing the property, as formatted by the
 ltl2ba program.
 
 \verbatim
index a64b03a..96105a8 100644 (file)
@@ -297,7 +297,7 @@ int node(int argc, char *argv[])
 {
 
   /* Reduce the run size for the MC */
-  if(MC_is_active()){
+  if(MC_is_active() || MC_record_replay_is_active()){
     periodic_stabilize_delay = 8;
     periodic_fix_fingers_delay = 8;
     periodic_check_predecessor_delay = 8;
@@ -371,8 +371,8 @@ int node(int argc, char *argv[])
 
         // no task was received: make some periodic calls
 
-        if(MC_is_active()){
-          if(!MC_visited_reduction() && no_op){
+        if(MC_is_active() || MC_record_replay_is_active()){
+          if(MC_is_active() && !MC_visited_reduction() && no_op){
               MC_cut();
           }
           if(listen == 0 && (sub_protocol = MC_random(0, 4)) > 0){
index 34d9124..0d41344 100644 (file)
@@ -6,6 +6,8 @@
 /* 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 <stdbool.h>
+
 #include <simgrid_config.h> /* HAVE_MC ? */
 #include <xbt.h>
 #include "xbt/automaton.h"
@@ -15,6 +17,8 @@
 
 SG_BEGIN_DECL()
 
+XBT_PUBLIC(int) MC_random(int min, int max);
+
 #ifdef HAVE_MC
 
 extern int _sg_do_model_check; /* please don't use directly: we inline MC_is_active, but that's what you should use */
@@ -24,7 +28,6 @@ extern int _sg_mc_visited;
 #define MC_visited_reduction()          _sg_mc_visited
 
 XBT_PUBLIC(void) MC_assert(int);
-XBT_PUBLIC(int) MC_random(int min, int max);
 XBT_PUBLIC(void) MC_automaton_new_propositional_symbol(const char* id, void* fct);
 XBT_PUBLIC(void *) MC_snapshot(void);
 XBT_PUBLIC(int) MC_compare_snapshots(void *s1, void *s2);
@@ -37,7 +40,6 @@ XBT_PUBLIC(void) MC_ignore(void *addr, size_t size);
 #define MC_visited_reduction()          0
 
 #define MC_assert(a)                    xbt_assert(a)
-#define MC_random(a, b)                 0
 #define MC_automaton_new_propositional_symbol(a, b) ((void)0)
 #define MC_snapshot()                   ((void*)0)
 #define MC_compare_snapshots(a, b)      0
@@ -46,6 +48,17 @@ XBT_PUBLIC(void) MC_ignore(void *addr, size_t size);
 
 #endif
 
+/** Replay path (if any) in string representation
+ *
+ *  This is a path as generated by `MC_record_stack_to_string()`.
+ */
+XBT_PUBLIC_DATA(char*) MC_record_path;
+
+/** Whether the replay mode is enabled */
+static inline bool MC_record_replay_is_active(void) {
+  return MC_record_path;
+}
+
 SG_END_DECL()
 
 #endif /* SIMGRID_MODELCHECKER_H */
index b99eacc..ff38c62 100644 (file)
@@ -108,598 +108,598 @@ XBT_PUBLIC(void) STag_surfxml_model___prop(void);
 XBT_PUBLIC(void) ETag_surfxml_model___prop(void);
 
 /* XML application data. */
-typedef int AT_surfxml_bypassASroute_dst;
-#define AU_surfxml_bypassASroute_dst NULL
-typedef int AT_surfxml_link_latency___file;
-#define AU_surfxml_link_latency___file NULL
-typedef int AT_surfxml_prop_value;
-#define AU_surfxml_prop_value NULL
+typedef int AT_surfxml_mstorage_typeId;
+#define AU_surfxml_mstorage_typeId NULL
+typedef int AT_surfxml_peer_state___file;
+#define AU_surfxml_peer_state___file NULL
+typedef int AT_surfxml_cluster_limiter___link;
+#define AU_surfxml_cluster_limiter___link NULL
+typedef int AT_surfxml_storage___type_content;
+#define AU_surfxml_storage___type_content NULL
+typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical;
+typedef int AT_surfxml_storage_content___type;
+#define AU_surfxml_storage_content___type NULL
 typedef int AT_surfxml_cluster_power;
 #define AU_surfxml_cluster_power NULL
-typedef int AT_surfxml_random_min;
-#define AU_surfxml_random_min NULL
-typedef int AT_surfxml_host_availability___file;
-#define AU_surfxml_host_availability___file NULL
-typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy;
-typedef int AT_surfxml_storage___type_model;
-#define AU_surfxml_storage___type_model NULL
-typedef int AT_surfxml_argument_value;
-#define AU_surfxml_argument_value NULL
-typedef int AT_surfxml_AS_id;
-#define AU_surfxml_AS_id NULL
-typedef int AT_surfxml_cluster_loopback___bw;
-#define AU_surfxml_cluster_loopback___bw NULL
+typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical;
+typedef int AT_surfxml_cabinet_id;
+#define AU_surfxml_cabinet_id NULL
+typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS,A_surfxml_cluster_topology_FAT___TREE } AT_surfxml_cluster_topology;
+typedef int AT_surfxml_storage_content;
+#define AU_surfxml_storage_content NULL
+typedef int AT_surfxml_cluster_bw;
+#define AU_surfxml_cluster_bw NULL
+typedef int AT_surfxml_host_coordinates;
+#define AU_surfxml_host_coordinates NULL
+typedef int AT_surfxml_mount_storageId;
+#define AU_surfxml_mount_storageId NULL
+typedef int AT_surfxml_random_id;
+#define AU_surfxml_random_id NULL
 typedef int AT_surfxml_mount_name;
 #define AU_surfxml_mount_name NULL
-typedef int AT_surfxml_cluster_router___id;
-#define AU_surfxml_cluster_router___id NULL
-typedef int AT_surfxml_cluster_id;
-#define AU_surfxml_cluster_id NULL
-typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy;
-typedef int AT_surfxml_peer_bw___out;
-#define AU_surfxml_peer_bw___out NULL
-typedef int AT_surfxml_cluster_core;
-#define AU_surfxml_cluster_core NULL
+typedef int AT_surfxml_bypassASroute_dst;
+#define AU_surfxml_bypassASroute_dst NULL
+typedef int AT_surfxml_config_id;
+#define AU_surfxml_config_id NULL
+typedef int AT_surfxml_bypassASroute_gw___src;
+#define AU_surfxml_bypassASroute_gw___src NULL
+typedef int AT_surfxml_link___ctn_id;
+#define AU_surfxml_link___ctn_id NULL
+typedef int AT_surfxml_mstorage_name;
+#define AU_surfxml_mstorage_name NULL
 typedef int AT_surfxml_random_std___deviation;
 #define AU_surfxml_random_std___deviation NULL
+typedef int AT_surfxml_cluster_bb___bw;
+#define AU_surfxml_cluster_bb___bw NULL
+typedef int AT_surfxml_gpu_name;
+#define AU_surfxml_gpu_name NULL
+typedef int AT_surfxml_cluster_loopback___bw;
+#define AU_surfxml_cluster_loopback___bw NULL
+typedef int AT_surfxml_model___prop_value;
+#define AU_surfxml_model___prop_value NULL
+typedef int AT_surfxml_cluster_radical;
+#define AU_surfxml_cluster_radical NULL
+typedef int AT_surfxml_cabinet_bw;
+#define AU_surfxml_cabinet_bw NULL
+typedef int AT_surfxml_host_availability___file;
+#define AU_surfxml_host_availability___file NULL
+typedef int AT_surfxml_process_function;
+#define AU_surfxml_process_function NULL
+typedef int AT_surfxml_cabinet_suffix;
+#define AU_surfxml_cabinet_suffix NULL
+typedef int AT_surfxml_ASroute_gw___dst;
+#define AU_surfxml_ASroute_gw___dst NULL
 typedef int AT_surfxml_bypassRoute_src;
 #define AU_surfxml_bypassRoute_src NULL
-typedef int AT_surfxml_backbone_bandwidth;
-#define AU_surfxml_backbone_bandwidth NULL
-typedef int AT_surfxml_cabinet_radical;
-#define AU_surfxml_cabinet_radical NULL
-typedef int AT_surfxml_storage_content;
-#define AU_surfxml_storage_content NULL
+typedef int AT_surfxml_trace_id;
+#define AU_surfxml_trace_id NULL
+typedef int AT_surfxml_link_latency___file;
+#define AU_surfxml_link_latency___file NULL
 typedef int AT_surfxml_link_id;
 #define AU_surfxml_link_id NULL
-typedef int AT_surfxml_host___link_id;
-#define AU_surfxml_host___link_id NULL
-typedef int AT_surfxml_include_file;
-#define AU_surfxml_include_file NULL
-typedef int AT_surfxml_storage_content___type;
-#define AU_surfxml_storage_content___type NULL
-typedef int AT_surfxml_process_kill___time;
-#define AU_surfxml_process_kill___time NULL
-typedef int AT_surfxml_peer_state___file;
-#define AU_surfxml_peer_state___file NULL
-typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction;
-typedef int AT_surfxml_host___link_up;
-#define AU_surfxml_host___link_up NULL
-typedef int AT_surfxml_bypassASroute_gw___dst;
-#define AU_surfxml_bypassASroute_gw___dst NULL
-typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster,A_surfxml_AS_routing_Cluster___torus,A_surfxml_AS_routing_Cluster___fat___tree } AT_surfxml_AS_routing;
+typedef int AT_surfxml_process_start___time;
+#define AU_surfxml_process_start___time 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_link_bandwidth___file;
+#define AU_surfxml_link_bandwidth___file NULL
+typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy;
+typedef int AT_surfxml_host_state___file;
+#define AU_surfxml_host_state___file NULL
+typedef int AT_surfxml_AS_id;
+#define AU_surfxml_AS_id NULL
+typedef int AT_surfxml_cluster_suffix;
+#define AU_surfxml_cluster_suffix NULL
+typedef int AT_surfxml_peer_availability___file;
+#define AU_surfxml_peer_availability___file NULL
+typedef int AT_surfxml_peer_bw___out;
+#define AU_surfxml_peer_bw___out NULL
+typedef int AT_surfxml_cluster_id;
+#define AU_surfxml_cluster_id NULL
 typedef int AT_surfxml_bypassRoute_dst;
 #define AU_surfxml_bypassRoute_dst NULL
-typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS,A_surfxml_cluster_topology_FAT___TREE } AT_surfxml_cluster_topology;
-typedef int AT_surfxml_link_latency;
-#define AU_surfxml_link_latency NULL
+typedef int AT_surfxml_cabinet_prefix;
+#define AU_surfxml_cabinet_prefix NULL
 typedef int AT_surfxml_route_src;
 #define AU_surfxml_route_src NULL
-typedef int AT_surfxml_bypassASroute_src;
-#define AU_surfxml_bypassASroute_src NULL
-typedef int AT_surfxml_peer_bw___in;
-#define AU_surfxml_peer_bw___in NULL
-typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind;
-typedef int AT_surfxml_cluster_prefix;
-#define AU_surfxml_cluster_prefix 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_cabinet_power;
-#define AU_surfxml_cabinet_power NULL
-typedef int AT_surfxml_model___prop_value;
-#define AU_surfxml_model___prop_value NULL
-typedef int AT_surfxml_route_dst;
-#define AU_surfxml_route_dst NULL
-typedef int AT_surfxml_storage___type_size;
-#define AU_surfxml_storage___type_size NULL
-typedef int AT_surfxml_host_id;
-#define AU_surfxml_host_id NULL
-typedef int AT_surfxml_ASroute_gw___src;
-#define AU_surfxml_ASroute_gw___src NULL
+typedef int AT_surfxml_host___link_id;
+#define AU_surfxml_host___link_id NULL
 typedef int AT_surfxml_peer_coordinates;
 #define AU_surfxml_peer_coordinates NULL
-typedef int AT_surfxml_cabinet_bw;
-#define AU_surfxml_cabinet_bw NULL
-typedef int AT_surfxml_cluster_availability___file;
-#define AU_surfxml_cluster_availability___file NULL
-typedef int AT_surfxml_host_coordinates;
-#define AU_surfxml_host_coordinates NULL
-typedef int AT_surfxml_random_max;
-#define AU_surfxml_random_max NULL
-typedef int AT_surfxml_trace___connect_trace;
-#define AU_surfxml_trace___connect_trace NULL
+typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster,A_surfxml_AS_routing_Cluster___torus,A_surfxml_AS_routing_Cluster___fat___tree } AT_surfxml_AS_routing;
+typedef int AT_surfxml_host_power;
+#define AU_surfxml_host_power NULL
 typedef int AT_surfxml_storage_id;
 #define AU_surfxml_storage_id NULL
-typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical;
-typedef int AT_surfxml_random_seed;
-#define AU_surfxml_random_seed NULL
-typedef int AT_surfxml_process_start___time;
-#define AU_surfxml_process_start___time NULL
 typedef int AT_surfxml_cluster_state___file;
 #define AU_surfxml_cluster_state___file NULL
-typedef int AT_surfxml_host_power;
-#define AU_surfxml_host_power NULL
-typedef int AT_surfxml_random_radical;
-#define AU_surfxml_random_radical NULL
-typedef int AT_surfxml_storage___type_id;
-#define AU_surfxml_storage___type_id NULL
-typedef int AT_surfxml_random_id;
-#define AU_surfxml_random_id NULL
-typedef int AT_surfxml_cabinet_suffix;
-#define AU_surfxml_cabinet_suffix NULL
-typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical;
-typedef int AT_surfxml_cabinet_lat;
-#define AU_surfxml_cabinet_lat NULL
-typedef int AT_surfxml_bypassASroute_gw___src;
-#define AU_surfxml_bypassASroute_gw___src NULL
+typedef int AT_surfxml_peer_id;
+#define AU_surfxml_peer_id NULL
+typedef int AT_surfxml_cluster_availability___file;
+#define AU_surfxml_cluster_availability___file NULL
 typedef int AT_surfxml_storage___type_content___type;
 #define AU_surfxml_storage___type_content___type NULL
-typedef int AT_surfxml_link___ctn_id;
-#define AU_surfxml_link___ctn_id NULL
-typedef int AT_surfxml_host_state___file;
-#define AU_surfxml_host_state___file 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_dst;
+#define AU_surfxml_route_dst NULL
+typedef int AT_surfxml_storage___type_model;
+#define AU_surfxml_storage___type_model NULL
+typedef int AT_surfxml_peer_bw___in;
+#define AU_surfxml_peer_bw___in NULL
+typedef int AT_surfxml_backbone_id;
+#define AU_surfxml_backbone_id NULL
+typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction;
+typedef int AT_surfxml_bypassASroute_gw___dst;
+#define AU_surfxml_bypassASroute_gw___dst NULL
+typedef int AT_surfxml_bypassASroute_src;
+#define AU_surfxml_bypassASroute_src NULL
+typedef int AT_surfxml_trace_file;
+#define AU_surfxml_trace_file NULL
+typedef int AT_surfxml_router_coordinates;
+#define AU_surfxml_router_coordinates NULL
+typedef int AT_surfxml_router_id;
+#define AU_surfxml_router_id NULL
 typedef int AT_surfxml_link_bandwidth;
 #define AU_surfxml_link_bandwidth NULL
-typedef int AT_surfxml_cluster_loopback___lat;
-#define AU_surfxml_cluster_loopback___lat NULL
-typedef int AT_surfxml_process_function;
-#define AU_surfxml_process_function NULL
-typedef int AT_surfxml_backbone_latency;
-#define AU_surfxml_backbone_latency NULL
-typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure;
-typedef int AT_surfxml_host_core;
-#define AU_surfxml_host_core NULL
-typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator;
-typedef int AT_surfxml_random_mean;
-#define AU_surfxml_random_mean NULL
-typedef int AT_surfxml_ASroute_gw___dst;
-#define AU_surfxml_ASroute_gw___dst NULL
-typedef int AT_surfxml_peer_availability___file;
-#define AU_surfxml_peer_availability___file NULL
-typedef int AT_surfxml_link_bandwidth___file;
-#define AU_surfxml_link_bandwidth___file NULL
-typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy;
 typedef int AT_surfxml_process_host;
 #define AU_surfxml_process_host NULL
 typedef int AT_surfxml_trace_periodicity;
 #define AU_surfxml_trace_periodicity NULL
+typedef int AT_surfxml_storage___type_id;
+#define AU_surfxml_storage___type_id NULL
+typedef int AT_surfxml_cluster_bb___lat;
+#define AU_surfxml_cluster_bb___lat NULL
+typedef int AT_surfxml_trace___connect_trace;
+#define AU_surfxml_trace___connect_trace NULL
+typedef int AT_surfxml_random_radical;
+#define AU_surfxml_random_radical NULL
+typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind;
 typedef int AT_surfxml_peer_lat;
 #define AU_surfxml_peer_lat NULL
-typedef int AT_surfxml_peer_power;
-#define AU_surfxml_peer_power NULL
 typedef int AT_surfxml_storage_attach;
 #define AU_surfxml_storage_attach NULL
-typedef int AT_surfxml_router_coordinates;
-#define AU_surfxml_router_coordinates NULL
-typedef int AT_surfxml_cabinet_prefix;
-#define AU_surfxml_cabinet_prefix NULL
-typedef int AT_surfxml_cluster_bw;
-#define AU_surfxml_cluster_bw NULL
-typedef int AT_surfxml_storage___type_content;
-#define AU_surfxml_storage___type_content NULL
-typedef int AT_surfxml_mstorage_typeId;
-#define AU_surfxml_mstorage_typeId NULL
-typedef int AT_surfxml_model___prop_id;
+typedef int AT_surfxml_host_core;
+#define AU_surfxml_host_core NULL
+typedef int AT_surfxml_model___prop_id;
 #define AU_surfxml_model___prop_id NULL
-typedef int AT_surfxml_backbone_id;
-#define AU_surfxml_backbone_id NULL
-typedef int AT_surfxml_config_id;
-#define AU_surfxml_config_id NULL
+typedef int AT_surfxml_cabinet_radical;
+#define AU_surfxml_cabinet_radical NULL
+typedef int AT_surfxml_backbone_bandwidth;
+#define AU_surfxml_backbone_bandwidth NULL
 typedef int AT_surfxml_cluster_lat;
 #define AU_surfxml_cluster_lat NULL
-typedef int AT_surfxml_platform_version;
-#define AU_surfxml_platform_version NULL
+typedef int AT_surfxml_link_state___file;
+#define AU_surfxml_link_state___file NULL
+typedef int AT_surfxml_storage_typeId;
+#define AU_surfxml_storage_typeId NULL
+typedef int AT_surfxml_host_pstate;
+#define AU_surfxml_host_pstate NULL
+typedef int AT_surfxml_prop_id;
+#define AU_surfxml_prop_id NULL
+typedef int AT_surfxml_process_kill___time;
+#define AU_surfxml_process_kill___time NULL
+typedef int AT_surfxml_host_id;
+#define AU_surfxml_host_id NULL
 typedef int AT_surfxml_trace___connect_element;
 #define AU_surfxml_trace___connect_element NULL
-typedef int AT_surfxml_mount_storageId;
-#define AU_surfxml_mount_storageId NULL
-typedef int AT_surfxml_cluster_bb___bw;
-#define AU_surfxml_cluster_bb___bw NULL
+typedef int AT_surfxml_random_min;
+#define AU_surfxml_random_min NULL
+typedef int AT_surfxml_peer_power;
+#define AU_surfxml_peer_power NULL
+typedef int AT_surfxml_cluster_loopback___lat;
+#define AU_surfxml_cluster_loopback___lat NULL
+typedef int AT_surfxml_random_mean;
+#define AU_surfxml_random_mean NULL
+typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy;
+typedef int AT_surfxml_cluster_prefix;
+#define AU_surfxml_cluster_prefix NULL
+typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure;
+typedef int AT_surfxml_backbone_latency;
+#define AU_surfxml_backbone_latency NULL
+typedef int AT_surfxml_argument_value;
+#define AU_surfxml_argument_value NULL
+typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy;
+typedef int AT_surfxml_platform_version;
+#define AU_surfxml_platform_version NULL
 typedef int AT_surfxml_ASroute_dst;
 #define AU_surfxml_ASroute_dst NULL
-typedef int AT_surfxml_host_pstate;
-#define AU_surfxml_host_pstate NULL
-typedef int AT_surfxml_peer_id;
-#define AU_surfxml_peer_id NULL
+typedef int AT_surfxml_prop_value;
+#define AU_surfxml_prop_value NULL
 typedef int AT_surfxml_ASroute_src;
 #define AU_surfxml_ASroute_src NULL
-typedef int AT_surfxml_gpu_name;
-#define AU_surfxml_gpu_name NULL
-typedef int AT_surfxml_host_availability;
-#define AU_surfxml_host_availability NULL
-typedef int AT_surfxml_mstorage_name;
-#define AU_surfxml_mstorage_name NULL
-typedef int AT_surfxml_cabinet_id;
-#define AU_surfxml_cabinet_id NULL
-typedef int AT_surfxml_storage_typeId;
-#define AU_surfxml_storage_typeId NULL
-typedef int AT_surfxml_cluster_bb___lat;
-#define AU_surfxml_cluster_bb___lat NULL
-typedef int AT_surfxml_trace_file;
-#define AU_surfxml_trace_file NULL
-typedef int AT_surfxml_cluster_limiter___link;
-#define AU_surfxml_cluster_limiter___link NULL
-typedef int AT_surfxml_cluster_radical;
-#define AU_surfxml_cluster_radical NULL
-typedef int AT_surfxml_router_id;
-#define AU_surfxml_router_id NULL
-typedef int AT_surfxml_trace_id;
-#define AU_surfxml_trace_id 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_prop_id;
-#define AU_surfxml_prop_id NULL
+typedef int AT_surfxml_host___link_up;
+#define AU_surfxml_host___link_up NULL
+typedef int AT_surfxml_cabinet_power;
+#define AU_surfxml_cabinet_power NULL
+typedef int AT_surfxml_cluster_core;
+#define AU_surfxml_cluster_core NULL
+typedef int AT_surfxml_include_file;
+#define AU_surfxml_include_file NULL
+typedef int AT_surfxml_ASroute_gw___src;
+#define AU_surfxml_ASroute_gw___src NULL
+typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator;
+typedef int AT_surfxml_cabinet_lat;
+#define AU_surfxml_cabinet_lat NULL
+typedef int AT_surfxml_random_seed;
+#define AU_surfxml_random_seed NULL
+typedef int AT_surfxml_cluster_router___id;
+#define AU_surfxml_cluster_router___id NULL
 typedef int AT_surfxml_host___link_down;
 #define AU_surfxml_host___link_down NULL
-typedef int AT_surfxml_link_state___file;
-#define AU_surfxml_link_state___file NULL
+typedef int AT_surfxml_link_latency;
+#define AU_surfxml_link_latency NULL
+typedef int AT_surfxml_random_max;
+#define AU_surfxml_random_max NULL
+typedef int AT_surfxml_host_availability;
+#define AU_surfxml_host_availability NULL
+typedef int AT_surfxml_storage___type_size;
+#define AU_surfxml_storage___type_size NULL
 typedef int AT_surfxml_cluster_topo___parameters;
 #define AU_surfxml_cluster_topo___parameters NULL
-typedef int AT_surfxml_cluster_suffix;
-#define AU_surfxml_cluster_suffix NULL
 
 /* FleXML-provided data. */
 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_bypassASroute_dst) AX_surfxml_bypassASroute_dst;
-#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset;
-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(short int) surfxml_link_latency___file_isset;
-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(short int) surfxml_prop_value_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId;
+#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
+XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file;
+#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
+XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link;
+#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content;
+#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical;
+#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type;
+#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
+XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset;
 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(short int) surfxml_cluster_power_isset;
-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(short int) surfxml_random_min_isset;
-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(short int) surfxml_host_availability___file_isset;
-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(short int) surfxml_link_sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model;
-#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset;
-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(short int) surfxml_argument_value_isset;
-XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id;
-#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
-XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw;
-#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical;
+#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
+XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id;
+#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology;
+#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
+XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content;
+#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
+XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset;
+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(short int) surfxml_cluster_bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates;
+#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
+XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId;
+#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
+XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset;
+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(short int) surfxml_random_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_mount_name) AX_surfxml_mount_name;
 #define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
 XBT_PUBLIC_DATA(short int) surfxml_mount_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id;
-#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset;
-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(short int) surfxml_cluster_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy;
-#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
-XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out;
-#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
-XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core;
-#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_dst) AX_surfxml_bypassASroute_dst;
+#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id;
+#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
+XBT_PUBLIC_DATA(short int) surfxml_config_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src;
+#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id;
+#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
+XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name;
+#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
+XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset;
 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(short int) surfxml_random_std___deviation_isset;
+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(short int) surfxml_cluster_bb___bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name;
+#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
+XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw;
+#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value;
+#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
+XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset;
+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(short int) surfxml_cluster_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw;
+#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset;
+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(short int) surfxml_host_availability___file_isset;
+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(short int) surfxml_process_function_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix;
+#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst;
+#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset;
 XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src;
 #define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
 XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth;
-#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical;
-#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content;
-#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
-XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset;
+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(short int) surfxml_trace_id_isset;
+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(short int) surfxml_link_latency___file_isset;
 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(short int) surfxml_link_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id;
-#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
-XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset;
-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(short int) surfxml_include_file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type;
-#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
-XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset;
-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(short int) surfxml_process_kill___time_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file;
-#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
-XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction;
-#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
-XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up;
-#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
-XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst;
-#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_AS_routing) AX_surfxml_AS_routing;
-#define A_surfxml_AS_routing AX_surfxml_AS_routing
-XBT_PUBLIC_DATA(short int) surfxml_AS_routing_isset;
+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(short int) surfxml_process_start___time_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
+#define A_surfxml_host_state AX_surfxml_host_state
+XBT_PUBLIC_DATA(short int) surfxml_host_state_isset;
+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(short int) surfxml_link_bandwidth___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy;
+#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
+XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset;
+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(short int) surfxml_host_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id;
+#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
+XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset;
+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(short int) surfxml_cluster_suffix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file;
+#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
+XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out;
+#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
+XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset;
+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(short int) surfxml_cluster_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst;
 #define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
 XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology;
-#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
-XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset;
-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(short int) surfxml_link_latency_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix;
+#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset;
 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(short int) surfxml_route_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src;
-#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in;
-#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
-XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind;
-#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
-XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset;
-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(short int) surfxml_cluster_prefix_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-XBT_PUBLIC_DATA(short int) surfxml_host_state_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power;
-#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset;
-XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value;
-#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
-XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset;
-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(short int) surfxml_route_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size;
-#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset;
-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(short int) surfxml_host_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src;
-#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id;
+#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
+XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates;
 #define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
 XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw;
-#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file;
-#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates;
-#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
-XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset;
-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(short int) surfxml_random_max_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace;
-#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
-XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset;
+XBT_PUBLIC_DATA(AT_surfxml_AS_routing) AX_surfxml_AS_routing;
+#define A_surfxml_AS_routing AX_surfxml_AS_routing
+XBT_PUBLIC_DATA(short int) surfxml_AS_routing_isset;
+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(short int) surfxml_host_power_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage_id) AX_surfxml_storage_id;
 #define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
 XBT_PUBLIC_DATA(short int) surfxml_storage_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical;
-#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed;
-#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
-XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset;
-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(short int) surfxml_process_start___time_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_state___file) AX_surfxml_cluster_state___file;
 #define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_state___file_isset;
-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(short int) surfxml_host_power_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical;
-#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
-XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id;
-#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset;
-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(short int) surfxml_random_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix;
-#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset;
-XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical;
-#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
-XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat;
-#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src;
-#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id;
+#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
+XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file;
+#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage___type_content___type) AX_surfxml_storage___type_content___type;
 #define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
 XBT_PUBLIC_DATA(short int) surfxml_storage___type_content___type_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id;
-#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
-XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset;
-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(short int) surfxml_host_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
+#define A_surfxml_link_state AX_surfxml_link_state
+XBT_PUBLIC_DATA(short int) surfxml_link_state_isset;
+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(short int) surfxml_route_dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model;
+#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in;
+#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
+XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id;
+#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction;
+#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
+XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst;
+#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src;
+#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset;
+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(short int) surfxml_trace_file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates;
+#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
+XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset;
+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(short int) surfxml_router_id_isset;
 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(short int) surfxml_link_bandwidth_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat;
-#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset;
-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(short int) surfxml_process_function_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency;
-#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure;
-#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
-XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core;
-#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
-XBT_PUBLIC_DATA(short int) surfxml_host_core_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator;
-#define A_surfxml_random_generator AX_surfxml_random_generator
-XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset;
-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(short int) surfxml_random_mean_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst;
-#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file;
-#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
-XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset;
-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(short int) surfxml_link_bandwidth___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy;
-#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
-XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset;
 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(short int) surfxml_process_host_isset;
 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(short int) surfxml_trace_periodicity_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id;
+#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset;
+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(short int) surfxml_cluster_bb___lat_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace;
+#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
+XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical;
+#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
+XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind;
+#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
+XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset;
 XBT_PUBLIC_DATA(AT_surfxml_peer_lat) AX_surfxml_peer_lat;
 #define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
 XBT_PUBLIC_DATA(short int) surfxml_peer_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power;
-#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
-XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage_attach) AX_surfxml_storage_attach;
 #define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
 XBT_PUBLIC_DATA(short int) surfxml_storage_attach_isset;
-XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates;
-#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
-XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix;
-#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset;
-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(short int) surfxml_cluster_bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content;
-#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId;
-#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
-XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core;
+#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
+XBT_PUBLIC_DATA(short int) surfxml_host_core_isset;
 XBT_PUBLIC_DATA(AT_surfxml_model___prop_id) AX_surfxml_model___prop_id;
 #define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
 XBT_PUBLIC_DATA(short int) surfxml_model___prop_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id;
-#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id;
-#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
-XBT_PUBLIC_DATA(short int) surfxml_config_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical;
+#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth;
+#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset;
 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(short int) surfxml_cluster_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version;
-#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
-XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset;
+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(short int) surfxml_link_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId;
+#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
+XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate;
+#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
+XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset;
+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(short int) surfxml_prop_id_isset;
+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(short int) surfxml_process_kill___time_isset;
+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(short int) surfxml_host_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_trace___connect_element) AX_surfxml_trace___connect_element;
 #define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
 XBT_PUBLIC_DATA(short int) surfxml_trace___connect_element_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId;
-#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
-XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset;
-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(short int) surfxml_cluster_bb___bw_isset;
+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(short int) surfxml_random_min_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power;
+#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
+XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat;
+#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset;
+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(short int) surfxml_random_mean_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy;
+#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
+XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset;
+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(short int) surfxml_cluster_prefix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure;
+#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
+XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency;
+#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset;
+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(short int) surfxml_argument_value_isset;
+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(short int) surfxml_link_sharing___policy_isset;
+XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version;
+#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
+XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset;
 XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst;
 #define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
 XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate;
-#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
-XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id;
-#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
-XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset;
+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(short int) surfxml_prop_value_isset;
 XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src;
 #define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
 XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name;
-#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
-XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset;
-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(short int) surfxml_host_availability_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name;
-#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
-XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id;
-#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId;
-#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
-XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset;
-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(short int) surfxml_cluster_bb___lat_isset;
-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(short int) surfxml_trace_file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link;
-#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset;
-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(short int) surfxml_cluster_radical_isset;
-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(short int) surfxml_router_id_isset;
-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(short int) surfxml_trace_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-XBT_PUBLIC_DATA(short int) surfxml_link_state_isset;
-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(short int) surfxml_prop_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up;
+#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
+XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power;
+#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core;
+#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset;
+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(short int) surfxml_include_file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src;
+#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator;
+#define A_surfxml_random_generator AX_surfxml_random_generator
+XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat;
+#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed;
+#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
+XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id;
+#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down;
 #define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
 XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset;
-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(short int) surfxml_link_state___file_isset;
+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(short int) surfxml_link_latency_isset;
+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(short int) surfxml_random_max_isset;
+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(short int) surfxml_host_availability_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size;
+#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_topo___parameters) AX_surfxml_cluster_topo___parameters;
 #define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_topo___parameters_isset;
-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(short int) surfxml_cluster_suffix_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) surfxml_element_context(int);
index 8404f6f..1f1382a 100644 (file)
@@ -56,70 +56,70 @@ XBT_PUBLIC(void) STag_graphxml_edge(void);
 XBT_PUBLIC(void) ETag_graphxml_edge(void);
 
 /* XML application data. */
-typedef int AT_graphxml_node_position___y;
-#define AU_graphxml_node_position___y NULL
-typedef int AT_graphxml_node_position___x;
-#define AU_graphxml_node_position___x NULL
-typedef int AT_graphxml_node_data;
-#define AU_graphxml_node_data NULL
-typedef int AT_graphxml_edge_length;
-#define AU_graphxml_edge_length NULL
-typedef int AT_graphxml_node_label;
-#define AU_graphxml_node_label NULL
-typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected;
-typedef int AT_graphxml_edge_data;
-#define AU_graphxml_edge_data NULL
 typedef int AT_graphxml_edge_name;
 #define AU_graphxml_edge_name NULL
+typedef int AT_graphxml_node_name;
+#define AU_graphxml_node_name NULL
 typedef int AT_graphxml_edge_target;
 #define AU_graphxml_edge_target NULL
+typedef int AT_graphxml_edge_data;
+#define AU_graphxml_edge_data NULL
+typedef int AT_graphxml_node_data;
+#define AU_graphxml_node_data NULL
 typedef int AT_graphxml_edge_source;
 #define AU_graphxml_edge_source NULL
+typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected;
+typedef int AT_graphxml_node_label;
+#define AU_graphxml_node_label NULL
+typedef int AT_graphxml_node_position___x;
+#define AU_graphxml_node_position___x NULL
 typedef int AT_graphxml_edge_label;
 #define AU_graphxml_edge_label NULL
-typedef int AT_graphxml_node_name;
-#define AU_graphxml_node_name NULL
+typedef int AT_graphxml_edge_length;
+#define AU_graphxml_edge_length NULL
+typedef int AT_graphxml_node_position___y;
+#define AU_graphxml_node_position___y NULL
 
 /* FleXML-provided data. */
 XBT_PUBLIC_DATA(int) graphxml_pcdata_ix;
 XBT_PUBLIC_DATA(char *) graphxml_bufferstack;
 #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y;
-#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
-XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-XBT_PUBLIC_DATA(short int) graphxml_node_data_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length;
-#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
-XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label;
-#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
-XBT_PUBLIC_DATA(short int) graphxml_node_label_isset;
-XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected;
-#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
-XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data;
-#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
-XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name;
 #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
 XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name;
+#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
+XBT_PUBLIC_DATA(short int) graphxml_node_name_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target;
 #define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
 XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset;
+XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data;
+#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
+XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data;
+#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
+XBT_PUBLIC_DATA(short int) graphxml_node_data_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source;
 #define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
 XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset;
+XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected;
+#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
+XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label;
+#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
+XBT_PUBLIC_DATA(short int) graphxml_node_label_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x;
+#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
+XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label;
 #define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
 XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name;
-#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
-XBT_PUBLIC_DATA(short int) graphxml_node_name_isset;
+XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length;
+#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
+XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y;
+#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
+XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) graphxml_element_context(int);
index ffc5d6f..20805a8 100644 (file)
@@ -22,7 +22,6 @@ SG_BEGIN_DECL()
 
 typedef struct s_mc_transition *mc_transition_t;
 
-
 /*********** Structures for snapshot comparison **************************/
 
 typedef struct s_mc_heap_ignore_region{
@@ -44,17 +43,8 @@ typedef struct s_stack_region{
 void heap_ignore_region_free(mc_heap_ignore_region_t r);
 void heap_ignore_region_free_voidp(void *r);
 
-/************ Object info *************/
-
-typedef struct s_mc_object_info s_mc_object_info_t, *mc_object_info_t;
 
 /************ DWARF structures *************/
 
-typedef int e_dw_type_type;
-
-typedef struct s_dw_type s_dw_type_t, *dw_type_t;
-
-char* get_type_description(mc_object_info_t info, char *type_name);
-
 SG_END_DECL()
 #endif                          /* _MC_MC_H */
index 1368b59..2bfe7ad 100644 (file)
@@ -37,6 +37,7 @@ SG_BEGIN_DECL()
 
 /********************************** Configuration of MC **************************************/        
 extern int _sg_do_model_check;
+extern int _sg_do_model_check_record;
 extern int _sg_mc_checkpoint;
 extern int _sg_mc_sparse_checkpoint;
 extern int _sg_mc_soft_dirty;
diff --git a/src/mc/mc_base.c b/src/mc/mc_base.c
new file mode 100644 (file)
index 0000000..82ca8c6
--- /dev/null
@@ -0,0 +1,120 @@
+/* Copyright (c) 2008-2014. The SimGrid Team.
+ * 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 <simgrid/simix.h>
+
+#include "mc_base.h"
+#include "../simix/smx_private.h"
+#include "mc_record.h"
+
+XBT_LOG_NEW_CATEGORY(mc, "All MC categories");
+
+/**
+ * \brief Schedules all the process that are ready to run
+ */
+void MC_wait_for_requests(void)
+{
+  smx_process_t process;
+  smx_simcall_t req;
+  unsigned int iter;
+
+  while (!xbt_dynar_is_empty(simix_global->process_to_run)) {
+    SIMIX_process_runall();
+    xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
+      req = &process->simcall;
+      if (req->call != SIMCALL_NONE && !MC_request_is_visible(req))
+        SIMIX_simcall_handle(req, 0);
+    }
+  }
+}
+
+int MC_request_is_enabled(smx_simcall_t req)
+{
+  unsigned int index = 0;
+  smx_synchro_t act = 0;
+
+  switch (req->call) {
+  case SIMCALL_NONE:
+    return FALSE;
+
+  case SIMCALL_COMM_WAIT:
+    /* FIXME: check also that src and dst processes are not suspended */
+    act = simcall_comm_wait__get__comm(req);
+    if (simcall_comm_wait__get__timeout(req) >= 0) {
+      /* If it has a timeout it will be always be enabled, because even if the
+       * communication is not ready, it can timeout and won't block. */
+      if (_sg_mc_timeout == 1)
+        return TRUE;
+    } else {
+      /* On the other hand if it hasn't a timeout, check if the comm is ready.*/
+      if (act->comm.detached && act->comm.src_proc == NULL
+          && act->comm.type == SIMIX_COMM_READY)
+        return (act->comm.dst_proc != NULL);
+    }
+    return (act->comm.src_proc && act->comm.dst_proc);
+
+  case SIMCALL_COMM_WAITANY:
+    /* Check if it has at least one communication ready */
+    xbt_dynar_foreach(simcall_comm_waitany__get__comms(req), index, act)
+      if (act->comm.src_proc && act->comm.dst_proc)
+        return TRUE;
+    return FALSE;
+
+  default:
+    /* The rest of the requests are always enabled */
+    return TRUE;
+  }
+}
+
+int MC_request_is_visible(smx_simcall_t req)
+{
+  return req->call == SIMCALL_COMM_ISEND
+      || req->call == SIMCALL_COMM_IRECV
+      || req->call == SIMCALL_COMM_WAIT
+      || req->call == SIMCALL_COMM_WAITANY
+      || req->call == SIMCALL_COMM_TEST
+      || req->call == SIMCALL_COMM_TESTANY
+      || req->call == SIMCALL_MC_RANDOM
+#ifdef HAVE_MC
+      || req->call == SIMCALL_MC_SNAPSHOT
+      || req->call == SIMCALL_MC_COMPARE_SNAPSHOTS
+#endif
+      ;
+}
+
+int MC_random(int min, int max)
+{
+  /*FIXME: return mc_current_state->executed_transition->random.value; */
+  return simcall_mc_random(min, max);
+}
+
+static int prng_random(int min, int max)
+{
+  unsigned long output_size = ((unsigned long) max - (unsigned long) min) + 1;
+  unsigned long input_size = (unsigned long) RAND_MAX + 1;
+  unsigned long reject_size = input_size % output_size;
+  unsigned long accept_size = input_size - reject_size; // module*accept_size
+
+  // Use rejection in order to avoid skew
+  long x;
+  do {
+#ifndef _XBT_WIN32
+    x = random();
+#else
+    x = rand();
+#endif
+  } while( x >= accept_size );
+  return min + (x % output_size);
+}
+
+int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max)
+{
+  if (!MC_is_active() && !MC_record_path){
+    return prng_random(min, max);
+  }
+
+  return simcall->mc_value;
+}
diff --git a/src/mc/mc_base.h b/src/mc/mc_base.h
new file mode 100644 (file)
index 0000000..c462414
--- /dev/null
@@ -0,0 +1,25 @@
+/* Copyright (c) 2008-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_BASE_H
+#define MC_BASE_H
+
+#include <simgrid/simix.h>
+#include "simgrid_config.h"
+#include "internal_config.h"
+#include "../simix/smx_private.h"
+
+SG_BEGIN_DECL()
+
+int MC_request_is_enabled(smx_simcall_t req);
+int MC_request_is_visible(smx_simcall_t req);
+void MC_wait_for_requests(void);
+
+extern double *mc_time;
+
+SG_END_DECL()
+
+#endif
index d205926..8680749 100644 (file)
@@ -14,6 +14,7 @@
 #include <dirent.h>
 
 #include "internal_config.h"
+#include "mc_memory_map.h"
 #include "mc_private.h"
 #include "xbt/module.h"
 #include <xbt/mmalloc.h>
@@ -31,6 +32,8 @@
 #include "mc_private.h"
 #include <mc/mc.h>
 
+#include "mc_snapshot.h"
+#include "mc_object_info.h"
 #include "mc_mmu.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
index 79bff80..9c01b85 100644 (file)
@@ -4,7 +4,12 @@
 /* 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 "mc_state.h"
+#include "mc_comm_pattern.h"
+#include "mc_request.h"
+#include "mc_safety.h"
 #include "mc_private.h"
+#include "mc_record.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc,
                                 "Logging specific to MC communication determinism detection");
diff --git a/src/mc/mc_comm_pattern.h b/src/mc/mc_comm_pattern.h
new file mode 100644 (file)
index 0000000..cb45a66
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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 <stdint.h>
+
+#include <simgrid_config.h>
+#include <xbt/dynar.h>
+
+#include "../simix/smx_private.h"
+
+#ifndef MC_COMM_PATTERN_H
+#define MC_COMM_PATTERN_H
+
+SG_BEGIN_DECL()
+
+typedef struct s_mc_comm_pattern{
+  int num;
+  smx_synchro_t comm;
+  e_smx_comm_type_t type;
+  unsigned long src_proc;
+  unsigned long dst_proc;
+  const char *src_host;
+  const char *dst_host;
+  char *rdv;
+  ssize_t data_size;
+  void *data;
+} s_mc_comm_pattern_t, *mc_comm_pattern_t;
+
+extern xbt_dynar_t initial_communications_pattern;
+extern xbt_dynar_t communications_pattern;
+extern xbt_dynar_t incomplete_communications_pattern;
+
+// Can we use the SIMIX syscall for this?
+typedef enum mc_call_type {
+  MC_CALL_TYPE_NONE,
+  MC_CALL_TYPE_SEND,
+  MC_CALL_TYPE_RECV,
+  MC_CALL_TYPE_WAIT,
+  MC_CALL_TYPE_WAITANY,
+} mc_call_type;
+
+static inline mc_call_type mc_get_call_type(smx_simcall_t req)
+{
+  switch(req->call) {
+  case SIMCALL_COMM_ISEND:
+    return MC_CALL_TYPE_SEND;
+  case SIMCALL_COMM_IRECV:
+    return MC_CALL_TYPE_RECV;
+  case SIMCALL_COMM_WAIT:
+    return MC_CALL_TYPE_WAIT;
+  case SIMCALL_COMM_WAITANY:
+    return MC_CALL_TYPE_WAITANY;
+  default:
+    return MC_CALL_TYPE_NONE;
+  }
+}
+
+void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, mc_call_type call_type);
+void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern);
+void complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm);
+void MC_pre_modelcheck_comm_determinism(void);
+void MC_modelcheck_comm_determinism(void);
+
+SG_END_DECL()
+
+#endif
index 0958d2d..4745d3a 100644 (file)
@@ -9,6 +9,9 @@
 #include <boost/unordered_set.hpp>
 
 #include "internal_config.h"
+#include "mc_object_info.h"
+#include "mc_safety.h"
+#include "mc_liveness.h"
 #include "mc_private.h"
 
 #ifdef HAVE_SMPI
index eeb080a..07c9179 100644 (file)
 
 #include <simgrid/sg_config.h>
 
+#ifdef HAVE_MC
+#include "mc_safety.h"
 #include "mc_private.h"
+#endif
+
+#include "mc_record.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_config, mc,
                                 "Configuration of MC");
 
+#ifdef HAVE_MC
 /* Configuration support */
 e_mc_reduce_t mc_reduce_kind = e_mc_reduce_unset;
+#endif
+
+#ifndef HAVE_MC
+#define _sg_do_model_check 0
+#endif
+
+int _sg_mc_timeout = 0;
+
+void _mc_cfg_cb_timeout(const char *name, int pos)
+{
+  if (_sg_cfg_init_status && !(_sg_do_model_check || MC_record_path)) {
+    xbt_die
+        ("You are specifying a value to enable/disable timeout for wait requests after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
+  }
+  _sg_mc_timeout = xbt_cfg_get_boolean(_sg_cfg_set, name);
+}
 
+#ifdef HAVE_MC
 int _sg_do_model_check = 0;
+int _sg_do_model_check_record = 0;
 int _sg_mc_checkpoint = 0;
 int _sg_mc_sparse_checkpoint = 0;
 int _sg_mc_soft_dirty = 0;
 char *_sg_mc_property_file = NULL;
-int _sg_mc_timeout = 0;
 int _sg_mc_hash = 0;
 int _sg_mc_max_depth = 1000;
 int _sg_mc_visited = 0;
@@ -86,15 +109,6 @@ void _mc_cfg_cb_property(const char *name, int pos)
   _sg_mc_property_file = xbt_cfg_get_string(_sg_cfg_set, name);
 }
 
-void _mc_cfg_cb_timeout(const char *name, int pos)
-{
-  if (_sg_cfg_init_status && !_sg_do_model_check) {
-    xbt_die
-        ("You are specifying a value to enable/disable timeout for wait requests after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
-  }
-  _sg_mc_timeout = xbt_cfg_get_boolean(_sg_cfg_set, name);
-}
-
 void _mc_cfg_cb_hash(const char *name, int pos)
 {
   if (_sg_cfg_init_status && !_sg_do_model_check) {
@@ -150,3 +164,5 @@ void _mc_cfg_cb_send_determinism(const char *name, int pos)
   _sg_mc_send_determinism = xbt_cfg_get_boolean(_sg_cfg_set, name);
   mc_reduce_kind = e_mc_reduce_none;
 }
+
+#endif
index a9b8dd4..03dfb36 100644 (file)
 #include "xbt/str.h"
 #include "mc/mc.h"
 #include "xbt/mmalloc.h"
+#include "mc_object_info.h"
 #include "mc/datatypes.h"
 #include "mc/mc_private.h"
+#include "mc/mc_snapshot.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_diff, xbt,
                                 "Logging specific to mc_diff in mc");
index eabe5af..2b2c2a0 100644 (file)
 #include <xbt/log.h>
 #include <xbt/sysdep.h>
 
+#include "mc_object_info.h"
 #include "mc_private.h"
 
+static void MC_dwarf_register_global_variable(mc_object_info_t info, dw_variable_t variable);
+static void MC_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
+static void MC_dwarf_register_non_global_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
+static void MC_dwarf_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_dwarf, mc, "DWARF processing");
 
 /** \brief The default DW_TAG_lower_bound for a given DW_AT_language.
index ea58470..7653210 100644 (file)
@@ -10,6 +10,8 @@
 #include <dwarf.h>
 #include <elfutils/libdw.h>
 
+#include "mc_object_info.h"
+#include "mc_snapshot.h"
 #include "mc_private.h"
 
 static int mc_dwarf_push_value(mc_expression_state_t state, Dwarf_Off value)
diff --git a/src/mc/mc_forward.h b/src/mc/mc_forward.h
new file mode 100644 (file)
index 0000000..58fde4c
--- /dev/null
@@ -0,0 +1,25 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_FORWARD_H
+#define MC_FORWARD_H
+
+#include <mc/datatypes.h>
+
+typedef struct s_mc_object_info s_mc_object_info_t, *mc_object_info_t;
+typedef struct s_mc_transition s_mc_transition_t, *mc_transition_t;
+typedef struct s_dw_type s_dw_type_t, *dw_type_t;
+typedef struct s_memory_map s_memory_map_t, *memory_map_t;
+typedef struct s_dw_variable s_dw_variable_t, *dw_variable_t;
+typedef struct s_dw_frame s_dw_frame_t, *dw_frame_t;
+
+typedef struct s_mc_pages_store s_mc_pages_store_t, *mc_pages_store_t;
+typedef struct s_mc_snapshot s_mc_snapshot_t, *mc_snapshot_t;
+
+typedef struct s_mc_model_checker s_mc_model_checker_t, *mc_model_checker_t;
+extern mc_model_checker_t mc_model_checker;
+
+#endif
index 5d163b1..19f84ef 100644 (file)
@@ -4,35 +4,52 @@
 /* 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 "mc_base.h"
+
+#ifndef _XBT_WIN32
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <sys/time.h>
 #include <sys/mman.h>
 #include <libgen.h>
-
-#define UNW_LOCAL_ONLY
-#include <libunwind.h>
+#endif
 
 #include "simgrid/sg_config.h"
 #include "../surf/surf_private.h"
 #include "../simix/smx_private.h"
-#include "../xbt/mmalloc/mmprivate.h"
 #include "xbt/fifo.h"
-#include "mc_private.h"
 #include "xbt/automaton.h"
 #include "xbt/dict.h"
 
-XBT_LOG_NEW_CATEGORY(mc, "All MC categories");
+#ifdef HAVE_MC
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+
+#include "../xbt/mmalloc/mmprivate.h"
+#include "mc_object_info.h"
+#include "mc_comm_pattern.h"
+#include "mc_request.h"
+#include "mc_safety.h"
+#include "mc_memory_map.h"
+#include "mc_snapshot.h"
+#include "mc_liveness.h"
+#include "mc_private.h"
+#endif
+#include "mc_record.h"
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc,
                                 "Logging specific to MC (global)");
 
+double *mc_time = NULL;
+
+#ifdef HAVE_MC
 int user_max_depth_reached = 0;
 
 /* MC global data structures */
 mc_state_t mc_current_state = NULL;
 char mc_replay_mode = FALSE;
-double *mc_time = NULL;
+
 __thread mc_comparison_times_t mc_comp_times = NULL;
 __thread double mc_snapshot_comparison_time;
 mc_stats_t mc_stats = NULL;
@@ -111,6 +128,21 @@ static void MC_init_debug_info(void)
 
 mc_model_checker_t mc_model_checker = NULL;
 
+mc_model_checker_t MC_model_checker_new()
+{
+  mc_model_checker_t mc = xbt_new0(s_mc_model_checker_t, 1);
+  mc->pages = mc_pages_store_new();
+  mc->fd_clear_refs = -1;
+  mc->fd_pagemap = -1;
+  return mc;
+}
+
+void MC_model_checker_delete(mc_model_checker_t mc) {
+  mc_pages_store_delete(mc->pages);
+  if(mc->record)
+    xbt_dynar_free(&mc->record);
+}
+
 void MC_init()
 {
   int raw_mem_set = (mmalloc_get_current_heap() == mc_heap);
@@ -122,10 +154,7 @@ void MC_init()
 
   MC_SET_MC_HEAP;
 
-  mc_model_checker = xbt_new0(s_mc_model_checker_t, 1);
-  mc_model_checker->pages = mc_pages_store_new();
-  mc_model_checker->fd_clear_refs = -1;
-  mc_model_checker->fd_pagemap = -1;
+  mc_model_checker = MC_model_checker_new();
 
   mc_comp_times = xbt_new0(s_mc_comparison_times_t, 1);
 
@@ -163,25 +192,25 @@ void MC_init()
     /* Ignore local variable about time used for tracing */
     MC_ignore_local_variable("start_time", "*");
 
+    /* Main MC state: */
     MC_ignore_global_variable("mc_model_checker");
+    MC_ignore_global_variable("communications_pattern");
+    MC_ignore_global_variable("initial_communications_pattern");
+    MC_ignore_global_variable("incomplete_communications_pattern");
 
-    // Mot of those things could be moved into mc_model_checker:
-    MC_ignore_global_variable("compared_pointers");
+    /* MC __thread variables: */
+    MC_ignore_global_variable("mc_diff_info");
     MC_ignore_global_variable("mc_comp_times");
     MC_ignore_global_variable("mc_snapshot_comparison_time");
+
+    /* This MC state is used in MC replay as well: */
     MC_ignore_global_variable("mc_time");
-    MC_ignore_global_variable("smpi_current_rank");
-    MC_ignore_global_variable("counter");       /* Static variable used for tracing */
-    MC_ignore_global_variable("maestro_stack_start");
-    MC_ignore_global_variable("maestro_stack_end");
-    MC_ignore_global_variable("smx_total_comms");
-    MC_ignore_global_variable("communications_pattern");
-    MC_ignore_global_variable("initial_communications_pattern");
-    MC_ignore_global_variable("incomplete_communications_pattern");
 
-    if (MC_is_active()) {
-      MC_ignore_global_variable("mc_diff_info");
-    }
+    /* Static variable used for tracing */
+    MC_ignore_global_variable("counter");
+
+    /* SIMIX */
+    MC_ignore_global_variable("smx_total_comms");
 
     MC_ignore_heap(mc_time, simix_process_maxpid * sizeof(double));
 
@@ -325,38 +354,6 @@ void MC_exit(void)
   //xbt_abort();
 }
 
-int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max)
-{
-
-  return simcall->mc_value;
-}
-
-
-int MC_random(int min, int max)
-{
-  /*FIXME: return mc_current_state->executed_transition->random.value; */
-  return simcall_mc_random(min, max);
-}
-
-/**
- * \brief Schedules all the process that are ready to run
- */
-void MC_wait_for_requests(void)
-{
-  smx_process_t process;
-  smx_simcall_t req;
-  unsigned int iter;
-
-  while (!xbt_dynar_is_empty(simix_global->process_to_run)) {
-    SIMIX_process_runall();
-      xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
-      req = &process->simcall;
-      if (req->call != SIMCALL_NONE && !MC_request_is_visible(req))
-        SIMIX_simcall_handle(req, 0);
-    }
-  }
-}
-
 int MC_deadlock_check()
 {
   int deadlock = FALSE;
@@ -403,6 +400,13 @@ void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t req, int value
  *        a given model-checker stack.
  * \param stack The stack with the transitions to execute.
  * \param start Start index to begin the re-execution.
+ *
+ *  If start==-1, restore the initial state and replay the actions the
+ *  the transitions in the stack.
+ *
+ *  Otherwise, we only replay a part of the transitions of the stacks
+ *  without restoring the state: it is assumed that the current state
+ *  match with the transitions to execute.
  */
 void MC_replay(xbt_fifo_t stack, int start)
 {
@@ -458,7 +462,6 @@ void MC_replay(xbt_fifo_t stack, int start)
 
   MC_SET_STD_HEAP;
 
-
   /* Traverse the stack from the state at position start and re-execute the transitions */
   for (item = start_item;
        item != xbt_fifo_get_first_item(stack);
@@ -762,6 +765,7 @@ void MC_assert(int prop)
     XBT_INFO("*** PROPERTY NOT VALID ***");
     XBT_INFO("**************************");
     XBT_INFO("Counter-example execution trace:");
+    MC_record_dump_path(mc_stack);
     MC_dump_stack_safety(mc_stack);
     MC_print_statistics(mc_stats);
     xbt_abort();
@@ -773,23 +777,6 @@ void MC_cut(void)
   user_max_depth_reached = 1;
 }
 
-void MC_process_clock_add(smx_process_t process, double amount)
-{
-  mc_time[process->pid] += amount;
-}
-
-double MC_process_clock_get(smx_process_t process)
-{
-  if (mc_time) {
-    if (process != NULL)
-      return mc_time[process->pid];
-    else
-      return -1;
-  } else {
-    return 0;
-  }
-}
-
 void MC_automaton_load(const char *file)
 {
 
@@ -857,3 +844,21 @@ void MC_dump_stacks(FILE* file)
   if (raw_mem_set)
     MC_SET_MC_HEAP;
 }
+#endif
+
+double MC_process_clock_get(smx_process_t process)
+{
+  if (mc_time) {
+    if (process != NULL)
+      return mc_time[process->pid];
+    else
+      return -1;
+  } else {
+    return 0;
+  }
+}
+
+void MC_process_clock_add(smx_process_t process, double amount)
+{
+  mc_time[process->pid] += amount;
+}
index 1f6dd21..13cab5e 100644 (file)
@@ -5,8 +5,10 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "internal_config.h"
+#include "mc_object_info.h"
 #include "mc_private.h"
 #include "smpi/private.h"
+#include "mc/mc_snapshot.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_ignore, mc,
                                 "Logging specific to MC ignore mechanism");
index 42d7c89..1b8c3dd 100644 (file)
@@ -4,10 +4,17 @@
 /* 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 "mc_private.h"
 #include <unistd.h>
 #include <sys/wait.h>
 
+#include <xbt/dynar.h>
+#include <xbt/automaton.h>
+
+#include "mc_request.h"
+#include "mc_liveness.h"
+#include "mc_private.h"
+#include "mc_record.h"
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_liveness, mc,
                                 "Logging specific to algorithms for liveness properties verification");
 
diff --git a/src/mc/mc_liveness.h b/src/mc/mc_liveness.h
new file mode 100644 (file)
index 0000000..4454c80
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_LIVENESS_H
+#define MC_LIVENESS_H
+
+#include <stdint.h>
+
+#include <simgrid_config.h>
+#include <xbt/fifo.h>
+#include <xbt/dynar.h>
+#include <xbt/automaton.h>
+#include "mc_state.h"
+
+SG_BEGIN_DECL()
+
+extern xbt_automaton_t _mc_property_automaton;
+
+typedef struct s_mc_pair{
+  int num;
+  int search_cycle;
+  mc_state_t graph_state; /* System state included */
+  xbt_automaton_state_t automaton_state;
+  xbt_dynar_t atomic_propositions;
+  int requests;
+} s_mc_pair_t, *mc_pair_t;
+
+typedef struct s_mc_visited_pair{
+  int num;
+  int other_num; /* Dot output for */
+  int acceptance_pair;
+  mc_state_t graph_state; /* System state included */
+  xbt_automaton_state_t automaton_state;
+  xbt_dynar_t atomic_propositions;
+  size_t heap_bytes_used;
+  int nb_processes;
+  int acceptance_removed;
+  int visited_removed;
+} s_mc_visited_pair_t, *mc_visited_pair_t;
+
+mc_pair_t MC_pair_new(void);
+void MC_pair_delete(mc_pair_t);
+void mc_pair_free_voidp(void *p);
+mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
+void MC_visited_pair_delete(mc_visited_pair_t p);
+
+void MC_pre_modelcheck_liveness(void);
+void MC_modelcheck_liveness(void);
+void MC_show_stack_liveness(xbt_fifo_t stack);
+void MC_dump_stack_liveness(xbt_fifo_t stack);
+
+extern xbt_dynar_t visited_pairs;
+int is_visited_pair(mc_visited_pair_t pair, int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
+
+SG_END_DECL()
+
+#endif
diff --git a/src/mc/mc_location.h b/src/mc/mc_location.h
new file mode 100644 (file)
index 0000000..45657f4
--- /dev/null
@@ -0,0 +1,117 @@
+/* Copyright (c) 2004-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_OBJECT_LOCATION_H
+#define MC_OBJECT_LOCATION_H
+
+#include <stdint.h>
+
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#include <dwarf.h>
+#include <elfutils/libdw.h>
+
+#include <simgrid_config.h>
+#include "mc_interface.h"
+#include "mc_object_info.h"
+#include "mc_forward.h"
+
+SG_BEGIN_DECL()
+
+/** \brief a DWARF expression with optional validity contraints */
+typedef struct s_mc_expression {
+  size_t size;
+  Dwarf_Op* ops;
+  // Optional validity:
+  void* lowpc, *highpc;
+} s_mc_expression_t, *mc_expression_t;
+
+/** A location list (list of location expressions) */
+typedef struct s_mc_location_list {
+  size_t size;
+  mc_expression_t locations;
+} s_mc_location_list_t, *mc_location_list_t;
+
+/** A location is either a location in memory of a register location
+ *
+ *  Usage:
+ *
+ *    * mc_dwarf_resolve_locations or mc_dwarf_resolve_location is used
+ *      to find the location of a given location expression or location list;
+ *
+ *    * mc_get_location_type MUST be used to find the location type;
+ *
+ *    * for MC_LOCATION_TYPE_ADDRESS, memory_address is the resulting address
+ *
+ *    * for MC_LOCATION_TYPE_REGISTER, unw_get_reg(l.cursor, l.register_id, value)
+ *        and unw_get_reg(l.cursor, l.register_id, value) can be used to read/write
+ *        the value.
+ *  </ul>
+ */
+typedef struct s_mc_location {
+  void* memory_location;
+  unw_cursor_t* cursor;
+  int register_id;
+} s_mc_location_t, *mc_location_t;
+
+/** Type of a given location
+ *
+ *  Use `mc_get_location_type(location)` to find the type.
+ * */
+typedef enum mc_location_type {
+  MC_LOCATION_TYPE_ADDRESS,
+  MC_LOCATION_TYPE_REGISTER
+} mc_location_type;
+
+/** Find the type of a location */
+static inline __attribute__ ((always_inline))
+enum mc_location_type mc_get_location_type(mc_location_t location) {
+  if (location->cursor) {
+    return MC_LOCATION_TYPE_REGISTER;
+  } else {
+    return MC_LOCATION_TYPE_ADDRESS;
+  }
+}
+
+void mc_dwarf_resolve_location(mc_location_t location, mc_expression_t expression, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index);
+void mc_dwarf_resolve_locations(mc_location_t location, mc_location_list_t locations, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index);
+
+void mc_dwarf_expression_clear(mc_expression_t expression);
+void mc_dwarf_expression_init(mc_expression_t expression, size_t len, Dwarf_Op* ops);
+
+void mc_dwarf_location_list_clear(mc_location_list_t list);
+
+void mc_dwarf_location_list_init_from_expression(mc_location_list_t target, size_t len, Dwarf_Op* ops);
+void mc_dwarf_location_list_init(mc_location_list_t target, mc_object_info_t info, Dwarf_Die* die, Dwarf_Attribute* attr);
+
+#define MC_EXPRESSION_STACK_SIZE 64
+
+#define MC_EXPRESSION_OK 0
+#define MC_EXPRESSION_E_UNSUPPORTED_OPERATION 1
+#define MC_EXPRESSION_E_STACK_OVERFLOW 2
+#define MC_EXPRESSION_E_STACK_UNDERFLOW 3
+#define MC_EXPRESSION_E_MISSING_STACK_CONTEXT 4
+#define MC_EXPRESSION_E_MISSING_FRAME_BASE 5
+#define MC_EXPRESSION_E_NO_BASE_ADDRESS 6
+
+typedef struct s_mc_expression_state {
+  uintptr_t stack[MC_EXPRESSION_STACK_SIZE];
+  size_t stack_size;
+
+  unw_cursor_t* cursor;
+  void* frame_base;
+  mc_snapshot_t snapshot;
+  mc_object_info_t object_info;
+  int process_index;
+} s_mc_expression_state_t, *mc_expression_state_t;
+
+int mc_dwarf_execute_expression(size_t n, const Dwarf_Op* ops, mc_expression_state_t state);
+
+void* mc_find_frame_base(dw_frame_t frame, mc_object_info_t object_info, unw_cursor_t* unw_cursor);
+
+SG_END_DECL()
+
+#endif
index ff7667d..b5ee069 100644 (file)
@@ -4,6 +4,7 @@
 /* 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 "mc_object_info.h"
 #include "mc_private.h"
 
 /** Resolve snapshot in the process address space
@@ -38,4 +39,3 @@ void *mc_member_resolve(const void *base, dw_type_t type, dw_type_t member,
   else
     return (void *) state.stack[state.stack_size - 1];
 }
-
index 655418d..b474b0c 100644 (file)
@@ -6,9 +6,12 @@
 
 #include <sys/stat.h>
 #include <fcntl.h>
+
+#include "xbt/log.h"
+
 #include "mc/mc.h"
+#include "mc_object_info.h"
 #include "mc_private.h"
-#include "xbt/log.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_memory, mc,
                                 "Logging specific to MC (memory)");
diff --git a/src/mc/mc_memory_map.h b/src/mc/mc_memory_map.h
new file mode 100644 (file)
index 0000000..afa2b58
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_MEMORY_MAP_H
+#define MC_MEMORY_MAP_H
+
+#include <simgrid_config.h>
+#include "mc_forward.h"
+
+SG_BEGIN_DECL()
+
+/** \file
+ *   These functions and data structures implements a binary interface for
+ *   the proc maps ascii interface                                           */
+
+/* Each field is defined as documented in proc's manual page  */
+struct s_map_region {
+
+  void *start_addr;             /* Start address of the map */
+  void *end_addr;               /* End address of the map */
+  int prot;                     /* Memory protection */
+  int flags;                    /* Additional memory flags */
+  void *offset;                 /* Offset in the file/whatever */
+  char dev_major;               /* Major of the device */
+  char dev_minor;               /* Minor of the device */
+  unsigned long inode;          /* Inode in the device */
+  char *pathname;               /* Path name of the mapped file */
+
+};
+typedef struct s_map_region s_map_region_t, *map_region_t;
+
+struct s_memory_map {
+
+  s_map_region_t *regions;      /* Pointer to an array of regions */
+  int mapsize;                  /* Number of regions in the memory */
+
+};
+
+void MC_init_memory_map_info(void);
+memory_map_t MC_get_memory_map(void);
+void MC_free_memory_map(memory_map_t map);
+
+SG_END_DECL()
+
+#endif
diff --git a/src/mc/mc_mmalloc.h b/src/mc/mc_mmalloc.h
new file mode 100644 (file)
index 0000000..4ceecbd
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_MMALLOC_H
+#define MC_MMALLOC_H
+
+#include <xbt/mmalloc.h>
+
+/** file
+ *  Support for seperate heaps.
+ *
+ *  The possible memory modes for the modelchecker are standard and raw.
+ *  Normally the system should operate in std, for switching to raw mode
+ *  you must wrap the code between MC_SET_RAW_MODE and MC_UNSET_RAW_MODE.
+ */
+extern xbt_mheap_t std_heap;
+extern xbt_mheap_t mc_heap;
+
+/* FIXME: Horrible hack! because the mmalloc library doesn't provide yet of */
+/* an API to query about the status of a heap, we simply call mmstats and */
+/* because I now how does structure looks like, then I redefine it here */
+
+/* struct mstats { */
+/*   size_t bytes_total;           /\* Total size of the heap. *\/ */
+/*   size_t chunks_used;           /\* Chunks allocated by the user. *\/ */
+/*   size_t bytes_used;            /\* Byte total of user-allocated chunks. *\/ */
+/*   size_t chunks_free;           /\* Chunks in the free list. *\/ */
+/*   size_t bytes_free;            /\* Byte total of chunks in the free list. *\/ */
+/* }; */
+
+#define MC_SET_MC_HEAP    mmalloc_set_current_heap(mc_heap)
+#define MC_SET_STD_HEAP  mmalloc_set_current_heap(std_heap)
+
+#endif
index f188da7..6740829 100644 (file)
 #include <stdint.h>
 #include <stdbool.h>
 
+#include <simgrid_config.h>
+
+SG_BEGIN_DECL()
+
 extern int xbt_pagesize;
 extern int xbt_pagebits;
 
@@ -68,4 +72,6 @@ bool mc_same_page(void* a, void* b)
   return ((uintptr_t) a >> xbt_pagebits) == ((uintptr_t) b >> xbt_pagebits);
 }
 
+SG_END_DECL()
+
 #endif
diff --git a/src/mc/mc_model_checker.h b/src/mc/mc_model_checker.h
new file mode 100644 (file)
index 0000000..9ab2813
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+#ifndef MC_MODEL_CHECKER_H
+#define MC_MODEL_CHECKER_H
+
+#include <simgrid_config.h>
+
+#include "mc_forward.h"
+
+SG_BEGIN_DECL()
+
+/** @brief State of the model-checker (global variables for the model checker)
+ *
+ *  Each part of the state of the model chercker represented as a global
+ *  variable prevents some sharing between snapshots and must be ignored.
+ *  By moving as much state as possible in this structure allocated
+ *  on the model-chercker heap, we avoid those issues.
+ */
+struct s_mc_model_checker {
+  // This is the parent snapshot of the current state:
+  mc_snapshot_t parent_snapshot;
+  mc_pages_store_t pages;
+  int fd_clear_refs;
+  int fd_pagemap;
+  xbt_dynar_t record;
+};
+
+mc_model_checker_t MC_model_checker_new(void);
+void MC_model_checker_delete(mc_model_checker_t mc);
+
+SG_END_DECL()
+
+#endif
diff --git a/src/mc/mc_object_info.h b/src/mc/mc_object_info.h
new file mode 100644 (file)
index 0000000..2e0b68f
--- /dev/null
@@ -0,0 +1,150 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+/** file
+ *  Debug information for the MC.
+ */
+
+#ifndef MC_OBJECT_INFO_H
+#define MC_OBJECT_INFO_H
+
+#include <stdint.h>
+
+#include <simgrid_config.h>
+#include <xbt/dict.h>
+#include <xbt/dynar.h>
+
+#include "mc_forward.h"
+#include "mc_location.h"
+
+SG_BEGIN_DECL();
+
+// ***** Type
+
+typedef int e_dw_type_type;
+
+struct s_dw_type {
+  e_dw_type_type type;
+  Dwarf_Off id; /* Offset in the section (in hexadecimal form) */
+  char *name; /* Name of the type */
+  int byte_size; /* Size in bytes */
+  int element_count; /* Number of elements for array type */
+  char *dw_type_id; /* DW_AT_type id */
+  xbt_dynar_t members; /* if DW_TAG_structure_type, DW_TAG_class_type, DW_TAG_union_type*/
+  int is_pointer_type;
+
+  // Location (for members) is either of:
+  struct s_mc_expression location;
+  int offset;
+
+  dw_type_t subtype; // DW_AT_type
+  dw_type_t full_type; // The same (but more complete) type
+};
+
+void dw_type_free(dw_type_t t);
+void dw_variable_free(dw_variable_t v);
+void dw_variable_free_voidp(void *t);
+
+// ***** Object info
+
+enum mc_object_info_flags {
+  MC_OBJECT_INFO_NONE = 0,
+  MC_OBJECT_INFO_EXECUTABLE = 1
+};
+
+struct s_mc_object_info {
+  enum mc_object_info_flags flags;
+  char* file_name;
+  char *start_exec, *end_exec; // Executable segment
+  char *start_rw, *end_rw; // Read-write segment
+  char *start_ro, *end_ro; // read-only segment
+  xbt_dict_t subprograms; // xbt_dict_t<origin as hexadecimal string, dw_frame_t>
+  xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
+  xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
+  xbt_dict_t full_types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
+
+  // Here we sort the minimal information for an efficient (and cache-efficient)
+  // lookup of a function given an instruction pointer.
+  // The entries are sorted by low_pc and a binary search can be used to look them up.
+  xbt_dynar_t functions_index;
+};
+
+/** Find the DWARF offset for this ELF object
+ *
+ *  An offset is applied to address found in DWARF:
+ *
+ *  <ul>
+ *    <li>for an executable obejct, addresses are virtual address
+ *        (there is no offset) i.e. \f$\text{virtual address} = \{dwarf address}\f$;</li>
+ *    <li>for a shared object, the addreses are offset from the begining
+ *        of the shared object (the base address of the mapped shared
+ *        object must be used as offset
+ *        i.e. \f$\text{virtual address} = \text{shared object base address}
+ *             + \text{dwarf address}\f$.</li>
+ *
+ */
+void* MC_object_base_address(mc_object_info_t info);
+
+mc_object_info_t MC_new_object_info(void);
+mc_object_info_t MC_find_object_info(memory_map_t maps, char* name, int executable);
+void MC_free_object_info(mc_object_info_t* p);
+
+void MC_post_process_object_info(mc_object_info_t info);
+
+void MC_dwarf_get_variables(mc_object_info_t info);
+void MC_dwarf_get_variables_libdw(mc_object_info_t info);
+const char* MC_dwarf_attrname(int attr);
+const char* MC_dwarf_tagname(int tag);
+
+// Not used:
+char* get_type_description(mc_object_info_t info, char *type_name);
+
+extern mc_object_info_t mc_libsimgrid_info;
+extern mc_object_info_t mc_binary_info;
+extern mc_object_info_t mc_object_infos[2];
+extern size_t mc_object_infos_size;
+
+void* mc_member_resolve(const void* base, dw_type_t type, dw_type_t member, mc_snapshot_t snapshot, int process_index);
+
+struct s_dw_variable{
+  Dwarf_Off dwarf_offset; /* Global offset of the field. */
+  int global;
+  char *name;
+  char *type_origin;
+  dw_type_t type;
+
+  // Use either of:
+  s_mc_location_list_t locations;
+  void* address;
+
+  size_t start_scope;
+  mc_object_info_t object_info;
+
+};
+
+struct s_dw_frame{
+  int tag;
+  char *name;
+  void *low_pc;
+  void *high_pc;
+  s_mc_location_list_t frame_base;
+  xbt_dynar_t /* <dw_variable_t> */ variables; /* Cannot use dict, there may be several variables with the same name (in different lexical blocks)*/
+  unsigned long int id; /* DWARF offset of the subprogram */
+  xbt_dynar_t /* <dw_frame_t> */ scopes;
+  Dwarf_Off abstract_origin_id;
+  mc_object_info_t object_info;
+};
+
+struct s_mc_function_index_item {
+  void* low_pc, *high_pc;
+  dw_frame_t function;
+};
+
+void mc_frame_free(dw_frame_t freme);
+
+SG_END_DECL()
+
+#endif
index a231848..499e5f2 100644 (file)
@@ -1,6 +1,7 @@
 #include "mc_page_store.h"
 #include "mc_mmu.h"
 #include "mc_private.h"
+#include "mc_snapshot.h"
 
 #include <xbt/mmalloc.h>
 
index 9b78418..45965e7 100644 (file)
@@ -213,7 +213,7 @@ size_t s_mc_pages_store::capacity() {
 SG_BEGIN_DECL()
 
 typedef struct s_mc_pages_store s_mc_pages_store_t, * mc_pages_store_t;
-mc_pages_store_t mc_pages_store_new();
+mc_pages_store_t mc_pages_store_new(void);
 void mc_pages_store_delete(mc_pages_store_t store);
 
 /**
index 29910e6..62e1f38 100644 (file)
@@ -4,6 +4,8 @@
 /* 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 <xbt.h>
+#include "mc_liveness.h"
 #include "mc_private.h"
 
 mc_pair_t MC_pair_new()
index a44df30..9e3d9ca 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "simgrid_config.h"
 #include <stdio.h>
+#include <stdint.h>
 #include <stdbool.h>
 #ifndef WIN32
 #include <sys/mman.h>
@@ -16,6 +17,7 @@
 #include <elfutils/libdw.h>
 
 #include "mc/mc.h"
+#include "mc_base.h"
 #include "mc/datatypes.h"
 #include "xbt/fifo.h"
 #include "xbt/config.h"
 #include "msg/datatypes.h"
 #include "xbt/strbuff.h"
 #include "xbt/parmap.h"
-#include "mc_mmu.h"
-#include "mc_page_store.h"
-#include "mc_interface.h"
+
+#include "mc_forward.h"
 
 SG_BEGIN_DECL()
 
-typedef struct s_dw_frame s_dw_frame_t, *dw_frame_t;
 typedef struct s_mc_function_index_item s_mc_function_index_item_t, *mc_function_index_item_t;
 
 /****************************** Snapshots ***********************************/
 
-#define NB_REGIONS 3 /* binary data (data + BSS) (type = 2), libsimgrid data (data + BSS) (type = 1), std_heap (type = 0)*/
-
-/** @brief Copy/snapshot of a given memory region
- *
- *  Two types of region snapshots exist:
- *  <ul>
- *    <li>flat/dense snapshots are a simple copy of the region;</li>
- *    <li>sparse/per-page snapshots are snaapshots which shared
- *    identical pages.</li>
- *  </ul>
- */
-typedef struct s_mc_mem_region{
-  /** @brief  Virtual address of the region in the simulated process */
-  void *start_addr;
-
-  /** @brief Permanent virtual address of the region
-   *
-   * This is usually the same address as the simuilated process address.
-   * However, when using SMPI privatization of global variables,
-   * each SMPI process has its own set of global variables stored
-   * at a different virtual address. The scheduler maps those region
-   * on the region of the global variables.
-   *
-   * */
-  void *permanent_addr;
-
-  /** @brief Copy of the snapshot for flat snapshots regions (NULL otherwise) */
-  void *data;
-
-  /** @brief Size of the data region in bytes */
-  size_t size;
-
-  /** @brief Pages indices in the page store for per-page snapshots (NULL otherwise) */
-  size_t* page_numbers;
-
-} s_mc_mem_region_t, *mc_mem_region_t;
-
-static inline  __attribute__ ((always_inline))
-bool mc_region_contain(mc_mem_region_t region, void* p)
-{
-  return p >= region->start_addr &&
-    p < (void*)((char*) region->start_addr + region->size);
-}
-
-/** Ignored data
- *
- *  Some parts of the snapshot are ignored by zeroing them out: the real
- *  values is stored here.
- * */
-typedef struct s_mc_snapshot_ignored_data {
-  void* start;
-  size_t size;
-  void* data;
-} s_mc_snapshot_ignored_data_t, *mc_snapshot_ignored_data_t;
-
-typedef struct s_fd_infos{
-  char *filename;
-  int number;
-  off_t current_position;
-  int flags;
-}s_fd_infos_t, *fd_infos_t;
-
-typedef struct s_mc_snapshot{
-  size_t heap_bytes_used;
-  mc_mem_region_t regions[NB_REGIONS];
-  xbt_dynar_t enabled_processes;
-  mc_mem_region_t* privatization_regions;
-  int privatization_index;
-  size_t *stack_sizes;
-  xbt_dynar_t stacks;
-  xbt_dynar_t to_ignore;
-  uint64_t hash;
-  xbt_dynar_t ignored_data;
-  int total_fd;
-  fd_infos_t *current_fd;
-} s_mc_snapshot_t;
-
-
-/** @brief Process index used when no process is available
- *
- *  The expected behaviour is that if a process index is needed it will fail.
- * */
-#define MC_NO_PROCESS_INDEX -1
-
-/** @brief Process index when any process is suitable
- *
- * We could use a special negative value in the future.
- */
-#define MC_ANY_PROCESS_INDEX 0
-
-mc_mem_region_t mc_get_snapshot_region(void* addr, mc_snapshot_t snapshot, int process_index);
-
-static inline __attribute__ ((always_inline))
-mc_mem_region_t mc_get_region_hinted(void* addr, mc_snapshot_t snapshot, int process_index, mc_mem_region_t region)
-{
-  if (mc_region_contain(region, addr))
-    return region;
-  else
-    return mc_get_snapshot_region(addr, snapshot, process_index);
-}
-
-/** Information about a given stack frame
- *
- */
-typedef struct s_mc_stack_frame {
-  /** Instruction pointer */
-  unw_word_t ip;
-  /** Stack pointer */
-  unw_word_t sp;
-  unw_word_t frame_base;
-  dw_frame_t frame;
-  char* frame_name;
-  unw_cursor_t unw_cursor;
-} s_mc_stack_frame_t, *mc_stack_frame_t;
-
-typedef struct s_mc_snapshot_stack{
-  xbt_dynar_t local_variables;
-  xbt_dynar_t stack_frames; // mc_stack_frame_t
-  int process_index;
-}s_mc_snapshot_stack_t, *mc_snapshot_stack_t;
-
-typedef struct s_mc_global_t{
-  mc_snapshot_t snapshot;
-  int raw_mem_set;
-  int prev_pair;
-  char *prev_req;
-  int initial_communications_pattern_done;
-  int comm_deterministic;
-  int send_deterministic;
-}s_mc_global_t, *mc_global_t;
-
-typedef struct s_mc_checkpoint_ignore_region{
-  void *addr;
-  size_t size;
-}s_mc_checkpoint_ignore_region_t, *mc_checkpoint_ignore_region_t;
-
-static void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot);
-
-mc_snapshot_t MC_take_snapshot(int num_state);
-void MC_restore_snapshot(mc_snapshot_t);
-void MC_free_snapshot(mc_snapshot_t);
-
-int mc_important_snapshot(mc_snapshot_t snapshot);
-
-size_t* mc_take_page_snapshot_region(void* data, size_t page_count, uint64_t* pagemap, size_t* reference_pages);
-void mc_free_page_snapshot_region(size_t* pagenos, size_t page_count);
-void mc_restore_page_snapshot_region(void* start_addr, size_t page_count, size_t* pagenos, uint64_t* pagemap, size_t* reference_pagenos);
-
-mc_mem_region_t mc_region_new_sparse(int type, void *start_addr, void* data_addr, size_t size, mc_mem_region_t ref_reg);
-void MC_region_destroy(mc_mem_region_t reg);
-void mc_region_restore_sparse(mc_mem_region_t reg, mc_mem_region_t ref_reg);
-void mc_softdirty_reset();
-
-static inline __attribute__((always_inline))
-bool mc_snapshot_region_linear(mc_mem_region_t region) {
-  return !region || !region->data;
-}
-
-void* mc_snapshot_read_fragmented(void* addr, mc_mem_region_t region, void* target, size_t size);
-
-void* mc_snapshot_read(void* addr, mc_snapshot_t snapshot, int process_index, void* target, size_t size);
-int mc_snapshot_region_memcmp(
-  void* addr1, mc_mem_region_t region1,
-  void* addr2, mc_mem_region_t region2, size_t size);
-int mc_snapshot_memcmp(
-  void* addr1, mc_snapshot_t snapshot1,
-  void* addr2, mc_snapshot_t snapshot2, int process_index, size_t size);
-
-static void* mc_snapshot_read_pointer(void* addr, mc_snapshot_t snapshot, int process_index);
-
-/** @brief State of the model-checker (global variables for the model checker)
- *
- *  Each part of the state of the model chercker represented as a global
- *  variable prevents some sharing between snapshots and must be ignored.
- *  By moving as much state as possible in this structure allocated
- *  on the model-chercker heap, we avoid those issues.
- */
-typedef struct s_mc_model_checker {
-  // This is the parent snapshot of the current state:
-  mc_snapshot_t parent_snapshot;
-  mc_pages_store_t pages;
-  int fd_clear_refs;
-  int fd_pagemap;
-} s_mc_model_checker_t, *mc_model_checker_t;
-
-extern mc_model_checker_t mc_model_checker;
-
 extern xbt_dynar_t mc_checkpoint_ignore;
 
 /********************************* MC Global **********************************/
 
-extern double *mc_time;
 extern FILE *dot_output;
 extern const char* colors[13];
 extern xbt_parmap_t parmap;
@@ -241,84 +53,18 @@ extern int user_max_depth_reached;
 int MC_deadlock_check(void);
 void MC_replay(xbt_fifo_t stack, int start);
 void MC_replay_liveness(xbt_fifo_t stack, int all_stack);
-void MC_wait_for_requests(void);
 void MC_show_deadlock(smx_simcall_t req);
 void MC_show_stack_safety(xbt_fifo_t stack);
 void MC_dump_stack_safety(xbt_fifo_t stack);
 
-extern xbt_fifo_t mc_stack;
-int get_search_interval(xbt_dynar_t list, void *ref, int *min, int *max);
-
-
-/********************************* Requests ***********************************/
-
-int MC_request_depend(smx_simcall_t req1, smx_simcall_t req2);
-char* MC_request_to_string(smx_simcall_t req, int value);
-unsigned int MC_request_testany_fail(smx_simcall_t req);
-/*int MC_waitany_is_enabled_by_comm(smx_req_t req, unsigned int comm);*/
-int MC_request_is_visible(smx_simcall_t req);
-
-/** Can this requests can be executed.
+/** Stack (of `mc_state_t`) representing the current position of the
+ *  the MC in the exploration graph
  *
- *  Most requests are always enabled but WAIT and WAITANY
- *  are not always enabled: a WAIT where the communication does not
- *  have both a source and a destination yet is not enabled
- *  (unless timeout is enabled in the wait and enabeld in SimGridMC).
+ *  It is managed by its head (`xbt_fifo_shift` and `xbt_fifo_unshift`).
  */
-int MC_request_is_enabled(smx_simcall_t req);
-int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx);
+extern xbt_fifo_t mc_stack;
 
-/** Is the process ready to execute its simcall?
- *
- *  This is true if the request associated with the process is ready.
- */
-int MC_process_is_enabled(smx_process_t process);
-
-char *MC_request_get_dot_output(smx_simcall_t req, int value);
-
-
-/******************************** States **************************************/
-
-extern mc_global_t initial_global_state;
-
-/* Possible exploration status of a process in a state */
-typedef enum {
-  MC_NOT_INTERLEAVE=0,      /* Do not interleave (do not execute) */
-  MC_INTERLEAVE,            /* Interleave the process (one or more request) */
-  MC_MORE_INTERLEAVE,       /* Interleave twice the process (for mc_random simcall) */
-  MC_DONE                   /* Already interleaved */
-} e_mc_process_state_t;
-
-/* On every state, each process has an entry of the following type */
-typedef struct mc_procstate{
-  e_mc_process_state_t state;       /* Exploration control information */
-  unsigned int interleave_count;    /* Number of times that the process was
-                                       interleaved */
-} s_mc_procstate_t, *mc_procstate_t;
-
-/* An exploration state is composed of: */
-typedef struct mc_state {
-  unsigned long max_pid;            /* Maximum pid at state's creation time */
-  mc_procstate_t proc_status;       /* State's exploration status by process */
-  s_smx_synchro_t internal_comm;     /* To be referenced by the internal_req */
-  s_smx_simcall_t internal_req;         /* Internal translation of request */
-  s_smx_simcall_t executed_req;         /* The executed request of the state */
-  int req_num;                      /* The request number (in the case of a
-                                       multi-request like waitany ) */
-  mc_snapshot_t system_state;      /* Snapshot of system state */
-  int num;
-} s_mc_state_t, *mc_state_t;
-
-mc_state_t MC_state_new(void);
-void MC_state_delete(mc_state_t state);
-void MC_state_interleave_process(mc_state_t state, smx_process_t process);
-unsigned int MC_state_interleave_size(mc_state_t state);
-int MC_state_process_is_done(mc_state_t state, smx_process_t process);
-void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, int value);
-smx_simcall_t MC_state_get_executed_request(mc_state_t state, int *value);
-smx_simcall_t MC_state_get_internal_request(mc_state_t state);
-smx_simcall_t MC_state_get_request(mc_state_t state, int *value);
-void MC_state_remove_interleave_process(mc_state_t state, smx_process_t process);
+int get_search_interval(xbt_dynar_t list, void *ref, int *min, int *max);
 
 
 /****************************** Statistics ************************************/
@@ -334,64 +80,7 @@ typedef struct mc_stats {
 
 extern mc_stats_t mc_stats;
 
-void MC_print_statistics(mc_stats_t);
-
-
-/********************************** MEMORY ******************************/
-/* The possible memory modes for the modelchecker are standard and raw. */
-/* Normally the system should operate in std, for switching to raw mode */
-/* you must wrap the code between MC_SET_RAW_MODE and MC_UNSET_RAW_MODE */
-
-extern xbt_mheap_t std_heap;
-extern xbt_mheap_t mc_heap;
-
-
-/* FIXME: Horrible hack! because the mmalloc library doesn't provide yet of */
-/* an API to query about the status of a heap, we simply call mmstats and */
-/* because I now how does structure looks like, then I redefine it here */
-
-/* struct mstats { */
-/*   size_t bytes_total;           /\* Total size of the heap. *\/ */
-/*   size_t chunks_used;           /\* Chunks allocated by the user. *\/ */
-/*   size_t bytes_used;            /\* Byte total of user-allocated chunks. *\/ */
-/*   size_t chunks_free;           /\* Chunks in the free list. *\/ */
-/*   size_t bytes_free;            /\* Byte total of chunks in the free list. *\/ */
-/* }; */
-
-#define MC_SET_MC_HEAP    mmalloc_set_current_heap(mc_heap)
-#define MC_SET_STD_HEAP  mmalloc_set_current_heap(std_heap)
-
-
-/******************************* MEMORY MAPPINGS ***************************/
-/* These functions and data structures implements a binary interface for   */
-/* the proc maps ascii interface                                           */
-
-/* Each field is defined as documented in proc's manual page  */
-typedef struct s_map_region {
-
-  void *start_addr;             /* Start address of the map */
-  void *end_addr;               /* End address of the map */
-  int prot;                     /* Memory protection */
-  int flags;                    /* Additional memory flags */
-  void *offset;                 /* Offset in the file/whatever */
-  char dev_major;               /* Major of the device */
-  char dev_minor;               /* Minor of the device */
-  unsigned long inode;          /* Inode in the device */
-  char *pathname;               /* Path name of the mapped file */
-
-} s_map_region_t;
-
-typedef struct s_memory_map {
-
-  s_map_region_t *regions;      /* Pointer to an array of regions */
-  int mapsize;                  /* Number of regions in the memory */
-
-} s_memory_map_t, *memory_map_t;
-
-
-void MC_init_memory_map_info(void);
-memory_map_t MC_get_memory_map(void);
-void MC_free_memory_map(memory_map_t map);
+void MC_print_statistics(mc_stats_t stats);
 
 extern char *libsimgrid_path;
 
@@ -416,292 +105,12 @@ void print_comparison_times(void);
 //#define MC_DEBUG 1
 #define MC_VERBOSE 1
 
-/********************************** Safety verification **************************************/
-
-typedef enum {
-  e_mc_reduce_unset,
-  e_mc_reduce_none,
-  e_mc_reduce_dpor
-} e_mc_reduce_t;
-
-extern e_mc_reduce_t mc_reduce_kind;
-extern xbt_dict_t first_enabled_state;
-
-void MC_pre_modelcheck_safety(void);
-void MC_modelcheck_safety(void);
-
-typedef struct s_mc_visited_state{
-  mc_snapshot_t system_state;
-  size_t heap_bytes_used;
-  int nb_processes;
-  int num;
-  int other_num; // dot_output for
-}s_mc_visited_state_t, *mc_visited_state_t;
-
-extern xbt_dynar_t visited_states;
-mc_visited_state_t is_visited_state(void);
-void visited_state_free(mc_visited_state_t state);
-void visited_state_free_voidp(void *s);
-
-/********************************** Liveness verification **************************************/
-
-extern xbt_automaton_t _mc_property_automaton;
-
-typedef struct s_mc_pair{
-  int num;
-  int search_cycle;
-  mc_state_t graph_state; /* System state included */
-  xbt_automaton_state_t automaton_state;
-  xbt_dynar_t atomic_propositions;
-  int requests;
-}s_mc_pair_t, *mc_pair_t;
-
-typedef struct s_mc_visited_pair{
-  int num;
-  int other_num; /* Dot output for */
-  int acceptance_pair;
-  mc_state_t graph_state; /* System state included */
-  xbt_automaton_state_t automaton_state;
-  xbt_dynar_t atomic_propositions;
-  size_t heap_bytes_used;
-  int nb_processes;
-  int acceptance_removed;
-  int visited_removed;
-}s_mc_visited_pair_t, *mc_visited_pair_t;
-
-mc_pair_t MC_pair_new(void);
-void MC_pair_delete(mc_pair_t);
-void mc_pair_free_voidp(void *p);
-mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
-void MC_visited_pair_delete(mc_visited_pair_t p);
-
-void MC_pre_modelcheck_liveness(void);
-void MC_modelcheck_liveness(void);
-void MC_show_stack_liveness(xbt_fifo_t stack);
-void MC_dump_stack_liveness(xbt_fifo_t stack);
-
-extern xbt_dynar_t visited_pairs;
-int is_visited_pair(mc_visited_pair_t pair, int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
-
-
 /********************************** Variables with DWARF **********************************/
 
-#define MC_OBJECT_INFO_EXECUTABLE 1
-
-struct s_mc_object_info {
-  size_t flags;
-  char* file_name;
-  char *start_exec, *end_exec; // Executable segment
-  char *start_rw, *end_rw; // Read-write segment
-  char *start_ro, *end_ro; // read-only segment
-  xbt_dict_t subprograms; // xbt_dict_t<origin as hexadecimal string, dw_frame_t>
-  xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
-  xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
-  xbt_dict_t full_types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
-
-  // Here we sort the minimal information for an efficient (and cache-efficient)
-  // lookup of a function given an instruction pointer.
-  // The entries are sorted by low_pc and a binary search can be used to look them up.
-  xbt_dynar_t functions_index;
-};
-
-mc_object_info_t MC_new_object_info(void);
-mc_object_info_t MC_find_object_info(memory_map_t maps, char* name, int executable);
-void MC_free_object_info(mc_object_info_t* p);
-
-void MC_dwarf_get_variables(mc_object_info_t info);
-void MC_dwarf_get_variables_libdw(mc_object_info_t info);
-const char* MC_dwarf_attrname(int attr);
-const char* MC_dwarf_tagname(int tag);
-
 dw_frame_t MC_find_function_by_ip(void* ip);
 mc_object_info_t MC_ip_find_object_info(void* ip);
 
-extern mc_object_info_t mc_libsimgrid_info;
-extern mc_object_info_t mc_binary_info;
-extern mc_object_info_t mc_object_infos[2];
-extern size_t mc_object_infos_size;
-
 void MC_find_object_address(memory_map_t maps, mc_object_info_t result);
-void MC_post_process_object_info(mc_object_info_t info);
-
-// ***** Expressions
-
-/** \brief a DWARF expression with optional validity contraints */
-typedef struct s_mc_expression {
-  size_t size;
-  Dwarf_Op* ops;
-  // Optional validity:
-  void* lowpc, *highpc;
-} s_mc_expression_t, *mc_expression_t;
-
-/** A location list (list of location expressions) */
-typedef struct s_mc_location_list {
-  size_t size;
-  mc_expression_t locations;
-} s_mc_location_list_t, *mc_location_list_t;
-
-/** A location is either a location in memory of a register location
- *
- *  Usage:
- *
- *    * mc_dwarf_resolve_locations or mc_dwarf_resolve_location is used
- *      to find the location of a given location expression or location list;
- *
- *    * mc_get_location_type MUST be used to find the location type;
- *
- *    * for MC_LOCATION_TYPE_ADDRESS, memory_address is the resulting address
- *
- *    * for MC_LOCATION_TYPE_REGISTER, unw_get_reg(l.cursor, l.register_id, value)
- *        and unw_get_reg(l.cursor, l.register_id, value) can be used to read/write
- *        the value.
- *  </ul>
- */
-typedef struct s_mc_location {
-  void* memory_location;
-  unw_cursor_t* cursor;
-  int register_id;
-} s_mc_location_t, *mc_location_t;
-
-/** Type of a given location
- *
- *  Use `mc_get_location_type(location)` to find the type.
- * */
-typedef enum mc_location_type {
-  MC_LOCATION_TYPE_ADDRESS,
-  MC_LOCATION_TYPE_REGISTER
-} mc_location_type;
-
-/** Find the type of a location */
-static inline __attribute__ ((always_inline))
-enum mc_location_type mc_get_location_type(mc_location_t location) {
-  if (location->cursor) {
-    return MC_LOCATION_TYPE_REGISTER;
-  } else {
-    return MC_LOCATION_TYPE_ADDRESS;
-  }
-}
-
-void mc_dwarf_resolve_location(mc_location_t location, mc_expression_t expression, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index);
-void mc_dwarf_resolve_locations(mc_location_t location, mc_location_list_t locations, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index);
-
-void mc_dwarf_expression_clear(mc_expression_t expression);
-void mc_dwarf_expression_init(mc_expression_t expression, size_t len, Dwarf_Op* ops);
-
-void mc_dwarf_location_list_clear(mc_location_list_t list);
-
-void mc_dwarf_location_list_init_from_expression(mc_location_list_t target, size_t len, Dwarf_Op* ops);
-void mc_dwarf_location_list_init(mc_location_list_t target, mc_object_info_t info, Dwarf_Die* die, Dwarf_Attribute* attr);
-
-// ***** Variables and functions
-
-struct s_dw_type{
-  e_dw_type_type type;
-  Dwarf_Off id; /* Offset in the section (in hexadecimal form) */
-  char *name; /* Name of the type */
-  int byte_size; /* Size in bytes */
-  int element_count; /* Number of elements for array type */
-  char *dw_type_id; /* DW_AT_type id */
-  xbt_dynar_t members; /* if DW_TAG_structure_type, DW_TAG_class_type, DW_TAG_union_type*/
-  int is_pointer_type;
-
-  // Location (for members) is either of:
-  struct s_mc_expression location;
-  int offset;
-
-  dw_type_t subtype; // DW_AT_type
-  dw_type_t full_type; // The same (but more complete) type
-};
-
-void* mc_member_resolve(const void* base, dw_type_t type, dw_type_t member, mc_snapshot_t snapshot, int process_index);
-
-typedef struct s_dw_variable{
-  Dwarf_Off dwarf_offset; /* Global offset of the field. */
-  int global;
-  char *name;
-  char *type_origin;
-  dw_type_t type;
-
-  // Use either of:
-  s_mc_location_list_t locations;
-  void* address;
-
-  size_t start_scope;
-  mc_object_info_t object_info;
-
-}s_dw_variable_t, *dw_variable_t;
-
-struct s_dw_frame{
-  int tag;
-  char *name;
-  void *low_pc;
-  void *high_pc;
-  s_mc_location_list_t frame_base;
-  xbt_dynar_t /* <dw_variable_t> */ variables; /* Cannot use dict, there may be several variables with the same name (in different lexical blocks)*/
-  unsigned long int id; /* DWARF offset of the subprogram */
-  xbt_dynar_t /* <dw_frame_t> */ scopes;
-  Dwarf_Off abstract_origin_id;
-  mc_object_info_t object_info;
-};
-
-struct s_mc_function_index_item {
-  void* low_pc, *high_pc;
-  dw_frame_t function;
-};
-
-void mc_frame_free(dw_frame_t freme);
-
-void dw_type_free(dw_type_t t);
-void dw_variable_free(dw_variable_t v);
-void dw_variable_free_voidp(void *t);
-
-void MC_dwarf_register_global_variable(mc_object_info_t info, dw_variable_t variable);
-void MC_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_non_global_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-
-/** Find the DWARF offset for this ELF object
- *
- *  An offset is applied to address found in DWARF:
- *
- *  <ul>
- *    <li>for an executable obejct, addresses are virtual address
- *        (there is no offset) i.e. \f$\text{virtual address} = \{dwarf address}\f$;</li>
- *    <li>for a shared object, the addreses are offset from the begining
- *        of the shared object (the base address of the mapped shared
- *        object must be used as offset
- *        i.e. \f$\text{virtual address} = \text{shared object base address}
- *             + \text{dwarf address}\f$.</li>
- *
- */
-void* MC_object_base_address(mc_object_info_t info);
-
-/********************************** DWARF **********************************/
-
-#define MC_EXPRESSION_STACK_SIZE 64
-
-#define MC_EXPRESSION_OK 0
-#define MC_EXPRESSION_E_UNSUPPORTED_OPERATION 1
-#define MC_EXPRESSION_E_STACK_OVERFLOW 2
-#define MC_EXPRESSION_E_STACK_UNDERFLOW 3
-#define MC_EXPRESSION_E_MISSING_STACK_CONTEXT 4
-#define MC_EXPRESSION_E_MISSING_FRAME_BASE 5
-#define MC_EXPRESSION_E_NO_BASE_ADDRESS 6
-
-typedef struct s_mc_expression_state {
-  uintptr_t stack[MC_EXPRESSION_STACK_SIZE];
-  size_t stack_size;
-
-  unw_cursor_t* cursor;
-  void* frame_base;
-  mc_snapshot_t snapshot;
-  mc_object_info_t object_info;
-  int process_index;
-} s_mc_expression_state_t, *mc_expression_state_t;
-
-int mc_dwarf_execute_expression(size_t n, const Dwarf_Op* ops, mc_expression_state_t state);
-
-void* mc_find_frame_base(dw_frame_t frame, mc_object_info_t object_info, unw_cursor_t* unw_cursor);
 
 /********************************** Miscellaneous **********************************/
 
@@ -714,60 +123,11 @@ typedef struct s_local_variable{
   int region;
 }s_local_variable_t, *local_variable_t;
 
-/********************************* Communications pattern ***************************/
-
-typedef struct s_mc_comm_pattern{
-  int num;
-  smx_synchro_t comm;
-  e_smx_comm_type_t type;
-  unsigned long src_proc;
-  unsigned long dst_proc;
-  const char *src_host;
-  const char *dst_host;
-  char *rdv;
-  ssize_t data_size;
-  void *data;
-}s_mc_comm_pattern_t, *mc_comm_pattern_t;
-
-extern xbt_dynar_t initial_communications_pattern;
-extern xbt_dynar_t communications_pattern;
-extern xbt_dynar_t incomplete_communications_pattern;
-
-// Can we use the SIMIX syscall for this?
-typedef enum mc_call_type {
-  MC_CALL_TYPE_NONE,
-  MC_CALL_TYPE_SEND,
-  MC_CALL_TYPE_RECV,
-  MC_CALL_TYPE_WAIT,
-  MC_CALL_TYPE_WAITANY,
-} mc_call_type;
-
-static inline mc_call_type mc_get_call_type(smx_simcall_t req) {
-  switch(req->call) {
-  case SIMCALL_COMM_ISEND:
-    return MC_CALL_TYPE_SEND;
-  case SIMCALL_COMM_IRECV:
-    return MC_CALL_TYPE_RECV;
-  case SIMCALL_COMM_WAIT:
-    return MC_CALL_TYPE_WAIT;
-  case SIMCALL_COMM_WAITANY:
-    return MC_CALL_TYPE_WAITANY;
-  default:
-    return MC_CALL_TYPE_NONE;
-  }
-}
-
-void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, mc_call_type call_type);
-void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern);
-void complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm);
-void MC_pre_modelcheck_comm_determinism(void);
-void MC_modelcheck_comm_determinism(void);
-
 /* *********** Sets *********** */
 
 typedef struct s_mc_address_set *mc_address_set_t;
 
-mc_address_set_t mc_address_set_new();
+mc_address_set_t mc_address_set_new(void);
 void mc_address_set_free(mc_address_set_t* p);
 void mc_address_add(mc_address_set_t p, const void* value);
 bool mc_address_test(mc_address_set_t p, const void* value);
@@ -783,125 +143,6 @@ uint64_t mc_hash_processes_state(int num_state, xbt_dynar_t stacks);
 
 /* *********** Snapshot *********** */
 
-static inline __attribute__((always_inline))
-void* mc_translate_address_region(uintptr_t addr, mc_mem_region_t region)
-{
-    size_t pageno = mc_page_number(region->start_addr, (void*) addr);
-    size_t snapshot_pageno = region->page_numbers[pageno];
-    const void* snapshot_page = mc_page_store_get_page(mc_model_checker->pages, snapshot_pageno);
-    return (char*) snapshot_page + mc_page_offset((void*) addr);
-}
-
-/** \brief Translate a pointer from process address space to snapshot address space
- *
- *  The address space contains snapshot of the main/application memory:
- *  this function finds the address in a given snaphot for a given
- *  real/application address.
- *
- *  For read only memory regions and other regions which are not int the
- *  snapshot, the address is not changed.
- *
- *  \param addr     Application address
- *  \param snapshot The snapshot of interest (if NULL no translation is done)
- *  \return         Translated address in the snapshot address space
- * */
-static inline __attribute__((always_inline))
-void* mc_translate_address(uintptr_t addr, mc_snapshot_t snapshot, int process_index)
-{
-
-  // If not in a process state/clone:
-  if (!snapshot) {
-    return (uintptr_t *) addr;
-  }
-
-  mc_mem_region_t region = mc_get_snapshot_region((void*) addr, snapshot, process_index);
-
-  xbt_assert(mc_region_contain(region, (void*) addr), "Trying to read out of the region boundary.");
-
-  if (!region) {
-    return (void *) addr;
-  }
-
-  // Flat snapshot:
-  else if (region->data) {
-    uintptr_t offset = addr - (uintptr_t) region->start_addr;
-    return (void *) ((uintptr_t) region->data + offset);
-  }
-
-  // Per-page snapshot:
-  else if (region->page_numbers) {
-    return mc_translate_address_region(addr, region);
-  }
-
-  else {
-    xbt_die("No data for this memory region");
-  }
-}
-
-static inline __attribute__ ((always_inline))
-  void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot) {
-  if(snapshot==NULL)
-      xbt_die("snapshot is NULL");
-  void** addr = &(std_heap->breakval);
-  return mc_snapshot_read_pointer(addr, snapshot, MC_ANY_PROCESS_INDEX);
-}
-
-static inline __attribute__ ((always_inline))
-void* mc_snapshot_read_pointer(void* addr, mc_snapshot_t snapshot, int process_index)
-{
-  void* res;
-  return *(void**) mc_snapshot_read(addr, snapshot, process_index, &res, sizeof(void*));
-}
-
-/** @brief Read memory from a snapshot region
- *
- *  @param addr    Process (non-snapshot) address of the data
- *  @param region  Snapshot memory region where the data is located
- *  @param target  Buffer to store the value
- *  @param size    Size of the data to read in bytes
- *  @return Pointer where the data is located (target buffer of original location)
- */
-static inline __attribute__((always_inline))
-void* mc_snapshot_read_region(void* addr, mc_mem_region_t region, void* target, size_t size)
-{
-  if (region==NULL)
-    return addr;
-
-  uintptr_t offset = (char*) addr - (char*) region->start_addr;
-
-  xbt_assert(mc_region_contain(region, addr),
-    "Trying to read out of the region boundary.");
-
-  // Linear memory region:
-  if (region->data) {
-    return (char*) region->data + offset;
-  }
-
-  // Fragmented memory region:
-  else if (region->page_numbers) {
-    // Last byte of the region:
-    void* end = (char*) addr + size - 1;
-    if( mc_same_page(addr, end) ) {
-      // The memory is contained in a single page:
-      return mc_translate_address_region((uintptr_t) addr, region);
-    } else {
-      // The memory spans several pages:
-      return mc_snapshot_read_fragmented(addr, region, target, size);
-    }
-  }
-
-  else {
-    xbt_die("No data available for this region");
-  }
-}
-
-static inline __attribute__ ((always_inline))
-void* mc_snapshot_read_pointer_region(void* addr, mc_mem_region_t region)
-{
-  void* res;
-  return *(void**) mc_snapshot_read_region(addr, region, &res, sizeof(void*));
-}
-
 #define MC_LOG_REQUEST(log, req, value) \
   if (XBT_LOG_ISENABLED(log, xbt_log_priority_debug)) { \
     char* req_str = MC_request_to_string(req, value); \
diff --git a/src/mc/mc_record.c b/src/mc/mc_record.c
new file mode 100644 (file)
index 0000000..d9d79e1
--- /dev/null
@@ -0,0 +1,146 @@
+/* Copyright (c) 2014. The SimGrid Team.
+ * 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 <stdio.h>
+#include <stdlib.h>
+
+#include <xbt.h>
+#include <simgrid/simix.h>
+
+#include "mc_record.h"
+#include "mc_base.h"
+
+#ifdef HAVE_MC
+#include "mc_private.h"
+#include "mc_model_checker.h"
+#include "mc_state.h"
+#endif
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_record, mc,
+  " Logging specific to MC record/replay facility");
+
+char* MC_record_path = NULL;
+
+void MC_record_replay(mc_record_item_t start, size_t len)
+{
+  MC_wait_for_requests();
+  mc_record_item_t end = start + len;
+
+  // Choose the recorded simcall and execute it:
+  for (mc_record_item_t item=start;item!=end; ++item) {
+
+    XBT_DEBUG("Executing %i$%i", item->pid, item->value);
+/*
+    if (xbt_dynar_is_empty(simix_global->process_to_run))
+      xbt_die("Unexpected end of application.");
+*/
+
+    // Choose a request:
+    smx_process_t process = SIMIX_process_from_PID(item->pid);
+    if (!process)
+      xbt_die("Unexpected process.");
+    smx_simcall_t simcall = &(process->simcall);
+    if(!simcall || simcall->call == SIMCALL_NONE)
+      xbt_die("No simcall for this process.");
+    if (!MC_request_is_visible(simcall) || !MC_request_is_enabled(simcall))
+      xbt_die("Unexpected simcall.");
+
+    // Execute the request:
+    SIMIX_simcall_handle(simcall, item->value);
+    MC_wait_for_requests();
+  }
+}
+
+xbt_dynar_t MC_record_from_string(const char* data)
+{
+  XBT_INFO("path=%s", data);
+  if (!data || !data[0])
+    return NULL;
+
+  xbt_dynar_t dynar = xbt_dynar_new(sizeof(s_mc_record_item_t), NULL);
+
+  const char* current = data;
+  while (*current) {
+
+    s_mc_record_item_t item = { 0, 0 };
+    int count = sscanf(current, "%u/%u", &item.pid, &item.value);
+    if(count != 2 && count != 1)
+      goto fail;
+    xbt_dynar_push(dynar, &item);
+
+    // Find next chunk:
+    char* end = strchr(current, ';');
+    if(end==NULL)
+      break;
+    else
+      current = end + 1;
+  }
+
+  return dynar;
+
+fail:
+  xbt_dynar_free(&dynar);
+  return NULL;
+}
+
+#ifdef HAVE_MC
+char* MC_record_stack_to_string(xbt_fifo_t stack)
+{
+  xbt_fifo_item_t start = xbt_fifo_get_last_item(stack);
+
+  if (!start) {
+    char* res = (char*) malloc(1 * sizeof(char));
+    res[0] = '\0';
+    return res;
+  }
+
+  char* buffer;
+  size_t size;
+  FILE* file = open_memstream(&buffer, &size);
+
+  xbt_fifo_item_t item;
+  for (item = start; item; item = xbt_fifo_get_prev_item(item)) {
+
+    // Find (pid, value):
+    mc_state_t state = (mc_state_t) xbt_fifo_get_item_content(item);
+    int value = 0;
+    smx_simcall_t saved_req = MC_state_get_executed_request(state, &value);
+    int pid = saved_req->issuer->pid;
+
+    // Serialization the (pid, value) pair:
+    const char* sep = (item!=start) ? ";" : "";
+    if (value)
+      fprintf(file, "%s%u/%u", sep, pid, value);
+    else
+      fprintf(file, "%s%u", sep, pid);
+  }
+
+  fclose(file);
+  return buffer;
+}
+
+void MC_record_dump_path(xbt_fifo_t stack)
+{
+  if (MC_record_is_active()) {
+    char* path = MC_record_stack_to_string(stack);
+    XBT_INFO("Path = %s", path);
+    free(path);
+  }
+}
+#endif
+
+void MC_record_replay_from_string(const char* path_string)
+{
+  xbt_dynar_t path = MC_record_from_string(path_string);
+  mc_record_item_t start = &xbt_dynar_get_as(path, 0, s_mc_record_item_t);
+  MC_record_replay(start, xbt_dynar_length(path));
+  xbt_dynar_free(&path);
+}
+
+void MC_record_replay_init()
+{
+  mc_time = xbt_new0(double, simix_process_maxpid);
+}
diff --git a/src/mc/mc_record.h b/src/mc/mc_record.h
new file mode 100644 (file)
index 0000000..3ea2d77
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (c) 2014. The SimGrid Team.
+ * 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. */
+
+/** \file
+ *  This file contains the MC replay/record functionnality.
+ *  A MC path may be recorded by using ``-cfg=model-check/record:1`'`.
+ *  The path is written in the log output and an be replayed with MC disabled
+ *  (even with an non-LC build) with `--cfg=model-check/replay:$replayPath`.
+ *
+ *  The same version of Simgrid should be used and the same arguments should be
+ *  passed to the application (without the MC specific arguments).
+ */
+
+#ifndef MC_RECORD_H
+#define MC_RECORD_H
+
+#include <stdbool.h>
+
+#include "simgrid_config.h"
+
+SG_BEGIN_DECL()
+
+/** Whether the MC record mode is enabled
+ *
+ *  The behaviour is not changed. The only real difference is that
+ *  the path is writtent in the log when an interesting path is found.
+ */
+#define MC_record_is_active() _sg_do_model_check_record
+
+// **** Data conversion
+
+/** An element in the recorded path
+ *
+ *  At each decision point, we need to record which process transition
+ *  is trigerred and potentially which value is associated with this
+ *  transition. The value is used to find which communication is triggerred
+ *  in things like waitany and for associating a given value of MC_random()
+ *  calls.
+ */
+typedef struct s_mc_record_item {
+  int pid;
+  int value;
+} s_mc_record_item_t, *mc_record_item_t;
+
+/** Convert a string representation of the path into a array of `s_mc_record_item_t`
+ */
+xbt_dynar_t MC_record_from_string(const char* data);
+
+/** Generate a string representation
+*
+* The current format is a ";"-delimited list of pairs:
+* "pid0,value0;pid2,value2;pid3,value3". The value can be
+* omitted is it is null.
+*/
+char* MC_record_stack_to_string(xbt_fifo_t stack);
+
+/** Dump the path represented by a given stack in the log
+ */
+void MC_record_dump_path(xbt_fifo_t stack);
+
+// ***** Replay
+
+/** Replay a path represented by the record items
+ *
+ *  \param start Array of record item
+ *  \item  count Number of record items
+ */
+void MC_record_replay(mc_record_item_t start, size_t count);
+
+/** Replay a path represented by a string
+ *
+ *  \param data String representation of the path
+ */
+void MC_record_replay_from_string(const char* data);
+
+void MC_record_replay_init(void);
+
+SG_END_DECL()
+
+#endif
index 4d8154e..af7f1ef 100644 (file)
@@ -4,6 +4,8 @@
 /* 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 "mc_request.h"
+#include "mc_safety.h"
 #include "mc_private.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_request, mc,
@@ -377,57 +379,6 @@ unsigned int MC_request_testany_fail(smx_simcall_t req)
   return TRUE;
 }
 
-int MC_request_is_visible(smx_simcall_t req)
-{
-  return req->call == SIMCALL_COMM_ISEND
-      || req->call == SIMCALL_COMM_IRECV
-      || req->call == SIMCALL_COMM_WAIT
-      || req->call == SIMCALL_COMM_WAITANY
-      || req->call == SIMCALL_COMM_TEST
-      || req->call == SIMCALL_COMM_TESTANY
-      || req->call == SIMCALL_MC_RANDOM
-      || req->call == SIMCALL_MC_SNAPSHOT
-      || req->call == SIMCALL_MC_COMPARE_SNAPSHOTS;
-}
-
-int MC_request_is_enabled(smx_simcall_t req)
-{
-  unsigned int index = 0;
-  smx_synchro_t act = 0;
-
-  switch (req->call) {
-  case SIMCALL_NONE:
-    return FALSE;
-
-  case SIMCALL_COMM_WAIT:
-    /* FIXME: check also that src and dst processes are not suspended */
-    act = simcall_comm_wait__get__comm(req);
-    if (simcall_comm_wait__get__timeout(req) >= 0) {
-      /* If it has a timeout it will be always be enabled, because even if the
-       * communication is not ready, it can timeout and won't block. */
-      if (_sg_mc_timeout == 1)
-        return TRUE;
-    } else {
-      /* On the other hand if it hasn't a timeout, check if the comm is ready.*/
-      if (act->comm.detached && act->comm.src_proc == NULL
-          && act->comm.type == SIMIX_COMM_READY)
-        return (act->comm.dst_proc != NULL);
-    }
-    return (act->comm.src_proc && act->comm.dst_proc);
-
-  case SIMCALL_COMM_WAITANY:
-    /* Check if it has at least one communication ready */
-    xbt_dynar_foreach(simcall_comm_waitany__get__comms(req), index, act)
-      if (act->comm.src_proc && act->comm.dst_proc)
-        return TRUE;
-    return FALSE;
-
-  default:
-    /* The rest of the requests are always enabled */
-    return TRUE;
-  }
-}
-
 int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx)
 {
   smx_synchro_t act;
diff --git a/src/mc/mc_request.h b/src/mc/mc_request.h
new file mode 100644 (file)
index 0000000..1bc9eb8
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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 <simgrid_config.h>
+
+#include "../simix/smx_private.h"
+
+#ifndef MC_REQUEST_H
+#define MC_REQUEST_H
+
+SG_BEGIN_DECL()
+
+int MC_request_depend(smx_simcall_t req1, smx_simcall_t req2);
+char* MC_request_to_string(smx_simcall_t req, int value);
+unsigned int MC_request_testany_fail(smx_simcall_t req);
+/*int MC_waitany_is_enabled_by_comm(smx_req_t req, unsigned int comm);*/
+int MC_request_is_visible(smx_simcall_t req);
+
+/** Can this requests can be executed.
+ *
+ *  Most requests are always enabled but WAIT and WAITANY
+ *  are not always enabled: a WAIT where the communication does not
+ *  have both a source and a destination yet is not enabled
+ *  (unless timeout is enabled in the wait and enabeld in SimGridMC).
+ */
+int MC_request_is_enabled(smx_simcall_t req);
+int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx);
+
+/** Is the process ready to execute its simcall?
+ *
+ *  This is true if the request associated with the process is ready.
+ */
+int MC_process_is_enabled(smx_process_t process);
+
+char *MC_request_get_dot_output(smx_simcall_t req, int value);
+
+SG_END_DECL()
+
+#endif
index 486b320..658c185 100644 (file)
@@ -4,7 +4,11 @@
 /* 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 "mc_state.h"
+#include "mc_request.h"
+#include "mc_safety.h"
 #include "mc_private.h"
+#include "mc_record.h"
 
 #include "xbt/mmalloc/mmprivate.h"
 
diff --git a/src/mc/mc_safety.h b/src/mc/mc_safety.h
new file mode 100644 (file)
index 0000000..b8aa3b4
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_SAFETY_H
+#define MC_SAFETY_H
+
+#include <stdint.h>
+
+#include <simgrid_config.h>
+#include <xbt/dict.h>
+#include "mc_interface.h"
+
+SG_BEGIN_DECL()
+
+typedef enum {
+  e_mc_reduce_unset,
+  e_mc_reduce_none,
+  e_mc_reduce_dpor
+} e_mc_reduce_t;
+
+extern e_mc_reduce_t mc_reduce_kind;
+extern xbt_dict_t first_enabled_state;
+
+void MC_pre_modelcheck_safety(void);
+void MC_modelcheck_safety(void);
+
+typedef struct s_mc_visited_state{
+  mc_snapshot_t system_state;
+  size_t heap_bytes_used;
+  int nb_processes;
+  int num;
+  int other_num; // dot_output for
+}s_mc_visited_state_t, *mc_visited_state_t;
+
+extern xbt_dynar_t visited_states;
+mc_visited_state_t is_visited_state(void);
+void visited_state_free(mc_visited_state_t state);
+void visited_state_free_voidp(void *s);
+
+SG_END_DECL()
+
+#endif
index bc1b553..97c4017 100644 (file)
@@ -9,6 +9,7 @@
 #include "internal_config.h"
 #include "smpi/private.h"
 
+#include "mc_snapshot.h"
 #include "mc_private.h"
 #include "mc_mmu.h"
 #include "mc_page_store.h"
@@ -172,6 +173,8 @@ int mc_snapshot_memcmp(
 #include <sys/mman.h>
 
 #include "mc/mc_private.h"
+#include "mc/mc_snapshot.h"
+#include "mc/mc_mmu.h"
 
 XBT_TEST_SUITE("mc_snapshot", "Snapshots");
 
@@ -281,4 +284,3 @@ static void test_snapshot(bool sparse_checkpoint) {
 }
 
 #endif /* SIMGRID_TEST */
-
diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h
new file mode 100644 (file)
index 0000000..1d0f9b0
--- /dev/null
@@ -0,0 +1,320 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_SNAPSHOT_H
+#define MC_SNAPSHOT_H
+
+#include <sys/types.h> // off_t
+#include <stdint.h> // size_t
+
+#include <simgrid_config.h>
+#include "../xbt/mmalloc/mmprivate.h"
+#include <xbt/asserts.h>
+#include <xbt/dynar.h>
+
+#include "mc_forward.h"
+#include "mc_model_checker.h"
+#include "mc_page_store.h"
+#include "mc_mmalloc.h"
+
+SG_BEGIN_DECL()
+
+void mc_softdirty_reset(void);
+
+// ***** Snapshot region
+
+#define NB_REGIONS 3 /* binary data (data + BSS) (type = 2), libsimgrid data (data + BSS) (type = 1), std_heap (type = 0)*/
+
+/** @brief Copy/snapshot of a given memory region
+ *
+ *  Two types of region snapshots exist:
+ *  <ul>
+ *    <li>flat/dense snapshots are a simple copy of the region;</li>
+ *    <li>sparse/per-page snapshots are snaapshots which shared
+ *    identical pages.</li>
+ *  </ul>
+ */
+typedef struct s_mc_mem_region{
+  /** @brief  Virtual address of the region in the simulated process */
+  void *start_addr;
+
+  /** @brief Permanent virtual address of the region
+   *
+   * This is usually the same address as the simuilated process address.
+   * However, when using SMPI privatization of global variables,
+   * each SMPI process has its own set of global variables stored
+   * at a different virtual address. The scheduler maps those region
+   * on the region of the global variables.
+   *
+   * */
+  void *permanent_addr;
+
+  /** @brief Copy of the snapshot for flat snapshots regions (NULL otherwise) */
+  void *data;
+
+  /** @brief Size of the data region in bytes */
+  size_t size;
+
+  /** @brief Pages indices in the page store for per-page snapshots (NULL otherwise) */
+  size_t* page_numbers;
+
+} s_mc_mem_region_t, *mc_mem_region_t;
+
+mc_mem_region_t mc_region_new_sparse(int type, void *start_addr, void* data_addr, size_t size, mc_mem_region_t ref_reg);
+void MC_region_destroy(mc_mem_region_t reg);
+void mc_region_restore_sparse(mc_mem_region_t reg, mc_mem_region_t ref_reg);
+
+static inline  __attribute__ ((always_inline))
+bool mc_region_contain(mc_mem_region_t region, void* p)
+{
+  return p >= region->start_addr &&
+    p < (void*)((char*) region->start_addr + region->size);
+}
+
+static inline __attribute__((always_inline))
+void* mc_translate_address_region(uintptr_t addr, mc_mem_region_t region)
+{
+    size_t pageno = mc_page_number(region->start_addr, (void*) addr);
+    size_t snapshot_pageno = region->page_numbers[pageno];
+    const void* snapshot_page = mc_page_store_get_page(mc_model_checker->pages, snapshot_pageno);
+    return (char*) snapshot_page + mc_page_offset((void*) addr);
+}
+
+mc_mem_region_t mc_get_snapshot_region(void* addr, mc_snapshot_t snapshot, int process_index);
+
+/** \brief Translate a pointer from process address space to snapshot address space
+ *
+ *  The address space contains snapshot of the main/application memory:
+ *  this function finds the address in a given snaphot for a given
+ *  real/application address.
+ *
+ *  For read only memory regions and other regions which are not int the
+ *  snapshot, the address is not changed.
+ *
+ *  \param addr     Application address
+ *  \param snapshot The snapshot of interest (if NULL no translation is done)
+ *  \return         Translated address in the snapshot address space
+ * */
+static inline __attribute__((always_inline))
+void* mc_translate_address(uintptr_t addr, mc_snapshot_t snapshot, int process_index)
+{
+
+  // If not in a process state/clone:
+  if (!snapshot) {
+    return (uintptr_t *) addr;
+  }
+
+  mc_mem_region_t region = mc_get_snapshot_region((void*) addr, snapshot, process_index);
+
+  xbt_assert(mc_region_contain(region, (void*) addr), "Trying to read out of the region boundary.");
+
+  if (!region) {
+    return (void *) addr;
+  }
+
+  // Flat snapshot:
+  else if (region->data) {
+    uintptr_t offset = addr - (uintptr_t) region->start_addr;
+    return (void *) ((uintptr_t) region->data + offset);
+  }
+
+  // Per-page snapshot:
+  else if (region->page_numbers) {
+    return mc_translate_address_region(addr, region);
+  }
+
+  else {
+    xbt_die("No data for this memory region");
+  }
+}
+
+// ***** MC Snapshot
+
+/** Ignored data
+ *
+ *  Some parts of the snapshot are ignored by zeroing them out: the real
+ *  values is stored here.
+ * */
+typedef struct s_mc_snapshot_ignored_data {
+  void* start;
+  size_t size;
+  void* data;
+} s_mc_snapshot_ignored_data_t, *mc_snapshot_ignored_data_t;
+
+typedef struct s_fd_infos{
+  char *filename;
+  int number;
+  off_t current_position;
+  int flags;
+}s_fd_infos_t, *fd_infos_t;
+
+struct s_mc_snapshot{
+  size_t heap_bytes_used;
+  mc_mem_region_t regions[NB_REGIONS];
+  xbt_dynar_t enabled_processes;
+  mc_mem_region_t* privatization_regions;
+  int privatization_index;
+  size_t *stack_sizes;
+  xbt_dynar_t stacks;
+  xbt_dynar_t to_ignore;
+  uint64_t hash;
+  xbt_dynar_t ignored_data;
+  int total_fd;
+  fd_infos_t *current_fd;
+};
+
+/** @brief Process index used when no process is available
+ *
+ *  The expected behaviour is that if a process index is needed it will fail.
+ * */
+#define MC_NO_PROCESS_INDEX -1
+
+/** @brief Process index when any process is suitable
+ *
+ * We could use a special negative value in the future.
+ */
+#define MC_ANY_PROCESS_INDEX 0
+
+static inline __attribute__ ((always_inline))
+mc_mem_region_t mc_get_region_hinted(void* addr, mc_snapshot_t snapshot, int process_index, mc_mem_region_t region)
+{
+  if (mc_region_contain(region, addr))
+    return region;
+  else
+    return mc_get_snapshot_region(addr, snapshot, process_index);
+}
+
+/** Information about a given stack frame
+ *
+ */
+typedef struct s_mc_stack_frame {
+  /** Instruction pointer */
+  unw_word_t ip;
+  /** Stack pointer */
+  unw_word_t sp;
+  unw_word_t frame_base;
+  dw_frame_t frame;
+  char* frame_name;
+  unw_cursor_t unw_cursor;
+} s_mc_stack_frame_t, *mc_stack_frame_t;
+
+typedef struct s_mc_snapshot_stack{
+  xbt_dynar_t local_variables;
+  xbt_dynar_t stack_frames; // mc_stack_frame_t
+  int process_index;
+}s_mc_snapshot_stack_t, *mc_snapshot_stack_t;
+
+typedef struct s_mc_global_t{
+  mc_snapshot_t snapshot;
+  int raw_mem_set;
+  int prev_pair;
+  char *prev_req;
+  int initial_communications_pattern_done;
+  int comm_deterministic;
+  int send_deterministic;
+}s_mc_global_t, *mc_global_t;
+
+typedef struct s_mc_checkpoint_ignore_region{
+  void *addr;
+  size_t size;
+}s_mc_checkpoint_ignore_region_t, *mc_checkpoint_ignore_region_t;
+
+static void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot);
+
+mc_snapshot_t MC_take_snapshot(int num_state);
+void MC_restore_snapshot(mc_snapshot_t);
+void MC_free_snapshot(mc_snapshot_t);
+
+int mc_important_snapshot(mc_snapshot_t snapshot);
+
+size_t* mc_take_page_snapshot_region(void* data, size_t page_count, uint64_t* pagemap, size_t* reference_pages);
+void mc_free_page_snapshot_region(size_t* pagenos, size_t page_count);
+void mc_restore_page_snapshot_region(void* start_addr, size_t page_count, size_t* pagenos, uint64_t* pagemap, size_t* reference_pagenos);
+
+static inline __attribute__((always_inline))
+bool mc_snapshot_region_linear(mc_mem_region_t region) {
+  return !region || !region->data;
+}
+
+void* mc_snapshot_read_fragmented(void* addr, mc_mem_region_t region, void* target, size_t size);
+
+void* mc_snapshot_read(void* addr, mc_snapshot_t snapshot, int process_index, void* target, size_t size);
+int mc_snapshot_region_memcmp(
+  void* addr1, mc_mem_region_t region1,
+  void* addr2, mc_mem_region_t region2, size_t size);
+int mc_snapshot_memcmp(
+  void* addr1, mc_snapshot_t snapshot1,
+  void* addr2, mc_snapshot_t snapshot2, int process_index, size_t size);
+
+static void* mc_snapshot_read_pointer(void* addr, mc_snapshot_t snapshot, int process_index);
+
+static inline __attribute__ ((always_inline))
+void* mc_snapshot_read_pointer(void* addr, mc_snapshot_t snapshot, int process_index)
+{
+  void* res;
+  return *(void**) mc_snapshot_read(addr, snapshot, process_index, &res, sizeof(void*));
+}
+
+static inline __attribute__ ((always_inline))
+  void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot) {
+  if(snapshot==NULL)
+      xbt_die("snapshot is NULL");
+  void** addr = &(std_heap->breakval);
+  return mc_snapshot_read_pointer(addr, snapshot, MC_ANY_PROCESS_INDEX);
+}
+
+/** @brief Read memory from a snapshot region
+ *
+ *  @param addr    Process (non-snapshot) address of the data
+ *  @param region  Snapshot memory region where the data is located
+ *  @param target  Buffer to store the value
+ *  @param size    Size of the data to read in bytes
+ *  @return Pointer where the data is located (target buffer of original location)
+ */
+static inline __attribute__((always_inline))
+void* mc_snapshot_read_region(void* addr, mc_mem_region_t region, void* target, size_t size)
+{
+  if (region==NULL)
+    return addr;
+
+  uintptr_t offset = (char*) addr - (char*) region->start_addr;
+
+  xbt_assert(mc_region_contain(region, addr),
+    "Trying to read out of the region boundary.");
+
+  // Linear memory region:
+  if (region->data) {
+    return (char*) region->data + offset;
+  }
+
+  // Fragmented memory region:
+  else if (region->page_numbers) {
+    // Last byte of the region:
+    void* end = (char*) addr + size - 1;
+    if( mc_same_page(addr, end) ) {
+      // The memory is contained in a single page:
+      return mc_translate_address_region((uintptr_t) addr, region);
+    } else {
+      // The memory spans several pages:
+      return mc_snapshot_read_fragmented(addr, region, target, size);
+    }
+  }
+
+  else {
+    xbt_die("No data available for this region");
+  }
+}
+
+static inline __attribute__ ((always_inline))
+void* mc_snapshot_read_pointer_region(void* addr, mc_mem_region_t region)
+{
+  void* res;
+  return *(void**) mc_snapshot_read_region(addr, region, &res, sizeof(void*));
+}
+
+SG_END_DECL()
+
+#endif
index 4724523..e9b4b04 100644 (file)
@@ -6,6 +6,8 @@
 
 #include "../simix/smx_private.h"
 #include "xbt/fifo.h"
+#include "mc_state.h"
+#include "mc_request.h"
 #include "mc_private.h"
 
 /**
diff --git a/src/mc/mc_state.h b/src/mc/mc_state.h
new file mode 100644 (file)
index 0000000..1bc0316
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * 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. */
+
+#ifndef MC_STATE_H
+#define MC_STATE_H
+
+#include <simgrid_config.h>
+#include "../simix/smx_private.h"
+#include "mc_snapshot.h"
+
+SG_BEGIN_DECL()
+
+extern mc_global_t initial_global_state;
+
+/* Possible exploration status of a process in a state */
+typedef enum {
+  MC_NOT_INTERLEAVE=0,      /* Do not interleave (do not execute) */
+  MC_INTERLEAVE,            /* Interleave the process (one or more request) */
+  MC_MORE_INTERLEAVE,       /* Interleave twice the process (for mc_random simcall) */
+  MC_DONE                   /* Already interleaved */
+} e_mc_process_state_t;
+
+/* On every state, each process has an entry of the following type */
+typedef struct mc_procstate{
+  e_mc_process_state_t state;       /* Exploration control information */
+  unsigned int interleave_count;    /* Number of times that the process was
+                                       interleaved */
+} s_mc_procstate_t, *mc_procstate_t;
+
+/* An exploration state.
+ *
+ *  The `executed_state` is sometimes transformed into another `internal_req`.
+ *  For example WAITANY is transformes into a WAIT and TESTANY into TEST.
+ *  See `MC_state_set_executed_request()`.
+ */
+typedef struct mc_state {
+  unsigned long max_pid;            /* Maximum pid at state's creation time */
+  mc_procstate_t proc_status;       /* State's exploration status by process */
+  s_smx_synchro_t internal_comm;     /* To be referenced by the internal_req */
+  s_smx_simcall_t internal_req;         /* Internal translation of request */
+  s_smx_simcall_t executed_req;         /* The executed request of the state */
+  int req_num;                      /* The request number (in the case of a
+                                       multi-request like waitany ) */
+  mc_snapshot_t system_state;      /* Snapshot of system state */
+  int num;
+} s_mc_state_t, *mc_state_t;
+
+mc_state_t MC_state_new(void);
+void MC_state_delete(mc_state_t state);
+void MC_state_interleave_process(mc_state_t state, smx_process_t process);
+unsigned int MC_state_interleave_size(mc_state_t state);
+int MC_state_process_is_done(mc_state_t state, smx_process_t process);
+void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, int value);
+smx_simcall_t MC_state_get_executed_request(mc_state_t state, int *value);
+smx_simcall_t MC_state_get_internal_request(mc_state_t state);
+smx_simcall_t MC_state_get_request(mc_state_t state, int *value);
+void MC_state_remove_interleave_process(mc_state_t state, smx_process_t process);
+
+SG_END_DECL()
+
+#endif
index ac7c56b..8ac5d0f 100644 (file)
@@ -4,10 +4,14 @@
 /* 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 "mc_private.h"
 #include <unistd.h>
 #include <sys/wait.h>
 
+#include "mc_comm_pattern.h"
+#include "mc_safety.h"
+#include "mc_liveness.h"
+#include "mc_private.h"
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_visited, mc,
                                 "Logging specific to state equaity detection mechanisms");
 
index e63cab7..b867a86 100644 (file)
@@ -4,6 +4,7 @@
 /* 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 "mc_memory_map.h"
 #include "mc_private.h"
 #include <stdlib.h>
 
index df71452..24afd32 100644 (file)
@@ -1344,81 +1344,81 @@ const char dax__flexml_version[] = "1.9.6";
 int dax__pcdata_ix;
 extern char *dax__bufferstack;
 #define dax__pcdata (dax__bufferstack + dax__pcdata_ix)
-AT_dax__uses_type AX_dax__uses_type;
-#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
-short int dax__uses_type_isset;
-AT_dax__uses_register AX_dax__uses_register;
-#define A_dax__uses_register AX_dax__uses_register
-short int dax__uses_register_isset;
-AT_dax__job_name AX_dax__job_name;
-#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
-short int dax__job_name_isset;
-AT_dax__uses_optional AX_dax__uses_optional;
-#define A_dax__uses_optional AX_dax__uses_optional
-short int dax__uses_optional_isset;
+AT_dax__adag_childCount AX_dax__adag_childCount;
+#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
+short int dax__adag_childCount_isset;
+AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation;
+#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
+short int dax__adag_xsi_c_schemaLocation_isset;
+AT_dax__job_namespace AX_dax__job_namespace;
+#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
+short int dax__job_namespace_isset;
+AT_dax__uses_file AX_dax__uses_file;
+#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
+short int dax__uses_file_isset;
+AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi;
+#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
+short int dax__adag_xmlns_c_xsi_isset;
+AT_dax__adag_xmlns AX_dax__adag_xmlns;
+#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
+short int dax__adag_xmlns_isset;
+AT_dax__adag_fileCount AX_dax__adag_fileCount;
+#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
+short int dax__adag_fileCount_isset;
 AT_dax__uses_size AX_dax__uses_size;
 #define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
 short int dax__uses_size_isset;
+AT_dax__uses_type AX_dax__uses_type;
+#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
+short int dax__uses_type_isset;
+AT_dax__adag_version AX_dax__adag_version;
+#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version)
+short int dax__adag_version_isset;
 AT_dax__job_runtime AX_dax__job_runtime;
 #define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime)
 short int dax__job_runtime_isset;
-AT_dax__adag_fileCount AX_dax__adag_fileCount;
-#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
-short int dax__adag_fileCount_isset;
-AT_dax__uses_link AX_dax__uses_link;
-#define A_dax__uses_link AX_dax__uses_link
-short int dax__uses_link_isset;
-AT_dax__uses_transfer AX_dax__uses_transfer;
-#define A_dax__uses_transfer AX_dax__uses_transfer
-short int dax__uses_transfer_isset;
+AT_dax__job_id AX_dax__job_id;
+#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
+short int dax__job_id_isset;
 AT_dax__adag_jobCount AX_dax__adag_jobCount;
 #define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
 short int dax__adag_jobCount_isset;
-AT_dax__adag_xmlns AX_dax__adag_xmlns;
-#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
-short int dax__adag_xmlns_isset;
+AT_dax__uses_register AX_dax__uses_register;
+#define A_dax__uses_register AX_dax__uses_register
+short int dax__uses_register_isset;
 AT_dax__job_level AX_dax__job_level;
 #define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
 short int dax__job_level_isset;
-AT_dax__adag_version AX_dax__adag_version;
-#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version)
-short int dax__adag_version_isset;
-AT_dax__job_id AX_dax__job_id;
-#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
-short int dax__job_id_isset;
-AT_dax__job_namespace AX_dax__job_namespace;
-#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
-short int dax__job_namespace_isset;
+AT_dax__adag_index AX_dax__adag_index;
+#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
+short int dax__adag_index_isset;
+AT_dax__child_ref AX_dax__child_ref;
+#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
+short int dax__child_ref_isset;
 AT_dax__parent_ref AX_dax__parent_ref;
 #define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
 short int dax__parent_ref_isset;
+AT_dax__uses_link AX_dax__uses_link;
+#define A_dax__uses_link AX_dax__uses_link
+short int dax__uses_link_isset;
+AT_dax__uses_transfer AX_dax__uses_transfer;
+#define A_dax__uses_transfer AX_dax__uses_transfer
+short int dax__uses_transfer_isset;
+AT_dax__job_version AX_dax__job_version;
+#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
+short int dax__job_version_isset;
 AT_dax__adag_count AX_dax__adag_count;
 #define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
 short int dax__adag_count_isset;
-AT_dax__adag_childCount AX_dax__adag_childCount;
-#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
-short int dax__adag_childCount_isset;
-AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation;
-#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
-short int dax__adag_xsi_c_schemaLocation_isset;
-AT_dax__uses_file AX_dax__uses_file;
-#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
-short int dax__uses_file_isset;
-AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi;
-#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
-short int dax__adag_xmlns_c_xsi_isset;
-AT_dax__child_ref AX_dax__child_ref;
-#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
-short int dax__child_ref_isset;
-AT_dax__adag_index AX_dax__adag_index;
-#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
-short int dax__adag_index_isset;
+AT_dax__job_name AX_dax__job_name;
+#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
+short int dax__job_name_isset;
 AT_dax__adag_name AX_dax__adag_name;
 #define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
 short int dax__adag_name_isset;
-AT_dax__job_version AX_dax__job_version;
-#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
-short int dax__job_version_isset;
+AT_dax__uses_optional AX_dax__uses_optional;
+#define A_dax__uses_optional AX_dax__uses_optional
+short int dax__uses_optional_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
@@ -2212,11 +2212,11 @@ case 44:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</adag>' expected.",dax_text[0]);
        YY_BREAK
+case YY_STATE_EOF(E_dax__adag):
 case YY_STATE_EOF(S_dax__adag):
+case YY_STATE_EOF(S_dax__adag_5):
 case YY_STATE_EOF(S_dax__adag_3):
 case YY_STATE_EOF(S_dax__adag_1):
-case YY_STATE_EOF(S_dax__adag_5):
-case YY_STATE_EOF(E_dax__adag):
 FAIL("Premature EOF: `</adag>' expected.");
        YY_BREAK
 
@@ -2322,7 +2322,7 @@ YY_RULE_SETUP
   if (!AX_dax__job_runtime) FAIL("Required attribute `runtime' not set for `job' element.");
   LEAVE; STag_dax__job(); dax__pcdata_ix = 0; ETag_dax__job(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_2: case S_dax__adag: case S_dax__adag_3: SET(S_dax__adag_3); break;
+   case S_dax__adag_2: case S_dax__adag_3: case S_dax__adag: SET(S_dax__adag_3); break;
   }
  }
        YY_BREAK
@@ -2346,7 +2346,7 @@ YY_RULE_SETUP
   ETag_dax__job();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_2: case S_dax__adag: case S_dax__adag_3: SET(S_dax__adag_3); break;
+   case S_dax__adag_2: case S_dax__adag_3: case S_dax__adag: SET(S_dax__adag_3); break;
   }
  }
        YY_BREAK
@@ -2359,9 +2359,9 @@ case 65:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</job>' expected.",dax_text[0]);
        YY_BREAK
+case YY_STATE_EOF(S_dax__job):
 case YY_STATE_EOF(E_dax__job):
 case YY_STATE_EOF(S_dax__job_2):
-case YY_STATE_EOF(S_dax__job):
 FAIL("Premature EOF: `</job>' expected.");
        YY_BREAK
 
@@ -2495,7 +2495,7 @@ YY_RULE_SETUP
   if (!AX_dax__uses_size) FAIL("Required attribute `size' not set for `uses' element.");
   LEAVE; STag_dax__uses(); dax__pcdata_ix = 0; ETag_dax__uses(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break;
+   case S_dax__job_2: case S_dax__job_1: case S_dax__job: SET(S_dax__job_2); break;
   }
  }
        YY_BREAK
@@ -2519,7 +2519,7 @@ YY_RULE_SETUP
   ETag_dax__uses();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break;
+   case S_dax__job_2: case S_dax__job_1: case S_dax__job: SET(S_dax__job_2); break;
   }
  }
        YY_BREAK
@@ -2574,7 +2574,7 @@ YY_RULE_SETUP
   if (!AX_dax__child_ref) FAIL("Required attribute `ref' not set for `child' element.");
   LEAVE; STag_dax__child(); dax__pcdata_ix = 0; ETag_dax__child(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_4: case S_dax__adag: case S_dax__adag_3: case S_dax__adag_1: case S_dax__adag_5: SET(S_dax__adag_5); break;
+   case S_dax__adag_4: case S_dax__adag: case S_dax__adag_1: case S_dax__adag_3: case S_dax__adag_5: SET(S_dax__adag_5); break;
   }
  }
        YY_BREAK
@@ -2598,7 +2598,7 @@ YY_RULE_SETUP
   ETag_dax__child();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_4: case S_dax__adag: case S_dax__adag_3: case S_dax__adag_1: case S_dax__adag_5: SET(S_dax__adag_5); break;
+   case S_dax__adag_4: case S_dax__adag: case S_dax__adag_1: case S_dax__adag_3: case S_dax__adag_5: SET(S_dax__adag_5); break;
   }
  }
        YY_BREAK
@@ -2611,8 +2611,8 @@ case 107:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</child>' expected.",dax_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_dax__child_2):
 case YY_STATE_EOF(S_dax__child):
+case YY_STATE_EOF(S_dax__child_2):
 case YY_STATE_EOF(E_dax__child):
 FAIL("Premature EOF: `</child>' expected.");
        YY_BREAK
index da77875..b62dabe 100644 (file)
@@ -60,132 +60,132 @@ XBT_PUBLIC(void) STag_dax__parent(void);
 XBT_PUBLIC(void) ETag_dax__parent(void);
 
 /* XML application data. */
-typedef int AT_dax__uses_type;
-#define AU_dax__uses_type NULL
-typedef int AT_dax__parent_ref;
-#define AU_dax__parent_ref NULL
-typedef int AT_dax__uses_file;
-#define AU_dax__uses_file NULL
-typedef int AT_dax__job_name;
-#define AU_dax__job_name NULL
-typedef int AT_dax__job_version;
-#define AU_dax__job_version NULL
+typedef enum { AU_dax__uses_link, A_dax__uses_link_input,A_dax__uses_link_output } AT_dax__uses_link;
+typedef int AT_dax__child_ref;
+#define AU_dax__child_ref NULL
+typedef int AT_dax__uses_size;
+#define AU_dax__uses_size NULL
 typedef int AT_dax__job_namespace;
 #define AU_dax__job_namespace NULL
-typedef int AT_dax__adag_xsi_c_schemaLocation;
-#define AU_dax__adag_xsi_c_schemaLocation NULL
 typedef int AT_dax__adag_fileCount;
 #define AU_dax__adag_fileCount NULL
-typedef int AT_dax__adag_count;
-#define AU_dax__adag_count NULL
-typedef int AT_dax__adag_index;
-#define AU_dax__adag_index NULL
-typedef int AT_dax__adag_xmlns_c_xsi;
-#define AU_dax__adag_xmlns_c_xsi NULL
-typedef int AT_dax__adag_childCount;
-#define AU_dax__adag_childCount NULL
+typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register;
 typedef int AT_dax__adag_xmlns;
 #define AU_dax__adag_xmlns NULL
+typedef int AT_dax__uses_type;
+#define AU_dax__uses_type NULL
+typedef int AT_dax__job_id;
+#define AU_dax__job_id NULL
+typedef int AT_dax__job_name;
+#define AU_dax__job_name NULL
+typedef int AT_dax__job_level;
+#define AU_dax__job_level NULL
+typedef int AT_dax__adag_childCount;
+#define AU_dax__adag_childCount NULL
 typedef int AT_dax__adag_name;
 #define AU_dax__adag_name NULL
-typedef int AT_dax__adag_jobCount;
-#define AU_dax__adag_jobCount NULL
-typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register;
 typedef int AT_dax__adag_version;
 #define AU_dax__adag_version NULL
-typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional;
-typedef int AT_dax__job_level;
-#define AU_dax__job_level NULL
+typedef int AT_dax__uses_file;
+#define AU_dax__uses_file NULL
+typedef int AT_dax__adag_xsi_c_schemaLocation;
+#define AU_dax__adag_xsi_c_schemaLocation NULL
+typedef int AT_dax__adag_index;
+#define AU_dax__adag_index NULL
 typedef int AT_dax__job_runtime;
 #define AU_dax__job_runtime NULL
-typedef int AT_dax__uses_size;
-#define AU_dax__uses_size NULL
+typedef int AT_dax__parent_ref;
+#define AU_dax__parent_ref NULL
+typedef int AT_dax__adag_xmlns_c_xsi;
+#define AU_dax__adag_xmlns_c_xsi NULL
 typedef enum { AU_dax__uses_transfer, A_dax__uses_transfer_false,A_dax__uses_transfer_true } AT_dax__uses_transfer;
-typedef int AT_dax__job_id;
-#define AU_dax__job_id NULL
-typedef int AT_dax__child_ref;
-#define AU_dax__child_ref NULL
-typedef enum { AU_dax__uses_link, A_dax__uses_link_input,A_dax__uses_link_output } AT_dax__uses_link;
+typedef int AT_dax__job_version;
+#define AU_dax__job_version NULL
+typedef int AT_dax__adag_count;
+#define AU_dax__adag_count NULL
+typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional;
+typedef int AT_dax__adag_jobCount;
+#define AU_dax__adag_jobCount NULL
 
 /* FleXML-provided data. */
 XBT_PUBLIC_DATA(int) dax__pcdata_ix;
 XBT_PUBLIC_DATA(char *) dax__bufferstack;
 #define dax__pcdata (dax__bufferstack + dax__pcdata_ix)
-XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type;
-#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
-XBT_PUBLIC_DATA(short int) dax__uses_type_isset;
-XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref;
-#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
-XBT_PUBLIC_DATA(short int) dax__parent_ref_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file;
-#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
-XBT_PUBLIC_DATA(short int) dax__uses_file_isset;
-XBT_PUBLIC_DATA(AT_dax__job_name) AX_dax__job_name;
-#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
-XBT_PUBLIC_DATA(short int) dax__job_name_isset;
-XBT_PUBLIC_DATA(AT_dax__job_version) AX_dax__job_version;
-#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
-XBT_PUBLIC_DATA(short int) dax__job_version_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_link) AX_dax__uses_link;
+#define A_dax__uses_link AX_dax__uses_link
+XBT_PUBLIC_DATA(short int) dax__uses_link_isset;
+XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref;
+#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
+XBT_PUBLIC_DATA(short int) dax__child_ref_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_size) AX_dax__uses_size;
+#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
+XBT_PUBLIC_DATA(short int) dax__uses_size_isset;
 XBT_PUBLIC_DATA(AT_dax__job_namespace) AX_dax__job_namespace;
 #define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
 XBT_PUBLIC_DATA(short int) dax__job_namespace_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation;
-#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
-XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_fileCount) AX_dax__adag_fileCount;
 #define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
 XBT_PUBLIC_DATA(short int) dax__adag_fileCount_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_count) AX_dax__adag_count;
-#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
-XBT_PUBLIC_DATA(short int) dax__adag_count_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_index) AX_dax__adag_index;
-#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
-XBT_PUBLIC_DATA(short int) dax__adag_index_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_xmlns_c_xsi) AX_dax__adag_xmlns_c_xsi;
-#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
-XBT_PUBLIC_DATA(short int) dax__adag_xmlns_c_xsi_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_childCount) AX_dax__adag_childCount;
-#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
-XBT_PUBLIC_DATA(short int) dax__adag_childCount_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register;
+#define A_dax__uses_register AX_dax__uses_register
+XBT_PUBLIC_DATA(short int) dax__uses_register_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_xmlns) AX_dax__adag_xmlns;
 #define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
 XBT_PUBLIC_DATA(short int) dax__adag_xmlns_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type;
+#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
+XBT_PUBLIC_DATA(short int) dax__uses_type_isset;
+XBT_PUBLIC_DATA(AT_dax__job_id) AX_dax__job_id;
+#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
+XBT_PUBLIC_DATA(short int) dax__job_id_isset;
+XBT_PUBLIC_DATA(AT_dax__job_name) AX_dax__job_name;
+#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
+XBT_PUBLIC_DATA(short int) dax__job_name_isset;
+XBT_PUBLIC_DATA(AT_dax__job_level) AX_dax__job_level;
+#define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
+XBT_PUBLIC_DATA(short int) dax__job_level_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_childCount) AX_dax__adag_childCount;
+#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
+XBT_PUBLIC_DATA(short int) dax__adag_childCount_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_name) AX_dax__adag_name;
 #define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
 XBT_PUBLIC_DATA(short int) dax__adag_name_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_jobCount) AX_dax__adag_jobCount;
-#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
-XBT_PUBLIC_DATA(short int) dax__adag_jobCount_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register;
-#define A_dax__uses_register AX_dax__uses_register
-XBT_PUBLIC_DATA(short int) dax__uses_register_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_version) AX_dax__adag_version;
 #define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version)
 XBT_PUBLIC_DATA(short int) dax__adag_version_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional;
-#define A_dax__uses_optional AX_dax__uses_optional
-XBT_PUBLIC_DATA(short int) dax__uses_optional_isset;
-XBT_PUBLIC_DATA(AT_dax__job_level) AX_dax__job_level;
-#define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
-XBT_PUBLIC_DATA(short int) dax__job_level_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file;
+#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
+XBT_PUBLIC_DATA(short int) dax__uses_file_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation;
+#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
+XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_index) AX_dax__adag_index;
+#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
+XBT_PUBLIC_DATA(short int) dax__adag_index_isset;
 XBT_PUBLIC_DATA(AT_dax__job_runtime) AX_dax__job_runtime;
 #define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime)
 XBT_PUBLIC_DATA(short int) dax__job_runtime_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_size) AX_dax__uses_size;
-#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
-XBT_PUBLIC_DATA(short int) dax__uses_size_isset;
+XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref;
+#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
+XBT_PUBLIC_DATA(short int) dax__parent_ref_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_xmlns_c_xsi) AX_dax__adag_xmlns_c_xsi;
+#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
+XBT_PUBLIC_DATA(short int) dax__adag_xmlns_c_xsi_isset;
 XBT_PUBLIC_DATA(AT_dax__uses_transfer) AX_dax__uses_transfer;
 #define A_dax__uses_transfer AX_dax__uses_transfer
 XBT_PUBLIC_DATA(short int) dax__uses_transfer_isset;
-XBT_PUBLIC_DATA(AT_dax__job_id) AX_dax__job_id;
-#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
-XBT_PUBLIC_DATA(short int) dax__job_id_isset;
-XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref;
-#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
-XBT_PUBLIC_DATA(short int) dax__child_ref_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_link) AX_dax__uses_link;
-#define A_dax__uses_link AX_dax__uses_link
-XBT_PUBLIC_DATA(short int) dax__uses_link_isset;
+XBT_PUBLIC_DATA(AT_dax__job_version) AX_dax__job_version;
+#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
+XBT_PUBLIC_DATA(short int) dax__job_version_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_count) AX_dax__adag_count;
+#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
+XBT_PUBLIC_DATA(short int) dax__adag_count_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional;
+#define A_dax__uses_optional AX_dax__uses_optional
+XBT_PUBLIC_DATA(short int) dax__uses_optional_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_jobCount) AX_dax__adag_jobCount;
+#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
+XBT_PUBLIC_DATA(short int) dax__adag_jobCount_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) dax__element_context(int);
index f857766..3fc88bc 100644 (file)
@@ -20,6 +20,7 @@
 #include "simgrid/sg_config.h"
 #include "smpi/smpi_interface.h"
 #include "mc/mc.h"
+#include "mc/mc_record.h"
 #include "instr/instr.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf,
@@ -368,10 +369,17 @@ static void _sg_cfg_cb__surf_path(const char *name, int pos)
 
 /* callback to decide if we want to use the model-checking */
 #include "xbt_modinter.h"
+
 #ifdef HAVE_MC
 extern int _sg_do_model_check;   /* this variable lives in xbt_main until I find a right location for it */
+extern int _sg_do_model_check_record;
 #endif
 
+static void _sg_cfg_cb_model_check_replay(const char *name, int pos)
+{
+  MC_record_path = xbt_cfg_get_string(_sg_cfg_set, name);
+}
+
 static void _sg_cfg_cb_model_check(const char *name, int pos)
 {
 #ifdef HAVE_MC
@@ -383,6 +391,17 @@ static void _sg_cfg_cb_model_check(const char *name, int pos)
 #endif
 }
 
+static void _sg_cfg_cb_model_check_record(const char *name, int pos)
+{
+#ifdef HAVE_MC
+  _sg_do_model_check_record = xbt_cfg_get_boolean(_sg_cfg_set, name);
+#else
+  if (xbt_cfg_get_boolean(_sg_cfg_set, name)) {
+    xbt_die("You tried to activate the model-checking record from the command line, but it was not compiled in. Change your settings in cmake, recompile and try again");
+  }
+#endif
+}
+
 extern int _sg_do_verbose_exit;
 
 static void _sg_cfg_cb_verbose_exit(const char *name, int pos)
@@ -603,6 +622,11 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_boolean, 1, 1, NULL, NULL);
     xbt_cfg_setdefault_boolean(_sg_cfg_set, "network/maxmin_selective_update", "no");
 
+    /* Replay (this part is enabled event if MC it disabled) */
+    xbt_cfg_register(&_sg_cfg_set, "model-check/replay",
+      "Uenable replay mode with the given path",
+      xbt_cfgelm_string, 0, 1, _sg_cfg_cb_model_check_replay, NULL);
+
 #ifdef HAVE_MC
     /* do model-checking */
     xbt_cfg_register(&_sg_cfg_set, "model-check",
@@ -610,6 +634,12 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_boolean, 1, 1, _sg_cfg_cb_model_check, NULL);
     xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check", "no");
 
+    /* do model-checking-record */
+    xbt_cfg_register(&_sg_cfg_set, "model-check/record",
+                     "Record the model-checking paths",
+                     xbt_cfgelm_boolean, 1, 1, _sg_cfg_cb_model_check_record, NULL);
+    xbt_cfg_setdefault_boolean(_sg_cfg_set, "model-check/record", "no");
+
     /* do stateful model-checking */
     xbt_cfg_register(&_sg_cfg_set, "model-check/checkpoint",
                      "Specify the amount of steps between checkpoints during stateful model-checking (default: 0 => stateless verification). "
@@ -797,6 +827,11 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_string, 1, 1, NULL, NULL);
     xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/lat_factor", "65472:11.6436;15424:3.48845;9376:2.59299;5776:2.18796;3484:1.88101;1426:1.61075;732:1.9503;257:1.95341;0:2.01467");
     
+    xbt_cfg_register(&_sg_cfg_set, "smpi/IB_penalty_factors",
+                     "Correction factor to communications using Infiniband model with contention (default value based on Stampede cluster profiling)",
+                     xbt_cfgelm_string, 1, 1, NULL, NULL);
+    xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/IB_penalty_factors", "0.965;0.925;1.35");
+    
 #ifdef HAVE_SMPI
     xbt_cfg_register(&_sg_cfg_set, "smpi/running_power",
                      "Power of the host running the simulation (in flop/s). Used to bench the operations.",
@@ -838,11 +873,6 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_boolean, 1, 1, NULL, NULL);
     xbt_cfg_setdefault_boolean(_sg_cfg_set, "smpi/privatize_global_variables", "no");
 
-    xbt_cfg_register(&_sg_cfg_set, "smpi/IB_penalty_factors",
-                     "Correction factor to communications using Infiniband model with contention (default value based on Stampede cluster profiling)",
-                     xbt_cfgelm_string, 1, 1, NULL, NULL);
-    xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/IB_penalty_factors", "0.965;0.925;1.35");
-
     xbt_cfg_register(&_sg_cfg_set, "smpi/os",
                      "Small messages timings (MPI_Send minimum time for small messages)",
                      xbt_cfgelm_string, 1, 1, NULL, NULL);
index 199f085..eb50d4d 100644 (file)
@@ -928,7 +928,7 @@ void simcall_comm_send(smx_process_t src, smx_rdv_t rdv, double task_size, doubl
 
   xbt_assert(rdv, "No rendez-vous point defined for send");
 
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     /* the model-checker wants two separate simcalls */
     smx_synchro_t comm = NULL; /* MC needs the comm to be set to NULL during the simcall */
     comm = simcall_comm_isend(src, rdv, task_size, rate,
@@ -975,7 +975,7 @@ void simcall_comm_recv(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size,
   xbt_assert(isfinite(timeout), "timeout is not finite!");
   xbt_assert(rdv, "No rendez-vous point defined for recv");
 
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     /* the model-checker wants two separate simcalls */
     smx_synchro_t comm = NULL; /* MC needs the comm to be set to NULL during the simcall */
     comm = simcall_comm_irecv(rdv, dst_buff, dst_buff_size,
@@ -1471,12 +1471,12 @@ int simcall_mc_compare_snapshots(void *s1, void *s2) {
   return simcall_BODY_mc_compare_snapshots(s1, s2);
 }
 
+#endif /* HAVE_MC */
+
 int simcall_mc_random(int min, int max) {
   return simcall_BODY_mc_random(min, max);
 }
 
-#endif /* HAVE_MC */
-
 /* ************************************************************************** */
 
 /** @brief returns a printable string representing a simcall */
index aa44bae..de024d6 100644 (file)
@@ -1799,6 +1799,25 @@ static inline xbt_dict_t simcall_asr_get_properties__get__result(smx_simcall_t s
 static inline void simcall_asr_get_properties__set__result(smx_simcall_t simcall, void* result){
     simcall->result.dp = result;
 }
+
+static inline int simcall_mc_random__get__min(smx_simcall_t simcall) {
+  return  simcall->args[0].i;
+}
+static inline void simcall_mc_random__set__min(smx_simcall_t simcall, int arg) {
+    simcall->args[0].i = arg;
+}
+static inline int simcall_mc_random__get__max(smx_simcall_t simcall) {
+  return  simcall->args[1].i;
+}
+static inline void simcall_mc_random__set__max(smx_simcall_t simcall, int arg) {
+    simcall->args[1].i = arg;
+}
+static inline int simcall_mc_random__get__result(smx_simcall_t simcall){
+    return  simcall->result.i;
+}
+static inline void simcall_mc_random__set__result(smx_simcall_t simcall, int result){
+    simcall->result.i = result;
+}
 #ifdef HAVE_LATENCY_BOUND_TRACKING
 
 static inline smx_synchro_t simcall_comm_is_latency_bounded__get__comm(smx_simcall_t simcall) {
@@ -1858,25 +1877,6 @@ static inline int simcall_mc_compare_snapshots__get__result(smx_simcall_t simcal
 static inline void simcall_mc_compare_snapshots__set__result(smx_simcall_t simcall, int result){
     simcall->result.i = result;
 }
-
-static inline int simcall_mc_random__get__min(smx_simcall_t simcall) {
-  return  simcall->args[0].i;
-}
-static inline void simcall_mc_random__set__min(smx_simcall_t simcall, int arg) {
-    simcall->args[0].i = arg;
-}
-static inline int simcall_mc_random__get__max(smx_simcall_t simcall) {
-  return  simcall->args[1].i;
-}
-static inline void simcall_mc_random__set__max(smx_simcall_t simcall, int arg) {
-    simcall->args[1].i = arg;
-}
-static inline int simcall_mc_random__get__result(smx_simcall_t simcall){
-    return  simcall->result.i;
-}
-static inline void simcall_mc_random__set__result(smx_simcall_t simcall, int result){
-    simcall->result.i = result;
-}
 #endif
 
 
@@ -1930,6 +1930,7 @@ int simcall_HANDLER_file_move(smx_simcall_t simcall, smx_file_t fd, const char*
 sg_size_t simcall_HANDLER_storage_get_free_size(smx_simcall_t simcall, smx_storage_t storage);
 sg_size_t simcall_HANDLER_storage_get_used_size(smx_simcall_t simcall, smx_storage_t name);
 xbt_dict_t simcall_HANDLER_asr_get_properties(smx_simcall_t simcall, const char* name);
+int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max);
 #ifdef HAVE_LATENCY_BOUND_TRACKING
 
 #endif
@@ -1941,5 +1942,4 @@ xbt_dict_t simcall_HANDLER_asr_get_properties(smx_simcall_t simcall, const char*
 #ifdef HAVE_MC
 mc_snapshot_t simcall_HANDLER_mc_snapshot(smx_simcall_t simcall);
 int simcall_HANDLER_mc_compare_snapshots(smx_simcall_t simcall, mc_snapshot_t s1, mc_snapshot_t s2);
-int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max);
 #endif
index fd28480..81efa33 100644 (file)
@@ -2587,6 +2587,28 @@ inline static xbt_dict_t simcall_BODY_asr_get_properties(const char* name) {
     }    
     return self->simcall.result.dp;
   }
+  
+inline static int simcall_BODY_mc_random(int min, int max) {
+    smx_process_t self = SIMIX_process_self();
+
+    /* Go to that function to follow the code flow through the simcall barrier */
+    if (0) simcall_HANDLER_mc_random(&self->simcall, min, max);
+    /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
+
+    self->simcall.call = SIMCALL_MC_RANDOM;
+    memset(&self->simcall.result, 0, sizeof(self->simcall.result));
+    memset(self->simcall.args, 0, sizeof(self->simcall.args));
+    self->simcall.args[0].i = (int) min;
+    self->simcall.args[1].i = (int) max;
+    if (self != simix_global->maestro_process) {
+      XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
+                SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);
+      SIMIX_process_yield(self);
+    } else {
+      SIMIX_simcall_handle(&self->simcall, 0);
+    }    
+    return self->simcall.result.i;
+  }
 #ifdef HAVE_LATENCY_BOUND_TRACKING
   
 inline static int simcall_BODY_comm_is_latency_bounded(smx_synchro_t comm) {
@@ -2680,26 +2702,4 @@ inline static int simcall_BODY_mc_compare_snapshots(mc_snapshot_t s1, mc_snapsho
     }    
     return self->simcall.result.i;
   }
-  
-inline static int simcall_BODY_mc_random(int min, int max) {
-    smx_process_t self = SIMIX_process_self();
-
-    /* Go to that function to follow the code flow through the simcall barrier */
-    if (0) simcall_HANDLER_mc_random(&self->simcall, min, max);
-    /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */
-
-    self->simcall.call = SIMCALL_MC_RANDOM;
-    memset(&self->simcall.result, 0, sizeof(self->simcall.result));
-    memset(self->simcall.args, 0, sizeof(self->simcall.args));
-    self->simcall.args[0].i = (int) min;
-    self->simcall.args[1].i = (int) max;
-    if (self != simix_global->maestro_process) {
-      XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
-                SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);
-      SIMIX_process_yield(self);
-    } else {
-      SIMIX_simcall_handle(&self->simcall, 0);
-    }    
-    return self->simcall.result.i;
-  }
 #endif
index 46a84a1..634f039 100644 (file)
@@ -136,6 +136,7 @@ typedef enum {
   SIMCALL_STORAGE_GET_PROPERTIES,
   SIMCALL_STORAGE_GET_CONTENT,
   SIMCALL_ASR_GET_PROPERTIES,
+  SIMCALL_MC_RANDOM,
 #ifdef HAVE_LATENCY_BOUND_TRACKING
   SIMCALL_COMM_IS_LATENCY_BOUNDED,
 #endif
@@ -147,7 +148,6 @@ typedef enum {
 #ifdef HAVE_MC
   SIMCALL_MC_SNAPSHOT,
   SIMCALL_MC_COMPARE_SNAPSHOTS,
-  SIMCALL_MC_RANDOM,
 #endif
   NUM_SIMCALLS
 } e_smx_simcall_t;
index e4cc8a5..b339a4a 100644 (file)
@@ -15,7 +15,6 @@
 
 #include "smx_private.h"
 #ifdef HAVE_MC
-#include "mc/mc_private.h"
 #endif
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);
@@ -140,6 +139,7 @@ const char* simcall_names[] = {
   [SIMCALL_STORAGE_GET_PROPERTIES] = "SIMCALL_STORAGE_GET_PROPERTIES",
   [SIMCALL_STORAGE_GET_CONTENT] = "SIMCALL_STORAGE_GET_CONTENT",
   [SIMCALL_ASR_GET_PROPERTIES] = "SIMCALL_ASR_GET_PROPERTIES",
+  [SIMCALL_MC_RANDOM] = "SIMCALL_MC_RANDOM",
 #ifdef HAVE_LATENCY_BOUND_TRACKING
   [SIMCALL_COMM_IS_LATENCY_BOUNDED] = "SIMCALL_COMM_IS_LATENCY_BOUNDED",
 #endif
@@ -151,7 +151,6 @@ const char* simcall_names[] = {
 #ifdef HAVE_MC
   [SIMCALL_MC_SNAPSHOT] = "SIMCALL_MC_SNAPSHOT",
   [SIMCALL_MC_COMPARE_SNAPSHOTS] = "SIMCALL_MC_COMPARE_SNAPSHOTS",
-  [SIMCALL_MC_RANDOM] = "SIMCALL_MC_RANDOM",
 #endif
 [SIMCALL_NONE] = "NONE"
 };
@@ -738,6 +737,11 @@ case SIMCALL_ASR_GET_PROPERTIES:
       SIMIX_simcall_answer(simcall);
       break;  
 
+case SIMCALL_MC_RANDOM:
+      simcall->result.i = simcall_HANDLER_mc_random(simcall ,  simcall->args[0].i,  simcall->args[1].i);
+      SIMIX_simcall_answer(simcall);
+      break;  
+
 #ifdef HAVE_LATENCY_BOUND_TRACKING
 case SIMCALL_COMM_IS_LATENCY_BOUNDED:
       simcall->result.i = SIMIX_comm_is_latency_bounded((smx_synchro_t) simcall->args[0].dp);
@@ -765,11 +769,6 @@ case SIMCALL_MC_COMPARE_SNAPSHOTS:
       SIMIX_simcall_answer(simcall);
       break;  
 
-case SIMCALL_MC_RANDOM:
-      simcall->result.i = simcall_HANDLER_mc_random(simcall ,  simcall->args[0].i,  simcall->args[1].i);
-      SIMIX_simcall_answer(simcall);
-      break;  
-
 #endif
     case NUM_SIMCALLS:
       break;
index 52c0b71..8eefe72 100644 (file)
@@ -47,20 +47,13 @@ union u_smx_scalar {
 typedef struct s_smx_simcall {
   e_smx_simcall_t call;
   smx_process_t issuer;
-#ifdef HAVE_MC
   int mc_value;
-#endif
   union u_smx_scalar args[11];
   union u_smx_scalar result;
 } s_smx_simcall_t, *smx_simcall_t;
 
-#if HAVE_MC
 #define SIMCALL_SET_MC_VALUE(simcall, value) ((simcall)->mc_value = (value))
 #define SIMCALL_GET_MC_VALUE(simcall) ((simcall)->mc_value)
-#else
-#define SIMCALL_SET_MC_VALUE(simcall, value) ((void)0)
-#define SIMCALL_GET_MC_VALUE(simcall) 0
-#endif
 
 #include "popping_accessors.h"
 
index d3f47c7..a2d8711 100644 (file)
@@ -132,6 +132,7 @@ Func H storage_get_used_size (sg_size_t) (name, void*, smx_storage_t)
 Func - storage_get_properties (void*, xbt_dict_t) (storage, void*, smx_storage_t)
 Func - storage_get_content (void*, xbt_dict_t) (storage, void*, smx_storage_t)
 Func H asr_get_properties (void*, xbt_dict_t) (name, const char*)
+Func H mc_random (int) (min, int) (max, int)
 ## HAVE_LATENCY_BOUND_TRACKING
 Func - comm_is_latency_bounded (int) (comm, void*, smx_synchro_t)
 ## HAVE_TRACING
@@ -139,4 +140,3 @@ Proc - set_category (void) (synchro, void*, smx_synchro_t) (category, const char
 ## HAVE_MC
 Func H mc_snapshot (void*, mc_snapshot_t)
 Func H mc_compare_snapshots (int) (s1, void*, mc_snapshot_t) (s2, void*, mc_snapshot_t)
-Func H mc_random (int) (min, int) (max, int)
index 99a968a..41bd69d 100755 (executable)
@@ -281,7 +281,7 @@ if __name__=='__main__':
   
   fd.write('#include "smx_private.h"\n');
   fd.write('#ifdef HAVE_MC\n');
-  fd.write('#include "mc/mc_private.h"\n');
+  fd.write('#include "mc/mc_private.h"\n');
   fd.write('#endif\n');
   fd.write('\n');
   fd.write('XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);\n\n');
index cbf502f..6e3dac7 100644 (file)
@@ -16,6 +16,7 @@
 #ifdef HAVE_MC
 #include "mc/mc_private.h"
 #endif
+#include "mc/mc_record.h"
 
 #ifdef HAVE_SMPI
 #include "smpi/private.h"
@@ -280,7 +281,7 @@ void SIMIX_clean(void)
  */
 XBT_INLINE double SIMIX_get_clock(void)
 {
-  if(MC_is_active()){
+  if(MC_is_active() || MC_record_replay_is_active()){
     return MC_process_clock_get(SIMIX_process_self());
   }else{
     return surf_get_clock();
@@ -306,6 +307,12 @@ static int process_syscall_color(void *p)
  */
 void SIMIX_run(void)
 {
+  if(MC_record_path) {
+    MC_record_replay_init();
+    MC_record_replay_from_string(MC_record_path);
+    return;
+  }
+
   double time = 0;
   smx_process_t process;
   surf_action_t action;
@@ -607,4 +614,3 @@ xbt_dict_t SIMIX_asr_get_properties(const char *name)
 {
   return xbt_lib_get_or_null(as_router_lib, name, ROUTING_PROP_ASR_LEVEL);
 }
-
index 30043b0..d05a6be 100644 (file)
@@ -377,7 +377,7 @@ smx_synchro_t SIMIX_host_execute(const char *name,
 #endif
 
   /* set surf's action */
-  if (!MC_is_active()) {
+  if (!MC_is_active() && !MC_record_replay_is_active()) {
 
     synchro->execution.surf_exec = surf_workstation_execute(host, computation_amount);
     surf_action_set_data(synchro->execution.surf_exec, synchro);
@@ -441,7 +441,7 @@ smx_synchro_t SIMIX_host_parallel_execute(const char *name,
   }
 
   /* set surf's synchro */
-  if (!MC_is_active()) {
+  if (!MC_is_active() && !MC_record_replay_is_active()) {
     synchro->execution.surf_exec =
       surf_workstation_model_execute_parallel_task((surf_workstation_model_t)surf_workstation_model,
                  host_nb, workstation_list, computation_amount, communication_amount, rate);
@@ -515,7 +515,7 @@ void simcall_HANDLER_host_execution_wait(smx_simcall_t simcall, smx_synchro_t sy
   simcall->issuer->waiting_synchro = synchro;
 
   /* set surf's synchro */
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     synchro->state = SIMIX_DONE;
     SIMIX_execution_finish(synchro);
     return;
index 089c68e..9f47c97 100644 (file)
@@ -423,7 +423,7 @@ smx_synchro_t SIMIX_comm_isend(smx_process_t src_proc, smx_rdv_t rdv,
   other_synchro->comm.copy_data_fun = copy_data_fun;
 
 
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     other_synchro->state = SIMIX_RUNNING;
     return (detached ? NULL : other_synchro);
   }
@@ -532,7 +532,7 @@ smx_synchro_t SIMIX_comm_irecv(smx_process_t dst_proc, smx_rdv_t rdv,
     SIMIX_comm_copy_data(other_synchro);*/
 
 
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     other_synchro->state = SIMIX_RUNNING;
     return other_synchro;
   }
@@ -593,7 +593,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_synchro_t synchro, dou
   xbt_fifo_push(synchro->simcalls, simcall);
   simcall->issuer->waiting_synchro = synchro;
 
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     int idx = SIMCALL_GET_MC_VALUE(simcall);
     if (idx == 0) {
       synchro->state = SIMIX_DONE;
@@ -630,7 +630,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_synchro_t synchro, dou
 
 void simcall_HANDLER_comm_test(smx_simcall_t simcall, smx_synchro_t synchro)
 {
-  if(MC_is_active()){
+  if(MC_is_active() || MC_record_replay_is_active()){
     simcall_comm_test__set__result(simcall, synchro->comm.src_proc && synchro->comm.dst_proc);
     if(simcall_comm_test__get__result(simcall)){
       synchro->state = SIMIX_DONE;
@@ -657,7 +657,7 @@ void simcall_HANDLER_comm_testany(smx_simcall_t simcall, xbt_dynar_t synchros)
   smx_synchro_t synchro;
   simcall_comm_testany__set__result(simcall, -1);
 
-  if (MC_is_active()){
+  if (MC_is_active() || MC_record_replay_is_active()){
     int idx = SIMCALL_GET_MC_VALUE(simcall);
     if(idx == -1){
       SIMIX_simcall_answer(simcall);
@@ -687,7 +687,7 @@ void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, xbt_dynar_t synchros)
   smx_synchro_t synchro;
   unsigned int cursor = 0;
 
-  if (MC_is_active()){
+  if (MC_is_active() || MC_record_replay_is_active()){
     int idx = SIMCALL_GET_MC_VALUE(simcall);
     synchro = xbt_dynar_get_as(synchros, idx, smx_synchro_t);
     xbt_fifo_push(synchro->simcalls, simcall);
@@ -791,7 +791,7 @@ void SIMIX_comm_finish(smx_synchro_t synchro)
       continue; // if process handling comm is killed
     if (simcall->call == SIMCALL_COMM_WAITANY) {
       SIMIX_waitany_remove_simcall_from_actions(simcall);
-      if (!MC_is_active())
+      if (!MC_is_active() && !MC_record_replay_is_active())
         simcall_comm_waitany__set__result(simcall, xbt_dynar_search(simcall_comm_waitany__get__comms(simcall), &synchro));
     }
 
@@ -945,6 +945,7 @@ void SIMIX_comm_cancel(smx_synchro_t synchro)
     synchro->state = SIMIX_CANCELED;
   }
   else if (!MC_is_active() /* when running the MC there are no surf actions */
+           && !MC_record_replay_is_active()
            && (synchro->state == SIMIX_READY || synchro->state == SIMIX_RUNNING)) {
 
     surf_action_cancel(synchro->comm.surf_comm);
index a0bcac1..d2e80ba 100644 (file)
@@ -714,7 +714,7 @@ smx_synchro_t SIMIX_process_join(smx_process_t issuer, smx_process_t process, do
 
 void simcall_HANDLER_process_sleep(smx_simcall_t simcall, double duration)
 {
-  if (MC_is_active()) {
+  if (MC_is_active() || MC_record_replay_is_active()) {
     MC_process_clock_add(simcall->issuer, duration);
     simcall_process_sleep__set__result(simcall, SIMIX_DONE);
     SIMIX_simcall_answer(simcall);
index 58195e8..e4edda9 100644 (file)
@@ -21,7 +21,7 @@ int smpi_coll_tuned_allgatherv_mpich_rdb (
   MPI_Status status;
   MPI_Aint  recvtype_extent, recvtype_true_extent, recvtype_true_lb;
   int curr_cnt, dst, total_count;
-  void *tmp_buf;
+  void *tmp_buf, *tmp_buf_rl;
   int mask, dst_tree_root, my_tree_root, position,
     send_offset, recv_offset, last_recv_cnt=0, nprocs_completed, k,
     offset, tmp_mask, tree_root;
@@ -42,10 +42,10 @@ int smpi_coll_tuned_allgatherv_mpich_rdb (
 
   smpi_datatype_extent(recvtype, &recvtype_true_lb, &recvtype_true_extent);
 
-  tmp_buf= (void*)smpi_get_tmp_sendbuffer(total_count*(max(recvtype_true_extent,recvtype_extent)));
+  tmp_buf_rl= (void*)smpi_get_tmp_sendbuffer(total_count*(max(recvtype_true_extent,recvtype_extent)));
 
   /* adjust for potential negative lower bound in datatype */
-  tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
+  tmp_buf = (void *)((char*)tmp_buf_rl - recvtype_true_lb);
 
   /* copy local data into right location in tmp_buf */
   position = 0;
@@ -209,6 +209,6 @@ int smpi_coll_tuned_allgatherv_mpich_rdb (
     position += recvcounts[j];
   }
 
-  smpi_free_tmp_buffer(tmp_buf);
+  smpi_free_tmp_buffer(tmp_buf_rl);
   return MPI_SUCCESS;
 }
index bda2b95..1560ae5 100644 (file)
@@ -53,7 +53,11 @@ static const char *smpi_colors[] ={
     "put",       "0.3 1 0",
     "get",       "0 1 0.3",
     "accumulate",       "1 0.3 0",
-    "fence",       "1 0 0.3",
+    "win_fence",       "1 0 0.3",
+    "win_post",       "1 0 0.8",
+    "win_wait",       "1 0.8 0",
+    "win_start",       "0.8 0 1",
+    "win_complete",       "0.8 1 0",
     NULL, NULL,
 };
 
index 13f2e76..7c5be9d 100644 (file)
@@ -180,6 +180,8 @@ smx_rdv_t smpi_process_mailbox(void);
 smx_rdv_t smpi_process_remote_mailbox(int index);
 smx_rdv_t smpi_process_mailbox_small(void);
 smx_rdv_t smpi_process_remote_mailbox_small(int index);
+xbt_mutex_t smpi_process_mailboxes_mutex(void);
+xbt_mutex_t smpi_process_remote_mailboxes_mutex(int index);
 xbt_os_timer_t smpi_process_timer(void);
 void smpi_process_simulated_start(void);
 double smpi_process_simulated_elapsed(void);
@@ -398,6 +400,11 @@ void smpi_mpi_win_set_name(MPI_Win win, char* name);
 
 int smpi_mpi_win_fence( int assert,  MPI_Win win);
 
+int smpi_mpi_win_post(MPI_Group group, int assert, MPI_Win win);
+int smpi_mpi_win_start(MPI_Group group, int assert, MPI_Win win);
+int smpi_mpi_win_complete(MPI_Win win);
+int smpi_mpi_win_wait(MPI_Win win);
+
 int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
               MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win);
 int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
@@ -558,6 +565,10 @@ void mpi_win_free_( int* win, int* ierr);
 void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* comm, int *win, int* ierr);
 void mpi_win_set_name_ (int*  win, char * name, int* ierr, int size);
 void mpi_win_get_name_ (int*  win, char * name, int* len, int* ierr);
+void mpi_win_post_(int* group, int assert, int* win, int* ierr);
+void mpi_win_start_(int* group, int assert, int* win, int* ierr);
+void mpi_win_complete_(int* win, int* ierr);
+void mpi_win_wait_(int* win, int* ierr);
 void mpi_info_create_( int *info, int* ierr);
 void mpi_info_set_( int *info, char *key, char *value, int* ierr, unsigned int keylen, unsigned int valuelen);
 void mpi_info_free_(int* info, int* ierr);
index 8b60d82..768b13b 100644 (file)
@@ -344,11 +344,14 @@ void smpi_mpi_start(MPI_Request request)
 
   if (request->flags & RECV) {
     print_request("New recv", request);
+        
+    xbt_mutex_t mut=smpi_process_mailboxes_mutex();
+    xbt_mutex_acquire(mut);
     
     if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")){
     //We have to check both mailboxes (because SSEND messages are sent to the large mbox). begin with the more appropriate one : the small one.
       mailbox = smpi_process_mailbox_small();
-      XBT_DEBUG("Is there a corresponding send already posted the small mailbox %p (in case of SSEND)?", mailbox);
+      XBT_DEBUG("Is there a corresponding send already posted in the small mailbox %p (in case of SSEND)?", mailbox);
       smx_synchro_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
     
       if(action ==NULL){
@@ -356,7 +359,7 @@ void smpi_mpi_start(MPI_Request request)
         XBT_DEBUG("No, nothing in the small mailbox test the other one : %p", mailbox);
         action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
         if(action ==NULL){
-          XBT_DEBUG("Still notching, switch back to the small mailbox : %p", mailbox);
+          XBT_DEBUG("Still nothing, switch back to the small mailbox : %p", mailbox);
           mailbox = smpi_process_mailbox_small();
           }
       }else{
@@ -393,7 +396,7 @@ void smpi_mpi_start(MPI_Request request)
                                          request, -1.0);
         XBT_DEBUG("recv simcall posted");
 
-
+    xbt_mutex_release(mut);
   } else {
 
 
@@ -419,6 +422,9 @@ void smpi_mpi_start(MPI_Request request)
         XBT_DEBUG("sending size of %zu : sleep %f ", request->size, smpi_os(request->size));
     }
     
+    xbt_mutex_t mut=smpi_process_remote_mailboxes_mutex(receiver);
+    xbt_mutex_acquire(mut);
+    
     if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")) { // eager mode
       mailbox = smpi_process_remote_mailbox(receiver);
       XBT_DEBUG("Is there a corresponding recv already posted in the large mailbox %p?", mailbox);
@@ -490,7 +496,7 @@ void smpi_mpi_start(MPI_Request request)
       simcall_set_category(request->action, TRACE_internal_smpi_get_category());
 
 #endif
-
+    xbt_mutex_release(mut);
   }
 
 }
@@ -905,10 +911,9 @@ void smpi_mpi_wait(MPI_Request * request, MPI_Status * status)
 
   if ((*request)->action != NULL) { // this is not a detached send
     simcall_comm_wait((*request)->action, -1.0);
-#ifdef HAVE_MC
-  if(MC_is_active() && (*request)->action)
+
+  if((MC_is_active() || MC_record_replay_is_active()) && (*request)->action)
     (*request)->action->comm.dst_data = NULL; // dangling pointer : dst_data is freed with a wait, need to set it to NULL for system state comparison
-#endif
   }
 
   finish_wait(request, status);
@@ -993,7 +998,7 @@ int smpi_mpi_waitall(int count, MPI_Request requests[],
   }
   for(c = 0; c < count; c++) {
 
-    if (MC_is_active()) {
+    if (MC_is_active() || MC_record_replay_is_active()) {
       smpi_mpi_wait(&requests[c], pstat);
       index = c;
     } else {
@@ -1587,4 +1592,3 @@ void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count,
   xbt_free(tmpbufs);
   xbt_free(requests);
 }
-
index 55970de..72230db 100644 (file)
@@ -195,7 +195,7 @@ void smpi_bench_begin(void)
 {
   smpi_switch_data_segment(smpi_process_index());
 
-  if(MC_is_active())
+  if (MC_is_active() || MC_record_replay_is_active())
     return;
 
   xbt_os_threadtimer_start(smpi_process_timer());
@@ -204,7 +204,7 @@ void smpi_bench_begin(void)
 void smpi_bench_end(void)
 {
 
-  if(MC_is_active())
+  if (MC_is_active() || MC_record_replay_is_active())
     return;
 
   xbt_os_timer_t timer = smpi_process_timer();
index a832f33..b044802 100644 (file)
@@ -748,6 +748,22 @@ void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int*
  }
 }
 
+void mpi_win_post_(int* group, int assert, int* win, int* ierr){
+  *ierr =  MPI_Win_post(smpi_group_f2c(*group), assert, smpi_win_f2c(*win));
+}
+
+void mpi_win_start_(int* group, int assert, int* win, int* ierr){
+  *ierr =  MPI_Win_start(smpi_group_f2c(*group), assert, smpi_win_f2c(*win));
+}
+
+void mpi_win_complete_(int* win, int* ierr){
+  *ierr =  MPI_Win_complete(smpi_win_f2c(*win));
+}
+
+void mpi_win_wait_(int* win, int* ierr){
+  *ierr =  MPI_Win_wait(smpi_win_f2c(*win));
+}
+
 void mpi_win_set_name_ (int*  win, char * name, int* ierr, int size){
  //handle trailing blanks
  while(name[size-1]==' ')size--;
@@ -1729,3 +1745,4 @@ void mpi_comm_get_parent_ ( int* parent, int* ierr){
     *parent = smpi_comm_c2f(tmp);
   }
 }
+
index 4f001b6..9a647ee 100644 (file)
@@ -7,6 +7,7 @@
 #include "private.h"
 #include "smpi_mpi_dt_private.h"
 #include "mc/mc.h"
+#include "mc/mc_record.h"
 #include "xbt/replay.h"
 #include "surf/surf.h"
 #include "simix/smx_private.h"
@@ -26,6 +27,7 @@ typedef struct s_smpi_process_data {
   char ***argv;
   smx_rdv_t mailbox;
   smx_rdv_t mailbox_small;
+  xbt_mutex_t mailboxes_mutex;
   xbt_os_timer_t timer;
   MPI_Comm comm_self;
   MPI_Comm comm_intra;
@@ -106,7 +108,6 @@ void smpi_process_init(int *argc, char ***argv)
     data->argv = argv;
     // set the process attached to the mailbox
     simcall_rdv_set_receiver(data->mailbox_small, proc);
-
     XBT_DEBUG("<%d> New process in the game: %p", index, proc);
 
     if(smpi_privatize_global_variables){
@@ -135,7 +136,7 @@ void smpi_process_finalize(void)
 {
     // This leads to an explosion of the search graph
     // which cannot be reduced:
-    if(MC_is_active())
+    if(MC_is_active() || MC_record_replay_is_active())
       return;
 
     int index = smpi_process_index();
@@ -254,6 +255,12 @@ smx_rdv_t smpi_process_mailbox_small(void)
   return data->mailbox_small;
 }
 
+xbt_mutex_t smpi_process_mailboxes_mutex(void)
+{
+  smpi_process_data_t data = smpi_process_data();
+  return data->mailboxes_mutex;
+}
+
 smx_rdv_t smpi_process_remote_mailbox(int index)
 {
   smpi_process_data_t data = smpi_process_remote_data(index);
@@ -267,6 +274,12 @@ smx_rdv_t smpi_process_remote_mailbox_small(int index)
   return data->mailbox_small;
 }
 
+xbt_mutex_t smpi_process_remote_mailboxes_mutex(int index)
+{
+  smpi_process_data_t data = smpi_process_remote_data(index);
+  return data->mailboxes_mutex;
+}
+
 xbt_os_timer_t smpi_process_timer(void)
 {
   smpi_process_data_t data = smpi_process_data();
@@ -421,6 +434,7 @@ void smpi_global_init(void)
     process_data[i]->mailbox = simcall_rdv_create(get_mailbox_name(name, i));
     process_data[i]->mailbox_small =
         simcall_rdv_create(get_mailbox_name_small(name, i));
+    process_data[i]->mailboxes_mutex=xbt_mutex_init();
     process_data[i]->timer = xbt_os_timer_new();
     if (MC_is_active())
       MC_ignore_heap(process_data[i]->timer, xbt_os_timer_size());
@@ -474,6 +488,7 @@ void smpi_global_destroy(void)
     xbt_os_timer_free(process_data[i]->timer);
     simcall_rdv_destroy(process_data[i]->mailbox);
     simcall_rdv_destroy(process_data[i]->mailbox_small);
+    xbt_mutex_destroy(process_data[i]->mailboxes_mutex);
     xbt_free(process_data[i]);
   }
   xbt_free(process_data);
index bbd04ba..7c06028 100644 (file)
@@ -3013,6 +3013,85 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da
 }
 
 
+int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else if (group==MPI_GROUP_NULL){
+    retval = MPI_ERR_GROUP;
+  }
+#ifdef HAVE_TRACING
+  int rank = smpi_process_index();
+  TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+  retval = smpi_mpi_win_post(group,assert,win);
+#ifdef HAVE_TRACING
+  TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else if (group==MPI_GROUP_NULL){
+    retval = MPI_ERR_GROUP;
+  }
+  
+#ifdef HAVE_TRACING
+  int rank = smpi_process_index();
+  TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+  retval = smpi_mpi_win_start(group,assert,win);
+#ifdef HAVE_TRACING
+  TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+  smpi_bench_begin();
+  return retval;
+}
+
+
+int PMPI_Win_complete(MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  }
+  
+#ifdef HAVE_TRACING
+  int rank = smpi_process_index();
+  TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+  retval = smpi_mpi_win_complete(win);
+#ifdef HAVE_TRACING
+  TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Win_wait(MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  }
+#ifdef HAVE_TRACING
+  int rank = smpi_process_index();
+  TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+  retval = smpi_mpi_win_wait(win);
+#ifdef HAVE_TRACING
+  TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+  smpi_bench_begin();
+  return retval;
+}
+
 int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr){
   void *ptr = xbt_malloc(size);
   if(!ptr)
@@ -3664,22 +3743,10 @@ int PMPI_Comm_get_parent( MPI_Comm *parent){
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Win_complete(MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) {
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Win_test(MPI_Win win, int *flag){
   NOT_YET_IMPLEMENTED
 }
@@ -3688,6 +3755,3 @@ int PMPI_Win_unlock(int rank, MPI_Win win){
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Win_wait(MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
index 356ab58..b35bc1a 100644 (file)
@@ -24,6 +24,8 @@ typedef struct s_smpi_mpi_win{
   xbt_bar_t bar;
   MPI_Win* connected_wins;
   char* name;
+  int opened;
+  MPI_Group group;
 } s_smpi_mpi_win_t;
 
 
@@ -45,6 +47,8 @@ MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info
     info->refcount++;
   win->comm = comm;
   win->name = NULL;
+  win->opened = 0;
+  win->group = MPI_GROUP_NULL;
   win->requests = xbt_dynar_new(sizeof(MPI_Request), NULL);
   win->connected_wins = xbt_malloc0(comm_size*sizeof(MPI_Win));
   win->connected_wins[rank] = win;
@@ -100,8 +104,10 @@ void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length){
 }
 
 void smpi_mpi_win_get_group(MPI_Win win, MPI_Group* group){
-  if(win->comm != MPI_COMM_NULL)
+  if(win->comm != MPI_COMM_NULL){
     *group = smpi_comm_group(win->comm);
+    smpi_group_use(*group);
+  }
 }
 
 void smpi_mpi_win_set_name(MPI_Win win, char* name){
@@ -112,7 +118,8 @@ void smpi_mpi_win_set_name(MPI_Win win, char* name){
 int smpi_mpi_win_fence( int assert,  MPI_Win win){
 
   XBT_DEBUG("Entering fence");
-
+  if(!win->opened)
+    win->opened=1;
   if(assert != MPI_MODE_NOPRECEDE){
     xbt_barrier_wait(win->bar);
 
@@ -142,6 +149,9 @@ int smpi_mpi_win_fence( int assert,  MPI_Win win){
 int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
               MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
 {
+
+  if(!win->opened)//check that post/start has been done
+    return MPI_ERR_WIN;
   //get receiver pointer
   MPI_Win recv_win = win->connected_wins[target_rank];
 
@@ -178,6 +188,8 @@ int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datat
 int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
               MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
 {
+  if(!win->opened)//check that post/start has been done
+    return MPI_ERR_WIN;
   //get sender pointer
   MPI_Win send_win = win->connected_wins[target_rank];
 
@@ -218,6 +230,8 @@ int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datat
 int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
               MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
 {
+  if(!win->opened)//check that post/start has been done
+    return MPI_ERR_WIN;
   //FIXME: local version 
   //get receiver pointer
   MPI_Win recv_win = win->connected_wins[target_rank];
@@ -249,3 +263,183 @@ int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origi
   return MPI_SUCCESS;
 }
 
+int smpi_mpi_win_start(MPI_Group group, int assert, MPI_Win win){
+    /* From MPI forum advices
+    The call to MPI_WIN_COMPLETE does not return until the put call has completed at 
+    the origin; and the target window will be accessed by the put operation only 
+    after the call to MPI_WIN_START has matched a call to MPI_WIN_POST by the target
+     process. This still leaves much choice to implementors. The call to 
+     MPI_WIN_START can block until the matching call to MPI_WIN_POST occurs at all 
+    target processes. One can also have implementations where the call to 
+    MPI_WIN_START is nonblocking, but the call to MPI_PUT blocks until the matching 
+    call to MPI_WIN_POST occurred; or implementations where the first two calls are 
+    nonblocking, but the call to MPI_WIN_COMPLETE blocks until the call to 
+    MPI_WIN_POST occurred; or even implementations where all three calls can 
+    complete before any target process called MPI_WIN_POST --- the data put must be 
+    buffered, in this last case, so as to allow the put to complete at the origin 
+    ahead of its completion at the target. However, once the call to MPI_WIN_POST is
+     issued, the sequence above must complete, without further dependencies.
+    */
+  
+  //naive, blocking implementation.
+  int i=0,j=0;
+  int size = smpi_group_size(group);
+  MPI_Request* reqs = xbt_new0(MPI_Request, size);
+  
+//  for(i=0;i<size;i++){
+  while(j!=size){
+    int src=smpi_group_index(group,j);
+    if(src!=smpi_process_index()){
+      reqs[i]=smpi_irecv_init(NULL, 0, MPI_CHAR, src,RMA_TAG+4, MPI_COMM_WORLD);
+      i++;
+    }
+    j++;
+  }
+  size=i;
+  smpi_mpi_startall(size, reqs);
+  smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE);
+  for(i=0;i<size;i++){
+    smpi_mpi_request_free(&reqs[i]);
+  }
+  xbt_free(reqs);
+  win->opened++; //we're open for business !
+  win->group=group;
+  smpi_group_use(group);
+  return MPI_SUCCESS;
+}
+
+int smpi_mpi_win_post(MPI_Group group, int assert, MPI_Win win){
+  //let's make a synchronous send here
+  int i=0,j=0;
+  int size = smpi_group_size(group);
+  MPI_Request* reqs = xbt_new0(MPI_Request, size);
+  
+  while(j!=size){
+    int dst=smpi_group_index(group,j);
+    if(dst!=smpi_process_index()){
+      reqs[i]=smpi_mpi_send_init(NULL, 0, MPI_CHAR, dst,
+        RMA_TAG+4, MPI_COMM_WORLD);
+      i++;
+    }
+    j++;
+  }
+  size=i;
+  
+  smpi_mpi_startall(size, reqs);
+  smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE);
+  for(i=0;i<size;i++){
+    smpi_mpi_request_free(&reqs[i]);
+  }
+  xbt_free(reqs);
+  win->opened++; //we're open for business !
+  win->group=group;
+  smpi_group_use(group);
+  return MPI_SUCCESS;
+}
+
+int smpi_mpi_win_complete(MPI_Win win){
+  if(win->opened==0)
+    xbt_die("Complete called on already opened MPI_Win");
+//  xbt_barrier_wait(win->bar);
+  //MPI_Comm comm = smpi_comm_new(win->group, NULL);
+  //mpi_coll_barrier_fun(comm);
+  //smpi_comm_destroy(comm);
+  
+  XBT_DEBUG("Entering MPI_Win_Complete");
+  int i=0,j=0;
+  int size = smpi_group_size(win->group);
+  MPI_Request* reqs = xbt_new0(MPI_Request, size);
+  
+  while(j!=size){
+    int dst=smpi_group_index(win->group,j);
+    if(dst!=smpi_process_index()){
+      reqs[i]=smpi_mpi_send_init(NULL, 0, MPI_CHAR, dst,
+        RMA_TAG+5, MPI_COMM_WORLD);
+      i++;
+    }
+    j++;
+  }
+  size=i;
+  XBT_DEBUG("Win_complete - Sending sync messages to %d processes", size);
+  smpi_mpi_startall(size, reqs);
+  smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE);
+  
+  for(i=0;i<size;i++){
+    smpi_mpi_request_free(&reqs[i]);
+  }
+  xbt_free(reqs);
+  
+  //now we can finish RMA calls
+  
+  xbt_dynar_t reqqs = win->requests;
+  size = xbt_dynar_length(reqqs);
+  
+  XBT_DEBUG("Win_complete - Finishing %d RMA calls", size);
+  unsigned int cpt=0;
+  MPI_Request req;
+  // start all requests that have been prepared by another process
+  xbt_dynar_foreach(reqqs, cpt, req){
+    if (req->flags & PREPARED) smpi_mpi_start(req);
+  }
+
+  MPI_Request* treqs = xbt_dynar_to_array(reqqs);
+  smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE);
+  xbt_free(treqs);
+  win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL);
+  win->opened--; //we're closed for business !
+  return MPI_SUCCESS;
+}
+
+
+
+int smpi_mpi_win_wait(MPI_Win win){
+//  xbt_barrier_wait(win->bar);
+  //MPI_Comm comm = smpi_comm_new(win->group, NULL);
+  //mpi_coll_barrier_fun(comm);
+  //smpi_comm_destroy(comm);
+  //naive, blocking implementation.
+  XBT_DEBUG("Entering MPI_Win_Wait");
+  int i=0,j=0;
+  int size = smpi_group_size(win->group);
+  MPI_Request* reqs = xbt_new0(MPI_Request, size);
+  
+//  for(i=0;i<size;i++){
+  while(j!=size){
+    int src=smpi_group_index(win->group,j);
+    if(src!=smpi_process_index()){
+      reqs[i]=smpi_irecv_init(NULL, 0, MPI_CHAR, src,RMA_TAG+5, MPI_COMM_WORLD);
+      i++;
+    }
+    j++;
+  }
+  size=i;
+  XBT_DEBUG("Win_wait - Receiving sync messages from %d processes", size);
+  smpi_mpi_startall(size, reqs);
+  smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE);
+  for(i=0;i<size;i++){
+    smpi_mpi_request_free(&reqs[i]);
+  }
+  xbt_free(reqs);
+
+  xbt_dynar_t reqqs = win->requests;
+  size = xbt_dynar_length(reqqs);
+  
+  XBT_DEBUG("Win_complete - Finishing %d RMA calls", size);
+
+  unsigned int cpt=0;
+  MPI_Request req;
+  // start all requests that have been prepared by another process
+  xbt_dynar_foreach(reqqs, cpt, req){
+    if (req->flags & PREPARED) smpi_mpi_start(req);
+  }
+
+  MPI_Request* treqs = xbt_dynar_to_array(reqqs);
+  smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE);
+  xbt_free(treqs);
+  win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL);
+  win->opened--; //we're opened for business !
+  return MPI_SUCCESS;
+}
+
+
+
index f7d9cde..c110244 100644 (file)
@@ -4681,366 +4681,366 @@ const char surfxml_flexml_version[] = "1.9.6";
 int surfxml_pcdata_ix;
 extern char *surfxml_bufferstack;
 #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix)
-AT_surfxml_cluster_radical AX_surfxml_cluster_radical;
-#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
-short int surfxml_cluster_radical_isset;
-AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat;
-#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
-short int surfxml_cluster_bb___lat_isset;
-AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity;
-#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
-short int surfxml_trace_periodicity_isset;
-AT_surfxml_cluster_core AX_surfxml_cluster_core;
-#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
-short int surfxml_cluster_core_isset;
-AT_surfxml_config_id AX_surfxml_config_id;
-#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
-short int surfxml_config_id_isset;
-AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst;
-#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
-short int surfxml_bypassASroute_gw___dst_isset;
-AT_surfxml_AS_id AX_surfxml_AS_id;
-#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
-short int surfxml_AS_id_isset;
-AT_surfxml_trace_file AX_surfxml_trace_file;
-#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
-short int surfxml_trace_file_isset;
-AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw;
-#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
-short int surfxml_cabinet_bw_isset;
-AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters;
-#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
-short int surfxml_cluster_topo___parameters_isset;
-AT_surfxml_host___link_up AX_surfxml_host___link_up;
-#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
-short int surfxml_host___link_up_isset;
-AT_surfxml_storage_attach AX_surfxml_storage_attach;
-#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
-short int surfxml_storage_attach_isset;
-AT_surfxml_peer_power AX_surfxml_peer_power;
-#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
-short int surfxml_peer_power_isset;
-AT_surfxml_storage___type_content___type AX_surfxml_storage___type_content___type;
-#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
-short int surfxml_storage___type_content___type_isset;
-AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix;
-#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
-short int surfxml_cluster_prefix_isset;
-AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst;
-#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
-short int surfxml_ASroute_dst_isset;
-AT_surfxml_ASroute_src AX_surfxml_ASroute_src;
-#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
-short int surfxml_ASroute_src_isset;
-AT_surfxml_peer_state___file AX_surfxml_peer_state___file;
-#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
-short int surfxml_peer_state___file_isset;
-AT_surfxml_prop_id AX_surfxml_prop_id;
-#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
-short int surfxml_prop_id_isset;
-AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id;
-#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
-short int surfxml_cluster_router___id_isset;
-AT_surfxml_host___link_down AX_surfxml_host___link_down;
-#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
-short int surfxml_host___link_down_isset;
-AT_surfxml_random_min AX_surfxml_random_min;
-#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
-short int surfxml_random_min_isset;
-AT_surfxml_cluster_power AX_surfxml_cluster_power;
-#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
-short int surfxml_cluster_power_isset;
-AT_surfxml_cluster_availability___file AX_surfxml_cluster_availability___file;
-#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
-short int surfxml_cluster_availability___file_isset;
-AT_surfxml_process_start___time AX_surfxml_process_start___time;
-#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
-short int surfxml_process_start___time_isset;
+AT_surfxml_platform_version AX_surfxml_platform_version;
+#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
+short int surfxml_platform_version_isset;
+AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id;
+#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
+short int surfxml_link___ctn_id_isset;
 AT_surfxml_peer_availability___file AX_surfxml_peer_availability___file;
 #define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
 short int surfxml_peer_availability___file_isset;
-AT_surfxml_random_generator AX_surfxml_random_generator;
-#define A_surfxml_random_generator AX_surfxml_random_generator
-short int surfxml_random_generator_isset;
-AT_surfxml_host___link_id AX_surfxml_host___link_id;
-#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
-short int surfxml_host___link_id_isset;
-AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file;
-#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
-short int surfxml_link_bandwidth___file_isset;
-AT_surfxml_storage_id AX_surfxml_storage_id;
-#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
-short int surfxml_storage_id_isset;
-AT_surfxml_AS_routing AX_surfxml_AS_routing;
-#define A_surfxml_AS_routing AX_surfxml_AS_routing
-short int surfxml_AS_routing_isset;
-AT_surfxml_host_availability___file AX_surfxml_host_availability___file;
-#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
-short int surfxml_host_availability___file_isset;
-AT_surfxml_cluster_lat AX_surfxml_cluster_lat;
-#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
-short int surfxml_cluster_lat_isset;
 AT_surfxml_storage_content AX_surfxml_storage_content;
 #define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
 short int surfxml_storage_content_isset;
-AT_surfxml_host_availability AX_surfxml_host_availability;
-#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-short int surfxml_host_availability_isset;
-AT_surfxml_link_latency___file AX_surfxml_link_latency___file;
-#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
-short int surfxml_link_latency___file_isset;
-AT_surfxml_cabinet_power AX_surfxml_cabinet_power;
-#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
-short int surfxml_cabinet_power_isset;
-AT_surfxml_host_core AX_surfxml_host_core;
-#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
-short int surfxml_host_core_isset;
-AT_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy;
-#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
-short int surfxml_cluster_bb___sharing___policy_isset;
-AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat;
-#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
-short int surfxml_cabinet_lat_isset;
+AT_surfxml_route_dst AX_surfxml_route_dst;
+#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
+short int surfxml_route_dst_isset;
+AT_surfxml_mount_storageId AX_surfxml_mount_storageId;
+#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
+short int surfxml_mount_storageId_isset;
+AT_surfxml_bypassASroute_src AX_surfxml_bypassASroute_src;
+#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
+short int surfxml_bypassASroute_src_isset;
+AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id;
+#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
+short int surfxml_cluster_router___id_isset;
+AT_surfxml_cluster_topology AX_surfxml_cluster_topology;
+#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
+short int surfxml_cluster_topology_isset;
+AT_surfxml_host___link_id AX_surfxml_host___link_id;
+#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
+short int surfxml_host___link_id_isset;
+AT_surfxml_trace___connect_trace AX_surfxml_trace___connect_trace;
+#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
+short int surfxml_trace___connect_trace_isset;
+AT_surfxml_host_pstate AX_surfxml_host_pstate;
+#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
+short int surfxml_host_pstate_isset;
+AT_surfxml_storage___type_content___type AX_surfxml_storage___type_content___type;
+#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
+short int surfxml_storage___type_content___type_isset;
+AT_surfxml_model___prop_value AX_surfxml_model___prop_value;
+#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
+short int surfxml_model___prop_value_isset;
+AT_surfxml_prop_id AX_surfxml_prop_id;
+#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
+short int surfxml_prop_id_isset;
+AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical;
+#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
+short int surfxml_ASroute_symmetrical_isset;
+AT_surfxml_link_id AX_surfxml_link_id;
+#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
+short int surfxml_link_id_isset;
 AT_surfxml_ASroute_gw___src AX_surfxml_ASroute_gw___src;
 #define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
 short int surfxml_ASroute_gw___src_isset;
 AT_surfxml_cabinet_radical AX_surfxml_cabinet_radical;
 #define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
 short int surfxml_cabinet_radical_isset;
-AT_surfxml_bypassRoute_src AX_surfxml_bypassRoute_src;
-#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
-short int surfxml_bypassRoute_src_isset;
-AT_surfxml_host_state AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-short int surfxml_host_state_isset;
-AT_surfxml_cabinet_prefix AX_surfxml_cabinet_prefix;
-#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
-short int surfxml_cabinet_prefix_isset;
-AT_surfxml_random_mean AX_surfxml_random_mean;
-#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
-short int surfxml_random_mean_isset;
-AT_surfxml_backbone_latency AX_surfxml_backbone_latency;
-#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
-short int surfxml_backbone_latency_isset;
-AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out;
-#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
-short int surfxml_peer_bw___out_isset;
-AT_surfxml_argument_value AX_surfxml_argument_value;
-#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
-short int surfxml_argument_value_isset;
-AT_surfxml_process_on___failure AX_surfxml_process_on___failure;
-#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
-short int surfxml_process_on___failure_isset;
-AT_surfxml_route_dst AX_surfxml_route_dst;
-#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
-short int surfxml_route_dst_isset;
-AT_surfxml_cluster_suffix AX_surfxml_cluster_suffix;
-#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
-short int surfxml_cluster_suffix_isset;
-AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind;
-#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
-short int surfxml_trace___connect_kind_isset;
 AT_surfxml_cabinet_id AX_surfxml_cabinet_id;
 #define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
 short int surfxml_cabinet_id_isset;
-AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link;
-#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
-short int surfxml_cluster_limiter___link_isset;
-AT_surfxml_mount_name AX_surfxml_mount_name;
-#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
-short int surfxml_mount_name_isset;
-AT_surfxml_bypassASroute_src AX_surfxml_bypassASroute_src;
-#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
-short int surfxml_bypassASroute_src_isset;
-AT_surfxml_host_coordinates AX_surfxml_host_coordinates;
-#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
-short int surfxml_host_coordinates_isset;
-AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction;
-#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
-short int surfxml_link___ctn_direction_isset;
+AT_surfxml_argument_value AX_surfxml_argument_value;
+#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
+short int surfxml_argument_value_isset;
+AT_surfxml_random_seed AX_surfxml_random_seed;
+#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
+short int surfxml_random_seed_isset;
+AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity;
+#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
+short int surfxml_trace_periodicity_isset;
+AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file;
+#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
+short int surfxml_cluster_state___file_isset;
+AT_surfxml_model___prop_id AX_surfxml_model___prop_id;
+#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
+short int surfxml_model___prop_id_isset;
+AT_surfxml_host_state AX_surfxml_host_state;
+#define A_surfxml_host_state AX_surfxml_host_state
+short int surfxml_host_state_isset;
+AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth;
+#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
+short int surfxml_link_bandwidth_isset;
+AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth;
+#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
+short int surfxml_backbone_bandwidth_isset;
+AT_surfxml_host_availability___file AX_surfxml_host_availability___file;
+#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
+short int surfxml_host_availability___file_isset;
 AT_surfxml_mstorage_name AX_surfxml_mstorage_name;
 #define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
 short int surfxml_mstorage_name_isset;
+AT_surfxml_cluster_core AX_surfxml_cluster_core;
+#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
+short int surfxml_cluster_core_isset;
+AT_surfxml_trace_id AX_surfxml_trace_id;
+#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
+short int surfxml_trace_id_isset;
+AT_surfxml_process_function AX_surfxml_process_function;
+#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
+short int surfxml_process_function_isset;
+AT_surfxml_backbone_id AX_surfxml_backbone_id;
+#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
+short int surfxml_backbone_id_isset;
+AT_surfxml_host_coordinates AX_surfxml_host_coordinates;
+#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
+short int surfxml_host_coordinates_isset;
+AT_surfxml_storage___type_model AX_surfxml_storage___type_model;
+#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
+short int surfxml_storage___type_model_isset;
+AT_surfxml_cluster_loopback___bw AX_surfxml_cluster_loopback___bw;
+#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
+short int surfxml_cluster_loopback___bw_isset;
+AT_surfxml_ASroute_gw___dst AX_surfxml_ASroute_gw___dst;
+#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
+short int surfxml_ASroute_gw___dst_isset;
+AT_surfxml_mount_name AX_surfxml_mount_name;
+#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
+short int surfxml_mount_name_isset;
+AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element;
+#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
+short int surfxml_trace___connect_element_isset;
 AT_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy;
 #define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
 short int surfxml_cluster_sharing___policy_isset;
-AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical;
-#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
-short int surfxml_ASroute_symmetrical_isset;
+AT_surfxml_random_generator AX_surfxml_random_generator;
+#define A_surfxml_random_generator AX_surfxml_random_generator
+short int surfxml_random_generator_isset;
+AT_surfxml_config_id AX_surfxml_config_id;
+#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
+short int surfxml_config_id_isset;
+AT_surfxml_storage_typeId AX_surfxml_storage_typeId;
+#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
+short int surfxml_storage_typeId_isset;
 AT_surfxml_host_power AX_surfxml_host_power;
 #define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
 short int surfxml_host_power_isset;
-AT_surfxml_model___prop_id AX_surfxml_model___prop_id;
-#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
-short int surfxml_model___prop_id_isset;
-AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId;
-#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
-short int surfxml_mstorage_typeId_isset;
-AT_surfxml_cluster_id AX_surfxml_cluster_id;
-#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
-short int surfxml_cluster_id_isset;
-AT_surfxml_cluster_topology AX_surfxml_cluster_topology;
-#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
-short int surfxml_cluster_topology_isset;
-AT_surfxml_include_file AX_surfxml_include_file;
-#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
-short int surfxml_include_file_isset;
-AT_surfxml_link_state AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-short int surfxml_link_state_isset;
-AT_surfxml_random_max AX_surfxml_random_max;
-#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
-short int surfxml_random_max_isset;
-AT_surfxml_storage___type_content AX_surfxml_storage___type_content;
-#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
-short int surfxml_storage___type_content_isset;
-AT_surfxml_host_state___file AX_surfxml_host_state___file;
-#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
-short int surfxml_host_state___file_isset;
-AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical;
-#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
-short int surfxml_route_symmetrical_isset;
-AT_surfxml_random_id AX_surfxml_random_id;
-#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
-short int surfxml_random_id_isset;
-AT_surfxml_link_state___file AX_surfxml_link_state___file;
-#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
-short int surfxml_link_state___file_isset;
-AT_surfxml_gpu_name AX_surfxml_gpu_name;
-#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
-short int surfxml_gpu_name_isset;
-AT_surfxml_backbone_id AX_surfxml_backbone_id;
-#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
-short int surfxml_backbone_id_isset;
-AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id;
-#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
-short int surfxml_link___ctn_id_isset;
-AT_surfxml_router_id AX_surfxml_router_id;
-#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
-short int surfxml_router_id_isset;
 AT_surfxml_process_host AX_surfxml_process_host;
 #define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
 short int surfxml_process_host_isset;
+AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical;
+#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
+short int surfxml_route_symmetrical_isset;
+AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind;
+#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
+short int surfxml_trace___connect_kind_isset;
+AT_surfxml_cluster_suffix AX_surfxml_cluster_suffix;
+#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
+short int surfxml_cluster_suffix_isset;
 AT_surfxml_random_radical AX_surfxml_random_radical;
 #define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
 short int surfxml_random_radical_isset;
-AT_surfxml_host_id AX_surfxml_host_id;
-#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
-short int surfxml_host_id_isset;
-AT_surfxml_peer_lat AX_surfxml_peer_lat;
-#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
-short int surfxml_peer_lat_isset;
-AT_surfxml_cluster_loopback___bw AX_surfxml_cluster_loopback___bw;
-#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
-short int surfxml_cluster_loopback___bw_isset;
-AT_surfxml_process_function AX_surfxml_process_function;
-#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
-short int surfxml_process_function_isset;
-AT_surfxml_ASroute_gw___dst AX_surfxml_ASroute_gw___dst;
-#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
-short int surfxml_ASroute_gw___dst_isset;
-AT_surfxml_mount_storageId AX_surfxml_mount_storageId;
-#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
-short int surfxml_mount_storageId_isset;
-AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst;
-#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
-short int surfxml_bypassRoute_dst_isset;
-AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file;
-#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
-short int surfxml_cluster_state___file_isset;
-AT_surfxml_storage___type_model AX_surfxml_storage___type_model;
-#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
-short int surfxml_storage___type_model_isset;
-AT_surfxml_trace_id AX_surfxml_trace_id;
-#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
-short int surfxml_trace_id_isset;
-AT_surfxml_bypassASroute_gw___src AX_surfxml_bypassASroute_gw___src;
-#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
-short int surfxml_bypassASroute_gw___src_isset;
-AT_surfxml_host_pstate AX_surfxml_host_pstate;
-#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
-short int surfxml_host_pstate_isset;
-AT_surfxml_process_kill___time AX_surfxml_process_kill___time;
-#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
-short int surfxml_process_kill___time_isset;
-AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation;
-#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
-short int surfxml_random_std___deviation_isset;
-AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth;
-#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
-short int surfxml_link_bandwidth_isset;
-AT_surfxml_route_src AX_surfxml_route_src;
-#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
-short int surfxml_route_src_isset;
+AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction;
+#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
+short int surfxml_link___ctn_direction_isset;
+AT_surfxml_random_max AX_surfxml_random_max;
+#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
+short int surfxml_random_max_isset;
+AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId;
+#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
+short int surfxml_mstorage_typeId_isset;
+AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat;
+#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
+short int surfxml_cluster_loopback___lat_isset;
+AT_surfxml_storage_attach AX_surfxml_storage_attach;
+#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
+short int surfxml_storage_attach_isset;
+AT_surfxml_backbone_latency AX_surfxml_backbone_latency;
+#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
+short int surfxml_backbone_latency_isset;
+AT_surfxml_trace_file AX_surfxml_trace_file;
+#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
+short int surfxml_trace_file_isset;
+AT_surfxml_peer_coordinates AX_surfxml_peer_coordinates;
+#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
+short int surfxml_peer_coordinates_isset;
 AT_surfxml_cluster_bb___bw AX_surfxml_cluster_bb___bw;
 #define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw)
 short int surfxml_cluster_bb___bw_isset;
+AT_surfxml_link_state___file AX_surfxml_link_state___file;
+#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
+short int surfxml_link_state___file_isset;
+AT_surfxml_link_latency___file AX_surfxml_link_latency___file;
+#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
+short int surfxml_link_latency___file_isset;
+AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw;
+#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
+short int surfxml_cabinet_bw_isset;
+AT_surfxml_prop_value AX_surfxml_prop_value;
+#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
+short int surfxml_prop_value_isset;
+AT_surfxml_ASroute_src AX_surfxml_ASroute_src;
+#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
+short int surfxml_ASroute_src_isset;
+AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst;
+#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
+short int surfxml_ASroute_dst_isset;
 AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy;
 #define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
 short int surfxml_link_sharing___policy_isset;
+AT_surfxml_router_id AX_surfxml_router_id;
+#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
+short int surfxml_router_id_isset;
+AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link;
+#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
+short int surfxml_cluster_limiter___link_isset;
+AT_surfxml_route_src AX_surfxml_route_src;
+#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
+short int surfxml_route_src_isset;
+AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in;
+#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
+short int surfxml_peer_bw___in_isset;
+AT_surfxml_AS_routing AX_surfxml_AS_routing;
+#define A_surfxml_AS_routing AX_surfxml_AS_routing
+short int surfxml_AS_routing_isset;
+AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix;
+#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
+short int surfxml_cabinet_suffix_isset;
+AT_surfxml_cluster_radical AX_surfxml_cluster_radical;
+#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
+short int surfxml_cluster_radical_isset;
 AT_surfxml_storage___type_id AX_surfxml_storage___type_id;
 #define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
 short int surfxml_storage___type_id_isset;
-AT_surfxml_platform_version AX_surfxml_platform_version;
-#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
-short int surfxml_platform_version_isset;
-AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat;
-#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
-short int surfxml_cluster_loopback___lat_isset;
-AT_surfxml_storage_typeId AX_surfxml_storage_typeId;
-#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
-short int surfxml_storage_typeId_isset;
-AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth;
-#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
-short int surfxml_backbone_bandwidth_isset;
-AT_surfxml_cluster_bw AX_surfxml_cluster_bw;
-#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
-short int surfxml_cluster_bw_isset;
+AT_surfxml_peer_power AX_surfxml_peer_power;
+#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
+short int surfxml_peer_power_isset;
+AT_surfxml_include_file AX_surfxml_include_file;
+#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
+short int surfxml_include_file_isset;
+AT_surfxml_bypassRoute_src AX_surfxml_bypassRoute_src;
+#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
+short int surfxml_bypassRoute_src_isset;
+AT_surfxml_cluster_lat AX_surfxml_cluster_lat;
+#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
+short int surfxml_cluster_lat_isset;
+AT_surfxml_link_state AX_surfxml_link_state;
+#define A_surfxml_link_state AX_surfxml_link_state
+short int surfxml_link_state_isset;
+AT_surfxml_host_availability AX_surfxml_host_availability;
+#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
+short int surfxml_host_availability_isset;
+AT_surfxml_cabinet_power AX_surfxml_cabinet_power;
+#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
+short int surfxml_cabinet_power_isset;
+AT_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy;
+#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
+short int surfxml_cluster_bb___sharing___policy_isset;
+AT_surfxml_cluster_availability___file AX_surfxml_cluster_availability___file;
+#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
+short int surfxml_cluster_availability___file_isset;
+AT_surfxml_host___link_up AX_surfxml_host___link_up;
+#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
+short int surfxml_host___link_up_isset;
+AT_surfxml_process_on___failure AX_surfxml_process_on___failure;
+#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
+short int surfxml_process_on___failure_isset;
+AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file;
+#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
+short int surfxml_link_bandwidth___file_isset;
+AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters;
+#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
+short int surfxml_cluster_topo___parameters_isset;
+AT_surfxml_random_min AX_surfxml_random_min;
+#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
+short int surfxml_random_min_isset;
 AT_surfxml_peer_id AX_surfxml_peer_id;
 #define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
 short int surfxml_peer_id_isset;
+AT_surfxml_cluster_id AX_surfxml_cluster_id;
+#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
+short int surfxml_cluster_id_isset;
+AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out;
+#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
+short int surfxml_peer_bw___out_isset;
+AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst;
+#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
+short int surfxml_bypassASroute_gw___dst_isset;
+AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat;
+#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
+short int surfxml_cluster_bb___lat_isset;
 AT_surfxml_storage___type_size AX_surfxml_storage___type_size;
 #define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
 short int surfxml_storage___type_size_isset;
-AT_surfxml_link_id AX_surfxml_link_id;
-#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
-short int surfxml_link_id_isset;
-AT_surfxml_model___prop_value AX_surfxml_model___prop_value;
-#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
-short int surfxml_model___prop_value_isset;
+AT_surfxml_AS_id AX_surfxml_AS_id;
+#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
+short int surfxml_AS_id_isset;
 AT_surfxml_storage_content___type AX_surfxml_storage_content___type;
 #define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
 short int surfxml_storage_content___type_isset;
-AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element;
-#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
-short int surfxml_trace___connect_element_isset;
-AT_surfxml_peer_coordinates AX_surfxml_peer_coordinates;
-#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
-short int surfxml_peer_coordinates_isset;
-AT_surfxml_trace___connect_trace AX_surfxml_trace___connect_trace;
-#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
-short int surfxml_trace___connect_trace_isset;
-AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix;
-#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
-short int surfxml_cabinet_suffix_isset;
-AT_surfxml_random_seed AX_surfxml_random_seed;
-#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
-short int surfxml_random_seed_isset;
-AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in;
-#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
-short int surfxml_peer_bw___in_isset;
+AT_surfxml_process_start___time AX_surfxml_process_start___time;
+#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
+short int surfxml_process_start___time_isset;
 AT_surfxml_bypassASroute_dst AX_surfxml_bypassASroute_dst;
 #define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
 short int surfxml_bypassASroute_dst_isset;
-AT_surfxml_prop_value AX_surfxml_prop_value;
-#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
-short int surfxml_prop_value_isset;
-AT_surfxml_router_coordinates AX_surfxml_router_coordinates;
-#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
-short int surfxml_router_coordinates_isset;
+AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst;
+#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
+short int surfxml_bypassRoute_dst_isset;
+AT_surfxml_gpu_name AX_surfxml_gpu_name;
+#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
+short int surfxml_gpu_name_isset;
+AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix;
+#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
+short int surfxml_cluster_prefix_isset;
+AT_surfxml_peer_state___file AX_surfxml_peer_state___file;
+#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
+short int surfxml_peer_state___file_isset;
+AT_surfxml_process_kill___time AX_surfxml_process_kill___time;
+#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
+short int surfxml_process_kill___time_isset;
+AT_surfxml_storage_id AX_surfxml_storage_id;
+#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
+short int surfxml_storage_id_isset;
+AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat;
+#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
+short int surfxml_cabinet_lat_isset;
+AT_surfxml_random_mean AX_surfxml_random_mean;
+#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
+short int surfxml_random_mean_isset;
+AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation;
+#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
+short int surfxml_random_std___deviation_isset;
+AT_surfxml_cabinet_prefix AX_surfxml_cabinet_prefix;
+#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
+short int surfxml_cabinet_prefix_isset;
+AT_surfxml_peer_lat AX_surfxml_peer_lat;
+#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
+short int surfxml_peer_lat_isset;
 AT_surfxml_link_latency AX_surfxml_link_latency;
 #define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
 short int surfxml_link_latency_isset;
+AT_surfxml_host_state___file AX_surfxml_host_state___file;
+#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
+short int surfxml_host_state___file_isset;
+AT_surfxml_cluster_power AX_surfxml_cluster_power;
+#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
+short int surfxml_cluster_power_isset;
+AT_surfxml_random_id AX_surfxml_random_id;
+#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
+short int surfxml_random_id_isset;
+AT_surfxml_router_coordinates AX_surfxml_router_coordinates;
+#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
+short int surfxml_router_coordinates_isset;
+AT_surfxml_host_core AX_surfxml_host_core;
+#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
+short int surfxml_host_core_isset;
+AT_surfxml_bypassASroute_gw___src AX_surfxml_bypassASroute_gw___src;
+#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
+short int surfxml_bypassASroute_gw___src_isset;
+AT_surfxml_host_id AX_surfxml_host_id;
+#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
+short int surfxml_host_id_isset;
+AT_surfxml_host___link_down AX_surfxml_host___link_down;
+#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
+short int surfxml_host___link_down_isset;
+AT_surfxml_cluster_bw AX_surfxml_cluster_bw;
+#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
+short int surfxml_cluster_bw_isset;
+AT_surfxml_storage___type_content AX_surfxml_storage___type_content;
+#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
+short int surfxml_storage___type_content_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
@@ -5927,12 +5927,12 @@ case 26:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</platform>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_platform_3):
-case YY_STATE_EOF(S_surfxml_platform_6):
 case YY_STATE_EOF(S_surfxml_platform_1):
+case YY_STATE_EOF(E_surfxml_platform):
+case YY_STATE_EOF(S_surfxml_platform_3):
 case YY_STATE_EOF(S_surfxml_platform_8):
 case YY_STATE_EOF(S_surfxml_platform_4):
-case YY_STATE_EOF(E_surfxml_platform):
+case YY_STATE_EOF(S_surfxml_platform_6):
 case YY_STATE_EOF(S_surfxml_platform):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</platform>' expected.");
        YY_BREAK
@@ -5975,10 +5975,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_include_file) FAIL("Required attribute `file' not set for `include' element.");
   LEAVE; STag_surfxml_include(); surfxml_pcdata_ix = 0; ETag_surfxml_include(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -6002,10 +6002,10 @@ YY_RULE_SETUP
   ETag_surfxml_include();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -6018,9 +6018,9 @@ case 37:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</include>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_include):
 case YY_STATE_EOF(E_surfxml_include):
 case YY_STATE_EOF(S_surfxml_include_2):
+case YY_STATE_EOF(S_surfxml_include):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</include>' expected.");
        YY_BREAK
 
@@ -6088,13 +6088,13 @@ YY_RULE_SETUP
   if (!AX_surfxml_trace_periodicity) FAIL("Required attribute `periodicity' not set for `trace' element.");
   LEAVE; STag_surfxml_trace(); surfxml_pcdata_ix = 0; ETag_surfxml_trace(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_10: case S_surfxml_AS_7: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS_10: case S_surfxml_AS: case S_surfxml_AS_4: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6120,13 +6120,13 @@ YY_RULE_SETUP
   surfxml_pcdata_ix = popbuffer();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_10: case S_surfxml_AS_7: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS_10: case S_surfxml_AS: case S_surfxml_AS_4: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6287,7 +6287,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_random_std___deviation) FAIL("Required attribute `std_deviation' not set for `random' element.");
   LEAVE; STag_surfxml_random(); surfxml_pcdata_ix = 0; ETag_surfxml_random(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform_2: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -6311,7 +6311,7 @@ YY_RULE_SETUP
   ETag_surfxml_random();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform_2: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -6417,13 +6417,13 @@ YY_RULE_SETUP
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
   LEAVE; STag_surfxml_trace___connect(); surfxml_pcdata_ix = 0; ETag_surfxml_trace___connect(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_10: case S_surfxml_AS_7: case S_surfxml_AS_9: case S_surfxml_AS_11: case S_surfxml_AS_1: SET(S_surfxml_AS_11); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS: case S_surfxml_AS_10: case S_surfxml_AS_4: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6447,13 +6447,13 @@ YY_RULE_SETUP
   ETag_surfxml_trace___connect();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_10: case S_surfxml_AS_7: case S_surfxml_AS_9: case S_surfxml_AS_11: case S_surfxml_AS_1: SET(S_surfxml_AS_11); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS: case S_surfxml_AS_10: case S_surfxml_AS_4: case S_surfxml_AS_11: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6575,9 +6575,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_AS_routing) FAIL("Required attribute `routing' not set for `AS' element.");
   LEAVE; STag_surfxml_AS(); surfxml_pcdata_ix = 0; ETag_surfxml_AS(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -6601,9 +6601,9 @@ YY_RULE_SETUP
   ETag_surfxml_AS();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -6616,18 +6616,18 @@ case 134:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</AS>' expected.",surf_parse_text[0]);
        YY_BREAK
+case YY_STATE_EOF(S_surfxml_AS):
+case YY_STATE_EOF(S_surfxml_AS_12):
 case YY_STATE_EOF(S_surfxml_AS_4):
-case YY_STATE_EOF(S_surfxml_AS_1):
-case YY_STATE_EOF(S_surfxml_AS_3):
-case YY_STATE_EOF(S_surfxml_AS_11):
-case YY_STATE_EOF(S_surfxml_AS_14):
-case YY_STATE_EOF(E_surfxml_AS):
-case YY_STATE_EOF(S_surfxml_AS_6):
 case YY_STATE_EOF(S_surfxml_AS_7):
+case YY_STATE_EOF(S_surfxml_AS_14):
 case YY_STATE_EOF(S_surfxml_AS_9):
+case YY_STATE_EOF(S_surfxml_AS_6):
+case YY_STATE_EOF(S_surfxml_AS_11):
+case YY_STATE_EOF(S_surfxml_AS_3):
 case YY_STATE_EOF(S_surfxml_AS_16):
-case YY_STATE_EOF(S_surfxml_AS):
-case YY_STATE_EOF(S_surfxml_AS_12):
+case YY_STATE_EOF(S_surfxml_AS_1):
+case YY_STATE_EOF(E_surfxml_AS):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</AS>' expected.");
        YY_BREAK
 
@@ -6721,8 +6721,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_storage___type_size) FAIL("Required attribute `size' not set for `storage_type' element.");
   LEAVE; STag_surfxml_storage___type(); surfxml_pcdata_ix = 0; ETag_surfxml_storage___type(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -6746,8 +6746,8 @@ YY_RULE_SETUP
   ETag_surfxml_storage___type();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -6760,9 +6760,9 @@ case 153:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage_type>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(E_surfxml_storage___type):
 case YY_STATE_EOF(S_surfxml_storage___type_2):
 case YY_STATE_EOF(S_surfxml_storage___type):
+case YY_STATE_EOF(E_surfxml_storage___type):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage_type>' expected.");
        YY_BREAK
 
@@ -6818,7 +6818,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_mount_name) FAIL("Required attribute `name' not set for `mount' element.");
   LEAVE; STag_surfxml_mount(); surfxml_pcdata_ix = 0; ETag_surfxml_mount(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_host: case S_surfxml_host_2: case S_surfxml_host_1: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -6842,7 +6842,7 @@ YY_RULE_SETUP
   ETag_surfxml_mount();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_host: case S_surfxml_host_2: case S_surfxml_host_1: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -6911,7 +6911,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_mstorage_name) FAIL("Required attribute `name' not set for `mstorage' element.");
   LEAVE; STag_surfxml_mstorage(); surfxml_pcdata_ix = 0; ETag_surfxml_mstorage(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host_1: case S_surfxml_host_2: case S_surfxml_host: SET(S_surfxml_host_2); break;
+   case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -6935,7 +6935,7 @@ YY_RULE_SETUP
   ETag_surfxml_mstorage();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host_1: case S_surfxml_host_2: case S_surfxml_host: SET(S_surfxml_host_2); break;
+   case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -7092,7 +7092,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host_power) FAIL("Required attribute `power' not set for `host' element.");
   LEAVE; STag_surfxml_host(); surfxml_pcdata_ix = 0; ETag_surfxml_host(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7116,7 +7116,7 @@ YY_RULE_SETUP
   ETag_surfxml_host();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7129,9 +7129,9 @@ case 208:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_host_2):
 case YY_STATE_EOF(S_surfxml_host):
 case YY_STATE_EOF(E_surfxml_host):
+case YY_STATE_EOF(S_surfxml_host_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host>' expected.");
        YY_BREAK
 
@@ -7225,8 +7225,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
   LEAVE; STag_surfxml_storage(); surfxml_pcdata_ix = 0; ETag_surfxml_storage(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7250,8 +7250,8 @@ YY_RULE_SETUP
   ETag_surfxml_storage();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7265,8 +7265,8 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage>' expected.",surf_parse_text[0]);
        YY_BREAK
 case YY_STATE_EOF(E_surfxml_storage):
-case YY_STATE_EOF(S_surfxml_storage):
 case YY_STATE_EOF(S_surfxml_storage_2):
+case YY_STATE_EOF(S_surfxml_storage):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage>' expected.");
        YY_BREAK
 
@@ -7308,7 +7308,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_gpu_name) FAIL("Required attribute `name' not set for `gpu' element.");
   LEAVE; STag_surfxml_gpu(); surfxml_pcdata_ix = 0; ETag_surfxml_gpu(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7332,7 +7332,7 @@ YY_RULE_SETUP
   ETag_surfxml_gpu();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7415,7 +7415,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host___link_down) FAIL("Required attribute `down' not set for `host_link' element.");
   LEAVE; STag_surfxml_host___link(); surfxml_pcdata_ix = 0; ETag_surfxml_host___link(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7439,7 +7439,7 @@ YY_RULE_SETUP
   ETag_surfxml_host___link();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7760,9 +7760,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster(); surfxml_pcdata_ix = 0; ETag_surfxml_cluster(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
    case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -7786,9 +7786,9 @@ YY_RULE_SETUP
   ETag_surfxml_cluster();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
    case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -7802,8 +7802,8 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</cluster>' expected.",surf_parse_text[0]);
        YY_BREAK
 case YY_STATE_EOF(S_surfxml_cluster):
-case YY_STATE_EOF(S_surfxml_cluster_2):
 case YY_STATE_EOF(E_surfxml_cluster):
+case YY_STATE_EOF(S_surfxml_cluster_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</cluster>' expected.");
        YY_BREAK
 
@@ -7929,10 +7929,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_cabinet_lat) FAIL("Required attribute `lat' not set for `cabinet' element.");
   LEAVE; STag_surfxml_cabinet(); surfxml_pcdata_ix = 0; ETag_surfxml_cabinet(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -7956,10 +7956,10 @@ YY_RULE_SETUP
   ETag_surfxml_cabinet();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -8106,9 +8106,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_peer_lat) FAIL("Required attribute `lat' not set for `peer' element.");
   LEAVE; STag_surfxml_peer(); surfxml_pcdata_ix = 0; ETag_surfxml_peer(); popbuffer(); /* attribute */
   switch (YY_START) {
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
    case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -8132,9 +8132,9 @@ YY_RULE_SETUP
   ETag_surfxml_peer();
   popbuffer(); /* attribute */
   switch (YY_START) {
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
    case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
   }
  }
        YY_BREAK
@@ -8201,7 +8201,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_router_id) FAIL("Required attribute `id' not set for `router' element.");
   LEAVE; STag_surfxml_router(); surfxml_pcdata_ix = 0; ETag_surfxml_router(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8225,7 +8225,7 @@ YY_RULE_SETUP
   ETag_surfxml_router();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8308,8 +8308,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_backbone_latency) FAIL("Required attribute `latency' not set for `backbone' element.");
   LEAVE; STag_surfxml_backbone(); surfxml_pcdata_ix = 0; ETag_surfxml_backbone(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8333,8 +8333,8 @@ YY_RULE_SETUP
   ETag_surfxml_backbone();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8490,8 +8490,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_link_bandwidth) FAIL("Required attribute `bandwidth' not set for `link' element.");
   LEAVE; STag_surfxml_link(); surfxml_pcdata_ix = 0; ETag_surfxml_link(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8515,8 +8515,8 @@ YY_RULE_SETUP
   ETag_surfxml_link();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8530,8 +8530,8 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link>' expected.",surf_parse_text[0]);
        YY_BREAK
 case YY_STATE_EOF(S_surfxml_link_2):
-case YY_STATE_EOF(E_surfxml_link):
 case YY_STATE_EOF(S_surfxml_link):
+case YY_STATE_EOF(E_surfxml_link):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link>' expected.");
        YY_BREAK
 
@@ -8603,7 +8603,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_route_dst) FAIL("Required attribute `dst' not set for `route' element.");
   LEAVE; STag_surfxml_route(); surfxml_pcdata_ix = 0; ETag_surfxml_route(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8627,7 +8627,7 @@ YY_RULE_SETUP
   ETag_surfxml_route();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8640,8 +8640,8 @@ case 436:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</route>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_route_2):
 case YY_STATE_EOF(S_surfxml_route):
+case YY_STATE_EOF(S_surfxml_route_2):
 case YY_STATE_EOF(E_surfxml_route):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</route>' expected.");
        YY_BREAK
@@ -8742,7 +8742,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_ASroute_gw___dst) FAIL("Required attribute `gw_dst' not set for `ASroute' element.");
   LEAVE; STag_surfxml_ASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_ASroute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_6: case S_surfxml_AS_9: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -8766,7 +8766,7 @@ YY_RULE_SETUP
   ETag_surfxml_ASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_6: case S_surfxml_AS_9: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -8779,8 +8779,8 @@ case 457:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</ASroute>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_ASroute):
 case YY_STATE_EOF(E_surfxml_ASroute):
+case YY_STATE_EOF(S_surfxml_ASroute):
 case YY_STATE_EOF(S_surfxml_ASroute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</ASroute>' expected.");
        YY_BREAK
@@ -8846,10 +8846,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_link___ctn_id) FAIL("Required attribute `id' not set for `link_ctn' element.");
   LEAVE; STag_surfxml_link___ctn(); surfxml_pcdata_ix = 0; ETag_surfxml_link___ctn(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_route_1: case S_surfxml_route_2: case S_surfxml_route: SET(S_surfxml_route_2); break;
-   case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break;
-   case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_1: SET(S_surfxml_bypassRoute_2); break;
-   case S_surfxml_ASroute: case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break;
+   case S_surfxml_route_2: case S_surfxml_route: case S_surfxml_route_1: SET(S_surfxml_route_2); break;
+   case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: SET(S_surfxml_bypassRoute_2); break;
+   case S_surfxml_ASroute_1: case S_surfxml_ASroute_2: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break;
+   case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: case S_surfxml_bypassASroute: SET(S_surfxml_bypassASroute_2); break;
   }
  }
        YY_BREAK
@@ -8873,10 +8873,10 @@ YY_RULE_SETUP
   ETag_surfxml_link___ctn();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_route_1: case S_surfxml_route_2: case S_surfxml_route: SET(S_surfxml_route_2); break;
-   case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break;
-   case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_1: SET(S_surfxml_bypassRoute_2); break;
-   case S_surfxml_ASroute: case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break;
+   case S_surfxml_route_2: case S_surfxml_route: case S_surfxml_route_1: SET(S_surfxml_route_2); break;
+   case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: SET(S_surfxml_bypassRoute_2); break;
+   case S_surfxml_ASroute_1: case S_surfxml_ASroute_2: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break;
+   case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: case S_surfxml_bypassASroute: SET(S_surfxml_bypassASroute_2); break;
   }
  }
        YY_BREAK
@@ -8945,7 +8945,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassRoute_dst) FAIL("Required attribute `dst' not set for `bypassRoute' element.");
   LEAVE; STag_surfxml_bypassRoute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassRoute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8969,7 +8969,7 @@ YY_RULE_SETUP
   ETag_surfxml_bypassRoute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -9068,7 +9068,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassASroute_gw___dst) FAIL("Required attribute `gw_dst' not set for `bypassASroute' element.");
   LEAVE; STag_surfxml_bypassASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassASroute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_4: case S_surfxml_AS_3: case S_surfxml_AS_8: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -9092,7 +9092,7 @@ YY_RULE_SETUP
   ETag_surfxml_bypassASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_4: case S_surfxml_AS_3: case S_surfxml_AS_8: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -9105,8 +9105,8 @@ case 504:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassASroute>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_bypassASroute):
 case YY_STATE_EOF(E_surfxml_bypassASroute):
+case YY_STATE_EOF(S_surfxml_bypassASroute):
 case YY_STATE_EOF(S_surfxml_bypassASroute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassASroute>' expected.");
        YY_BREAK
@@ -9203,7 +9203,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_process_function) FAIL("Required attribute `function' not set for `process' element.");
   LEAVE; STag_surfxml_process(); surfxml_pcdata_ix = 0; ETag_surfxml_process(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_7: case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform_4: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
+   case S_surfxml_platform_7: case S_surfxml_platform_6: case S_surfxml_platform_4: case S_surfxml_platform_8: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_8); break;
   }
  }
        YY_BREAK
@@ -9227,7 +9227,7 @@ YY_RULE_SETUP
   ETag_surfxml_process();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_7: case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform_4: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
+   case S_surfxml_platform_7: case S_surfxml_platform_6: case S_surfxml_platform_4: case S_surfxml_platform_8: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform: SET(S_surfxml_platform_8); break;
   }
  }
        YY_BREAK
@@ -9240,9 +9240,9 @@ case 525:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</process>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_process_2):
 case YY_STATE_EOF(S_surfxml_process):
 case YY_STATE_EOF(E_surfxml_process):
+case YY_STATE_EOF(S_surfxml_process_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</process>' expected.");
        YY_BREAK
 
@@ -9398,8 +9398,8 @@ case 547:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</config>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_config_2):
 case YY_STATE_EOF(E_surfxml_config):
+case YY_STATE_EOF(S_surfxml_config_2):
 case YY_STATE_EOF(S_surfxml_config):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</config>' expected.");
        YY_BREAK
@@ -9458,14 +9458,14 @@ YY_RULE_SETUP
   if (!AX_surfxml_prop_value) FAIL("Required attribute `value' not set for `prop' element.");
   LEAVE; STag_surfxml_prop(); surfxml_pcdata_ix = 0; ETag_surfxml_prop(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_config: case S_surfxml_config_2: case S_surfxml_config_1: SET(S_surfxml_config_2); break;
-   case S_surfxml_storage_2: case S_surfxml_storage_1: case S_surfxml_storage: SET(S_surfxml_storage_2); break;
-   case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break;
-   case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
-   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
-   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
-   case S_surfxml_AS_2: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_3); break;
-   case S_surfxml_cluster_1: case S_surfxml_cluster: case S_surfxml_cluster_2: SET(S_surfxml_cluster_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_2: case S_surfxml_AS_3: SET(S_surfxml_AS_3); break;
+   case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break;
+   case S_surfxml_config_2: case S_surfxml_config: case S_surfxml_config_1: SET(S_surfxml_config_2); break;
+   case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break;
+   case S_surfxml_link_2: case S_surfxml_link: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
+   case S_surfxml_cluster_1: case S_surfxml_cluster_2: case S_surfxml_cluster: SET(S_surfxml_cluster_2); break;
+   case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_storage_2: case S_surfxml_storage: case S_surfxml_storage_1: SET(S_surfxml_storage_2); break;
   }
  }
        YY_BREAK
@@ -9489,14 +9489,14 @@ YY_RULE_SETUP
   ETag_surfxml_prop();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_config: case S_surfxml_config_2: case S_surfxml_config_1: SET(S_surfxml_config_2); break;
-   case S_surfxml_storage_2: case S_surfxml_storage_1: case S_surfxml_storage: SET(S_surfxml_storage_2); break;
-   case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break;
-   case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
-   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
-   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
-   case S_surfxml_AS_2: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_3); break;
-   case S_surfxml_cluster_1: case S_surfxml_cluster: case S_surfxml_cluster_2: SET(S_surfxml_cluster_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_2: case S_surfxml_AS_3: SET(S_surfxml_AS_3); break;
+   case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break;
+   case S_surfxml_config_2: case S_surfxml_config: case S_surfxml_config_1: SET(S_surfxml_config_2); break;
+   case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break;
+   case S_surfxml_link_2: case S_surfxml_link: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
+   case S_surfxml_cluster_1: case S_surfxml_cluster_2: case S_surfxml_cluster: SET(S_surfxml_cluster_2); break;
+   case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_storage_2: case S_surfxml_storage: case S_surfxml_storage_1: SET(S_surfxml_storage_2); break;
   }
  }
        YY_BREAK
@@ -9567,7 +9567,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_model___prop_value) FAIL("Required attribute `value' not set for `model_prop' element.");
   LEAVE; STag_surfxml_model___prop(); surfxml_pcdata_ix = 0; ETag_surfxml_model___prop(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_storage___type_2: case S_surfxml_storage___type: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
   }
  }
        YY_BREAK
@@ -9591,7 +9591,7 @@ YY_RULE_SETUP
   ETag_surfxml_model___prop();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_storage___type_2: case S_surfxml_storage___type: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
   }
  }
        YY_BREAK
index 0c23d46..69389e7 100644 (file)
@@ -667,7 +667,7 @@ void xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) {
     val = strchr(name, ':');
     if (!val) {
       /* don't free(optionlist_cpy) here, 'name' points inside it */
-      xbt_die("Option '%s' badly formated. Should be of the form 'name:value'",
+      xbt_die("Option '%s' badly formatted. Should be of the form 'name:value'",
               name);
     }
     *(val++) = '\0';
index 4a3c959..9391589 100644 (file)
@@ -481,7 +481,7 @@ static yyconst flex_int16_t yy_accept[564] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   15,    0,    0,   14,
+        0,    0,    0,    0,    0,    0,   14,    0,    0,   15,
         0,   13,    0
     } ;
 
@@ -1142,42 +1142,42 @@ const char graphxml_flexml_version[] = "1.9.6";
 int graphxml_pcdata_ix;
 extern char *graphxml_bufferstack;
 #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
-#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
-short int graphxml_graph_isDirected_isset;
-AT_graphxml_node_label AX_graphxml_node_label;
-#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
-short int graphxml_node_label_isset;
-AT_graphxml_edge_target AX_graphxml_edge_target;
-#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
-short int graphxml_edge_target_isset;
-AT_graphxml_edge_name AX_graphxml_edge_name;
-#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
-short int graphxml_edge_name_isset;
-AT_graphxml_node_data AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-short int graphxml_node_data_isset;
 AT_graphxml_node_position___y AX_graphxml_node_position___y;
 #define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
 short int graphxml_node_position___y_isset;
-AT_graphxml_edge_data AX_graphxml_edge_data;
-#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
-short int graphxml_edge_data_isset;
-AT_graphxml_node_position___x AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-short int graphxml_node_position___x_isset;
 AT_graphxml_edge_label AX_graphxml_edge_label;
 #define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
 short int graphxml_edge_label_isset;
+AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
+#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
+short int graphxml_graph_isDirected_isset;
+AT_graphxml_node_label AX_graphxml_node_label;
+#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
+short int graphxml_node_label_isset;
 AT_graphxml_edge_length AX_graphxml_edge_length;
 #define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
 short int graphxml_edge_length_isset;
 AT_graphxml_edge_source AX_graphxml_edge_source;
 #define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
 short int graphxml_edge_source_isset;
+AT_graphxml_edge_target AX_graphxml_edge_target;
+#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
+short int graphxml_edge_target_isset;
 AT_graphxml_node_name AX_graphxml_node_name;
 #define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
 short int graphxml_node_name_isset;
+AT_graphxml_edge_data AX_graphxml_edge_data;
+#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
+short int graphxml_edge_data_isset;
+AT_graphxml_node_data AX_graphxml_node_data;
+#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
+short int graphxml_node_data_isset;
+AT_graphxml_edge_name AX_graphxml_edge_name;
+#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
+short int graphxml_edge_name_isset;
+AT_graphxml_node_position___x AX_graphxml_node_position___x;
+#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
+short int graphxml_node_position___x_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
@@ -1758,12 +1758,12 @@ SET(ROOT_graphxml_graph);
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-SET(ROOT_graphxml_node);
+SET(ROOT_graphxml_edge);
        YY_BREAK
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-SET(ROOT_graphxml_edge);
+SET(ROOT_graphxml_node);
        YY_BREAK
 case 16:
 /* rule 16 can match eol */
@@ -1860,11 +1860,11 @@ case 30:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</graph>' expected.",xbt_graph_parse_text[0]);
        YY_BREAK
+case YY_STATE_EOF(S_graphxml_graph):
+case YY_STATE_EOF(E_graphxml_graph):
 case YY_STATE_EOF(S_graphxml_graph_3):
 case YY_STATE_EOF(S_graphxml_graph_5):
-case YY_STATE_EOF(E_graphxml_graph):
 case YY_STATE_EOF(S_graphxml_graph_1):
-case YY_STATE_EOF(S_graphxml_graph):
 FAIL("Premature EOF: `</graph>' expected.");
        YY_BREAK
 
@@ -1960,7 +1960,7 @@ YY_RULE_SETUP
   if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element.");
   LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
+   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
    case ROOT_graphxml_node: SET(EPILOG); break;
   }
  }
@@ -1985,7 +1985,7 @@ YY_RULE_SETUP
   ETag_graphxml_node();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
+   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
    case ROOT_graphxml_node: SET(EPILOG); break;
   }
  }
@@ -2111,7 +2111,7 @@ YY_RULE_SETUP
   LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */
   switch (YY_START) {
    case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph_4: case S_graphxml_graph_5: case S_graphxml_graph_3: case S_graphxml_graph_1: case S_graphxml_graph: SET(S_graphxml_graph_5); break;
+   case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph_1: case S_graphxml_graph: case S_graphxml_graph_3: SET(S_graphxml_graph_5); break;
   }
  }
        YY_BREAK
@@ -2136,7 +2136,7 @@ YY_RULE_SETUP
   popbuffer(); /* attribute */
   switch (YY_START) {
    case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph_4: case S_graphxml_graph_5: case S_graphxml_graph_3: case S_graphxml_graph_1: case S_graphxml_graph: SET(S_graphxml_graph_5); break;
+   case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph_1: case S_graphxml_graph: case S_graphxml_graph_3: SET(S_graphxml_graph_5); break;
   }
  }
        YY_BREAK
index affa209..86c3421 100644 (file)
@@ -137,7 +137,7 @@ xbt_mheap_t xbt_mheap_new_options(int fd, void *baseaddr, int options)
         mdptr = (struct mdesc *) newmd.base;
         mdptr->fd = fd;
         if(!mdptr->refcount){
-          sem_init(&mdptr->sem, 0, 1);
+          pthread_mutex_init(&mdptr->mutex, NULL);
           mdptr->refcount++;
         }
       }
@@ -182,8 +182,7 @@ xbt_mheap_t xbt_mheap_new_options(int fd, void *baseaddr, int options)
   if (mdp->fd < 0){
     mdp->flags |= MMALLOC_ANONYMOUS;
   }
-  sem_init(&mdp->sem, 0, 1);
-  
+  pthread_mutex_init(&mdp->mutex, NULL);
   /* If we have not been passed a valid open file descriptor for the file
      to map to, then open /dev/zero and use that to map to. */
 
@@ -225,8 +224,7 @@ void xbt_mheap_destroy_no_free(xbt_mheap_t md)
   struct mdesc *mdp = md;
 
   if(--mdp->refcount == 0){
-    LOCK(mdp) ;
-    sem_destroy(&mdp->sem);
+    pthread_mutex_destroy(&mdp->mutex);
   }
 }
 
index 09cb4be..c652e41 100644 (file)
@@ -20,7 +20,8 @@
 #include "xbt/ex.h"
 #include "xbt/dynar.h"
 #include "xbt/swag.h"
-#include <semaphore.h>
+
+#include <pthread.h>
 #include <stdint.h>
 
 #ifdef HAVE_LIMITS_H
@@ -190,8 +191,8 @@ typedef struct {
  * */
 struct mdesc {
 
-  /** @brief Semaphore locking the access to the heap */
-  sem_t sem;
+  /** @brief Mutex locking the access to the heap */
+  pthread_mutex_t mutex;
 
   /** @brief Number of processes that attached the heap */
   unsigned int refcount;
@@ -293,14 +294,14 @@ XBT_PUBLIC( void *)__mmalloc_remap_core(xbt_mheap_t mdp);
 
 XBT_PUBLIC( void *)mmorecore(struct mdesc *mdp, ssize_t size);
 
-/* Thread-safety (if the sem is already created)
+/** Thread-safety (if the mutex is already created)
  *
  * This is mandatory in the case where the user runs a parallel simulation
  * in a model-checking enabled tree. Without this protection, our malloc
  * implementation will not like multi-threading AT ALL.
  */
-#define LOCK(mdp) sem_wait(&mdp->sem)
-#define UNLOCK(mdp) sem_post(&mdp->sem)
+#define LOCK(mdp) pthread_mutex_lock(&mdp->mutex)
+#define UNLOCK(mdp) pthread_mutex_unlock(&mdp->mutex)
 
 static XBT_INLINE void  mmalloc_paranoia(struct mdesc *mdp){
 
index 7378579..8b22d4b 100644 (file)
@@ -15,6 +15,7 @@
 #include <mc/mc.h>
 
 #include "../../src/include/mc/datatypes.h"
+#include "../../src/mc/mc_object_info.h"
 #include "../../src/mc/mc_private.h"
 
 int test_some_array[4][5][6];
index 905f88a..998b779 100644 (file)
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 
 #include "../src/mc/mc_private.h"
+#include "../src/mc/mc_object_info.h"
 
 static
 uintptr_t eval_binary_operation(mc_expression_state_t state, int op, uintptr_t a, uintptr_t b) {
diff --git a/teshsuite/mc/replay/CMakeLists.txt b/teshsuite/mc/replay/CMakeLists.txt
new file mode 100644 (file)
index 0000000..806d651
--- /dev/null
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+add_executable(random_bug random_bug.c)
+target_link_libraries(random_bug simgrid)
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/random_bug.tesh
+  ${CMAKE_CURRENT_SOURCE_DIR}/random_bug_replay.tesh
+  PARENT_SCOPE
+  )
+set(testsuite_src
+  ${testsuite_src}
+  ${CMAKE_CURRENT_SOURCE_DIR}/random_bug.c
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/random_bug.xml
+  PARENT_SCOPE
+  )
diff --git a/teshsuite/mc/replay/random_bug.c b/teshsuite/mc/replay/random_bug.c
new file mode 100644 (file)
index 0000000..80bcf41
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (c) 2014. The SimGrid Team.
+ * 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 <stdio.h>
+
+#include <msg/msg.h>
+#include <simgrid/modelchecker.h>
+
+/** An (fake) application with a bug occuring for some random values
+ */
+static int app(int argc, char *argv[])
+{
+  int x = MC_random(0, 5);
+  int y = MC_random(0, 5);
+
+  if (MC_is_active()) {
+    MC_assert(x !=3 || y !=4);
+  }
+  if (x ==3 && y ==4) {
+    fprintf(stderr, "Error reached\n");
+  }
+
+  return 0;
+}
+
+/** Main function */
+int main(int argc, char *argv[])
+{
+  MSG_init(&argc, argv);
+  MSG_function_register("app", &app);
+  MSG_create_environment(argv[1]);
+  MSG_launch_application(argv[2]);
+  return (int) MSG_main();
+}
diff --git a/teshsuite/mc/replay/random_bug.tesh b/teshsuite/mc/replay/random_bug.tesh
new file mode 100644 (file)
index 0000000..63b5b8f
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/env tesh
+!expect signal SIGABRT
+$ ${bindir:=.}/random_bug  ${srcdir:=.}/../../../examples/platforms/small_platform.xml ${srcdir:=.}/random_bug.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=model-check:1 --cfg=model-check/record:1
+> [  0.000000] (0:@) Configuration change: Set 'model-check' to '1'
+> [  0.000000] (0:@) Configuration change: Set 'model-check/record' to '1'
+> [  0.000000] (0:@) Check a safety property
+> [  0.000000] (0:@) Get debug information ...
+> [  0.000000] (0:@) Get debug information done !
+> [  0.000000] (1:app@Tremblay) **************************
+> [  0.000000] (1:app@Tremblay) *** PROPERTY NOT VALID ***
+> [  0.000000] (1:app@Tremblay) **************************
+> [  0.000000] (1:app@Tremblay) Counter-example execution trace:
+> [  0.000000] (1:app@Tremblay) Path = 1/3;1/4
+> [  0.000000] (1:app@Tremblay) [(1)Tremblay (app)] MC_RANDOM(3)
+> [  0.000000] (1:app@Tremblay) [(1)Tremblay (app)] MC_RANDOM(4)
+> [  0.000000] (1:app@Tremblay) Expanded states = 27
+> [  0.000000] (1:app@Tremblay) Visited states = 68
+> [  0.000000] (1:app@Tremblay) Executed transitions = 46
diff --git a/teshsuite/mc/replay/random_bug.xml b/teshsuite/mc/replay/random_bug.xml
new file mode 100644 (file)
index 0000000..46b16ec
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+   <process host="Tremblay" function="app"/>
+ </platform>
diff --git a/teshsuite/mc/replay/random_bug_replay.tesh b/teshsuite/mc/replay/random_bug_replay.tesh
new file mode 100644 (file)
index 0000000..4f60925
--- /dev/null
@@ -0,0 +1,5 @@
+#!/usr/bin/env tesh
+$ ${bindir:=.}/random_bug  ${srcdir:=.}/../../../examples/platforms/small_platform.xml ${srcdir:=.}/random_bug.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" "--cfg=model-check/replay:1/3;1/4"
+> [  0.000000] (0:@) Configuration change: Set 'model-check/replay' to '1/3;1/4'
+> [  0.000000] (0:@) path=1/3;1/4
+> Error reached
index f13b881..4064285 100644 (file)
@@ -22,7 +22,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   add_executable(c2f2cwinf c2f2cwinf.f c2f2cwin.c)
   add_executable(wingetf wingetf.f)
   add_executable(winnamef winnamef.f)
-#  add_executable(winscale1f winscale1f.f)
+  add_executable(winscale1f winscale1f.f)
 #  add_executable(winscale2f winscale2f.f)
 
 target_link_libraries(winaccf simgrid mtest_f77)
@@ -35,7 +35,7 @@ target_link_libraries(c2f2cwinf simgrid mtest_f77)
 #target_link_libraries(winattrf simgrid mtest_f77)
 target_link_libraries(wingetf simgrid mtest_f77)
 target_link_libraries(winnamef simgrid mtest_f77)
-#target_link_libraries(winscale1f simgrid mtest_f77)
+target_link_libraries(winscale1f simgrid mtest_f77)
 #target_link_libraries(winscale2f simgrid mtest_f77)
 
 
index 5d902cb..1e3dac2 100644 (file)
@@ -1,8 +1,7 @@
-#Needs post,start, complete, wait
-#winscale1f 4
+winscale1f 4
 winfencef 4
 wingetf   5
-#Needs post,start, complete, wait
+#Needs win_test
 #winscale2f 4
 #Needs win error handling
 #winerrf 1
index 6292467..9e1c984 100644 (file)
@@ -22,7 +22,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   add_executable(c2f2cwinf90 c2f2cwinf90.f90 c2f902cwin.c)
   add_executable(wingetf90 wingetf90.f90)
   add_executable(winnamef90 winnamef90.f90)
-#  add_executable(winscale1f90 winscale1f90.f90)
+  add_executable(winscale1f90 winscale1f90.f90)
 #  add_executable(winscale2f90 winscale2f90.f90)
 
 target_link_libraries(winaccf90 simgrid mtest_f90)
@@ -35,7 +35,7 @@ target_link_libraries(c2f2cwinf90 simgrid mtest_f90)
 #target_link_libraries(winattrf90 simgrid mtest_f90)
 target_link_libraries(wingetf90 simgrid mtest_f90)
 target_link_libraries(winnamef90 simgrid mtest_f90)
-#target_link_libraries(winscale1f90 simgrid mtest_f90)
+target_link_libraries(winscale1f90 simgrid mtest_f90)
 #target_link_libraries(winscale2f90 simgrid mtest_f90)
 
 
index e85fb84..337fe31 100644 (file)
@@ -1,6 +1,6 @@
 # This file generated by f77tof90
 #See ../../f77/rma/testlist for reasons of deactivation
-#winscale1f90 4
+winscale1f90 4
 winfencef90 4
 wingetf90 5
 #winscale2f90 4
index bde731c..c5b39ec 100644 (file)
@@ -17,7 +17,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   add_executable(accfence1 accfence1.c)
   add_executable(accfence2_am accfence2_am.c)
   add_executable(accfence2 accfence2.c)
-#  add_executable(accpscw1 accpscw1.c)
+  add_executable(accpscw1 accpscw1.c)
 #  add_executable(acc-loc acc-loc.c)
 #  add_executable(adlb_mimic1 adlb_mimic1.c)
   add_executable(allocmem allocmem.c)
@@ -58,13 +58,13 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
 #  add_executable(mcs-mutex mcs-mutex.c)
 #  add_executable(mixedsync mixedsync.c)
 #  add_executable(mutex_bench mutex_bench.c)
-#  add_executable(nullpscw nullpscw.c)
+  add_executable(nullpscw nullpscw.c)
 #  add_executable(pscw_ordering pscw_ordering.c)
 #  add_executable(put_base put_base.c)
 #  add_executable(put_bottom put_bottom.c)
   add_executable(putfence1 putfence1.c)
   add_executable(putfidx putfidx.c)
-#  add_executable(putpscw1 putpscw1.c)
+  add_executable(putpscw1 putpscw1.c)
 #  add_executable(req_example req_example.c)
 #  add_executable(reqops reqops.c)
 #  add_executable(rmanull rmanull.c)
@@ -82,17 +82,17 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   add_executable(test1_am test1_am.c)
   add_executable(test1 test1.c)
   add_executable(test1_dt test1_dt.c)
-#  add_executable(test2_am test2_am.c)
-#  add_executable(test2 test2.c)
+  add_executable(test2_am test2_am.c)
+  add_executable(test2 test2.c)
 #  add_executable(test3_am test3_am.c)
-#  add_executable(test3 test3.c)
+  add_executable(test3 test3.c)
 #  add_executable(test4_am test4_am.c)
 #  add_executable(test4 test4.c)
   add_executable(test5_am test5_am.c)
   add_executable(test5 test5.c)
   add_executable(transpose1 transpose1.c)
   add_executable(transpose2 transpose2.c)
-#  add_executable(transpose3 transpose3.c)
+  add_executable(transpose3 transpose3.c)
 #  add_executable(transpose4 transpose4.c)
 #  add_executable(transpose5 transpose5.c)
   add_executable(transpose6 transpose6.c)
@@ -115,7 +115,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   target_link_libraries(accfence1 simgrid mtest_c)
   target_link_libraries(accfence2_am simgrid mtest_c)
   target_link_libraries(accfence2 simgrid mtest_c)
-#  target_link_libraries(accpscw1 simgrid mtest_c)
+  target_link_libraries(accpscw1 simgrid mtest_c)
 #  target_link_libraries(acc-loc simgrid mtest_c)
 #  target_link_libraries(adlb_mimic1 simgrid mtest_c)
   target_link_libraries(allocmem simgrid mtest_c)
@@ -156,13 +156,13 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
 #  target_link_libraries(mcs-mutex simgrid mtest_c)
 #  target_link_libraries(mixedsync simgrid mtest_c)
 #  target_link_libraries(mutex_bench simgrid mtest_c)
-#  target_link_libraries(nullpscw simgrid mtest_c)
+  target_link_libraries(nullpscw simgrid mtest_c)
 #  target_link_libraries(pscw_ordering simgrid mtest_c)
 #  target_link_libraries(put_base simgrid mtest_c)
 #  target_link_libraries(put_bottom simgrid mtest_c)
   target_link_libraries(putfence1 simgrid mtest_c)
   target_link_libraries(putfidx simgrid mtest_c)
-#  target_link_libraries(putpscw1 simgrid mtest_c)
+  target_link_libraries(putpscw1 simgrid mtest_c)
 #  target_link_libraries(req_example simgrid mtest_c)
 #  target_link_libraries(reqops simgrid mtest_c)
 #  target_link_libraries(rma-contig simgrid mtest_c)
@@ -180,17 +180,17 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   target_link_libraries(test1_am simgrid mtest_c)
   target_link_libraries(test1 simgrid mtest_c)
   target_link_libraries(test1_dt simgrid mtest_c)
-#  target_link_libraries(test2_am simgrid mtest_c)
-#  target_link_libraries(test2 simgrid mtest_c)
+  target_link_libraries(test2_am simgrid mtest_c)
+  target_link_libraries(test2 simgrid mtest_c)
 #  target_link_libraries(test3_am simgrid mtest_c)
-#  target_link_libraries(test3 simgrid mtest_c)
+  target_link_libraries(test3 simgrid mtest_c)
 #  target_link_libraries(test4_am simgrid mtest_c)
 #  target_link_libraries(test4 simgrid mtest_c)
   target_link_libraries(test5_am simgrid mtest_c)
   target_link_libraries(test5 simgrid mtest_c)
   target_link_libraries(transpose1 simgrid mtest_c)
   target_link_libraries(transpose2 simgrid mtest_c)
-#  target_link_libraries(transpose3 simgrid mtest_c)
+  target_link_libraries(transpose3 simgrid mtest_c)
 #  target_link_libraries(transpose4 simgrid mtest_c)
 #  target_link_libraries(transpose5 simgrid mtest_c)
   target_link_libraries(transpose6 simgrid mtest_c)
@@ -214,7 +214,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
  set_target_properties(accfence2_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(accfence2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(acc-loc PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(accpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(accpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(adlb_mimic1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(allocmem PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(attrorderwin PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
@@ -254,13 +254,13 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
 # set_target_properties(mcs-mutex PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(mixedsync PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(mutex_bench PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(nullpscw PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(nullpscw PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(pscw_ordering PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(put_base PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(put_bottom PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(putfence1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(putfidx PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(putpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(putpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(req_example PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(reqops PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(rmanull PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
@@ -278,17 +278,17 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
  set_target_properties(test1_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(test1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(test1_dt PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(test2_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(test2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test2_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(test3_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(test3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(test4_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(test4 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(test5_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(test5 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(transpose1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(transpose2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
-# set_target_properties(transpose3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(transpose3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(transpose4 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
 # set_target_properties(transpose5 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
  set_target_properties(transpose6 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
index 8eac09d..e8185e5 100644 (file)
@@ -9,21 +9,21 @@ accfence1 4
 #adlb_mimic1 3
 accfence2 4
 #Needs post
-#putpscw1 4
-#accpscw1 4
+putpscw1 4
+accpscw1 4
 #Needs get_group
 #getgroup 4
 transpose1 2
 transpose2 2
-#Needs post/start
-#transpose3 2
+transpose3 2
 #Needs lock/unlock
 #transpose5 2
 transpose6 1
 transpose7 2
 test1 2
-#Needs post/start
-#test2 2
+test2 2
+#this example will not run if the one-sided operations are simply
+#implemented on top of MPI_Isends and Irecvs -> won't work with SMPI.
 #test3 2
 #Needs lock, unlock
 #test4 2
@@ -37,12 +37,12 @@ test5 2
 #transpose4 2
 #fetchandadd 7
 #fetchandadd_tree 7
-#Needs start, complete
+#Needs MPI_Win_test
 #wintest 2
 #Needs lock, unlock
 #contig_displ 1
 test1_am 2
-#test2_am 2
+test2_am 2
 #test3_am 2
 #test4_am 2
 test5_am 2
@@ -51,7 +51,7 @@ test5_am 2
 accfence2_am 4
 test1_dt 2 timeLimit=30
 #Needs post/start
-#nullpscw 7
+nullpscw 7
 #Needs win_attr
 #attrorderwin 1
 #Needs MPI_Win_call_errhandler
index 32a8cf9..a53218e 100644 (file)
@@ -115,7 +115,7 @@ $ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n"
 >
 > Done (strlen>10210)
 
-p Check that the dynamic version of the log formated layout works
+p Check that the dynamic version of the log formatted layout works
 $ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n"
 > This is a very large message:
 > 0