# TopoHub: A repository of reference Gabriel graph and real-world topologies for networking research
This project aims to create a repository of reference network topologies based on Gabriel graphs. It offers 200 Gabriel graph topologies with linearly increasing sizes ranging from 25 to 500 vertices. These topologies were generated in a reproducible manner to model the properties of long-haul optical transport networks. The topologies are available in the code repository and can be previewed and downloaded through a web interface, which allows visualization of individual topologies and exploration of their network properties. An important additional feature is the visualization of pre-computed link loads in the network using the Equal-Cost Multipath (ECMP) shortest path routing algorithm under different traffic demand models.
The web interface is available at: https://www.topohub.org
The package also includes a module that can be imported into the popular network emulator Mininet, enabling automatic usage of the topologies from the repository. It is also important, that apart from synthetic Gabriel topologies, we included all existing topologies from The Internet Topology Zoo and SNDlib into our repository as well. This enables the possibility to study their pre-computed ECMP link loads and import them automatically into the Mininet.
You can cite the following paper if you make use of TopoHub in your research:
@article{topohub,
title = {TopoHub: A repository of reference Gabriel graph and real-world topologies for networking research},
journal = {SoftwareX},
volume = {24},
pages = {101540},
year = {2023},
issn = {2352-7110},
doi = {10.1016/j.softx.2023.101540},
author = {Piotr Jurkiewicz}
}
The Python package can be installed from [Python Package Index (PyPI)](https://pypi.org/project/topohub/) using the following command:
pip install topohub
Then you can obtain topologies stored in the repository using the `topohub.get()` method and create NetworkX graph objects basing on them:
```python
import networkx as nx
import topohub
# Obtain topology dicts from JSON files stored in the repository
topo = topohub.get('gabriel/25/0')
topo = topohub.get('backbone/africa')
topo = topohub.get('topozoo/Abilene')
topo = topohub.get('sndlib/polska')
# Create NetworkX graph from node-link dict
g = nx.node_link_graph(topo)
# Access graph parameters
print(g.graph['name'])
print(g.graph['demands'])
print(g.graph['stats']['avg_degree'])
# Obtain link length or ECMP routing utilization
print(g.edges['Bydgoszcz', 'Warsaw']['dist'])
print(g.edges['Bydgoszcz', 'Warsaw']['ecmp_fwd']['uni'])
```
For usage in Mininet, you can use a helper which automatically creates Mininet Topo classes for selected topologies:
```python
import mininet.net
import topohub.mininet
# Obtain Mininet Topo classes for topologies stored in the repository
topo_cls = topohub.mininet.TOPO_CLS['gabriel/25/0']
topo_cls = topohub.mininet.TOPO_CLS['backbone/africa']
topo_cls = topohub.mininet.TOPO_CLS['topozoo/Abilene']
topo_cls = topohub.mininet.TOPO_CLS['sndlib/polska']
# Initialize Mininet Topo object
topo = topo_cls()
# Create Mininet Network using the selected topology
net = mininet.net.Mininet(topo=topo)
# Start the network and Mininet shell
net.interact()
```
A detailed documentation, including API reference and Mininet usage example, is available at: https://topohub.readthedocs.io
Raw data
{
"_id": null,
"home_page": "https://github.com/piotrjurkiewicz/topohub",
"name": "topohub",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Piotr Jurkiewicz",
"author_email": "piotr.jerzy.jurkiewicz@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/1f/ba/dddddfa7e772aca369aaa612d8b98e20adc225c58d22b6f7c2b699991455/topohub-1.3.tar.gz",
"platform": null,
"description": "# TopoHub: A repository of reference Gabriel graph and real-world topologies for networking research\n\nThis project aims to create a repository of reference network topologies based on Gabriel graphs. It offers 200 Gabriel graph topologies with linearly increasing sizes ranging from 25 to 500 vertices. These topologies were generated in a reproducible manner to model the properties of long-haul optical transport networks. The topologies are available in the code repository and can be previewed and downloaded through a web interface, which allows visualization of individual topologies and exploration of their network properties. An important additional feature is the visualization of pre-computed link loads in the network using the Equal-Cost Multipath (ECMP) shortest path routing algorithm under different traffic demand models.\n\nThe web interface is available at: https://www.topohub.org\n\nThe package also includes a module that can be imported into the popular network emulator Mininet, enabling automatic usage of the topologies from the repository. It is also important, that apart from synthetic Gabriel topologies, we included all existing topologies from The Internet Topology Zoo and SNDlib into our repository as well. This enables the possibility to study their pre-computed ECMP link loads and import them automatically into the Mininet.\n\nYou can cite the following paper if you make use of TopoHub in your research:\n\n @article{topohub,\n title = {TopoHub: A repository of reference Gabriel graph and real-world topologies for networking research},\n journal = {SoftwareX},\n volume = {24},\n pages = {101540},\n year = {2023},\n issn = {2352-7110},\n doi = {10.1016/j.softx.2023.101540},\n author = {Piotr Jurkiewicz}\n }\n\nThe Python package can be installed from [Python Package Index (PyPI)](https://pypi.org/project/topohub/) using the following command:\n\n pip install topohub\n\nThen you can obtain topologies stored in the repository using the `topohub.get()` method and create NetworkX graph objects basing on them:\n\n```python\nimport networkx as nx\nimport topohub\n\n# Obtain topology dicts from JSON files stored in the repository\ntopo = topohub.get('gabriel/25/0')\ntopo = topohub.get('backbone/africa')\ntopo = topohub.get('topozoo/Abilene')\ntopo = topohub.get('sndlib/polska')\n\n# Create NetworkX graph from node-link dict\ng = nx.node_link_graph(topo)\n\n# Access graph parameters\nprint(g.graph['name'])\nprint(g.graph['demands'])\nprint(g.graph['stats']['avg_degree'])\n\n# Obtain link length or ECMP routing utilization\nprint(g.edges['Bydgoszcz', 'Warsaw']['dist'])\nprint(g.edges['Bydgoszcz', 'Warsaw']['ecmp_fwd']['uni'])\n```\n\nFor usage in Mininet, you can use a helper which automatically creates Mininet Topo classes for selected topologies:\n\n```python\nimport mininet.net\nimport topohub.mininet\n\n# Obtain Mininet Topo classes for topologies stored in the repository\ntopo_cls = topohub.mininet.TOPO_CLS['gabriel/25/0']\ntopo_cls = topohub.mininet.TOPO_CLS['backbone/africa']\ntopo_cls = topohub.mininet.TOPO_CLS['topozoo/Abilene']\ntopo_cls = topohub.mininet.TOPO_CLS['sndlib/polska']\n\n# Initialize Mininet Topo object\ntopo = topo_cls()\n# Create Mininet Network using the selected topology\nnet = mininet.net.Mininet(topo=topo)\n# Start the network and Mininet shell\nnet.interact()\n```\n\nA detailed documentation, including API reference and Mininet usage example, is available at: https://topohub.readthedocs.io\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A repository of reference Gabriel graph and real-world topologies for networking research",
"version": "1.3",
"project_urls": {
"Homepage": "https://github.com/piotrjurkiewicz/topohub"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c0bbb5e463cf26fba72bc5a75efd8d613a40227e2c1c2b36dd05fffd35f2a79b",
"md5": "4bfa70a8b955d2dab8e94154788758ff",
"sha256": "7875db892a775328c6ff1299c5e3ceb18e1f0207a6164ec628b447961de396db"
},
"downloads": -1,
"filename": "topohub-1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4bfa70a8b955d2dab8e94154788758ff",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 4473816,
"upload_time": "2024-11-13T22:48:53",
"upload_time_iso_8601": "2024-11-13T22:48:53.481057Z",
"url": "https://files.pythonhosted.org/packages/c0/bb/b5e463cf26fba72bc5a75efd8d613a40227e2c1c2b36dd05fffd35f2a79b/topohub-1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1fbadddddfa7e772aca369aaa612d8b98e20adc225c58d22b6f7c2b699991455",
"md5": "eff87e20b36eb7d6ff909ab7dab62f6d",
"sha256": "d2d16b65ba353db9075924f6ad06acd234a3268430bfacfb1f4f8a3d866daa10"
},
"downloads": -1,
"filename": "topohub-1.3.tar.gz",
"has_sig": false,
"md5_digest": "eff87e20b36eb7d6ff909ab7dab62f6d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4123298,
"upload_time": "2024-11-13T22:48:56",
"upload_time_iso_8601": "2024-11-13T22:48:56.064772Z",
"url": "https://files.pythonhosted.org/packages/1f/ba/dddddfa7e772aca369aaa612d8b98e20adc225c58d22b6f7c2b699991455/topohub-1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-13 22:48:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "piotrjurkiewicz",
"github_project": "topohub",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "topohub"
}