This repository accompanies the bachelor thesis Improving Table-Driven Mobile Ad Hoc Networks through Demand-Driven Features: A comparative simulation of DSDV and Eff-DSDV Routing Protocols. It contains a C++ implementation of the Efficient Destination-Sequenced Distance Vector (Eff-DSDV) Routing Protocol, written for the ns-3 network simulator.
Finding an optimal (e.g. shortest) path between two devices remains one of the main challenges in Mobile Ad Hoc Networks (MANETs). In such, each device acts both as a router and a network host and thereby connects devices that are not in each other’s service range. The Destination-Sequenced Distance Vector (DSDV) protocol was one of the first routing protocols designed for the special properties of MANETs. With the Efficient Destination-Sequenced Distance Vector (Eff-DSDV) protocol, an allegedly more efficient version of the table-driven DSDV has been proposed. In particular, Eff-DSDV claims to increase the low Packet Delivery Ratio (PDR) of DSDV. My thesis investigates the proposed changes by discussing the (dis-) advantages of the different routing approaches. I further implemented Eff-DSDV to conduct a comparative simulation study in the network simulator suite ns-3. My thesis shows that Eff-DSDV cannot live up to its name and offers no significant advantage over DSDV.
In order to make use of this implementation, you'll need to install ns-3 in version 3.28 (more recent version might work but are untested). Then, copy the content of src/
into your local ns-3/src/
directory. Afterwards, you can build the module from the project root using waf
:
./waf configure --disable-python --enable-examples --enable-tests
This project does not use the pytest framework for running tests. Instead, one can run tests using:
./waf --run "test-runner --suite=eff-dsdv"
This command will run the test contained in eff-dsdv/test
.
The file manet-routing-compare.cc
contains a simulation manager allowing to run configuration-based simulation scenarios.
Copy manet-routing-compare.cc
into the project root's scratch/
folder and run the following command from terminal:
./waf --run="scratch/manet-routing-compare"
However, this will only execute the standard scenario. Alternatively, one can provide a configuration file
./waf --run="scratch/manet-routing-compare --configFile=someConfig.csv"
or pass arguments directly:
./waf --run="scratch/manet-routing-compare --nWifis=10 --nSinks=10 --protocol=5 --totalTime=400"
To retrieve a list of all possible commands, execute
./waf --run="scratch/manet-routing-compare --PrintAttributes"
Simulation results will be stored in the projects root as a .csv file.
The programm makes heavy use of ns-3 logging capabilities. First, define for which component logging should be enabled, e.g. Eff-DSDV Protocol:
export NS_LOG=EffDsdvRoutingProtocol=level_debug
Furthermore, one can retrieve additional output from the Simulation Manager by enabling the extensiveOutput
flag. It is recommended to print the output to a log file
./waf --run="scratch/manet-routing-compare --extensiveOutput=1" > log.out 2>&1