It gives a simple explanation of batam-adv configuration without getting into batctl, just the config files. The interesting piece is that you need to provide an IP address to the bat0 interface.
The idea is that all the bat0 interfaces in the network together act like a Layer 2 LAN. And just like a LAN you need to provide an IP address on the same subnet to each interface in order for any packet routing to happen. This is a problem for our idea of having a standard image that we can flash onto all routers since each router will have to have individual configuration.
The standard solution for assigning IP addresses in a network is to use DHCP, but that is a problem because 1) we don't want any central control, 2) the network will probably end up being segmented into clusters that don't talk to each other.
I was thinking one idea for assigning IP addresses could be to use IPv6 and map the interface's MAC address onto it, we could then have a configuration script to configure the address. But it turns out that this kind of thing is built into the IPv6 protocol [1] . This seems to be what the Quickstart guide is talking about when it says "You can now use the automatically assigned IPv6 link-local adresses on
bat0 (usually starting with fe80::...), modern operating systems should
support this." [2], although when I followed the guide I didn't see any auto-configured IPv6 address. I'm not very familiar with IPv6, I need to learn a lot more.
Another issue with batman-adv being a pure Layer 2 protocol is that there needs to be some kind of Layer 3 routing protocol used on top of it in order to direct packets to where they need to go. It turns out that batman-adv has implemented such a thing as an optional 'gateway' feature. The gateway documentation is interesting because it seems to show some of the controversy generated around their philosophy of having a "clean network layer separation" [3]. This gateway feature piggybacks on DHCP, which has the problems I mentioned above.