DCE - OVERVIEW
**************
Direct Code Execution (DCE) is a module for `NS-3 `_ that provides facilities to execute, within ns-3, existing implementations of userspace and kernelspace network protocols or applications without source code changes. For example instead of using the pseudo application provided by NS-3 **V4PingHelper** you can use the true **ping**.
Features
========
- To run an application using DCE, it is **not** necessary to **change** these sources. However you will need to **recompile** it.
- The simulation is executed wholly within a **single process** which greatly facilitates the **debugging**.
- DCE is very **memory-efficient**, thanks to the way it loads the executables similarly to shared libraries.
Limitations
===========
- Currently the POSIX API (libc) is not fully supported by DCE. However there are already about **400 methods** supported. As the goal of DCE is to allow to execute network applications, many methods related to the network are supported for example ``socket``, ``connect``, ``bind``, ``listen``, ``read``, ``write``, ``poll``, ``select``. The next chapter list the applications well tested using DCE.
- Some methods are not usable with all options of DCE. For more details refer to chapter **Coverage API** that lists all the supported methods.
- The scheduler is not as advanced as that of a kernel, for example if an infinite loop in a hosted application, DCE can not get out, but this should not happen in applications written correctly.
Compatibility list
==================
Below are listed the applications tested with DCE. You may find scripts examples of them under the ``example`` directory. The part tutorial explains how to run
`examples `_
CCNX
----
`CCNx `_ is an open source implementation of **Content Centric Networking**.
All the C written executables are supported and none of the Java ones. The versions tested are those between 0.4.0 and 0.6.1 included.
Ping
----
Ping from the following archive ``_ is supported.
Quagga
------
For more information, see the latest support `document `_.
iPERF
-----
iperf from the following archive ``_ as been tested.
It is the exception that proves the rule. That is to say that this particular example requires a change in its code.
In the source file named ``Thread.c`` at line 412 in the function named ``thread_rest`` you must add a ``sleep(1)`` in order to help DCE to break the infinite loop.
API Coverage
============
Below there is the list of the systems calls supported by DCE, the column named **Type** represents how the system call is implemented ie:
1. **DCE** the method is fully rewritten,
2. **NATIVE** the real corresponding system call is used.
.. csv-table:: API Coverage
:header: "System Call Name","Domain","Include file","Type","Remarks"
:widths: 50,10,10,7,23
:file: api_cov.csv