AutoNetkit is a configuration engine to quickly and easily build large-scale network configurations.
g_ospf = anm.add_overlay("ospf")
g_ospf.add_nodes_from(g_in.routers())
g_ospf.add_edges_from(e for e in g_in.edges() if e.src.asn == e.dst.asn)
AutoNetkit provides real-time feedback on network designs using a d3.js network rendering engine.
$ pip install autonetkit
For the visualization:
$ pip install autonetkit_vis
AutoNetkit 0.9 allows for JSON input. An example JSON input is:
{
"directed": false, "graph": [], "multigraph": false,
"links": [
{"dst": "r2", "dst_port": "eth0", "src": "r1", "src_port": "eth0"},
{"dst": "r3", "dst_port": "eth0", "src": "r1", "src_port": "eth1"},
{"dst": "r3", "dst_port": "eth1", "src": "r2", "src_port": "eth1"},
{"dst": "r2", "dst_port": "eth2", "src": "r4", "src_port": "eth0"},
{"dst": "r5", "dst_port": "eth0", "src": "r4", "src_port": "eth1"},
{"dst": "r3", "dst_port": "eth2", "src": "r5", "src_port": "eth1"}
],
"nodes": [
{
"asn": 1, "device_type": "router", "id": "r1", "x": 350, "y": 400,
"ports": [
{"category": "loopback", "description": null, "id": "Loopback0"},
{"category": "physical", "description": "r1 to r2", "id": "eth0"},
{"category": "physical", "description": "r1 to r3", "id": "eth1"}
]
},
{
"asn": 1, "device_type": "router", "id": "r2", "x": 500, "y": 300,
"ports": [
{"category": "loopback", "description": null, "id": "Loopback0"},
{"category": "physical", "description": "r2 to r1", "id": "eth0"},
{"category": "physical", "description": "r2 to r3", "id": "eth1"},
{"category": "physical", "description": "r2 to r4", "id": "eth2"}
]
},
{
"asn": 1, "device_type": "router", "id": "r3", "x": 500, "y": 500,
"ports": [
{"category": "loopback", "description": null, "id": "Loopback0"},
{"category": "physical", "description": "r3 to r1", "id": "eth0"},
{"category": "physical", "description": "r3 to r2", "id": "eth1"},
{"category": "physical", "description": "r3 to r5", "id": "eth2"}
]
},
{
"asn": 2, "device_type": "router", "id": "r4", "x": 675, "y": 300,
"ports": [
{"category": "loopback", "description": null, "id": "Loopback0"},
{"category": "physical", "description": "r4 to r2", "id": "eth0"},
{"category": "physical", "description": "r4 to r5", "id": "eth1"}
]
},
{
"asn": 2, "device_type": "router", "id": "r5", "x": 675, "y": 500,
"ports": [
{"category": "loopback", "description": null, "id": "Loopback0"},
{"category": "physical", "description": "r5 to r4", "id": "eth0"},
{"category": "physical", "description": "r5 to r3", "id": "eth1"}
]
}
]
}
Examples of topology files can be found in the example directory.
$ autonetkit -f example/house.json
INFO AutoNetkit 0.9.0
INFO IPv4 allocations: Infrastructure: 10.0.0.0/8, Loopback: 192.168.0.0/22
INFO Allocating v4 Infrastructure IPs
INFO Allocating v4 Primary Host loopback IPs
INFO Skipping iBGP for iBGP disabled nodes: []
INFO All validation tests passed.
INFO Rendering Configuration Files
INFO Finished
This will generate Quagga configurations and Netkit topology files.:
$ tree rendered/localhost/netkit/
rendered/localhost/netkit/
├── lab.conf
├── r1_1
│ ├── etc
│ │ ├── hostname
│ │ ├── shadow
│ │ ├── ssh
│ │ │ └── sshd_config
│ │ └── zebra
│ │ ├── bgpd.conf
│ │ ├── daemons
│ │ ├── isisd.conf
│ │ ├── motd.txt
│ │ ├── ospfd.conf
│ │ └── zebra.conf
│ └── root
├── r1_1.startup
...
and an example of the resulting configuration file:
$ rendered/localhost/netkit/r1/etc/zebra/ospfd.conf
hostname r1
password 1234
banner motd file /etc/quagga/motd.txt
!
interface eth0
#Link to to r2
ip ospf cost 1
!
interface eth1
#Link to to r3
ip ospf cost 1
!
!
router ospf
network 10.0.0.0/30 area 0
network 10.0.0.4/30 area 0
!
!
network 192.168.0.1/32 area 0
!
You can start the visualization webserver, and topologies will automatically be sent:
$ ank_webserver --ank_vis
An example of the visualization output for the above JSON house example:
Physical topology:
Physical topology with interfaces:
IPv4 topology:
OSPF topology:
iBGP topology:
eBGP topology:
A tutorial on extending using the API can be found here or as an iPython Notebook here.
Users from industry, academia, and university teaching.
More information on AutoNetkit:
-
CoNEXT 2013 Slides (Dec 13)
-
PyCon Australia 2013 Presentation on Autonetkit (Slides) (July 13)