seed-labs / seed-emulator

A Python framework for creating emulation of the Internet.
GNU General Public License v3.0
197 stars 74 forks source link

Client: Visualizing Overlay Network #24

Open kevin-w-du opened 3 years ago

kevin-w-du commented 3 years ago

Priority: LOW

In many cases, we will deploy an overlay network on top of the emulator (such as DNS infrastructure, Botnet, Darknet, Blockchain). I hope to have an option to only display this overlay network. Here are my thoughts (I am using DNS as an example):

The question is how the client program know which node is DNS node, of what type. Do we need to provide some visualization-related information when building the emulator, so we can help the client program?

magicnat commented 3 years ago

We should consider adding a set of API, probably on the Node (routers, hosts) and Network class (internal networks, internet exchanges), for layers, services, or just the emulation itself, to interact/integrate the client UI.

Related: #21.

kevin-w-du commented 3 years ago

For each node, such as Internet Exchange, Network, host, etc. please add a new attribute to these classes, called displayName. This name will only be used in the visualization. Their internal name such as ix100 should not change. When we display a node, if a node's displayName is not empty, we will use this name to display. If it is empty, we will use the node's internal name. This way, we can give each node a meaningful name. For example, we can call an Internet Exchange "Manhattan" to represent the real "Manhattan internet exchange" in the real world.

amdfxlucas commented 7 months ago

@kevin-w-du , @magicnat I made some experience with overlay-network visualisation myself.

What I did is :

What I learned:

Proposal

There should be a number of specified events/messages that the client understands such as:

Here the topic would allow the webapp to distinguish to which of the potentially many overlays an event relates. The webapp could use the topics as a filter to hide/unhide overlays.

canvas000 intra01