[RFC,v2] Add support for 802.11s meshing with batman-adv

Submitted by Fabian Blaese on Sept. 13, 2017, 12:47 p.m.

Details

Message ID 20170913124702.61410-1-fabian@blaese.de
State Superseded
Headers show

Commit Message

Fabian Blaese Sept. 13, 2017, 12:47 p.m.
Update in v2:
- Don't add mesh interface to br-mesh

Signed-off-by: Fabian Bläse <fabian@blaese.de>
---
 community/franken.cfg                              |  1 +
 .../files/etc/uci-defaults/60-fff-wireless         | 15 +++++++--
 .../fff-wireless/files/lib/functions/fff/wireless  | 38 ++++++++++++++++++++--
 3 files changed, 49 insertions(+), 5 deletions(-)

Patch hide | download patch | download mbox

diff --git a/community/franken.cfg b/community/franken.cfg
index 833e98e..3ea5353 100644
--- a/community/franken.cfg
+++ b/community/franken.cfg
@@ -3,6 +3,7 @@  BATMAN_CHANNEL_5GHZ=36
 ESSID_AP=franken.freifunk.net
 ESSID_MESH=batman.franken.freifunk.net
 BSSID_MESH=02:CA:FF:EE:BA:BE
+MESH_ID=mesh.franken.freifunk.net
 VPN_PROJECT=fff
 NTPD_IP=fe80::ff:feee:1%br-mesh
 UPGRADE_PATH=http://[fe80::ff:feee:1%br-mesh]/dev/firmware/current
diff --git a/src/packages/fff/fff-wireless/files/etc/uci-defaults/60-fff-wireless b/src/packages/fff/fff-wireless/files/etc/uci-defaults/60-fff-wireless
index 8e207a4..13f361e 100644
--- a/src/packages/fff/fff-wireless/files/etc/uci-defaults/60-fff-wireless
+++ b/src/packages/fff/fff-wireless/files/etc/uci-defaults/60-fff-wireless
@@ -34,9 +34,18 @@  for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
 		exit 1
 	fi
 
-	if ! wifiAddAdHocMesh "$radio" "$ESSID_MESH" "$BSSID_MESH"; then
-		echo "Can't add AdHocMesh interface on $radio."
-		exit 1
+	if [[ -n "$MESH_ID" ]]; then
+		if ! wifiAddMesh "$radio" "$MESH_ID"; then
+			echo "Can't add Mesh interface on $radio."
+			exit 1
+		fi
+	fi
+
+	if [[ -n "$ESSID_MESH" ]] && [[ -n "$BSSID_MESH" ]]; then
+		if ! wifiAddAdHocMesh "$radio" "$ESSID_MESH" "$BSSID_MESH"; then
+			echo "Can't add AdHocMesh interface on $radio."
+			exit 1
+		fi
 	fi
 done
 
diff --git a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
index 59c8ce2..12b7c1e 100644
--- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
+++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
@@ -56,9 +56,9 @@  wifiAddAdHocMesh() {
 	local bssid=$3
 
 	local channel=$(uci get "wireless.${radio}.channel")
-	local iface="w2mesh"
+	local iface="w2ibss"
 	if [ "$channel" -gt "14" ]; then
-		iface="w5mesh"
+		iface="w5ibss"
 	fi
 
 	uci batch <<-__EOF__
@@ -114,4 +114,38 @@  wifiAddAP() {
 	echo "${iface}"
 }
 
+wifiAddMesh() {
+	if [ $# -ne "2" ]
+	then
+		echo "Usage: wifiAddMesh <radio> <mesh-id>"
+	fi
+
+	local radio=$1
+	local mesh_id=$2
+
+	local channel=$(uci get "wireless.${radio}.channel")
+	local iface="w2mesh"
+	if [ "$channel" -gt "14" ]; then
+		iface="w5mesh"
+	fi
+	uci batch <<-__EOF__
+		set wireless.${iface}='wifi-iface'
+		set wireless.${iface}.device='${radio}'
+		set wireless.${iface}.network='${iface}'
+		set wireless.${iface}.ifname='${iface}'
+		set wireless.${iface}.mode='mesh'
+		set wireless.${iface}.mesh_id='${mesh_id}'
+		set wireless.${iface}.encryption='none'
+		set wireless.${iface}.mesh_fwding=0
+		commit wireless
+
+		set network.${iface}='interface'
+		set network.${iface}.mtu='1528'
+		set network.${iface}.proto='batadv'
+		set network.${iface}.mesh='bat0'
+		commit network
+	__EOF__
+
+	echo "${iface}"
+}
 # vim: set noexpandtab:tabstop=4