- IEEE 802.11 comprises a set of standards for wireless LAN (WLAN) operation.
802.11s is a draft amendment to the existing 802.11 standards documents to support mesh networking between WLAN nodes. It supports unicast and multicast routing, and RF-aware dynamic routing using a new dynamic routing protocol dubbed Hybrid Wireless Mesh Protocol (HWMP).
There is some support in the mac80211 stack in the Linux kernel to support an all-software implementation of 802.11s dubbed open8021s.
It is present in kernel 2.6.32 and above, and is backported through the wireless-testing git tree. [Citation Needed]
Hardware requirements for open80211s
- A WLAN adapter that has a driver written for the mac80211 framework. Consult the Driver Table to check that it also supports "mesh" as an interface type.
- Recommended computers
* Soekris computers with miniPCI slots. These are fairly open, low-power, x86 computers. They're produced in relatively small production runs so they can be somewhat expensive. * Ubiquiti RouterStation. A low-power, MIPS computer for WISP applications. Produced at scale, and relatively inexpensive. * RouterBoard are low-power, mostly Atheros-based MIPS computers made by WISP supplier MicroTik. Produced at scale and relatively inexpensive.
- Recommended wireless adapters/controllers
* Ubiquiti Networks Atheros-based miniPCI Adapters * XR2. A high-power 2.4 GHz adapter that supports 5 MHz channels. 28 dBm TXPO. * SR2. A high-power 2.4 GHz adapter that supports 5 MHz channels. 26 dBm TXPO. * XR5. A high-power 5 GHz adapter that supports 5 MHz channels. 28 dBm TXPO.
Example: configuring an open80211s network under Linux using mac80211_hwsim
There exists a testing driver in the mac80211 stack in Linux in recent kernels that will create simulated 802.11 devices so that one can test mesh networking even if they don't have proper adapters yet. It creates a configurable number of adapters (default is 2) that will shuttle frames between adapters that are tuned to the same frequency.
- Before beginning, make sure that you have a recent version of the "iw" utility, as the netlink interface to mac80211 is under constant development.
- First, load the mac80211_hwsim driver
- You should see some lines in your dmesg like:
[80477.585860] mac80211_hwsim: Initializing radio 0 [80477.586051] phy3: Selected rate control algorithm 'minstrel' [80477.587047] phy3: hwaddr 02:00:00:00:00:00 registered [80477.587057] mac80211_hwsim: Initializing radio 1 [80477.587326] phy4: Selected rate control algorithm 'minstrel' [80477.588596] phy4: hwaddr 02:00:00:00:01:00 registered
- Pick a 32-byte "mesh ID". "hinternet" is used here.
- Create some mesh interfaces from the two phys that were created (called wlan1 and wlan2 here)
think:~# iw dev wlan1 interface add mesh1 type mp mesh_id hinternet think:~# iw dev wlan2 interface add mesh2 type mp mesh_id hinternet
- See the new devices with "iw dev"
think:~# iw dev phy#4 Interface mesh2 ifindex 22 type mesh point Interface wlan2 ifindex 19 type managed phy#3 Interface mesh1 ifindex 21 type mesh point Interface wlan1 ifindex 18 type managed
- Bring "UP" the mesh interfaces
think:~# ip link set dev mesh1 up think:~# ip link set dev mesh2 up
- Tune the interfaces to the same channel
think:~# iw dev mesh1 set channel 1 think:~# iw dev mesh2 set channel 1
- At this point, the mesh interfaces should be able to "hear" each other and create adjacencies
think:~# iw dev mesh1 station dump Station 02:00:00:00:01:00 (on mesh1) inactive time: 612 ms rx bytes: 17352 rx packets: 171 tx bytes: 264 tx packets: 3 signal: -50 dBm tx bitrate: 1.0 MBit/s mesh llid: 46469 mesh plid: 33020 mesh plink: ESTAB think:~# iw dev mesh2 station dump Station 02:00:00:00:00:00 (on mesh2) inactive time: 912 ms rx bytes: 22127 rx packets: 232 tx bytes: 594 tx packets: 8 signal: -50 dBm tx bitrate: 1.0 MBit/s mesh llid: 33020 mesh plid: 46469 mesh plink: ESTAB