From patchwork Wed Sep 13 12:47:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [RFC,v2] Add support for 802.11s meshing with batman-adv From: Fabian Blaese X-Patchwork-Id: 468 Message-Id: <20170913124702.61410-1-fabian@blaese.de> To: franken-dev@freifunk.net Date: Wed, 13 Sep 2017 14:47:02 +0200 Update in v2: - Don't add mesh interface to br-mesh Signed-off-by: Fabian Bläse --- 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(-) 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 " + 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