Currently DCE includes an experimental support to the Python language. To enable it, you may need to recompile it with the flags:
--with-pybindgen=HERE_THE_PYBINDGEN_PATH
indicating the path to an existing Pybindgen source tree to use. Or in case waf didn’t find the interpreter, you can try to use the flags:
--with-python=HERE_THE_PYTHON_PATH
The first thing you may want to do is to import the DCE module. For example a minimal DCE script in Python could be:
from ns.DCE import *
print "It works!"
In this example, DCE executes a program running ten seconds on a single node.
# DCE import
from ns.DCE import *
# ns-3 imports
import ns.applications
import ns.core
import ns.network
# Increase the verbosity level
ns.core.LogComponentEnable("Dce", ns.core.LOG_LEVEL_INFO)
ns.core.LogComponentEnable("DceManager", ns.core.LOG_LEVEL_ALL)
ns.core.LogComponentEnable("DceApplication", ns.core.LOG_LEVEL_INFO)
ns.core.LogComponentEnable("DceApplicationHelper", ns.core.LOG_LEVEL_INFO)
# Node creation
nodes = ns.network.NodeContainer()
nodes.Create(1)
# Configure DCE
dceManager = ns.DCE.DceManagerHelper()
dceManager.Install (nodes);
dce = ns.DCE.DceApplicationHelper()
# Set the binary
dce.SetBinary ("tenseconds")
dce.SetStackSize (1<<20)
# dce.Install returns an instance of ns.DCE.ApplicationContainer
apps = dce.Install (nodes )
apps.Start ( ns.core.Seconds (4.0))
# Simulation
ns.core.Simulator.Stop (ns.core.Seconds(20.0))
ns.core.Simulator.Run ()
ns.core.Simulator.Destroy ()
print "Done."
You can then run the example with “waf –pyrun ...”
./waf --pyrun PATH_TO_YOUR_SCRIPT_HERE
or attach gdb to the python script:
./waf shell
gdb python -ex "set args PATH_TO_YOUR_SCRIPT_HERE" -ex "handle SIGUSR1 nostop noprint"
The DCE Python bindings does not currently match completely the C++ API of DCE. The following classes are supported:
Class | Methods |
---|---|
DceApplication | GetPid, SetArguments, SetBinary, SetEgid, SetEnvironment, SetEuid, SetGid, SetStackSize, SetStdinFile, SetUid |
DceApplicationHelper | AddArgument, AddArguments, AddEnvironment, Install, InstallInNode, ParseArguments, ResetArguments, ResetEnvironment, SetBinary, SetEgid, SetEuid, SetGid, SetStackSize, SetStdinFile, SetUid, GetPid |
ProcStatus | GetCmdLine, GetExitCode, GetNode, GetPid, GetRealDuration, GetRealEndTime, GetRealStartTime, GetSimulatedDuration, GetSimulatedEndTime, GetSimulatedStartTime |
DceManagerHelper | GetProcStatus, GetVirtualPath, Install, SetAttribute, SetVirtualPath |
Ipv4DceRoutingHelper | Copy, Create |
LinuxStackHelper | Install, InstallAll, RunIp, SetRoutingHelper, SysctlGet, SysctlSet |