This archive contains several files and repositories:
  - this readme;
  - the technical report of the submitted paper;
  - two router vendor repositories containing each:
    - a GNS3 portable project (.gns3project);
    - a script for configuring the IP address and routes necessary for the virtual TAP interface (setup-tap.sh);
    - a script for configuring the routers of the topology with various MPLS features (conf-mpls-cisco.py or conf-mpls-juniper.py);
    - an illustration of the IP addressing scheme of the topology (IP-addressing-scheme-Cisco.png or IP-addressing-scheme-Juniper.png).

NB: Images of the OSes (i.e., Cisco12.4, Cisco15.2, Junos Olive and Junos VMX as in our paper) are required to emulate our configurations.
    For Juniper topologies, a virtualization tool such as Qemu is required.

Here are the similar instructions to setup both router vendor topologies:
  1- open the gns3project file with gns3;
  2- add a cloud object within the topology;
  3- configure the cloud by adding a TAP interface named tap0;
  4- link the tap0 interface of the cloud to the GigabitEthernet1/0 (respectively ethernet4 for Juniper) interface of CE1;
  5- execute setup-tap.sh with root privileges.

For Cisco OSes, it is possible to modify the MPLS configuration in use (by default, invisible PHP) by running conf-mpls-cisco.py on the fly.
One can modify the propagation option, the popping method (PHP/UHP) and the LDP allocation behavior (by default all non-BGP prefixes with BRPR or only loopback addresses using the "allocate global host-routes" command with DPR)
For example for enabling DPR to work on a Cisco topology (by advertising only loopback addresses):
  python conf-mpls-cisco.py -path ~/GNS3/projects/Cisco/Cisco.gns3 -dpr PE1 P1 P2 P3 PE2
  Other options can be called using respectively -prop/-no_prop and -uhp/-php

For Juniper Oses, same options apply except -brpr and -dpr that are not supported.
However, our script supports another feature modification which enable the icmp-tunneling option:
  python conf-mpls-juniper.py -path ~/GNS3/projects/Juniper/Juniper.gns3 -icmp_tun PE1 P1 P2 P3 PE2
Note that before running the script, it is required to log in routers where modifications will be applied (using these credentials: root, 1123581321a)

By default, only invisible PHP configurations are available but other configurations are described in the technical report. 
