-
Notifications
You must be signed in to change notification settings - Fork 1
Home
dot2net implements Topology-driven Configuration, a revolutionary approach that separates network topology from generalized configuration settings. Instead of manually editing multiple device configurations when adding a single router, dot2net generates all required configuration files from a simple topology graph (DOT) and reusable configuration templates (YAML).

dot2net transforms network topology into emulation-ready configurations through a 4-step process:
- Convert: Parse DOT topology into network model with object instances
- Assign parameters: Automatically calculate IP addresses, interface names, and other parameters
- Embed variables: Process templates with assigned parameters to generate config blocks
- Merge and format: Combine config blocks into final configuration files and deployment specifications
This separation enables topology-driven configuration where changing the network layout only requires modifying the DOT file, while all device configurations are automatically regenerated.
For building dot2net:
- Go 1.23+ OR Docker
For deploying generated networks:
- Using Containerlab/TiNET: Linux environment with Docker and sudo privilege
- Manual deployment: Any environment (dot2net generates config files only)
Deployment platforms (choose one):
- Containerlab - container-based network labs
- TiNET - Linux namespace-based emulation
- Manual deployment to physical/virtual equipment
# 1. Build dot2net
go build .
# or with Docker: docker run --rm -i -v $PWD:/v -w /v golang:1.23.4 go build -buildvcs=false
# 2. Navigate to a tutorial scenario
cd tutorial/
# 3. Generate configuration files
dot2net build -c ./input.yaml ./input.dot
# This creates: r1/, r2/, r3/ directories + topo.yaml + spec.yaml
# 4a. Deploy with Containerlab
sudo containerlab deploy --topo topo.yaml
# Test connectivity: docker exec -it clab-tutorial-r1 ping <r3_ip>
# Cleanup: sudo containerlab destroy --topo topo.yaml
# 4b. Or deploy with TiNET
tinet up -c spec.yaml | sudo sh -x
tinet conf -c spec.yaml | sudo sh -x
# Cleanup: tinet down -c spec.yaml | sudo sh -x-
input.dot: Network topology in DOT language (Graphviz format) -
input.yaml: Configuration templates, IP policies, and class definitions - Generated files: Node-specific config directories + platform deployment files
Example topology (input.dot):
digraph {
r1 [xlabel="router"];
r2 [xlabel="router"];
r3 [xlabel="router"];
r1 -> r2 [dir="none"];
r2 -> r3 [dir="none"];
}- Basic Concepts - Topology-driven configuration principles and architecture
- DOT File Syntax - Network topology definition using DOT language
- YAML Configuration - Configuration templates and class system
- Command Reference - Complete command-line interface reference
- Best Practices - Design principles, scalability, and maintainability
- Template System - Template syntax, variables, and conditionals
- FormatStyle Design - Two-phase formatting system (Format/Merge)
- Automatic Parameter Assignment: IP addresses, interface names, and other parameters
- Flexible Class System: Reusable node, interface, connection, and group configurations
- Template-Based Configuration: Generate any configuration format using Go templates
- Multi-Platform Support: TiNET and Containerlab emulation platforms
- Conflict Detection: Intelligent detection and reporting of configuration conflicts
- Scalable Design: Handle large networks with hundreds of nodes and connections
- TiNET: Linux namespace-based network emulation
- Containerlab: Container-based network labs
- GitHub: https://github.com/cpflat/dot2net
- Issues: Report bugs and request features
- Discussions: Ask questions and share experiences
dot2net has been published and demonstrated in peer-reviewed academic venues:
"Topology-Driven Configuration of Emulation Networks With Deterministic Templating" Satoru Kobayashi, Ryusei Shiiba, Shinsuke Miwa, Toshiyuki Miyachi, Kensuke Fukuda DOI: 10.1109/TNSM.2025.3582212 (Early Access)
"dot2net: A Labeled Graph Approach for Template-Based Configuration of Emulation Networks" Satoru Kobayashi, Ryusei Shiiba, Ryosuke Miura, Shinsuke Miwa, Toshiyuki Miyachi, Kensuke Fukuda DOI: 10.23919/CNSM59352.2023.10327865
If you use dot2net in your research, please consider citing our work:
@article{Kobayashi_dot2net2025,
author={Kobayashi, Satoru and Shiiba, Ryusei and Miwa, Shinsuke and Miyachi, Toshiyuki and Fukuda, Kensuke},
journal={IEEE Transactions on Network and Service Management},
title={Topology-Driven Configuration of Emulation Networks With Deterministic Templating},
volume={},
number={},
pages={1-14},
year={2025},
doi={10.1109/TNSM.2025.3582212}
}
@inproceedings{Kobayashi_dot2net2023,
author={Kobayashi, Satoru and Shiiba, Ryusei and Miura, Ryosuke and Miwa, Shinsuke and Miyachi, Toshiyuki and Fukuda, Kensuke},
booktitle={19th International Conference on Network and Service Management (CNSM)},
title={dot2net: A Labeled Graph Approach for Template-Based Configuration of Emulation Networks},
pages={1-9},
year={2023},
doi={10.23919/CNSM59352.2023.10327865}
}This wiki documentation has been primarily generated using AI assistance (Claude Code) to provide comprehensive and up-to-date information about dot2net. The content is continuously being updated and improved. If you find missing information or have suggestions, please feel free to contribute!
This documentation is part of the dot2net project and is licensed under the Apache License 2.0.
Copyright 2022 Satoru Kobayashi
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.