• Smolmesh2 is a mesh network that can route packets over arbitrary peerings.
  • It is a continuation of ittnet (Ileri Teknoloji Toplulugu net), which is confusingly on GitHub as network01.

Packet routing

To communicate with a node, you don’t need to be directly connected to it. As long as there is a path between two nodes, directly or through other peers, you can talk to it.

Route discovery

Here’s what we currently do.

  1. Flood a packet through the network.
  2. Nodes record which peer the packet came from first. This is considered the “fastest path” to that node.
  3. When we want to route a packet to that node, we send it through the peer that is the fastest.

Addressing nodes

In the network, each node is given an IPv6 address. Each node address has the IPv6 prefix fd00:.

There is a translation from human-readable names to IPv6 addresses. This is done by hashing the name with the SPECK cipher.

The reference client supports multiple transports. The default transport uses

Task list

  • Implement WebSocket transport to use with browsers.
  • Packet types to create TCP sockets without using tuntap (for userspace networking without root).
  • Or instead of that use the regular IPv6 packet type, and implement TCP on top. (but TCP is supposedly very complex and tricky to get working)
  • Fix Windows build
    • nix::poll and turning Socket2::Socket into an integer file descriptor don’t work in Windows.