Summary
This chapter describes installation or upgrade of Traffic Dictator, and basic configuration to enable network connectivity.
Traffic Dictator is supplied in 2 forms: (1) Docker container; (2) Virtual machine. Please check the relevant section for installation instructions.
TD quick start with Containerlab
To quickly run a pre-configured topology of Traffic Dictator with Cisco XRd or Arista cEOS in Containerlab environment, check the following guide:
https://vegvisir.ie/2024/06/11/traffic-dictator-quick-start-with-containerlab/
Install or upgrade Traffic Dictator container
Option 1 (preferred): pull the latest TD image from Docker Hub:
sudo docker pull vegvisirsystems/td:latest
Browse all TD images: https://hub.docker.com/r/vegvisirsystems/td/tags
Option 2: manually download the image from https://vegvisir.ie/downloads/, and load to your docker host:
sudo docker load -i td-1.5.tar.gz
Verify the image has been imported correctly:
dima@container-lab:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE vegvisirsystems/td latest 104097de975a 2 weeks ago 1.55GB
Then there are multiple ways to run the container.
If you have an existing configuration, or upgrading from an older version, run the container with provided config, for example:
sudo docker run --name TD1 --hostname TD1 -v /home/dima/TD_config_ISIS:/usr/local/td/startup-config --privileged -d vegvisirsystems/td:latest
Alternatively, run TD with default config:
sudo docker run --name TD1 --hostname TD1 --privileged -d vegvisirsystems/td:latest
If you want TD to use host networking:
sudo docker run --name TD1 --hostname TD1 --privileged --network=host -d vegvisirsystems/td:latest
Verify that the container started:
dima@container-lab:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e38cd6ba1765 vegvisirsystems/td:latest "/sbin/init" 46 seconds ago Up 45 seconds 22/tcp, 80/tcp, 179/tcp, 443/tcp, 2011/tcp, 4189/tcp traffic-dictator "/sbin/init" 30 seconds ago Up 29 seconds 22/tcp, 80/tcp, 179/tcp, 443/tcp, 4189/tcp traffic-dictator
Wait for 2-3 minutes after the container started so that all processes can start correctly.
Connect to container:
sudo docker exec -ti traffic-dictator /bin/bash
Verify that TD is running:
root@TD1:/# systemctl status td
● td.service - Vegvisir Systems Traffic Dictator
Loaded: loaded (/etc/systemd/system/td.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-05-25 16:36:28 UTC; 43s ago
Docs: https://vegvisir.ie/
Main PID: 10612 (traffic_dictato)
Tasks: 29 (limit: 10834)
Memory: 147.3M
CPU: 2.002s
CGroup: /system.slice/td.service
├─10612 /bin/bash /usr/local/td/traffic_dictator_start.sh
├─10614 /usr/local/td/td_policy_engine
├─10620 python3 /usr/local/td/traffic_dictator.py
├─10623 python3 /usr/local/td/traffic_dictator.py
├─10638 python3 /usr/local/td/traffic_dictator.py
├─10656 python3 /usr/local/td/traffic_dictator.py
├─10657 python3 /usr/local/td/traffic_dictator.py
├─10658 python3 /usr/local/td/traffic_dictator.py
├─10659 python3 /usr/local/td/traffic_dictator.py
└─10666 python3 /usr/local/td/traffic_dictator.py
May 25 16:36:28 TD1 systemd[1]: Started td.service - Vegvisir Systems Traffic Dictator.
May 25 16:36:28 TD1 traffic_dictator_start.sh[10612]: Requested Traffic Dictator start
May 25 16:36:28 TD1 traffic_dictator_start.sh[10612]: Starting Policy Engine...
May 25 16:36:28 TD1 traffic_dictator_start.sh[10614]: Policy engine started at: 2025-05-25 16:36:28.902
May 25 16:36:33 TD1 traffic_dictator_start.sh[10612]: Starting Traffic Dictator...
Connect to CLI:
root@TD1:/# tdcli ### Welcome to the Traffic Dictator CLI! ### TD1#
Alternatively, you can connect to TD CLI directly when connecting to Docker container:
sudo docker exec -ti traffic-dictator tdcli
Configure container networking
TD uses IP addresses configured on the container. Docker by default allocates IP addresses from 172.17.0.0/16 subnet and your container will get one of those addresses. It is possible to add more interfaces using Docker CLI, e.g. :
sudo docker network create net1 sudo docker network connect net1 traffic-dictator
This will create a new network net1, connect TD to this network and assign an IP address from configured range. Container orchestration tools like Kubernetes use their own networking modules.
From inside the container, you can use the regular linux ip commands such as “ip address add”, “ip route add” etc to manage networking.
Containerlab configuration
Linux container
The easiest way to use TD in containerlab is to add the following config to .clab.yml file (replace with your IP addresses and interface names):
traffic-dictator:
kind: linux
image: vegvisirsystems/td:latest
binds:
- TD_config_ISIS:/usr/local/td/startup-config
exec:
- ip address add 192.168.0.1/24 dev eth1
- ip -6 address add 2001:192::1/64 dev eth1
links:
# other endpoints
- endpoints: ["R1:Gi0-0-0-3", "traffic-dictator:eth1"]
This way, containerlab will automatically pull the latest TD image from Docker Hub and map the config from file TD_config_ISIS in the lab directory to TD startup-config.
External container
To connect Traffic Dictator to Container-lab as an external container, first start the TD container manually as described above and then add this to .clab.yml file (replace with your IP addresses and interface names).
topology:
nodes:
# other nodes
traffic-dictator:
kind: ext-container
exec:
- ip address add 192.168.0.1/24 dev eth1
- ip -6 address add 2001:192::1/64 dev eth1
links:
# other endpoints
- endpoints: ["R1:Gi0-0-0-3", "traffic-dictator:eth1"]
Alternatively, if you run the container with “–network=host” argument, it will use IP addresses of your host.
Export relevant data from docker container
For system backup, software upgrade or troubleshooting you might want to export some files from container.
Export startup-config:
sudo docker cp traffic-dictator:/usr/local/td/startup-config TD_config.txt
Export logs:
sudo docker exec traffic-dictator sh -c 'tar cvf /tmp/TD_logs.tar /var/log/traffic_dictator.log*' && sudo docker cp traffic-dictator:/tmp/TD_logs.tar TD_logs.tar
Export historic show techs:
sudo docker exec traffic-dictator sh -c 'tar cvf /tmp/historic_show_tech.tar /usr/local/td/tech-support' && sudo docker cp traffic-dictator:/tmp/historic_show_tech.tar historic_show_tech.tar
Install or upgrade Traffic Dictator VM
TBD
Install licenses
Commercial deployment of TD requires an active license. It also includes technical support. Without a license, all functionality is available but the scale is limited to 50 policies, which should be sufficient for evaluation and studying.
To install a license obtained from Vegvísir Systems, add the following config using TD CLI:
root@TD1:/# tdcli ### Welcome to the Traffic Dictator CLI! ### TD1#configure TD1(config)#management licenses TD1(config-mgmt-licenses)#license general TD1(config-mgmt-licenses-general)#key <your license key>
Verify the license has been installed:
TD1#show logging | grep license ... 2025-02-21 11:11:32,023 TD1 INFO: Policy-engine: Received license update 2025-02-21 11:11:32,125 TD1 INFO: Policy-server: Activated license for company Vegvisir Systems, valid until 2025-12-31 TD1#sh ver Traffic Dictator by Vegvisir Systems Software version: 1.3.1 Image build date: 2025-02-21 System start time: February 21, 2025 11:09:32 Uptime: 2 minutes, 19 seconds Documentation: https://vegvisir.ie/documentation/ Support: support@vegvisir.ie Installed license: Company name: Vegvisir Systems Valid until: 2025-12-31
Note: if you have configured more than 50 policies without a valid license and then installed a license, run “clear traffic-eng *” to recalculate all inactive policies.
Verify TD health status
Run “show tech-support” to collect all diagnostics information about current TD instance.
show tech-support | gzip > /usr/local/td/show-tech-$HOSTNAME-$(date +%m_%d.%H%M).gz
Copy generated tech-support file from container to host:
sudo docker cp traffic-dictator:/usr/local/td/show-tech-TD1-06_05.1135.gz show-tech-TD1-06_05.1135.gz
Advanced networking configuration
While Traffic Dictator has a BGP daemon, it is used to collect network topology information and install SR-TE policies, so TD relies on system configuration for underlay networking. For advanced deployments it is possible to install a routing daemon such as FRR in a container or VM.
Install FRR:
apt-get install frr systemctl enable frr systemctl start frr
Add a static route:
root@TD1:/# vtysh Hello, this is FRRouting (version 8.4.4). Copyright 1996-2005 Kunihiro Ishiguro, et al. TD1# configure terminal TD1(config)# ip route 10.0.0.0/24 192.168.0.101
Verify routing:
TD1# show ip route --- S>* 10.0.0.0/24 [1/0] via 192.168.0.101, eth1, weight 1, 00:03:15 root@TD1:/# ip route ls --- 10.0.0.0/24 nhid 10 via 192.168.0.101 dev eth1 proto static metric 20
Similarly, it is possible to use dynamic routing protocols such as OSPF or BGP to provide underlay connectivity between TD and the network.