Freifunk is a mesh group, mesh network and mesh firmware based out of Germany with several hundred nodes.
Most of the Freifunk nodes are in meshes that use OLSR. Some local Freifunk meshes use batman (I'm assuming batman-adv).
It seems like there are at least three primary points of distribution of firmwares.
- The README.txt file has a lot of useful information.
- Seems to have a different set of downloads than the ipkg site, with some overlaps.
- Meshkit - A firmware building wizard.
- It actually creates the firmware based on your choices, including chipset and community profile. Really nice!
There is a 2007 creative commons by-sa 2.5 licensed book from South Africa called Building a Rural Wireless Mesh Network which is a step by step guide that focuses on using the OLSR-based Freifunk firmware.
The source code for the Freifunk-specific openwrt packages can be browsed here.
Most Freifunk nodes report a bunch of information using JSON to a central map server, that reports a bunch of things, including the lattitude and longtitude.
Reporting nodes are shown on the Freifunk map.
It looks like the package freifunk-mapupdate is responsible for reporting to the central map server.
Assigning IP addresses
I'm still not sure how IP addresses are assigned in a Freifunk network. It looks like it's manual static assignment though. The [Meshkit http://meshkit.freifunk.net/ wizard] just asks for a static IP and has the IP field pre-filled with the correct subnet based on the selected community profile (e.g. 18.104.22.168 for Berlin).
Real-world IP addresses
Some of the local Freifunk meshes, such as Berlin and Leipzig, actually have real internet routable IPv4 adresses.
Anonymized IRC snippet from #freifunk on open.ircnet.net:
<Juul> is freifunk berlin really using 22.214.171.124/8 ? <Juul> if i'm not mistaken, that's an unassigned ARIN subnet <Juul> any reason to believe it won't be assigned in the future? <Juul> (i'm part of a group setting up a mesh in Oakland, California, and I stumbled upon that in the berlin community profile, wondering if there's any advantage to using an unassigned range instead of just 10.0.0.0/8) <alice> yes <alice> im from leipzig, a suburb of berlin, we have 104.61.... since years.. <alice> it IS now assigned (some months ago..) :-/ <alice> but most of freifunk netzwork is at 10.0.0.0/8.. to be seen at http://wiki.freifunk.net/IP-Netze <alice> https://twitter.com/rundfreifunk/status/289051605779742721 <alice> 104er IPs im Bild: http://twitpic.com/3w4wlt RT @kinolux: History repeats itself: eine IP Debatte im #freifunk IRC. #LOL
Freifunk has meshes in several different cities and suburbs. They keep a list of community profiles that contain settings specific to the local mesh.
Here is the Berlin profile:
1 config 'community' 'profile' 2 option 'name' 'Freifunk Berlin' 3 option 'homepage' 'http://berlin.freifunk.net' 4 option 'ssid' 'olsr.freifunk.net' 5 option 'mesh_network' '126.96.36.199/8' 6 option 'splash_network' '10.104.0.0/16' 7 option 'splash_prefix' '27' 8 option 'latitude' '52.52075' 9 option 'longitude' '13.40948' 10 list 'mapserver' 'http://openwifimap.net/openwifimap/' 11 list 'mapserver' 'http://map.pberg.freifunk.net/openwifimap/' 12 13 config 'defaults' 'wifi_device' 14 option 'channel' '10' 15 16 config 'defaults' 'interface' 17 option 'netmask' '255.0.0.0' 18 19 config 'defaults' 'olsr_interface' 20 option 'Ip4Broadcast' '255.255.255.255' 21 option 'HelloInterval' '3.0' 22 option 'HelloValidityTime' '125.0' 23 option 'TcInterval' '2.0' 24 option 'TcValidityTime' '500.0' 25 option 'MidInterval' '25.0' 26 option 'MidValidityTime' '500.0' 27 option 'HnaInterval' '10.0' 28 option 'HnaValidityTime' '125.0' 29 30 config 'defaults' 'olsrd' 31 option 'AllowNoInt' 'yes' 32 option 'FIBMetric' 'flat' 33 option 'Pollrate' '0.025' 34 option 'TcRedundancy' '2' 35 option 'NatThreshold' '0.75' 36 option 'LinkQualityAlgorithm' 'etx_ff'
This is a list of packages installed by the Freifunk Meshkit firmware with explanations of what they each do. Some of them are OpenWRT packages and others were made by Freifunk.
Freifunk's own packages:
- Includes ff_olsr_watchdog, which in combination with olsrd-mod-watchdog restarts olsrd if olsrd freezes up. Includes ffdzero, which seems to fetch zeroes from a webserver and write then to /dev/zero (?). Includes neigh.sh which uses wget and sed and the olsrd-mod-txtinfo webserver to show some info about neighbors, and includes watch.sh which is just a shell script version of the normal watch command. source.
- Special routing rules for the Freifunk network. Probably won't apply to other meshes. source.
- A wizard web GUI for easily configuring the router with mesh access. I think this relies on the meshwizard package, which is just a shell script to implement the changes.
- A set of configuration profiles for the different local Freifunk meshes.
Web GUI extensions by Freifunk:
- Web GUI for the Freifunk routing rules. source
OLSRd packages. All of the -mod- packages are actually part of the main olsrd source tree (download openwrt olsrd source here). If you go to the lib/ directory in the olsrd source, each -mod- package has its own directory and a readme file.
- The mesh routing protocol daemon.
- Looks at all received UDP packets and updates the arp cache based on these. This means fewer arp queries needed.
- An IPv4-only internet gateway detector that announces internet connectivity to the mesh when it is detected.
- Adds a telnet+http service to port 2006 that allows getting info about the mesh node.
- Like mod-txtinfo but using JSON format
- Kinda like mDNS, but specifically created for OLSR. Note that an olsrd-mod-mdns package also exists, which allows mDNS to be used on the mesh. This might be preferable, since it will interoperate with LAN and other non-mesh mDNS-capable software. It might also be dangerous, since e.g. people's mDNS-capable network printers will be announcing themselves to the mesh if no other precautions are taken.
- Writed to a file ever n seconds if olsrd is not frozen. Allows implementation of a watchdog that restarts olsrd if it freezes.
Misc other packages:
- uHTTPd is a tiny single threaded HTTP server with TLS, CGI and Lua support. It is intended as a drop-in replacement for the Busybox HTTP daemon.
- Lua bindings for libiwinfo, a library for getting wireless interface information.
- Firewall GUI for the web interface.
I think the initial dash means that these packages are excluded rather than included, but I could be wrong.
- Proprietary broadcom WPA authenticator.
- Point-to-point protocol support.
- PPP over ethernet.
- Minimal WPA-PSK authenticator.
The default root password for the meshkit freifunk firmware is: admin