From: Paul Bédaride Date: Mon, 24 Mar 2014 16:21:27 +0000 (+0100) Subject: Add java surf plugin to reserve bandwidth X-Git-Tag: v3_11~192^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/baffd89dc9e6ce6cbeebd82599789dc45fd7422f Add java surf plugin to reserve bandwidth --- diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index a3330e3552..03ad3a8a69 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -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) diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index a441a883ff..2c0e140ae3 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -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 diff --git a/buildtools/Cmake/MakeExe.cmake b/buildtools/Cmake/MakeExe.cmake index 299103e24d..a5a5819361 100644 --- a/buildtools/Cmake/MakeExe.cmake +++ b/buildtools/Cmake/MakeExe.cmake @@ -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 index 0000000000..bef56276d1 --- /dev/null +++ b/examples/java/reservationSurfPlugin/CMakeLists.txt @@ -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 index 0000000000..cd66bb4502 --- /dev/null +++ b/examples/java/reservationSurfPlugin/Receiver.java @@ -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 index 0000000000..0bd91aa5d1 --- /dev/null +++ b/examples/java/reservationSurfPlugin/ReservationPlugin.java @@ -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 index 0000000000..6f5ccf4c00 --- /dev/null +++ b/examples/java/reservationSurfPlugin/Sender.java @@ -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 index 0000000000..cedbb04cdf --- /dev/null +++ b/examples/java/reservationSurfPlugin/TestPlugin.java @@ -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 index 0000000000..9101480bb0 --- /dev/null +++ b/examples/java/reservationSurfPlugin/reservationSurfPluginDeployment.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml b/examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml new file mode 100644 index 0000000000..2712607497 --- /dev/null +++ b/examples/java/reservationSurfPlugin/reservationSurfPluginPlatform.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh b/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh new file mode 100644 index 0000000000..012094f87a --- /dev/null +++ b/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh @@ -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__ diff --git a/src/bindings/java/surf.i b/src/bindings/java/surf.i index 3fc90338f1..d860b98256 100644 --- a/src/bindings/java/surf.i +++ b/src/bindings/java/surf.i @@ -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);} } }; - diff --git a/src/bindings/java/surf_swig.cpp b/src/bindings/java/surf_swig.cpp index b5a376ff0b..32f557f819 100644 --- a/src/bindings/java/surf_swig.cpp +++ b/src/bindings/java/surf_swig.cpp @@ -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)); } diff --git a/src/bindings/java/surf_swig.hpp b/src/bindings/java/surf_swig.hpp index 39eb67dfc0..1c51c7b6c8 100644 --- a/src/bindings/java/surf_swig.hpp +++ b/src/bindings/java/surf_swig.hpp @@ -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: