Skip to content

Instantly share code, notes, and snippets.

@yoursunny
Last active March 19, 2022 05:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yoursunny/e4b55e8df742a77a91454815f71bfd28 to your computer and use it in GitHub Desktop.
Save yoursunny/e4b55e8df742a77a91454815f71bfd28 to your computer and use it in GitHub Desktop.
NDN Video Streaming on the ndn6 Network https://yoursunny.com/t/2021/NDN-video-ndn6/
*.mmdb
*.ndjson
.vscode
__pycache__

NDN Video Streaming on the ndn6 Network

This gist contains code and input data from blog article NDN Video Streaming on the ndn6 Network.

To run this script:

  1. pipenv install
  2. Download MaxMind GeoLite2-ASN.mmdb and GeoLite2-City.mmdb
  3. ./process.sh
#!/usr/bin/python
import datetime
import ipaddress
import json
import sys
import urllib.parse
import geoip2.database
import ndjson
geoip2asn = geoip2.database.Reader("GeoLite2-ASN.mmdb")
geoip2city = geoip2.database.Reader("GeoLite2-City.mmdb")
writer = ndjson.writer(sys.stdout)
for j in ndjson.reader(sys.stdin):
try:
r = json.loads(urllib.parse.unquote(j["request"]["uri"][1:]))
r["ts"] = j["ts"]
ip = urllib.parse.urlsplit("//" + j["request"]["remote_addr"]).hostname
subnet = ipaddress.IPv4Network((ip, 24), strict=False)
asn = geoip2asn.asn(ip)
city = geoip2city.city(ip)
r["ip"] = str(subnet.network_address)
r["asn"] = asn.autonomous_system_number
r["location"] = [city.location.longitude, city.location.latitude]
r["city_accuracy"] = city.city.geoname_id is not None
r["country"] = city.country.iso_code
r["continent"] = city.continent.code
writer.writerow(r)
except Exception:
pass
#!/usr/bin/python
import sys
from collections import defaultdict
from typing import Any, Dict, List, Set
import ndjson
from ndn.encoding.name import Name
from network import find_router
Record = Dict[str, Any]
class Video(dict):
def __init__(self, name: Name.FormalName):
self.name = name
self["name"] = Name.to_str(name)
self["fetch"] = []
self["playback"] = []
def add_fetch_record(self, j: Record):
j["n"] = Name.to_str(Name.from_str(j["n"])[len(self.name):])
self["fetch"].append(j)
def add_playback_record(self, j: Record):
del j["n"]
self["playback"].append(j)
class Session(dict):
SESS_KEYS = ["sess", "site", "remote", "ip", "asn",
"location", "city_accuracy", "country", "continent"]
def __init__(self):
self.fetch: List[Record] = []
self.playback: List[Record] = []
def add_record(self, j: Record):
for KEY in Session.SESS_KEYS:
self[KEY] = j.pop(KEY, None)
if j["a"] == "P":
del j["a"]
self.playback.append(j)
else:
self.fetch.append(j)
def tag_router(self):
router = find_router(self["remote"])
self["router"] = router
self["router_dist"] = None if router is None \
else router.geodistance(self["location"])
def bin_videos(self):
videos: Dict[bytes, Video] = dict()
unaccounted: List[Record] = []
for j in self.playback:
name = Name.from_str(j["n"])[:-1]
video = videos.setdefault(Name.to_bytes(name), Video(name))
video.add_playback_record(j)
for j in self.fetch:
name = Name.from_str(j["n"])
found = False
for video in videos.values():
if Name.is_prefix(video.name, name):
video.add_fetch_record(j)
found = True
break
if not found:
unaccounted.append(j)
self["V"] = list(videos.values())
self["F"] = unaccounted
sessions: defaultdict[str, Session] = defaultdict(lambda: Session())
for j in ndjson.reader(sys.stdin):
sessions[j["sess"]].add_record(j)
for s in sessions.values():
s.tag_router()
s.bin_videos()
ndjson.dump(sessions.values(), sys.stdout)
#!/usr/bin/python
import ipaddress
import json
import re
import sys
from typing import Any, Dict, List, Optional, Tuple
from urllib.parse import urlsplit
import geoip2.database
import ndjson
from geopy.distance import geodesic
Record = Dict[str, Any]
geoip2asn = geoip2.database.Reader("GeoLite2-ASN.mmdb")
class Router(dict):
def __init__(self, router: str, lonlat: Tuple[float, float]):
self.router = router
self["host"] = self.router
self.lonlat = lonlat
self["location"] = list(reversed(lonlat)) # latlon
self["wss"] = False
self["h3"] = False
def geodistance(self, latlon: List[float]) -> float:
return geodesic(reversed(latlon), self.lonlat).meters
class TestbedRouter(Router):
def __init__(self, j: Record):
router = urlsplit(j["site"]).hostname
lonlat = j.get("_real_position", j["position"])
super().__init__(router=router, lonlat=lonlat)
self["wss"] = j["ws-tls"]
for ipAddr in j["ip_addresses"]:
try:
ip = str(ipaddress.IPv4Address(ipAddr))
self["asn"] = geoip2asn.asn(ip).autonomous_system_number
break
except Exception:
pass
class ndn6Router(Router):
def __init__(self, router: str, asn: int, transport: str, latlon: Tuple[float, float]):
super().__init__(router=router, lonlat=list(reversed(latlon)))
self[transport] = True
self["asn"] = asn
network: Dict[str, Router] = dict()
with open("testbed-nodes.json") as testbedNodesData:
for j in json.load(testbedNodesData).values():
try:
router = TestbedRouter(j)
network[router.router] = router
except Exception:
continue
network["lax.quic.g.ndn.today"] = ndn6Router(
"lax.quic.g.ndn.today", 36352, "h3", (-118.2437, 34.0522))
network["dal.quic.g.ndn.today"] = ndn6Router(
"dal.quic.g.ndn.today", 13830, "h3", (-96.797, 32.7767))
network["mia.quic.g.ndn.today"] = ndn6Router(
"mia.quic.g.ndn.today", 399804, "h3", (-80.1918, 25.7617))
network["buf.quic.g.ndn.today"] = ndn6Router(
"buf.quic.g.ndn.today", 36352, "h3", (-78.8784, 42.8864))
network["lil.quic.g.ndn.today"] = ndn6Router(
"lil.quic.g.ndn.today", 16276, "h3", (3.1778, 50.6927))
network["muc.ws.g.ndn.today"] = ndn6Router(
"muc.ws.g.ndn.today", 202401, "wss", (11.582, 48.1351))
network["waw.quic.g.ndn.today"] = ndn6Router(
"waw.quic.g.ndn.today", 201814, "h3", (21.0122, 52.2297))
network["sin.quic.g.ndn.today"] = ndn6Router(
"sin.quic.g.ndn.today", 59253, "h3", (103.8198, 1.3521))
network["nrt.quic.g.ndn.today"] = ndn6Router(
"nrt.quic.g.ndn.today", 31898, "h3", (139.769, 35.6804))
network["nrt.ws.g.ndn.today"] = ndn6Router(
"nrt.ws.g.ndn.today", 31898, "wss", (139.769, 35.6804))
reWssHttps = re.compile(r"(?:wss|https):[^)]+")
def find_router(remote: Optional[str]) -> Optional[Router]:
if remote is None:
return None
m = reWssHttps.search(remote)
if m is None:
return None
return network.get(urlsplit(m[0]).hostname)
if __name__ == "__main__":
writer = ndjson.writer(sys.stdout)
for router in network.values():
writer.writerow(router)
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[pipenv]
allow_prereleases = true
[packages]
geoip2 = "~=4.4.0"
geopy = "~=2.2.0"
ndjson = "~=0.3.1"
python-ndn = "==0.3a1.post4"
[dev-packages]
autopep8 = "*"
isort = "*"
[requires]
python_version = "3.9"
[scripts]
lint = "bash -c \"autopep8 -i *.py && isort *.py\""
{
"_meta": {
"hash": {
"sha256": "d4db76c1df8288ec270171a6e6462b5629cbfd258810187fa59988b72c11ba2a"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.9"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"aenum": {
"hashes": [
"sha256:1f92fb906e3d745064e85f9a1937006ee341e00a35ecd8b7f899041b8e1d67d7",
"sha256:87f0e9ef4f828578ab06af30e4d7944043bf4ecd3f4b7bd1cbe37e2173cde94a",
"sha256:f8401f1a258436719ed013444ab37ff22a72517e0e3097058dd1511cf284447c"
],
"version": "==3.1.0"
},
"aiohttp": {
"hashes": [
"sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe",
"sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe",
"sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5",
"sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8",
"sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd",
"sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb",
"sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c",
"sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87",
"sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0",
"sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290",
"sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5",
"sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287",
"sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde",
"sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf",
"sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8",
"sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16",
"sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf",
"sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809",
"sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213",
"sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f",
"sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013",
"sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b",
"sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9",
"sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5",
"sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb",
"sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df",
"sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4",
"sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439",
"sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f",
"sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22",
"sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f",
"sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5",
"sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970",
"sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009",
"sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc",
"sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a",
"sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95"
],
"markers": "python_version >= '3.6'",
"version": "==3.7.4.post0"
},
"async-timeout": {
"hashes": [
"sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f",
"sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"
],
"markers": "python_full_version >= '3.5.3'",
"version": "==3.0.1"
},
"attrs": {
"hashes": [
"sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1",
"sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==21.2.0"
},
"certifi": {
"hashes": [
"sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee",
"sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"
],
"version": "==2021.5.30"
},
"chardet": {
"hashes": [
"sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa",
"sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==4.0.0"
},
"charset-normalizer": {
"hashes": [
"sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6",
"sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"
],
"markers": "python_version >= '3'",
"version": "==2.0.6"
},
"geographiclib": {
"hashes": [
"sha256:8f441c527b0b8a26cd96c965565ff0513d1e4d9952b704bf449409e5015c77b7",
"sha256:ac400d672b8954b0306bca890b088bb8ba2a757dc8133cca0b878f34b33b2740"
],
"version": "==1.52"
},
"geoip2": {
"hashes": [
"sha256:f150bed3190d543712a17467208388d31bd8ddb49b2226fba53db8aaedb8ba89",
"sha256:f9172cdfb2a5f9225ace5e30dd7426413ad28798a5f474cd1538780686bd6a87"
],
"index": "pypi",
"version": "==4.4.0"
},
"geopy": {
"hashes": [
"sha256:58b7edf526b8c32e33126570b5f4fcdfaa29d4416506064777ae8d84cd103fdd",
"sha256:8f1f949082b964385de61fcc3a667a6a9a6e242beb1ae8972449f164b2ba0e89"
],
"index": "pypi",
"version": "==2.2.0"
},
"idna": {
"hashes": [
"sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a",
"sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"
],
"markers": "python_version >= '3'",
"version": "==3.2"
},
"maxminddb": {
"hashes": [
"sha256:e37707ec4fab115804670e0fb7aedb4b57075a8b6f80052bdc648d3c005184e5"
],
"markers": "python_version >= '3.6'",
"version": "==2.2.0"
},
"multidict": {
"hashes": [
"sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a",
"sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93",
"sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632",
"sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656",
"sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79",
"sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7",
"sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d",
"sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5",
"sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224",
"sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26",
"sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea",
"sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348",
"sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6",
"sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76",
"sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1",
"sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f",
"sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952",
"sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a",
"sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37",
"sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9",
"sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359",
"sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8",
"sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da",
"sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3",
"sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d",
"sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf",
"sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841",
"sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d",
"sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93",
"sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f",
"sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647",
"sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635",
"sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456",
"sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda",
"sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5",
"sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281",
"sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"
],
"markers": "python_version >= '3.6'",
"version": "==5.1.0"
},
"ndjson": {
"hashes": [
"sha256:839c22275e6baa3040077b83c005ac24199b94973309a8a1809be962c753a410",
"sha256:bf9746cb6bb1cb53d172cda7f154c07c786d665ff28341e4e689b796b229e5d6"
],
"index": "pypi",
"version": "==0.3.1"
},
"pycryptodomex": {
"hashes": [
"sha256:041cbde579b3e044ea1b24ff16e4a2d84eacdfd925a96bca21707df0953d1f94",
"sha256:04299f783efa97f540e1fe72e6ee332614778c72ccabc2e84452435a5768748e",
"sha256:08095bbbb536a817247411e28deaf67fc29a00ca0a099464ba2cfaa34f5999dd",
"sha256:0e1b6dfe40e98a4f0368fa4df4c6f61ef8ed1d505efc8c1d5936e0091a127da6",
"sha256:1339bc64209135b004916978e5d56bf14166fda78e68338a72427e0d3b92ea98",
"sha256:1ad37bae59782e864317725da11cd9f9bc4e6def1e68f673054e0e855ceef9ac",
"sha256:22838f744833bd5befb6b9b55c50e255b39fa3cb2c7d28c2d9e903f222f8cc4c",
"sha256:56e99b06ee238c353cd538058ce05fa2bc34bd819dfd21c1026ed9271ba98962",
"sha256:5f88c0808b356ffeef1243e97a042b2c767f076325d50472da696f359a6afa29",
"sha256:6cd44aca92f997c049050a6d2048a3009068dfe34830f76964019679c727fe40",
"sha256:784b39e5c4d6331f559036b0efc8593d3336a6e6a0db86997fe2679bc84a3a82",
"sha256:7a32f4d69ee69d72c54d9d5f7b3810212d5dca76aa97a850884bd8b0636411fa",
"sha256:82ee08933c2b682cf55a229851c7d69767d307f33f05b1f05a09f207cbb25308",
"sha256:8c2b3ac851227dc4ffc1aa006d3ec971c8f8fa212409538e4d6b311fa77be97f",
"sha256:911722bce054221f6411f1e5a790962a0e2beb6eb9647f83fd3b4ca06de6d5b6",
"sha256:99f925b9a1c6a62f03385e0c14f8fd55d2366bb47fd8c3ccd82764c4f39aa5b5",
"sha256:9a3926b38f0ae61b72472acda1aac00f7b54875ecc1cb6bdd07da6cc02006416",
"sha256:9dae6c26803e04cac1aa4144d0f3ec4f9984c10449208eed430c98c63776d0d0",
"sha256:9e628383788eac3f661798c01121029a60722a0922b3e903ea88be3065231256",
"sha256:a68871322ece62fea85ba63c16c5d0fb150be723e71cb879b6fd011c38afc502",
"sha256:a75f9ba6d01e9b21b0f40079646c10b0a7fc1404dcf756731afd137b1f9b109a",
"sha256:ac33233c2a1c6dc7279b4b1db7c534bdf4b9c2252290a3c4a86d21443712c2c7",
"sha256:acd3498a8ccf8ad20ce7daa5f7f5e6521465eeceb026f28a6adb0228dd9fcc6e",
"sha256:c07f8cad7b2597357291f144a07c0120399bc0a1ee5ca0c6b2af52691ad2a22a",
"sha256:c1888507549eccedd0fff20dfa70c95b3848bf5b4fe2da1c971ee3ee646675d9",
"sha256:c905625a65f2b05c9d1c4be8c182f34ee274d704441c3cc57f440097ccc63dc3",
"sha256:cb585c23505bc6a6c51d91830ea15bb28369ecab6301ab3e8f0474b5c651c064",
"sha256:e767c7a84d7eff2294ea488dfd1b9583b886f95cd521c59495f0266c7d967e1f",
"sha256:ea3e634623ff41a9471517a9a3735821d91cfc97b8b803522e9fd96c1a094568",
"sha256:fb72db4db594398c8b59caacfe9aa8c269c5cc41b4cdd20b471b6490ba60256d"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==3.10.4"
},
"pygtrie": {
"hashes": [
"sha256:43205559d28863358dbbf25045029f58e2ab357317a59b11f11ade278ac64692"
],
"version": "==2.4.2"
},
"python-ndn": {
"hashes": [
"sha256:bcca376d3b4c4ccf615a50b8544126ea15135e8fd3d0a9fa679c1b288e7591f0",
"sha256:feb75a88bba3835da3c0fda358e56e2b3ece682dc0de70ca633af0ac013e9c3c"
],
"index": "pypi",
"version": "==0.3a1.post4"
},
"requests": {
"hashes": [
"sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24",
"sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
"version": "==2.26.0"
},
"typing-extensions": {
"hashes": [
"sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e",
"sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7",
"sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"
],
"version": "==3.10.0.2"
},
"urllib3": {
"hashes": [
"sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece",
"sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
"version": "==1.26.7"
},
"yarl": {
"hashes": [
"sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e",
"sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434",
"sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366",
"sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3",
"sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec",
"sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959",
"sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e",
"sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c",
"sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6",
"sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a",
"sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6",
"sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424",
"sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e",
"sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f",
"sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50",
"sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2",
"sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc",
"sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4",
"sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970",
"sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10",
"sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0",
"sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406",
"sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896",
"sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643",
"sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721",
"sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478",
"sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724",
"sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e",
"sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8",
"sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96",
"sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25",
"sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76",
"sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2",
"sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2",
"sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c",
"sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a",
"sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"
],
"markers": "python_version >= '3.6'",
"version": "==1.6.3"
}
},
"develop": {
"autopep8": {
"hashes": [
"sha256:276ced7e9e3cb22e5d7c14748384a5cf5d9002257c0ed50c0e075b68011bb6d0",
"sha256:aa213493c30dcdac99537249ee65b24af0b2c29f2e83cd8b3f68760441ed0db9"
],
"index": "pypi",
"version": "==1.5.7"
},
"isort": {
"hashes": [
"sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899",
"sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"
],
"index": "pypi",
"version": "==5.9.3"
},
"pycodestyle": {
"hashes": [
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068",
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.7.0"
},
"toml": {
"hashes": [
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b",
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
],
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==0.10.2"
}
}
}
#!/bin/bash
set -eo pipefail
if ! [[ -f network.ndjson ]]; then
pipenv run python network.py > network.ndjson
fi
if ! [[ -f logs.ndjson ]]; then
zcat ndnts-video-beacon-2021-07010815.log.gz | pipenv run python decode.py > logs.ndjson
fi
if ! [[ -f sessions.ndjson ]]; then
pipenv run python group.py < logs.ndjson > sessions.ndjson
fi
# session continent and transport kind
jq -sc 'group_by(.continent)[] | [
.[0].continent,
(map(select(.router.h3)) | length),
(map(select(.router.wss)) | length),
(map(select(.router==null)) | length)
]' sessions.ndjson > continent-h3-wss-null.ndjson
# HTTP/3 gateway and continent count
jq -sc 'map(select(.router.h3)) | group_by(.remote)[] | [
.[0].remote,
([group_by(.continent)[] | {
key: .[0].continent,
value: (. | length)
}] | from_entries)
]' sessions.ndjson > h3-continent.ndjson
# interval resolution by continent
jq -sc '
def resolutions_in_continent(continent):
. as $logs |
continent as $continent |
[null,240,360,480,720][] | . as $r |
[
$logs[] | select(.continent==$continent) | .V[].playback[] |
select(if $r==720 then .r>=$r else .r==$r end)
] | length
;
map(select(.router.wss)) as $wss |
map(select(.router.h3)) as $h3 |
map(.continent) | unique[] as $continent | {
$continent,
wss: [$wss | resolutions_in_continent($continent)],
h3: [$h3 | resolutions_in_continent($continent)]
}' sessions.ndjson > resolution-continent.ndjson
# startup latency CDF in top continents
jq -sc '
def latency_cdf_in_continent(continent):
. as $logs |
continent as $continent |
[
$logs[] | select(.continent==$continent) |
.V[].playback[-1].tl | select(.!=null)
] | sort
;
map(select(.router.wss)) as $wss |
map(select(.router.h3)) as $h3 |
null | {
EU_WSS: $wss | latency_cdf_in_continent("EU"),
EU_H3: $h3 | latency_cdf_in_continent("EU"),
NA_WSS: $wss | latency_cdf_in_continent("NA"),
NA_H3: $h3 | latency_cdf_in_continent("NA"),
AS_WSS: $wss | latency_cdf_in_continent("AS"),
AS_H3: $h3 | latency_cdf_in_continent("AS"),
}' sessions.ndjson > startup-continent.ndjson
# interval resolution by ndn6 router
jq -sc '
def resolutions_of_router(router; site):
. as $logs |
router as $router |
[null,240,360,480,720][] | . as $r |
[
$logs[] | select(.router.host==$router and site) | .V[].playback[] |
select(if $r==720 then .r>=$r else .r==$r end)
] | length
;
. as $logs |
map(.router.host) | unique[] | select(.//"" | endswith(".g.ndn.today")) as $router | {
$router,
demo: [$logs | resolutions_of_router($router; .V[0].name//"" | startswith("/ndn/web/video"))],
pushups: [$logs | resolutions_of_router($router; .V[0].name//"" | startswith("/yoursunny"))]
}' sessions.ndjson > resolution-router.ndjson
This file has been truncated, but you can view the full file.
{
"UNIVH2C": {
"ws-tls": false,
"neighbors": [
"WU",
"LACL",
"UFBA",
"PADUA",
"COPELABS",
"URJC"
],
"hr_radius": "15.7232",
"name": "University Hassan II Casablanca",
"ip_addresses": [
"196.200.164.99"
],
"backbone": false,
"fch-enabled": false,
"site": "http://196.200.164.99:80/",
"prefix": "ndn:/ndn/ma/univh2c",
"ndn-up": false,
"https": "https://196.200.164.99:443/",
"memsize": "unknown",
"position": [
33.5,
-7.2
],
"shortname": "UNIVH2C",
"hr_angle": "3.03408"
},
"AWS-US-W-2": {
"ws-tls": false,
"neighbors": [],
"name": "AWS US West 2 Region, Oregon",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
44.1,
-123.1
],
"shortname": "AWS-US-W-2"
},
"MINHO": {
"ws-tls": false,
"neighbors": [
"AVEIRO",
"CORUNA",
"COPELABS",
"BASEL",
"URJC",
"PADUA"
],
"hr_radius": "16.2060",
"name": "University oh Minho",
"ip_addresses": [
"193.136.9.206"
],
"backbone": false,
"fch-enabled": true,
"site": "http://netlab.gcom.di.uminho.pt:80/",
"_real_position": [
41.8,
-8.2
],
"prefix": "ndn:/ndn/pt/uminho",
"ndn-up": true,
"https": "https://netlab.gcom.di.uminho.pt:443/",
"memsize": "4G",
"position": [
41.8,
-8.2
],
"shortname": "MINHO",
"hr_angle": "2.62083"
},
"MUMBAI_AWS": {
"ws-tls": true,
"neighbors": [
"WU",
"AFA",
"UUM"
],
"hr_radius": "12.8934",
"name": "MUMBAI gateway at AWS in Mumbai, India",
"ip_addresses": [
"13.126.132.174"
],
"backbone": false,
"fch-enabled": true,
"site": "http://mumbai.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/aws/mumbai",
"ndn-up": true,
"https": "https://mumbai.testbed.named-data.net:443/",
"memsize": "1G",
"position": [
19.0,
73.2
],
"shortname": "MUMBAI_AWS",
"hr_angle": "2.95081"
},
"MSU": {
"ws-tls": false,
"neighbors": [
"UUM",
"SRRU",
"UCLA",
"TNO",
"ANYANG"
],
"hr_radius": "19.6533",
"name": "Mahasarakham University, Thailand",
"ip_addresses": [
"202.28.34.249"
],
"backbone": false,
"fch-enabled": false,
"site": "http://msu.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/th/ac/msu",
"ndn-up": false,
"https": "https://msu.testbed.named-data.net:443/",
"memsize": "unknown",
"position": [
17.3,
103.7
],
"shortname": "MSU",
"hr_angle": "3.64135"
},
"AVEIRO": {
"ws-tls": false,
"neighbors": [
"WU",
"URJC",
"MINHO",
"COPELABS",
"AFA"
],
"hr_radius": "16.2060",
"name": "University Aveiro",
"ip_addresses": [
"193.136.92.155"
],
"backbone": false,
"fch-enabled": true,
"site": "http://selficn.av.it.pt:80/",
"prefix": "ndn:/ndn/pt/it/av",
"ndn-up": true,
"https": "https://selficn.av.it.pt:443/",
"memsize": "4G",
"position": [
40.6,
-9.0
],
"shortname": "AVEIRO",
"hr_angle": "2.62081"
},
"BASEL": {
"ws-tls": true,
"neighbors": [
"BERN",
"TNO",
"MINHO",
"PADUA",
"LIP6",
"URJC"
],
"hr_radius": "13.2717",
"name": "University of Basel",
"ip_addresses": [
"192.43.193.111"
],
"backbone": false,
"fch-enabled": true,
"site": "http://dmi-ndn-testbed1.dmi.unibas.ch:80/",
"prefix": "ndn:/ndn/ch/unibas",
"ndn-up": true,
"https": "https://dmi-ndn-testbed1.dmi.unibas.ch:443/",
"memsize": "2G",
"position": [
47.55858,
7.5836
],
"shortname": "BASEL",
"hr_angle": "2.41932"
},
"DELFT": {
"ws-tls": true,
"neighbors": [
"TNO",
"QUB",
"LIP6",
"WU"
],
"hr_radius": "19.4725378752518",
"name": "Delft University of Technology, Netherlands",
"ip_addresses": [
"131.180.178.63"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndn-testbed.ewi.tudelft.nl:80/",
"prefix": "ndn:/ndn/nl/delft",
"ndn-up": true,
"https": "https://ndn-testbed.ewi.tudelft.nl:443/",
"memsize": "4G",
"position": [
52.0,
4.4
],
"shortname": "DELFT",
"hr_angle": "2.46092086856031"
},
"WU": {
"ws-tls": true,
"neighbors": [
"DELFT",
"MML1",
"BERN",
"QUB",
"WU2",
"MUMBAI_AWS",
"AVEIRO",
"UNIVH2C",
"UFBA",
"CORUNA",
"UCLACS",
"UCLA",
"URJC",
"ARIZONA",
"MEMPHIS",
"UIUC"
],
"hr_radius": "19.4268",
"name": "Washington University in St. Louis",
"ip_addresses": [
"128.252.153.194"
],
"backbone": false,
"fch-enabled": true,
"site": "http://wundngw.arl.wustl.edu:80/",
"_real_position": [
38.6490701,
-90.3033471
],
"prefix": "ndn:/ndn/edu/wustl",
"ndn-up": true,
"https": "https://wundngw.arl.wustl.edu:443/",
"memsize": "2G",
"position": [
38.1490701,
-90.3033471
],
"shortname": "WU",
"hr_angle": "4.31067"
},
"NEU": {
"ws-tls": false,
"neighbors": [
"QUB",
"SAVI",
"MICHIGAN",
"MEMPHIS"
],
"hr_radius": "19.9001",
"name": "Northeastern University",
"ip_addresses": [
"129.10.224.42"
],
"backbone": false,
"fch-enabled": true,
"site": "http://neu.testbed.named-data.net:80/",
"_real_position": [
42.3398783,
-71.0887358
],
"prefix": "ndn:/ndn/edu/neu",
"ndn-up": true,
"https": "https://neu.testbed.named-data.net:443/",
"memsize": "unknown",
"position": [
42.7,
-71.0887358
],
"shortname": "NEU",
"hr_angle": "2.13894"
},
"AWS-EU-W-2": {
"ws-tls": false,
"neighbors": [],
"name": "AWS EU West 2 Region, London",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
51.5,
0.1
],
"shortname": "AWS-EU-W-2"
},
"AWS-EU-W-1": {
"ws-tls": false,
"neighbors": [],
"name": "AWS EU West 1 Region, Ireland",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
53.5,
-7.0
],
"shortname": "AWS-EU-W-1"
},
"AWS-AP-SE-1": {
"ws-tls": false,
"neighbors": [],
"name": "AWS AP SouthEast 1 Region, Singapore",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
1.4,
103.8
],
"shortname": "AWS-AP-SE-1"
},
"AWS-US-W-1": {
"ws-tls": false,
"neighbors": [],
"name": "AWS US West 1 Region, N. California",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
41.1,
-121.4
],
"shortname": "AWS-US-W-1"
},
"UASLP": {
"ws-tls": false,
"neighbors": [
"UFBA",
"ARIZONA",
"MEMPHIS"
],
"hr_radius": "19.0473",
"name": "Universidad Aut\u00f3noma de San Luis Potos\u00ed",
"ip_addresses": [
"148.224.92.99"
],
"backbone": false,
"fch-enabled": false,
"site": "http://uaslp.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/mx/uaslp",
"ndn-up": true,
"https": "https://uaslp.testbed.named-data.net:443/",
"memsize": "8B",
"position": [
22.0,
-100.5
],
"shortname": "UASLP",
"hr_angle": "2.96488"
},
"UIUC": {
"ws-tls": false,
"neighbors": [
"MICHIGAN",
"CSU",
"WU",
"PADUA"
],
"hr_radius": "29.2553",
"name": "University of Illinois, Urbana-Champaign",
"ip_addresses": [
"72.36.112.82"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndnx.cs.illinois.edu:80/",
"_real_position": [
40.1026039,
-88.23171080000002
],
"prefix": "ndn:/ndn/edu/illinois",
"ndn-up": false,
"https": "https://ndnx.cs.illinois.edu:443/",
"memsize": "8G",
"position": [
40.6026039,
-88.23171080000002
],
"shortname": "UIUC",
"hr_angle": "2.98231"
},
"COPELABS": {
"ws-tls": false,
"neighbors": [
"UNIVH2C",
"AFA",
"UFBA",
"AVEIRO",
"MINHO",
"LIP6",
"URJC",
"PADUA"
],
"hr_radius": "16.2060",
"name": "COPELABS, University Lusofona",
"ip_addresses": [
"193.137.75.171"
],
"backbone": false,
"fch-enabled": false,
"site": "http://copelabs.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/pt/ulusofona/copelabs",
"ndn-up": true,
"https": "https://copelabs.testbed.named-data.net:443/",
"memsize": "1G",
"position": [
38.6,
-9.0
],
"shortname": "COPELABS",
"hr_angle": "2.62082"
},
"AWS-AP-SE-2": {
"ws-tls": false,
"neighbors": [],
"name": "AWS AP SouthEast 2 Region, Sydney",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
-33.9,
151.0
],
"shortname": "AWS-AP-SE-2"
},
"AWS-AP-NE-1": {
"ws-tls": false,
"neighbors": [],
"name": "AWS AP NorthEast 1 Region, Tokyo",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"_real_position": [
35.6,
139.9
],
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
35.0,
140.9
],
"shortname": "AWS-AP-NE-1"
},
"PADUA": {
"ws-tls": true,
"neighbors": [
"UNIVH2C",
"AFA",
"MINHO",
"COPELABS",
"URJC",
"UIUC",
"BASEL"
],
"hr_radius": "13.5903",
"name": "University of Padua",
"ip_addresses": [
"147.162.114.18"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndnnode.math.unipd.it:80/",
"prefix": "ndn:/ndn/it/unipd",
"ndn-up": true,
"https": "https://ndnnode.math.unipd.it:443/",
"memsize": "unknown",
"position": [
45.35858,
11.7836
],
"shortname": "PADUA",
"hr_angle": "1.13934"
},
"LIP6": {
"ws-tls": true,
"neighbors": [
"TNO",
"MML2",
"SAVI",
"QUB",
"LACL",
"BERN",
"COPELABS",
"BASEL",
"URJC",
"MICHIGAN"
],
"hr_radius": "29.2553",
"name": "University Pierre et Marie Curie, Sorbonne Universities LIP6",
"ip_addresses": [
"132.227.62.163",
"2001:660:3302:282c:160::163"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndnhub.ipv6.lip6.fr:80/",
"_real_position": [
48.86,
2.34
],
"prefix": "ndn:/ndn/fr/lip6",
"ndn-up": true,
"https": "https://ndnhub.ipv6.lip6.fr:443/",
"memsize": "4G",
"position": [
48.86,
2.34
],
"shortname": "LIP6",
"hr_angle": "2.62295"
},
"ANYANG": {
"ws-tls": false,
"neighbors": [
"SRRU",
"MSU",
"OSAKA",
"WASEDA",
"UCLA"
],
"hr_radius": "14.3378",
"name": "Anyang University",
"ip_addresses": [
"210.114.89.49"
],
"backbone": false,
"fch-enabled": false,
"site": "http://anyang.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/kr/anyang",
"ndn-up": true,
"https": "https://anyang.testbed.named-data.net:443/",
"memsize": "48G",
"position": [
37.7,
127.0
],
"shortname": "ANYANG",
"hr_angle": "2.99956"
},
"UFBA": {
"ws-tls": true,
"neighbors": [
"WU",
"UNIVH2C",
"UASLP",
"MEMPHIS",
"COPELABS"
],
"hr_radius": "29.2553",
"name": "Federal University of Bahia, Brazil",
"ip_addresses": [
"200.128.51.61"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ufba.testbed.named-data.net:80/",
"prefix": "ndn:/ndn/br/ufba",
"ndn-up": true,
"https": "https://ufba.testbed.named-data.net:443/",
"memsize": "unknown",
"position": [
-3.7,
-49.6
],
"shortname": "UFBA",
"hr_angle": "3.51898"
},
"URJC": {
"ws-tls": true,
"neighbors": [
"UNIVH2C",
"AVEIRO",
"CORUNA",
"MINHO",
"COPELABS",
"PADUA",
"BASEL",
"WU",
"LIP6"
],
"hr_radius": "13.6888",
"name": "Universidad Rey Juan Carlos (King Juan Carlos University)",
"ip_addresses": [
"193.147.79.41"
],
"backbone": false,
"fch-enabled": true,
"site": "http://insula.gsyc.es:80/",
"_real_position": [
40.3359,
-3.8732
],
"prefix": "ndn:/ndn/es/urjc",
"ndn-up": true,
"https": "https://insula.gsyc.es:443/",
"memsize": "24G",
"position": [
41.3359,
-3.8732
],
"shortname": "URJC",
"hr_angle": "1.17169"
},
"AWS-SA-E-1": {
"ws-tls": false,
"neighbors": [],
"name": "AWS SA East 1 Region, Sao Paolo",
"ip_addresses": [
""
],
"backbone": false,
"fch-enabled": false,
"site": "http://0.0.0.0:80/",
"ndn-up": false,
"https": "https://0.0.0.0:443/",
"memsize": "unknown",
"position": [
-23.2,
-45.0
],
"shortname": "AWS-SA-E-1"
},
"LACL": {
"ws-tls": false,
"neighbors": [
"BERN",
"LIP6",
"UNIVH2C"
],
"hr_radius": "12.5144",
"name": "Laboratoire D'Algorithmique, Complexite et Logique (LACL), Universite Paris-Est Creteil",
"ip_addresses": [
"193.48.143.172"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndn.lacl.fr:80/",
"_real_position": [
48.5,
2.21
],
"prefix": "ndn:/ndn/fr/lacl",
"ndn-up": false,
"https": "https://ndn.lacl.fr:443/",
"memsize": "unknown",
"position": [
47.5,
2.5
],
"shortname": "LACL",
"hr_angle": "2.62296"
},
"MICHIGAN": {
"ws-tls": false,
"neighbors": [
"SAVI",
"CSU",
"UIUC",
"MEMPHIS",
"NEU",
"LIP6"
],
"hr_radius": "17.7738",
"name": "University Michigan",
"ip_addresses": [
"198.111.224.197"
],
"backbone": false,
"fch-enabled": true,
"site": "http://michigan.testbed.named-data.net:80/",
"_real_position": [
42.3026039,
-83.7
],
"prefix": "ndn:/ndn/edu/umich",
"ndn-up": false,
"https": "https://michigan.testbed.named-data.net:443/",
"memsize": "4G",
"position": [
42.3026039,
-83.7
],
"shortname": "MICHIGAN",
"hr_angle": "2.98018"
},
"AFA": {
"ws-tls": true,
"neighbors": [
"AVEIRO",
"MUMBAI_AWS",
"PADUA",
"COPELABS",
"BERN"
],
"hr_radius": "10.3354",
"name": "AFA Systems",
"ip_addresses": [
"93.42.157.82"
],
"backbone": false,
"fch-enabled": true,
"site": "http://93-42-157-82.ip87.fastwebnet.it:80/",
"prefix": "ndn:/ndn/it/afasystems",
"ndn-up": true,
"https": "https://93-42-157-82.ip87.fastwebnet.it:443/",
"memsize": "4G",
"position": [
42.1,
14.5
],
"shortname": "AFA",
"hr_angle": "1.12640"
},
"MML1": {
"ws-tls": true,
"neighbors": [
"WU",
"MEMPHIS"
],
"hr_radius": "14.1225",
"name": "Athens University of Economics and Business, Greece",
"ip_addresses": [
"195.251.234.11"
],
"backbone": false,
"fch-enabled": true,
"site": "http://mmlab-aueb-1.mmlab.edu.gr:80/",
"_real_position": [
37.9942,
23.7326
],
"prefix": "ndn:/ndn/gr/edu/mmlab1",
"ndn-up": true,
"https": "http://mmlab-aueb-1.mmlab.edu.gr:443/",
"memsize": "2G",
"position": [
38.9942,
24.7326
],
"shortname": "MML1",
"hr_angle": "3.01596"
},
"CORUNA": {
"ws-tls": true,
"neighbors": [
"URJC",
"MINHO",
"WU"
],
"hr_radius": "13.6888",
"name": "Universidade da Coruna",
"ip_addresses": [
"193.144.50.247"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndn.gtec.udc.es:80/",
"prefix": "ndn:/ndn/es/udc",
"ndn-up": true,
"https": "https://ndn.gtec.udc.es:443/",
"memsize": "2G",
"position": [
43.3,
-8.2
],
"shortname": "CORUNA",
"hr_angle": "1.17180"
},
"WASEDA": {
"ws-tls": false,
"neighbors": [
"OSAKA",
"ANYANG",
"ARIZONA"
],
"hr_radius": "19.3583",
"name": "Waseda University",
"ip_addresses": [
"133.9.67.98"
],
"backbone": false,
"fch-enabled": true,
"site": "http://ndn-tb.nz.comm.waseda.ac.jp:80/",
"_real_position": [
35.7092,
139.7193
],
"prefix": "ndn:/ndn/jp/waseda",
"ndn-up": true,
"https": "https://ndn-tb.nz.comm.waseda.ac.jp:443/",
"memsize": "unknown",
"position": [
35.8092,
139.7193
],
"shortname": "WASEDA",
"hr_angle": "2.99935"
},
"CSU": {
"ws-tls": false,
"neighbors": [
"ARIZONA",
"UCLA",
"MICHIGAN",
"UIUC"
],
"hr_radius": "14.1056",
"name": "Colorado State University",
"ip_addresses": [
"129.82.138.48"
],
"backbone": false,
"fch-enabled": true,
"site": "http://mccoy.netsec.colostate.edu:80/",
"prefix": "ndn:/ndn/edu/colostate",
"ndn-up": false,
"https": "https://mccoy.netsec.colostate.edu:443/",
"memsize": "4G",
"position": [
40.5747175,
-105.0848293
],
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment