Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add java surf plugin to reserve bandwidth
authorPaul Bédaride <paul.bedaride@gmail.com>
Mon, 24 Mar 2014 16:21:27 +0000 (17:21 +0100)
committerPaul Bédaride <paul.bedaride@gmail.com>
Mon, 24 Mar 2014 16:22:14 +0000 (17:22 +0100)
14 files changed:
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/MakeExe.cmake
examples/java/reservationSurfPlugin/CMakeLists.txt [new file with mode: 0644]
examples/java/reservationSurfPlugin/Receiver.java [new file with mode: 0644]
examples/java/reservationSurfPlugin/ReservationPlugin.java [new file with mode: 0644]
examples/java/reservationSurfPlugin/Sender.java [new file with mode: 0644]
examples/java/reservationSurfPlugin/TestPlugin.java [new file with mode: 0644]
examples/java/reservationSurfPlugin/reservationSurfPluginDeployment.xml [new file with mode: 0644]
examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml [new file with mode: 0644]
examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh [new file with mode: 0644]
src/bindings/java/surf.i
src/bindings/java/surf_swig.cpp
src/bindings/java/surf_swig.hpp

index a3330e3..03ad3a8 100644 (file)
@@ -30,10 +30,10 @@ endif()
 
 #some tests may take forever on non futexes systems, using busy_wait with n cores < n workers
 # default to posix for these tests if futexes are not supported
-if(NOT HAVE_FUTEX_H) 
+if(NOT HAVE_FUTEX_H)
 SET(CONTEXTS_SYNCHRO --cfg contexts/synchro:posix)
 endif()
+
 
 INCLUDE(CTest)
 ENABLE_TESTING()
@@ -199,7 +199,7 @@ if(NOT enable_memcheck)
   ADD_TEST(msg-masterslave-vivaldi-thread       ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_vivaldi.tesh)
 
   ADD_TEST(msg-cloud-two-tasks-vm-thread ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:thread --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/two_tasks_vm.tesh)
-  
+
   ADD_TEST(msg-cloud-simple-vm-thread ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:thread --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/simple_vm.tesh)
 
   if(CONTEXT_UCONTEXT)
@@ -624,6 +624,7 @@ if(NOT enable_memcheck)
     ADD_TEST(java-mutualExclusion               ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/mutualExclusion/mutualexclusion.tesh)
     ADD_TEST(java-pingPong                      ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/pingPong/pingpong.tesh)
     ADD_TEST(java-priority                      ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/priority/priority.tesh)
+    ADD_TEST(java-reservation-surf-plugin       ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh)
     ADD_TEST(java-startKillTime                 ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/startKillTime/startKillTime.tesh)
     ADD_TEST(java-surf-plugin                   ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/surfPlugin/surf_plugin.tesh)
     ADD_TEST(java-suspend                       ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/suspend/suspend.tesh)
index a441a88..2c0e140 100644 (file)
@@ -158,7 +158,7 @@ set(SMPI_SRC
   src/smpi/colls/allgather-smp-simple.c
   src/smpi/colls/allgather-spreading-simple.c
   src/smpi/colls/allgather-ompi-neighborexchange.c
-  src/smpi/colls/allgatherv-GB.c  
+  src/smpi/colls/allgatherv-GB.c
   src/smpi/colls/allgatherv-pair.c
   src/smpi/colls/allgatherv-ring.c
   src/smpi/colls/allgatherv-ompi-neighborexchange.c
@@ -190,10 +190,10 @@ set(SMPI_SRC
   src/smpi/colls/alltoall-ring-light-barrier.c
   src/smpi/colls/alltoall-ring-mpi-barrier.c
   src/smpi/colls/alltoall-ring-one-barrier.c
-  src/smpi/colls/alltoallv-pair.c   
+  src/smpi/colls/alltoallv-pair.c
   src/smpi/colls/alltoallv-pair-light-barrier.c
   src/smpi/colls/alltoallv-pair-mpi-barrier.c
-  src/smpi/colls/alltoallv-pair-one-barrier.c 
+  src/smpi/colls/alltoallv-pair-one-barrier.c
   src/smpi/colls/alltoallv-ring.c
   src/smpi/colls/alltoallv-ring-light-barrier.c
   src/smpi/colls/alltoallv-ring-mpi-barrier.c
@@ -319,7 +319,7 @@ set(SURF_SRC
   src/surf/maxmin.cpp
   src/surf/network_interface.cpp
   src/surf/network_cm02.cpp
-  src/surf/network_smpi.cpp  
+  src/surf/network_smpi.cpp
   src/surf/network_constant.cpp
   src/surf/platf_generator.c
   src/surf/random_mgr.c
@@ -328,7 +328,7 @@ set(SURF_SRC
   src/surf/storage_n11.cpp
   src/surf/surf_interface.cpp
   src/surf/surf_c_bindings.cpp
-  src/surf/surf_routing.cpp  
+  src/surf/surf_routing.cpp
   src/surf/surf_routing_cluster.cpp
   src/surf/surf_routing_cluster_torus.cpp
   src/surf/surf_routing_dijkstra.cpp
@@ -461,9 +461,8 @@ set(JMSG_C_SRC
 
 set(JMSG_JAVA_SRC
   src/bindings/java/org/simgrid/NativeLib.java
-  #src/bindings/java/org/simgrid/NativeException.java
 
-  src/bindings/java/org/simgrid/msg/As.java    
+  src/bindings/java/org/simgrid/msg/As.java
   src/bindings/java/org/simgrid/msg/Comm.java
   src/bindings/java/org/simgrid/msg/File.java
   src/bindings/java/org/simgrid/msg/Host.java
@@ -473,7 +472,7 @@ set(JMSG_JAVA_SRC
   src/bindings/java/org/simgrid/msg/Msg.java
   src/bindings/java/org/simgrid/msg/MsgException.java
   src/bindings/java/org/simgrid/msg/Mutex.java
-  src/bindings/java/org/simgrid/msg/NativeException.java    
+  src/bindings/java/org/simgrid/msg/NativeException.java
   src/bindings/java/org/simgrid/msg/Process.java
   src/bindings/java/org/simgrid/msg/ProcessKilledError.java
   src/bindings/java/org/simgrid/msg/ProcessNotFoundException.java
@@ -500,15 +499,15 @@ set(JSURF_JAVA_GENERATED_SRC
   ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Plugin.java
   ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Model.java
   ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Resource.java
-  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Action.java  
+  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Action.java
   ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/Cpu.java
-  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/CpuAction.java  
-  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/NetworkLink.java  
-  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/NetworkAction.java  
+  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/CpuAction.java
+  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/NetworkLink.java
+  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/NetworkAction.java
 
-  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/LmmConstraint.java  
+  ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/LmmConstraint.java
   ${CMAKE_BINARY_DIR}/src/bindings/java/org/simgrid/surf/XbtDict.java
-) 
+)
 
 set(JTRACE_C_SRC
   src/bindings/java/jtrace.c
@@ -832,7 +831,7 @@ set(DOC_SOURCES
   doc/msg-tuto-src/platforms/griffon.xml
   doc/msg-tuto-src/platforms/peers.xml
   doc/msg-tuto-src/platforms/platform.xml
-  
+
   CITATION.bib
   )
 
@@ -908,7 +907,6 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/java/cloud/CMakeLists.txt
   examples/java/cloud/migration/CMakeLists.txt
   examples/java/commTime/CMakeLists.txt
-  examples/java/surfPlugin/CMakeLists.txt
   examples/java/io/CMakeLists.txt
   examples/java/kademlia/CMakeLists.txt
   examples/java/master_slave_bypass/CMakeLists.txt
@@ -918,7 +916,9 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/java/mutualExclusion/CMakeLists.txt
   examples/java/pingPong/CMakeLists.txt
   examples/java/priority/CMakeLists.txt
+  examples/java/reservationSurfPlugin/CMakeLists.txt
   examples/java/startKillTime/CMakeLists.txt
+  examples/java/surfPlugin/CMakeLists.txt
   examples/java/suspend/CMakeLists.txt
   examples/java/tracing/CMakeLists.txt
   examples/lua/CMakeLists.txt
index 299103e..a5a5819 100644 (file)
@@ -18,6 +18,7 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/migration)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/mutualExclusion)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/pingPong)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/priority)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/reservationSurfPlugin)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/startKillTime)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/surfPlugin)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/suspend)
diff --git a/examples/java/reservationSurfPlugin/CMakeLists.txt b/examples/java/reservationSurfPlugin/CMakeLists.txt
new file mode 100644 (file)
index 0000000..bef5627
--- /dev/null
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_reservation_surf_plugin)
+set(sources
+   ${CMAKE_CURRENT_SOURCE_DIR}/TestPlugin.java
+   ${CMAKE_CURRENT_SOURCE_DIR}/ReservationPlugin.java
+   ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java
+   ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} simgrid-java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -classpath ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/reservation_surf_plugin.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/reservationSurfPluginPlatform.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/reservationSurfPluginDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
diff --git a/examples/java/reservationSurfPlugin/Receiver.java b/examples/java/reservationSurfPlugin/Receiver.java
new file mode 100644 (file)
index 0000000..cd66bb4
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (c) 2006-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. */
+
+package reservationSurfPlugin;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Task;
+import org.simgrid.msg.Process;
+
+public class Receiver extends Process {
+   public Receiver(Host host, String name, String[]args) {
+               super(host,name,args);
+   }
+   final double commSizeLat = 1;
+   final double commSizeBw = 100000000;
+
+   public void main(String[] args) throws MsgException {
+
+      Msg.info("helloo!");
+      double communicationTime=0;
+
+      Msg.info("try to get a task");
+
+      Task task = Task.receive(getHost().getName());
+      double timeGot = Msg.getClock();
+
+      Msg.info("Got at time "+ timeGot);
+      task.execute();
+
+      Msg.info("goodbye!");
+    }
+}
diff --git a/examples/java/reservationSurfPlugin/ReservationPlugin.java b/examples/java/reservationSurfPlugin/ReservationPlugin.java
new file mode 100644 (file)
index 0000000..0bd91aa
--- /dev/null
@@ -0,0 +1,61 @@
+package reservationSurfPlugin;
+
+import org.simgrid.surf.*;
+import org.simgrid.msg.Msg;
+import java.util.HashMap;
+
+public class ReservationPlugin extends Plugin {
+
+  public ReservationPlugin() {
+    activateCpuCreatedCallback();
+    activateCpuDestructedCallback();
+    activateCpuStateChangedCallback();
+    activateCpuActionStateChangedCallback();
+
+    activateNetworkLinkCreatedCallback();
+    activateNetworkLinkDestructedCallback();
+    activateNetworkLinkStateChangedCallback();
+    activateNetworkActionStateChangedCallback();
+
+  }
+
+  public void init() {
+    NetworkLink[] route = Surf.getRoute("Jacquelin", "Boivin");
+    Msg.info("RouteLength:"+route.length);
+    Msg.info("RouteName0:"+route[0].getName());
+    Msg.info("RouteName1:"+route[1].getName());
+  }
+
+  public void cpuCreatedCallback(Cpu cpu) {
+    Msg.info("Trace: Cpu created "+cpu.getName());
+  }
+
+  public void cpuDestructedCallback(Cpu cpu) {
+    Msg.info("Trace: Cpu destructed "+cpu.getName());
+  }
+
+  public void cpuStateChangedCallback(Cpu cpu){
+    Msg.info("Trace: Cpu state changed "+cpu.getName());
+  }
+
+  public void cpuActionStateChangedCallback(CpuAction action){
+    Msg.info("Trace: CpuAction state changed "+action.getModel().getName());
+  }
+
+  public void networkLinkCreatedCallback(NetworkLink link) {
+    Msg.info("Trace: NetworkLink created "+link.getName());
+  }
+
+  public void networkLinkDestructedCallback(NetworkLink link) {
+    Msg.info("Trace: NetworkLink destructed "+link.getName());
+  }
+
+  public void networkLinkStateChangedCallback(NetworkLink link){
+    Msg.info("Trace: NetworkLink state changed "+link.getName());
+  }
+
+  public void networkActionStateChangedCallback(NetworkAction action){
+    Msg.info("Trace: NetworkAction state changed "+action.getModel().getName());
+  }
+
+}
diff --git a/examples/java/reservationSurfPlugin/Sender.java b/examples/java/reservationSurfPlugin/Sender.java
new file mode 100644 (file)
index 0000000..6f5ccf4
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (c) 2006-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. */
+
+package reservationSurfPlugin;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.HostNotFoundException;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.Task;
+
+public class Sender extends Process {
+       public Sender(Host host, String name, String[] args) {
+               super(host,name,args);
+       }
+    private final double commSizeLat = 1;
+    final double commSizeBw = 100000000;
+
+    public void main(String[] args) throws MsgException {
+
+       Msg.info("helloo!");
+
+       int hostCount = args.length;
+
+       Msg.info("host count: " + hostCount);
+       String mailboxes[] = new String[hostCount];
+       double time;
+       double computeDuration = 10000;
+       Task task;
+
+       for(int pos = 0; pos < args.length ; pos++) {
+         try {
+            mailboxes[pos] = Host.getByName(args[pos]).getName();
+         } catch (HostNotFoundException e) {
+            Msg.info("Invalid deployment file: " + e.toString());
+            System.exit(1);
+         }
+        }
+
+        for (int pos = 0; pos < hostCount; pos++) {
+          time = Msg.getClock();
+
+          Msg.info("sender time: " + time);
+
+          task = new Task("no name",computeDuration,commSizeLat);
+
+          task.send(mailboxes[pos]);
+        }
+
+        Msg.info("goodbye!");
+    }
+}
diff --git a/examples/java/reservationSurfPlugin/TestPlugin.java b/examples/java/reservationSurfPlugin/TestPlugin.java
new file mode 100644 (file)
index 0000000..cedbb04
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (c) 2006-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. */
+
+package reservationSurfPlugin;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.NativeException;
+import org.simgrid.surf.Surf;
+import org.simgrid.surf.Cpu;
+
+public class TestPlugin {
+
+  /* This only contains the launcher. If you do nothing more than than you can run
+  *   java simgrid.msg.Msg
+  * which also contains such a launcher
+  */
+  static ReservationPlugin tp = new ReservationPlugin();
+
+  public static void main(String[] args) throws NativeException {
+    /* initialize the MSG simulation. Must be done before anything else (even logging). */
+    Msg.init(args);
+    if(args.length < 2) {
+      Msg.info("Usage   : TestPlugin platform_file deployment_file");
+      Msg.info("example : TestPlugin ping_pong_platform.xml ping_pong_deployment.xml");
+      System.exit(1);
+    }
+    /* construct the platform and deploy the application */
+    Msg.createEnvironment(args[0]);
+    Msg.deployApplication(args[1]);
+    tp.init();
+
+    // getName());
+    /*  execute the simulation. */
+    Msg.run();
+  }
+}
diff --git a/examples/java/reservationSurfPlugin/reservationSurfPluginDeployment.xml b/examples/java/reservationSurfPlugin/reservationSurfPluginDeployment.xml
new file mode 100644 (file)
index 0000000..9101480
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+  <process host="Jacquelin" function="surfPlugin.Sender">
+      <argument value="Boivin"/>
+  </process>
+<process host="Boivin" function="surfPlugin.Receiver"/>
+</platform>
diff --git a/examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml b/examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml
new file mode 100644 (file)
index 0000000..2712607
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+ <AS  id="AS0"  routing="Full">
+   <host id="Jacquelin" power="137.333Mf"/>
+   <host id="Boivin" power="98.095Mf"/>
+   <host id="TeX" power="68.667Mf"/>
+   <link id="link0" bandwidth="1MBps" latency="100ms"/>
+   <link id="link1" bandwidth="1MBps" latency="100ms"/>
+   <link id="link2" bandwidth="1MBps" latency="100ms"/>
+   <route src="Jacquelin" dst="Boivin">
+     <link_ctn id="link0"/>
+     <link_ctn id="link1"/>
+   </route>
+   <route src="Jacquelin" dst="TeX">
+     <link_ctn id="link0"/>
+     <link_ctn id="link2"/>
+   </route>
+
+ </AS>
+ </platform>
diff --git a/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh b/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh
new file mode 100644 (file)
index 0000000..012094f
--- /dev/null
@@ -0,0 +1,27 @@
+#! tesh
+
+$ java -classpath ${classpath:=.} reservationSurfPlugin/TestPlugin ${srcdir:=.}/reservationSurfPlugin/reservationSurfPluginPlatform.xml ${srcdir:=.}/reservationSurfPlugin/reservationSurfPluginDeployment.xml
+> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [0.000000] [jmsg/INFO] Trace: NetworkLink created __loopback__
+> [0.000000] [jmsg/INFO] Trace: NetworkLink state changed __loopback__
+> [0.000000] [jmsg/INFO] Trace: Cpu created Jacquelin
+> [0.000000] [jmsg/INFO] Trace: Cpu state changed Jacquelin
+> [0.000000] [jmsg/INFO] Trace: Cpu created Boivin
+> [0.000000] [jmsg/INFO] Trace: Cpu state changed Boivin
+> [0.000000] [jmsg/INFO] Trace: NetworkLink created link
+> [0.000000] [jmsg/INFO] Trace: NetworkLink state changed link
+> [Jacquelin:surfPlugin.Sender:(1) 0.000000] [jmsg/INFO] helloo!
+> [Jacquelin:surfPlugin.Sender:(1) 0.000000] [jmsg/INFO] host count: 1
+> [Jacquelin:surfPlugin.Sender:(1) 0.000000] [jmsg/INFO] sender time: 0.0
+> [Boivin:surfPlugin.Receiver:(2) 0.000000] [jmsg/INFO] helloo!
+> [Boivin:surfPlugin.Receiver:(2) 0.000000] [jmsg/INFO] try to get a task
+> [1.301001] [jmsg/INFO] Trace: NetworkAction state changed network
+> [Boivin:surfPlugin.Receiver:(2) 1.301001] [jmsg/INFO] Got at time 1.3010010824742269
+> [Jacquelin:surfPlugin.Sender:(1) 1.301001] [jmsg/INFO] goodbye!
+> [1.301103] [jmsg/INFO] Trace: CpuAction state changed cpu
+> [Boivin:surfPlugin.Receiver:(2) 1.301103] [jmsg/INFO] goodbye!
+> [1.301103] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
+> [1.301103] [jmsg/INFO] Trace: Cpu destructed Jacquelin
+> [1.301103] [jmsg/INFO] Trace: Cpu destructed Boivin
+> [1.301103] [jmsg/INFO] Trace: NetworkLink destructed link
+> [1.301103] [jmsg/INFO] Trace: NetworkLink destructed __loopback__
index 3fc9033..d860b98 100644 (file)
@@ -1,9 +1,10 @@
 /* File : example.i */
 %module(directors="1") Surf
 
