~~DISCUSSION~~
====== Network Topology ======
[[wp>Network_topology|Network Topology]] is the arrangement of the elements (links, nodes, etc.) of a communication network.
{{ networktopologies.png?400 }}
Each have their [[https://www.comparitech.com/net-admin/network-topologies-advantages-disadvantages/ |pros and cons]].
===== Current Topology =====
As of November 28, 2021, our network topology (for BC stations only) looks like this:((To zoom in on an image, click on it once to open it in the media manager, then a second time to view it as its own, then use C-%%+%% to zoom in.)),((Each node has two arrows because I counted each connection twice. Once the clients are removed from the list, the diagram will be cleaner.))
{{ 01_current.png }}
Drawn this way, we can outline the RF links through Benson (in blue), and some of the small internet loops:
{{ 02_current.png }}
===== Hybrid System =====
The previous picture had me wonder what a hybrid topology could look like with a star made from the mount Benson RF links, and a ring of internet tunnels around it:
{{ ring_star_hybrid.png }}
A few things to note here:
* Over internet only, the "circumference" of the ring is 30 nodes so the furthest path would be 15 nodes long (all else begin equal).
* Each node on the ring would have two internet paths to any other node (a short path and a long path) so no single node outage could take out the network.
* And each node also has an additional RF path through the centre.
* This configuration has only one internet loop (of 30 nodes) since any other loop goes through the an RF link.
===== Now What? =====
I have no idea whether the Ring-Star hybrid topology would be a good idea or not. And even if it were, it would take quite a bit of coordination to implement. A quick win might be to look at the current topology and make minor adjustments. For example, by making the following changes:
**Remove these links:**
* VE7LSE <-> VE7RBE
* VE7LSE <-> VE7KGV
* VE7LSE <-> VE7GEC
* VE7LSE <-> VA7DXX
* VE7LSE <-> VE7OHM
* VE7TOM <-> VE7PDM
**Add these links:**
* VA7DXX <-> VE7OHM
* VA7DXX <-> VE7ODG
{{ 03_changes.png }}
We'd have the following topology:
{{ 04_proposed.png }}
What do you think? Feel free to use the discussion tool below:
===== Python Script =====
I just finished writing the first working draft of a python script that loads every BC mesh status pages on a given network and builds the list of connected nodes from there. A list that took a few hours of manual work to compile, now takes about a minute and a half.
That list can then be copied into [[https://flowchart.fun/]] to generate the chart.
I still have a few things I want to tweak, but for now it's usable.
--- //[[va7fi@rbox.me|Patrick, VA7FI]] 2021/11/12 13:27//
# -*- coding: utf-8 -*-
"""
LICENSE:
AREDN_topology.py reads all the mesh status pages available on a given network
and builds a list of connections that can be pasted into https://flowchart.fun
Copyright (C) 2021 Patrick Truchon.
This program 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
any later version.
This program 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 this program. If not, see .
VERSION:
* v2021.11.12: First working copy.
"""
import fnmatch
import urllib.request
# User Input
print('Enter the URL of your mesh status page, or simply press Enter to use')
print(' http://VA7FI-HAP-1.local.mesh/cgi-bin/mesh')
MYURL = input() or "http://VA7FI-HAP-1.local.mesh/cgi-bin/mesh"
print("Calculating time...")
# Format URL so that NODE name is in upper case:
MYSTATION = (MYURL.partition("http://")[-1].partition(".local")[0]).upper()
MYURL = "http://" + MYSTATION + ".local.mesh/cgi-bin/mesh"
# Read the content of my page
MYPAGE = urllib.request.urlopen(MYURL).readlines()
# Extract list of URLS for other stations' mesh status pages seen on my page.
URLS = []
i = 0
for i in range(len(MYPAGE)):
line = MYPAGE[i].decode('ascii', 'ignore')
if fnmatch.fnmatch(line, "*local.mesh*/'>*"):
url = (line.partition("")[0]) + \
"cgi-bin/mesh"
if url[7:10] == "VE7" or url[7:10] == "VA7": #Include BC stations only
URLS.append(url)
# Add my URL to the list
URLS.append(MYURL)
URLS.sort() # sort list of websites
# Create list of NODES from list of URLS
NODES = []
for i in range(len(URLS)):
NODE = (URLS[i].partition("http://")[-1].partition(".local")[0])
NODES.append(NODE)
print("It should take about " + str(round(len(URLS)/38, 1)) + \
" minutes to complete.")
print()
# Get NODES connected to each station given by i
i = 0
for i in range(len(URLS)):
#for i in range(8,11):
# Load mesh status page for ith station
page = urllib.request.urlopen(URLS[i]).readlines()
# Get the name of the ith station NODE from the URL
NODE = (URLS[i].partition("http://")[-1].partition(".local")[0])
print(NODE)
j = 0
k = len(page) # set this large for now
conns = []
for j in range(len(page)):
#reset the conntype to empty (it could be 'dtd', 'tun', or empty)
conntype = ""
line = page[j].decode('ascii', 'ignore') #ignore weird characters
# Connected NODES are located on lines after "Current Neibhbors"
if fnmatch.fnmatch(line, "*Current Neighbors*"):
k = j
if fnmatch.fnmatch(line, "*local.mesh*/'>*") and j > k:
if fnmatch.fnmatch(line, "*(*"):
conntype = (line.partition("(")[-1].\
partition(")")[0])+":"
conn = (line.partition("http://")[-1].partition(".local")[0])
if conn in NODES:
fconn = " "+conntype +"("+conn+")"
else:
fconn = " "+conntype +conn
print(fconn)
print()
print(str(i+1)+" NODES have been analyzed.")
print("You can now copy and paste them into: https://flowchart.fun ")
// //
Calculating time...
It should take about 1.2 minutes to complete.
VA7ASI-HOME
dtd:(VA7ASI-SXT5HOME)
tun:(VE7LSE-HAP-1)
VA7ASI-SXT5HOME
dtd:(VA7ASI-HOME)
(VA7ASI-SXT5WORK)
VA7ASI-SXT5WORK
(VA7ASI-SXT5HOME)
dtd:(VA7ASI-WORK)
VA7ASI-WORK
dtd:(VA7ASI-SXT5WORK)
VA7CPM-hAP-YVR
tun:(VE7MRP-hAP-YXC)
VA7DGP-hAP-YVR
tun:(VA7EDU-HAP-YVR)
tun:(VA7ULD-240)
tun,wan:(VE7LE-hAP-YVR)
tun:(VE7MRP-hAP-YXC)
VA7DXX-BENSON-LINK
dtd:(VA7DXX-HAP-1)
(VE7NA-8-Mt-Benson-SE)
VA7DXX-HAP-1
dtd:(VA7DXX-BENSON-LINK)
VA7EDU-HAP-YVR
tun:(VA7DGP-hAP-YVR)
VA7FI-HAP-1
dtd:(VA7FI-LDF5-1)
tun:(VA7ULD-240)
tun:(VE7RBE-HAP-1)
VA7FI-LDF5-1
dtd:(VA7FI-HAP-1)
(VE7NA-8-Mt-Benson-SE)
VA7ILO-HAP-1
tun:(VE7RBE-HAP-1)
VA7MJZ-NODE0
tun:(VE7TOM-HAP)
VA7MPG-HAP-1
tun:(VE7LSE-HAP-1)
VA7TUF-HAP-1
tun:(VE7LSE-HAP-1)
VA7ULD-240
tun:(VA7DGP-hAP-YVR)
tun:(VA7FI-HAP-1)
VA7WPM-HAP-1
tun:(VE7ODG-AR750-1)
VE7AX-2
tun:(VE7TOM-HAP)
VE7BEF-HAP-1
tun:(VE7ODG-AR750-1)
VE7DNR-WOODLEY-RANGE-NW
tun:(VE7DNR-WOODLEY-RANGE-SW)
(VE7ODG-SXTSQ-1)
VE7DNR-WOODLEY-RANGE-SW
tun:(VE7DNR-WOODLEY-RANGE-NW)
(VE7LSE-WOODELY-LINK)
VE7GDE-BENSON-LINK
dtd:(VE7GDE-HAP-1)
(VE7NA-8-Mt-Benson-SE)
VE7GDE-HAP-1
dtd:(VE7GDE-BENSON-LINK)
VE7GEC-HAP-1
tun:(VE7LSE-HAP-1)
tun:(VE7ODG-AR750-1)
VE7HSP-hAP-YVK
tun:(VE7OHM-HAP-YLW)
VE7ITS-GL750-1
tun:(VE7LSE-HAP-1)
VE7KGV-HAP-1
tun:(VE7TOM-HAP)
VE7KOD-LHG5
dtd:(VE7KOD-hpac)
(VE7NA-3-Mt-Benson-NE)
VE7KOD-hpac
dtd:(VE7KOD-LHG5)
tun:(VE7RBE-HAP-1)
tun:(VE7TOM-HAP)
VE7LE-hAP-YVR
tun:(VA7DGP-hAP-YVR)
VE7LSE-HAP-1
tun:(VA7ASI-HOME)
tun:(VA7DXX-HAP-1)
tun:(VA7MPG-HAP-1)
tun:(VA7TUF-HAP-1)
tun:VE6VH-hAP-AREDN
tun:(VE7GEC-HAP-1)
tun:(VE7ITS-GL750-1)
dtd:(VE7LSE-WOODELY-LINK)
tun:(VE7ODG-AR750-1)
tun:(VE7OHM-HAP-YLW)
tun:(VE7RBE-HAP-1)
tun:(VE7TOM-HAP)
VE7LSE-WOODELY-LINK
(VE7DNR-WOODLEY-RANGE-SW)
dtd:(VE7LSE-HAP-1)
VE7MRP-hAP-YXC
tun:(VA7CPM-hAP-YVR)
tun:(VA7DGP-hAP-YVR)
tun:VE6CV-hAP-YQL
tun:(VE7OHM-HAP-YLW)
VE7NA-3-Mt-Benson-NE
(VE7KOD-LHG5)
dtd:(VE7NA-8-Mt-Benson-SE)
(VE7UY)
VE7NA-8-Mt-Benson-SE
(VA7DXX-BENSON-LINK)
(VA7FI-LDF5-1)
(VE7GDE-BENSON-LINK)
dtd:(VE7NA-3-Mt-Benson-NE)
(VE7ODG-BENSON-LINK)
VE7NZR-HAP-1
tun:(VE7RBE-HAP-1)
VE7ODG-AR750-1
tun:(VA7WPM-HAP-1)
tun:(VE7BEF-HAP-1)
tun:(VE7GEC-HAP-1)
tun:(VE7LSE-HAP-1)
tun:(VE7ODG-BENSON-LINK)
tun:(VE7ODG-HAP-1)
tun:(VE7PMD-HAP-1)
VE7ODG-BENSON-LINK
(VE7NA-8-Mt-Benson-SE)
dtd:(VE7ODG-AR750-1)
VE7ODG-HAP-1
tun:(VE7ODG-AR750-1)
VE7ODG-SXTSQ-1
(VE7DNR-WOODLEY-RANGE-NW)
VE7OHM-HAP-YLW
tun:(VA7DGP-hAP-YVR)
tun:VE6VH-hAP-Tunnel
tun:(VE7HSP-hAP-YVK)
tun:(VE7MRP-hAP-YXC)
VE7PMD-HAP-1
tun:(VE7ODG-AR750-1)
tun:(VE7TOM-HAP)
VE7RBE-HAP-1
tun:(VA7FI-HAP-1)
tun:(VA7ILO-HAP-1)
tun:(VE7KOD-hpac)
tun:(VE7LSE-HAP-1)
tun:(VE7NZR-HAP-1)
tun:(VE7TBP-HAP-1)
VE7TBP-HAP-1
tun:(VE7RBE-HAP-1)
VE7TOM-HAP-1
(VE7TOM-HAP)
VE7TOM-HAP
tun,wan:(VA7MJZ-NODE0)
tun:(VE7AX-2)
tun:(VE7KGV-HAP-1)
tun:(VE7KOD-hpac)
tun:(VE7LSE-HAP-1)
tun:(VE7PMD-HAP-1)
(VE7TOM-HAP-1)
VE7UY
(VE7NA-3-Mt-Benson-NE)
47 nodes have been analyzed.
You can now copy and paste them into: https://flowchart.fun
\\