Installation and Upgrade
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:
TD quick start with Containerlab
Install or upgrade Traffic Dictator container
Pull the latest TD image from Docker Hub:
sudo docker pull vegvisirsystems/td:latestBrowse all TD images: https://hub.docker.com/r/vegvisirsystems/td/tags
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.55GBThen 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:latestAlternatively, run TD with default config:
sudo docker run --name TD1 --hostname TD1 --privileged -d vegvisirsystems/td:latestIf you want TD to use host networking:
sudo docker run --name TD1 --hostname TD1 --privileged --network=host -d vegvisirsystems/td:latestVerify 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-dictatorWait 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/bashVerify 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 tdcliConfigure 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-dictatorThis 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.txtExport 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.tarExport 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.tarInstall 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-31Note: 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).gzCopy 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.gzAdvanced 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 frrAdd 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.101Verify 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 20Similarly, it is possible to use dynamic routing protocols such as OSPF or BGP to provide underlay connectivity between TD and the network.