+%include "arrays_java.i"
+
 %pragma(java) jniclassimports=%{
 import org.simgrid.NativeLib;
-
 %}
 %pragma(java) jniclasscode=%{
   static {
@@ -27,6 +28,24 @@ import org.simgrid.NativeLib;
 typedef struct lmm_constraint *lmm_constraint_t;
 %}
 
+/* Handle xbt_dynar_t of NetworkLink */
+JAVA_ARRAYSOFCLASSES(NetworkLink);
+%apply NetworkLink[] {NetworkLinkDynar};
+%typemap(jstype) NetworkLinkDynar "NetworkLink[]"
+%typemap(javain) NetworkLinkDynar "NetworkLink.cArrayUnwrap($javainput)"
+
+%typemap(javaout) NetworkLinkDynar {
+     return NetworkLink.cArrayWrap($jnicall, $owner);
+}
+%typemap(out) NetworkLinkDynar {
+  long l = xbt_dynar_length($1);
+  $result = jenv->NewLongArray(l);
+  NetworkLink **lout = (NetworkLink **)xbt_dynar_to_array($1);
+  jenv->SetLongArrayRegion($result, 0, l, (const jlong*)lout);
+  free(lout);
+}
+
+/* Allow to subclass Plugin and send java object to C++ code */
 %feature("director") Plugin;
 
 %include "src/bindings/java/surf_swig.hpp"
@@ -79,7 +98,6 @@ public:
 }
 };
 
