Hey! so I kinda lost today- did none of the work I was supposed to do- but here’s what I found:
A) MeshKit/Opengarden stuff and almost everything else is closed-source.
HOWEVER, batman-adv is open source, has been part of the official linux tree since 2.6.33, and:
- supports connections via Bluetooth or Wifi (of course)
- has 2 different node runmodes
- master: integral to the network, higher power draw, constantly talking to each other, propogates data along
- slave: essentially a leech- only ever demands things from the nearest master, not constantly polling/talking
- master nodes can also be a “gateway” to connect the batman-adv net to more regular internet architecture (for example, your local Starbucks wifi or willing civillian participants)
- is still seeing active development (with nightly builds)
note that because it is already in the official linux tree, Any Android version since Honeycomb (so 3+) should support it? I think it may depend on how the binary was built? (my knowledge of OS stuff is limited)
Architecture
SO this naturally lends itself to a 2-node-type mesh network:
- The Actual IPFS network, consisting of all the nearly-ewaste phones, which is using a libp2p setup that employs batman-adv in master (and potentially gateway, depending on the node location) mode; this forms a public local internet infrastructure of “BatMaster” meshnodes running real IPFSnodes on leftover consumer hardware. note that the libp2p modification would hopefully be cut down in magnitude-of-change because addressing in a batman-adv net apparently can be done with regular addressing means, according to the readme:
It emulates a virtual network switch of all nodes participating. Therefore all nodes appear to be link local, thus all higher operating protocols won’t be affected by any changes within the network. You can run almost any protocol above batman advanced, prominent examples are: IPv4, IPv6, DHCP, IPX.
- the actual, in use phones of users, whose batman-adv node is in slave mode, and which actually have a very simplistic IPFS-handling daemon that just requests from or pushes to the nearest BatMaster IPFSnode (which batman-adv facilitates)
While this network is local-only, one can imagine employing any of a multitude of long-distance connection technologies- ham radio across a range of frequencies/distances, or direct laserlight point-to-point connections, or anything- where each end of it can simply slot into the local batnet as another BatMaster node running an IPFSnode with tweaked routing preferences to ensure minimum unnecessary radio bandwidth consumption.
#Deploying:
Note, btw, that if Android is truly able to run batman-adv, this makes the process to turn an undesired phone into a BatMaster node:
- verify batman-adv is on it, installing a corresponding prebuilt android setup over it if necessary
- run batman-ctl on it to set it up appropriately (this could be an app, potentially)
- get the suitable IPFS daemon on it running our batman-adv-capable libp2p (this is a small tweak from the already existing android app)
- designate all the phone’s storage space for the node, purge old crap, etc
- plug in via charger into spare power outlets (maybe put it in a plastic baggie so it doesnt get wet
)
This would also mean that BatSlave nodes on user phones/laptops would need:
- have batmam-adv and setup using batman-ctl
- Install an app that takes ipfs intents and requests them from BatMaster nodes
Is this all?
Also, would anybody in the core IPFS devs team have perspective on the feasibility of doing a libp2p integration with batman-adv? This seems like incredibly low-hanging fruit with absolutely immense potential societal impact that is leagues more open (and trustworthy, and non-corruptible or non-controllable) than the for-profit meshnet-making groups I can find that would be likely to participate? From looking at the libp2p repos, I’m guessing @whyrusleeping , @daviddias and @lgierth would have he know-how to do this (hope it’s ok for me to tag y’all)