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:

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.