-
 %rename lmm_constraint LmmConstraint;
 struct lmm_constraint {
 %extend {
@@ -93,4 +111,3 @@ struct s_xbt_dict {
   char *getValue(char *key) {return (char*)xbt_dict_get_or_null($self, key);}
 }
 };
-
index b5a376f..32f557f 100644 (file)
@@ -12,6 +12,24 @@ void clean() {
   SIMIX_clean();
 }
 
+/*NetworkModel *getNetworkModel()
+{
+  return surf_network_model;
+}*/
+
+NetworkLinkDynar getRoute(char *srcName, char *dstName) {
+  RoutingEdge *src = (RoutingEdge*)xbt_lib_get_or_null(host_lib, srcName, ROUTING_HOST_LEVEL);
+  RoutingEdge *dst = (RoutingEdge*)xbt_lib_get_or_null(host_lib, dstName, ROUTING_HOST_LEVEL);
+  if (src==NULL)
+    xbt_die("TOTO");
+  if (dst==NULL)
+    xbt_die("TOTO");
+  printf("src: %s\ndst: %s\n", src->getName(), dst->getName());
+  xbt_dynar_t route = xbt_dynar_new(sizeof(RoutingEdgePtr), NULL);
+  routing_platf->getRouteAndLatency(src, dst, &route, NULL);
+  return route;
+}
+
 void Plugin::activateCpuCreatedCallback(){
   surf_callback_connect(cpuCreatedCallbacks, boost::bind(&Plugin::cpuCreatedCallback, this, _1));
 }
index 39eb67d..1c51c7b 100644 (file)
@@ -4,15 +4,13 @@
 #include "src/surf/network_interface.hpp"
 #include "src/surf/maxmin_private.hpp"
 
+typedef xbt_dynar_t NetworkLinkDynar;
+
 double getClock();
 
-#ifdef __cplusplus
-extern "C" {
-#endif
 void clean();
-#ifdef __cplusplus
-}
-#endif
+
+NetworkLinkDynar getRoute(char *srcName, char *dstName);
 
 class Plugin {
 public: