The 6TiSCH Simulator

Branch Build Status
master Build Status
develop Build Status

Core Developers:

  • Mališa Vučinić (malisa.vucinic@inria.fr)
  • Yasuyuki Tanaka (yasuyuki.tanaka@inria.fr)
  • Keoma Brun-Laguna (keoma.brun@inria.fr)
  • Thomas Watteyne (thomas.watteyne@inria.fr)


  • Kazushi Muraoka (k-muraoka@eecs.berkeley.edu)
  • Nicola Accettura (nicola.accettura@eecs.berkeley.edu)
  • Xavier Vilajosana (xvilajosana@eecs.berkeley.edu)
  • Esteban Municio (esteban.municio@uantwerpen.be)
  • Glenn Daneels (glenn.daneels@uantwerpen.be)


6TiSCH is an IETF standardization working group that defines a complete protocol stack for ultra reliable ultra low-power wireless mesh networks. This simulator implements the 6TiSCH protocol stack, exactly as it is standardized. It allows you to measure the performance of a 6TiSCH network under different conditions.

Simulated protocol stack

RFC6550 RPL, non-storing mode
draft-watteyne-6lo-minimal-fragment-01 6LoWPAN Fragment Forwarding
RFC6282, RFC4944 6LoWPAN
draft-chang-6tisch-msf-01 6TiSCH Minimal Scheduling Function (MSF)
draft-ietf-6tisch-minimal-security-05 6TiSCH Minimal Security (join process)
draft-ietf-6tisch-6top-protocol-11 6TiSCH 6top Protocol (6P)
IEEE802.15.4-2015 IEEE802.15.4 TSCH
  • connectivity models
    • Pister-hack
    • k7: trace-based connectivity
  • miscellaneous


  • Install Python 2.7
  • Clone or download this repository
  • To plot the graphs, you need Matplotlib and scipy. On Windows, Anaconda (http://continuum.io/downloads) is a good one-stop-shop.

Getting Started

  1. Download the code: $ git clone https://bitbucket.org/6tisch/simulator.git
  2. Install the Python dependencies: cd simulator and pip install -r requirements.txt
  3. Move down to bin directory: $ cd bin
  4. Execute runSim.py: $ python runSim.py
    • raw output data is in bin/simData/.
    • raw charts are in bin/simPlots/.
  5. Take a look at bin/config.json to see the configuration of the simulations you just ran.

The simulator can be run on a cluster system. Here is an example for a cluster built with OAR and Conda:

  1. Edit `config.py
    • Set numCPUs with -1 (use all the available CPUs/cores) or a specific number of CPUs to be used
    • Set log_directory_name with "hostname"
  2. Create a shell script, runSim.sh, having the following lines:

    #OAR -l /nodes=1
    source activate py27
    python runSim.py
  3. Make the shell script file executable: $ chmod +x runSim.sh

  4. Submit a task for your simulation (in this case, 10 separate simulation jobs are submitted): $ oarsub --array 10 -S "./runSim.sh"
  5. After all the jobs finish, you'll have 10 log directories under simData, each directory name of which is the host name where a job is executed
  6. Merge the resulting log files into a single log directory: $ python mergeLogs.py

Code Organization

  • SimEngine/: the simulator
    • Connectivity.py: Simulates wireless connectivity.
    • SimConfig.py: The overall configuration of running a simulation campaign.
    • SimEngine.py: Event-driven simulation engine at the core of this simulator.
    • SimLog.py: Used to save the simulation logs.
    • SimSettings.py: The settings of a single simulation, part of a simulation campaign.
    • Mote/: Models a 6TiSCH mote running the different standards listed above.
  • bin/: the scripts for you to run
  • examples/: example plots, shown in the documentation
  • tests/: the unit tests, run using pytest
  • traces/: example k7 connectivity traces

About 6TiSCH

what where
charter http://tools.ietf.org/wg/6tisch/charters
data tracker http://tools.ietf.org/wg/6tisch/
mailing list http://www.ietf.org/mail-archive/web/6tisch/current/maillist.html
source https://bitbucket.org/6tisch/