Most of them.
The default 802.11s support in OpenWrt gives the minimum required for a reliable "wireless extender" functionality ie two nodes.
The default will try to accommodate more nodes but as soon as more than one path is possible ie with 3 or more nodes it rapidly degenerates into mush.
To understand what is going on, there are a few things you need to know:
- The 802.11s standard defines a wireless frame type that has bit fields to support a mesh-mac-routing protocol working at network layer 2. This is VERY different to the other usual 802.11x standards that support access points, client-stations, fast roaming etc.
- The 802.11s standard also defines the above mentioned mesh-mac-routing protocol. This is called "Hybrid Wireless Mesh Protocol", HWMP. The HWMP layer2 routing tables are a dynamic distributed database of nodes, hops, paths, and path metrics.
- Items 1 and 2 above, are built in to the Linux kernel (that includes OpenWrt).
- OpenWrt used the Unified Configuration Interface (UCI) for defining its static and non volatile configurations, stored in files stored in flash memory (eg /etc/config/network etc). The default configurations can be changed by using the
uci command, by using the Luci GUI, or by editing the config files directly.
- When OpenWrt boots, each module or package is set up depending on these static UCI config files.
- Most of the 802.11s mesh parameters are potentially dynamic things that can be changed on the fly to manage the operational aspects of the HWMP. These dynamic parameters are applied via the kernel to the already running mesh vif (virtual interface).
Here is the problem - the content of the uci configuration files is applied by OpenWrt in preparation for starting something, in this case a wireless vif. But the mesh parameters can only be applied AFTER the vif is up and running.
- Just to confuse the issue SOME other mesh parameters CAN sometimes be set in the static uci wireless config. In all cases
mesh_forwarding and mesh_rssi_threshold can be set here. For SOME wireless drivers, other parameters MAY also be settable here, but there is no documented list I have ever found. The driver must have some built in mechanism built in to apply after the vif is up. The only ones I have seen are in OpenWrt forks using chip manufacturers closed source drivers/APIs, so generally ruled out in mainstream OpenWrt.
- To make it work here, you need some mesh management service. The two most common are Mesh11sd (100% pure 802.11s as far as mesh backhaul is concerned) and Batman (very much does its own thing).
I hope this clarifies things for you, but please ask any questions you may have.
Not really, it just does the hard work setting up basic layer 3 for you, be it as a beginner or a professional engineer doing a rollout.
The vxlan part is not a VPN at all. Rather it is a virtual point to multi-point "tunnel" between all participating nodes and provides a virtual ethernet network (think virtual layer 2 switch) capable of supporting anything ethernet can eg VLANs.
For completeness, here is an example snippet from the mesh11sd status command, listing all the instantaneous values of the mesh parameters:
"mesh_interfaces":{
"m-11s-0":{
"mesh_retry_timeout":"255",
"mesh_confirm_timeout":"255",
"mesh_holding_timeout":"255",
"mesh_max_peer_links":"16",
"mesh_max_retries":"3",
"mesh_ttl":"31",
"mesh_element_ttl":"31",
"mesh_auto_open_plinks":"0",
"mesh_hwmp_max_preq_retries":"4",
"mesh_path_refresh_time":"1000",
"mesh_min_discovery_timeout":"100",
"mesh_hwmp_active_path_timeout":"1465",
"mesh_hwmp_preq_min_interval":"586",
"mesh_hwmp_net_diameter_traversal_time":"50",
"mesh_hwmp_rootmode":"4",
"mesh_hwmp_rann_interval":"1953",
"mesh_gate_announcements":"1",
"mesh_fwding":"1",
"mesh_sync_offset_max_neighor":"50",
"mesh_rssi_threshold":"-68",
"mesh_hwmp_active_path_to_root_timeout":"6000",
"mesh_hwmp_root_interval":"5000",
"mesh_hwmp_confirmation_interval":"2000",
"mesh_power_mode":"active",
"mesh_awake_window":"10",
"mesh_plink_timeout":"500",
"mesh_connected_to_gate":"1",
"mesh_nolearn":"0",
"mesh_connected_to_as":"1",
"mesh_rts_threshold":"500",
"mesh_queue_limit":"1000",
"mesh_ddr_scheduler_quantum":"3000",
"mesh_airtime_queue_limit":"2000",