Add a script to generate up-to-date NDN testbed topologies for Mini-NDN

Change-Id: I9686c65fe2f38fbc980c5fb54d876ebb3d9e7ede
This commit is contained in:
Alex Lane committed 2020-09-14 16:05:48 -05:00
1 parent ccd85b1cf1
commit 587b78ff64
7 files changed
+251 -236

No files matched your search

+13
View File
@@ -113,3 +113,16 @@ machine to an external machine.
Also, if the local machine has a public IP, Mini-NDN nodes can be
reached via external machines.
Generate NDN testbed topology
___________________________________________
Run the following install.sh command
::
python3 util/testbed_topo_generator.py
This will place a "testbed.conf" file in the topologies subdirectory,
where it can be referenced as desired. To update the topology, simply
rerun this command.
+6 -1
View File
@@ -103,7 +103,7 @@ else
fi
function patchDummy {
git -C $NDN_SRC/ndn-cxx apply $(pwd)/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
git -C $NDN_SRC/ndn-cxx apply $(pwd)/util/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
if [[ "$?" -ne 0 ]]; then
echo "Patch might already be applied"
fi
@@ -320,6 +320,10 @@ function jNDN {
popd
}
function testbedTopo {
python3 ./testbed_topo_generator.py
}
function commonClientLibraries {
ndn_cpp
pyNDN
@@ -369,6 +373,7 @@ else
mininet
minindn
commonClientLibraries
testbedTopo
break
;;
c) commonClientLibraries;;
-161
View File
@@ -1,161 +0,0 @@
[nodes]
afa: _ radius=10.3354428445 angle=1.12640207075
anyang: _ radius=14.3378634978 angle=2.99956859362
arizona: _ radius=16.2305391314 angle=2.97033285094
basel: _ radius=13.2717666497 angle=2.41932
bern: _ radius=13.2717666497 angle=2.42933
bupt: _ radius=29.2553552716 angle=3.07635893011
byu: _ radius=19.3538454318 angle=3.77334112453
cagliari: _ radius=13.5903793307 angle=1.1403443
caida: _ radius=17.6030443241 angle=2.94302721088
caruna: _ radius=13.6888312672 angle=1.172
cnic: _ radius=13.0513265591 angle=2.87446074202
copelabs: _ radius=16.206035855 angle=2.62082
csu: _ radius=14.1056931988 angle=2.99266609146
goettingen: _ radius=12.2349274272 angle=2.4715271786
indonesia: _ radius=29.2553552716 angle=2.75021570319
kisti: _ radius=11.5531281288 angle=2.98403796376
lip6: _ radius=29.2553552716 angle=2.62295081967
memphis: _ radius=15.264773513 angle=2.98360655738
michigan: _ radius=17.7738038607 angle=2.98018269082
minho: _ radius=16.206035855 angle=2.631
msu: _ radius=19.6533436173 angle=3.64135462555
mumbai_aws: _ radius=12.8934676597 angle=2.95081967213
neu: _ radius=19.9001283692 angle=2.13894230769
nist: _ radius=13.4257788269 angle=2.97670405522
ntnu: _ radius=12.0281644432 angle=3.11561691113
osaka: _ radius=19.3573834399 angle=3.53687143598
padua: _ radius=13.5903793307 angle=1.1393442623
pkusz: _ radius=11.1495655496 angle=2.87016
remap: _ radius=16.5866430024 angle=2.99811
srru: _ radius=12.8769009681 angle=3.63761863676
systemx: _ radius=19.1697680538 angle=2.62274588692
tno: _ radius=12.0148443703 angle=2.4603106126
tongji: _ radius=11.1495655496 angle=2.87015
uaslp: _ radius=19.0473935894 angle=2.96488127257
uci: _ radius=19.2697694366 angle=2.94186046512
ucla: _ radius=16.5866430024 angle=2.999107674
ufpa: _ radius=29.2553552716 angle=3.51898188093
uiuc: _ radius=29.2553552716 angle=2.98231233822
urjc: _ radius=13.6888312672 angle=1.17169974116
uum: _ radius=14.8351249127 angle=3.44434857636
waseda: _ radius=19.3583257472 angle=2.99935233161
wu: _ radius=19.4268485719 angle=4.31067173954
[links]
afa:mumbai_aws delay=100ms
afa:bern delay=15ms
afa:cagliari delay=25ms
afa:padua delay=11ms
afa:copelabs delay=36ms
anyang:tongji delay=54ms
anyang:srru delay=57ms
anyang:msu delay=70ms
anyang:bupt delay=33ms
anyang:kisti delay=40ms
anyang:waseda delay=40ms
anyang:osaka delay=36ms
arizona:caida delay=25ms
arizona:remap delay=25ms
arizona:waseda delay=75ms
arizona:byu delay=30ms
arizona:uaslp delay=100ms
arizona:wu delay=33ms
arizona:csu delay=18ms
arizona:memphis delay=17ms
basel:urjc delay=14ms
basel:minho delay=23ms
basel:ntnu delay=30ms
basel:padua delay=9ms
basel:lip6 delay=7ms
basel:goettingen delay=10ms
basel:bern delay=2ms
basel:tno delay=14ms
basel:systemx delay=9ms
bern:lip6 delay=18ms
bupt:pkusz delay=54ms
bupt:waseda delay=48ms
bupt:tongji delay=18ms
bupt:srru delay=72ms
bupt:indonesia delay=54ms
bupt:kisti delay=33ms
bupt:cnic delay=10ms
byu:csu delay=8ms
byu:remap delay=9ms
cagliari:urjc delay=28ms
cagliari:caruna delay=40ms
cagliari:padua delay=25ms
cagliari:wu delay=100ms
caida:ufpa delay=155ms
caida:ucla delay=3ms
caida:uci delay=3ms
caida:tongji delay=93ms
caruna:urjc delay=17ms
caruna:minho delay=27ms
cnic:pkusz delay=20ms
cnic:osaka delay=45ms
copelabs:urjc delay=13ms
copelabs:minho delay=4ms
copelabs:padua delay=24ms
copelabs:lip6 delay=22ms
copelabs:ufpa delay=145ms
csu:remap delay=16ms
csu:kisti delay=106ms
csu:michigan delay=15ms
csu:ucla delay=16ms
csu:uiuc delay=14ms
goettingen:osaka delay=136ms
goettingen:ntnu delay=40ms
goettingen:padua delay=14ms
goettingen:tno delay=12ms
goettingen:systemx delay=10ms
indonesia:waseda delay=49ms
indonesia:tongji delay=61ms
indonesia:srru delay=32ms
indonesia:uum delay=100ms
indonesia:kisti delay=150ms
indonesia:ufpa delay=200ms
kisti:waseda delay=39ms
lip6:urjc delay=15ms
lip6:michigan delay=69ms
lip6:ntnu delay=25ms
lip6:tno delay=9ms
lip6:systemx delay=1ms
memphis:michigan delay=12ms
memphis:uaslp delay=100ms
memphis:wu delay=17ms
memphis:ufpa delay=115ms
memphis:neu delay=21ms
michigan:uiuc delay=5ms
michigan:neu delay=14ms
michigan:nist delay=13ms
minho:urjc delay=13ms
minho:padua delay=26ms
msu:pkusz delay=71ms
msu:srru delay=3ms
msu:ucla delay=150ms
msu:uum delay=100ms
msu:tno delay=120ms
mumbai_aws:uum delay=100ms
neu:ntnu delay=69ms
neu:nist delay=12ms
nist:uiuc delay=12ms
ntnu:systemx delay=24ms
osaka:pkusz delay=63ms
osaka:waseda delay=5ms
osaka:srru delay=67ms
osaka:tongji delay=63ms
osaka:uum delay=100ms
padua:urjc delay=15ms
padua:pkusz delay=170ms
padua:uiuc delay=80ms
pkusz:tongji delay=54ms
pkusz:srru delay=71ms
pkusz:waseda delay=98ms
remap:ucla delay=1ms
remap:uci delay=1ms
srru:uum delay=100ms
tongji:waseda delay=98ms
uaslp:ufpa delay=100ms
uci:ucla delay=1ms
uiuc:wu delay=9ms
urjc:wu delay=86ms
-74
View File
@@ -1,74 +0,0 @@
[nodes]
unibas: _ radius=13.2717666496574 angle=2.41932700603969
bupt: _ radius=11.5095245566676 angle=2.87230371009491
pku: _ radius=11.1495655496376 angle=2.87014667817084
tongji: _ radius=11.1495655496376 angle=2.8701500000
orange: _ radius=10.9327229663161 angle=2.7739430543572
arizona: _ radius=16.2305391313912 angle=2.97033285094067
byu: _ radius=19.353845431776 angle=3.77334112452928
csu: _ radius=14.1056931988398 angle=2.99266609145815
uiuc: _ radius=29.2553552716 angle=2.98231233822261
memphis: _ radius=15.2647735129845 angle=2.98360655737705
neu: _ radius=19.9001283692128 angle=2.13894230769231
uci: _ radius=19.2697694366069 angle=2.94186046511628
ucla: _ radius=16.5866430024476 angle=2.99910767400357
remap: _ radius=16.5866430024476 angle=2.9991100000
umich: _ radius=17.7738038607456 angle=2.98018269081901
wustl: _ radius=19.426848571939 angle=4.31067173953721
urjc: _ radius=13.6888312671789 angle=1.17169974115617
systemx: _ radius=19.1697680538273 angle=2.62274588691716
lip6: _ radius=29.2553552716 angle=2.62295081967213
waseda: _ radius=19.3583257471934 angle=2.99935233160622
anyang: _ radius=14.3378634978013 angle=2.99956859361519
caida: _ radius=17.6030443241278 angle=2.94302721088435
[links]
bupt:pku delay=14ms
pku:unibas delay=127ms
pku:tongji delay=14ms
bupt:anyang delay=33ms
bupt:tongji delay=18ms
anyang:tongji delay=54ms
bupt:waseda delay=48ms
tongji:waseda delay=98ms
tongji:caida delay=93ms
caida:ucla delay=3ms
anyang:pku delay=38ms
anyang:waseda delay=22ms
ucla:pku delay=85ms
ucla:remap delay=1ms
caida:uci delay=3ms
uci:ucla delay=1ms
uci:remap delay=1ms
ucla:csu delay=16ms
remap:csu delay=16ms
caida:arizona delay=25ms
waseda:arizona delay=75ms
remap:arizona delay=25ms
arizona:wustl delay=33ms
wustl:uiuc delay=9ms
csu:uiuc delay=14ms
uiuc:umich delay=5ms
csu:byu delay=8ms
byu:remap delay=9ms
byu:arizona delay=30ms
wustl:urjc delay=86ms
wustl:memphis delay=17ms
arizona:memphis delay=17ms
waseda:orange delay=144ms
orange:systemx delay=2ms
unibas:systemx delay=10ms
memphis:neu delay=21ms
pku:neu delay=112ms
csu:umich delay=15ms
urjc:lip6 delay=15ms
urjc:unibas delay=9ms
lip6:systemx delay=2ms
unibas:lip6 delay=18ms
memphis:umich delay=12ms
memphis:orange delay=56ms
urjc:orange delay=15ms
lip6:orange delay=3ms
lip6:umich delay=69ms
unibas:orange delay=18ms
umich:neu delay=14ms
csu:arizona delay=18ms
+134
View File
@@ -0,0 +1,134 @@
[nodes]
UNIVH2C: _ radius=15.7232 angle=3.03408
MINHO: _ radius=16.2060 angle=2.62083
MSU: _ radius=19.6533 angle=3.64135
AVEIRO: _ radius=16.2060 angle=2.62081
BASEL: _ radius=13.2717 angle=2.41932
WU: _ radius=19.4268 angle=4.31067
NEU: _ radius=19.9001 angle=2.13894
UASLP: _ radius=19.0473 angle=2.96488
UIUC: _ radius=29.2553 angle=2.98231
COPELABS: _ radius=16.2060 angle=2.62082
PADUA: _ radius=13.5903 angle=1.13934
CNIC: _ radius=13.05132 angle=2.87446
LIP6: _ radius=29.2553 angle=2.62295
ANYANG: _ radius=14.3378 angle=2.99956
UFBA: _ radius=29.2553 angle=3.51898
MUMBAI_AWS: _ radius=12.8934 angle=2.95081
GIST: _ radius=11.5531 angle=2.98403
LACL: _ radius=12.5144 angle=2.62296
MICHIGAN: _ radius=17.7738 angle=2.98018
AFA: _ radius=10.3354 angle=1.12640
WASEDA: _ radius=19.3583 angle=2.99935
CORUNA: _ radius=13.6888 angle=1.17180
CSU: _ radius=14.1056 angle=2.99266
TNO: _ radius=12.0148 angle=2.46031
BERN: _ radius=13.2717 angle=2.41933
URJC: _ radius=13.6888 angle=1.17169
ARIZONA: _ radius=16.2305 angle=2.97033
SRRU: _ radius=12.8769 angle=3.63761
MEMPHIS: _ radius=15.2647 angle=2.98360
OSAKA: _ radius=19.3573 angle=3.53687
TONGJI: _ radius=11.1495 angle=2.87015
UCLA: _ radius=16.5866 angle=2.99911
UUM: _ radius=14.8351 angle=3.44434
QUB: _ radius=17.8582321576696 angle=2.42743127401714
SAVI: _ radius=19.5605 angle=4.04925
GOETTINGEN: _ radius=12.2349 angle=2.47152
UCLACS: _ radius=16.5866 angle=2.99910
[links]
MICHIGAN:NEU delay=14ms
MICHIGAN:MEMPHIS delay=12ms
MICHIGAN:UIUC delay=5ms
MICHIGAN:CSU delay=15ms
WU:ARIZONA delay=33ms
ARIZONA:CSU delay=18ms
ARIZONA:MEMPHIS delay=17ms
UIUC:CSU delay=14ms
UIUC:WU delay=9ms
MEMPHIS:WU delay=17ms
MEMPHIS:NEU delay=21ms
CSU:UCLACS delay=16ms
LIP6:MICHIGAN delay=69ms
URJC:LIP6 delay=15ms
URJC:WU delay=86ms
BASEL:LIP6 delay=18ms
BASEL:URJC delay=9ms
WASEDA:TONGJI delay=98ms
ARIZONA:WASEDA delay=75ms
ANYANG:WASEDA delay=22ms
ANYANG:TONGJI delay=54ms
UIUC:PADUA delay=80ms
BASEL:PADUA delay=9ms
URJC:PADUA delay=15ms
COPELABS:URJC delay=13ms
COPELABS:PADUA delay=23ms
COPELABS:LIP6 delay=21ms
BASEL:GOETTINGEN delay=21ms
PADUA:GOETTINGEN delay=21ms
WASEDA:OSAKA delay=5ms
GOETTINGEN:OSAKA delay=136ms
ANYANG:OSAKA delay=36ms
TONGJI:OSAKA delay=63ms
COPELABS:MINHO delay=4ms
BASEL:MINHO delay=23ms
PADUA:MINHO delay=26ms
URJC:MINHO delay=13ms
UFBA:COPELABS delay=145ms
UFBA:MEMPHIS delay=115ms
SRRU:OSAKA delay=13ms
SRRU:ANYANG delay=13ms
TNO:GOETTINGEN delay=38ms
TNO:LIP6 delay=38ms
TNO:BASEL delay=38ms
SRRU:MSU delay=5ms
UCLACS:MSU delay=150ms
TNO:MSU delay=120ms
ANYANG:MSU delay=70ms
CNIC:OSAKA delay=45ms
BERN:BASEL delay=2ms
BERN:AFA delay=15ms
COPELABS:AFA delay=36ms
PADUA:AFA delay=11ms
MSU:UUM delay=26ms
SRRU:UUM delay=42ms
AFA:MUMBAI_AWS delay=72ms
OSAKA:UUM delay=100ms
UUM:MUMBAI_AWS delay=88ms
UASLP:MEMPHIS delay=100ms
UASLP:ARIZONA delay=32ms
UASLP:UFBA delay=100ms
MINHO:CORUNA delay=27ms
URJC:CORUNA delay=17ms
ANYANG:GIST delay=4ms
MINHO:AVEIRO delay=2ms
COPELABS:AVEIRO delay=4ms
AFA:AVEIRO delay=45ms
PADUA:UNIVH2C delay=50ms
COPELABS:UNIVH2C delay=50ms
URJC:UNIVH2C delay=52ms
WU:MUMBAI_AWS delay=122ms
UCLACS:ARIZONA delay=25ms
WU:AVEIRO delay=75ms
WU:UNIVH2C delay=75ms
WU:UFBA delay=65ms
UNIVH2C:UFBA delay=125ms
AVEIRO:URJC delay=15ms
UCLACS:WU delay=30ms
NEU:SAVI delay=15ms
MICHIGAN:SAVI delay=15ms
LIP6:LACL delay=4ms
BERN:LACL delay=18ms
UNIVH2C:LACL delay=50ms
QUB:WU delay=60ms
QUB:TNO delay=15ms
QUB:LIP6 delay=12ms
QUB:NEU delay=60ms
UCLA:ARIZONA delay=25ms
UCLA:WU delay=30ms
UCLA:UCLACS delay=1ms
TONGJI:CNIC delay=18ms
ANYANG:CNIC delay=33ms
CSU:UCLA delay=16ms
ANYANG:UCLA delay=100ms
OSAKA:ARIZONA delay=100ms
+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env python3
# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
#
# Copyright (C) 2015-2020, The University of Memphis,
# Arizona Board of Regents,
# Regents of the University of California.
#
# This file is part of Mini-NDN.
# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
#
# Mini-NDN is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Mini-NDN is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Mini-NDN, e.g., in COPYING.md file.
# If not, see <http://www.gnu.org/licenses/>.
# This script generates a testbed topology based on current data. Note
# that this topology is memory intensive and can have issues on lower specced
# systems due to its size.
# To use, run with python3
import argparse
import datetime
import json
import logging
from os import path
from urllib.request import urlopen
def testbedGen():
"""Returns a string with the Mini-NDN topology version of the testbed"""
topology = None
connections = None
hosts = []
links = []
try:
with urlopen("https://ndndemo.arl.wustl.edu/testbedNodes.json") as url:
topology = json.loads(url.read().decode())
with urlopen("https://ndndemo.arl.wustl.edu/links.json") as url:
connections = json.loads(url.read().decode())
except:
logging.error("Failed to retrieve testbed info from WUSTL servers")
if __name__ == '__main__':
from sys import exit
exit(1)
raise
logging.info("Generating testbed topology...")
for node_name in topology:
node = topology[node_name]
if node['neighbors']:
radius = node['hr_radius']
angle = node['hr_angle']
host_str = "{}: _ radius={} angle={}\n".format(node_name, radius, angle)
hosts.append(host_str)
logging.debug("Add node: {}".format(host_str)[:-1])
else:
# A node without neighbors shouldn't be considered part of the testbed
# for testing purposes
logging.debug("Node {} has no neighbors, passing...".format(node_name))
for link in connections:
node1 = link['start']
node2 = link['end']
# This value is equivalent to RTT in the testbed
delay = link['nlsr_weight']
link_str = "{}:{} delay={}ms\n".format(node1, node2, delay)
logging.debug("Add link: {}".format(link_str)[:-1])
links.append(link_str.strip())
topo_str = "[nodes]\n"
for host in hosts:
topo_str = topo_str + host
topo_str = topo_str + "[links]\n"
for link in links:
topo_str = topo_str + link
return topo_str.strip()
if __name__ == '__main__':
default_path = path.dirname(__file__) + '/../topologies/testbed{}.conf'.format(str(datetime.date.today()))
parser = argparse.ArgumentParser()
parser.add_argument("-l", "--log_level", help="Log level to output", default="info", choices=["debug", "info", "warning", "error"])
parser.add_argument("-o", "--output_dir", help="File output location", default=default_path)
args = parser.parse_args()
log_level = getattr(logging, args.log_level.upper())
topologies_path = path.abspath(args.output_dir)
logging.basicConfig(format="%(levelname)s: %(message)s", level=log_level)
topo = testbedGen()
logging.info("Testbed generated, writing to file...")
with open(topologies_path, "w") as file:
file.writelines(topo)
logging.info("Finished")