From patchwork Sun Oct 8 14:07:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [v6] Support batman-adv meshing over 802.11s From: Fabian Blaese X-Patchwork-Id: 545 Message-Id: <20171008140708.22727-1-fabian@blaese.de> To: franken-dev@freifunk.net Cc: Adrian Schmutzler Date: Sun, 8 Oct 2017 16:07:08 +0200 Signed-off-by: Fabian Bläse Signed-off-by: Adrian Schmutzler Update in v2: - Add parentheses - Rename mesh_type variable Update in v3: - nothing Update in v4: - Fix wrong variable assignment introduced in v2 Update in v5: - Add returns to wifiAddMesh Update in v6: - Rename json mesh_type variable --- community/franken.cfg | 1 + .../fff/fff-hoods/files/usr/sbin/configurehood | 22 +++++++++--- .../fff-wireless/files/lib/functions/fff/wireless | 40 ++++++++++++++++++++-- 3 files changed, 56 insertions(+), 7 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-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood index 264a308..a464841 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -119,6 +119,7 @@ if [ -s /tmp/keyxchangev2data ]; then json_select hood json_get_var hood name + json_get_var mesh_id mesh_id json_get_var mesh_bssid mesh_bssid json_get_var mesh_essid mesh_essid json_get_var essid essid @@ -126,10 +127,10 @@ if [ -s /tmp/keyxchangev2data ]; then # i think the next things we don't active this in the first version! we can do it later #json_get_var channel2 channel2 #json_get_var mode2 mode2 - #json_get_var type2 type2 + json_get_var mesh_type2 mesh_type2 #json_get_var channel5 channel5 #json_get_var mode5 mode5 - #json_get_var type5 type5 + json_get_var mesh_type5 mesh_type5 #json_get_var protocol protocol json_select ".." # back to root @@ -155,9 +156,20 @@ if [ -s /tmp/keyxchangev2data ]; then # here we set a bit for add hidden AP touch /tmp/hiddenapflag - if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; then - echo "Can't add AP interface on $radio." - exit 1 + # add 802.11s mesh if type == "802.11s" + if ( [ -n "$radio5" ] && [ "$mesh_type5" == "802.11s" ] ) || [ "$mesh_type2" == "802.11s" ]; then + if ! wifiAddMesh "$radio" "$mesh_id"; then + echo "Can't add Mesh interface on $radio." + exit 1 + fi + fi + + # add IBSS mesh if type == "ibss" + if ( [ -n "$radio5" ] && [ "$mesh_type5" == "ibss" ] ) || [ "$mesh_type2" == "ibss" ]; then + if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; 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 2c6dff8..4493b05 100644 --- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless +++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless @@ -83,9 +83,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__ @@ -177,4 +177,40 @@ wifiAddSta() { return 0 } +wifiAddMesh() { + if [ $# -ne "2" ] + then + echo "Usage: wifiAddMesh " + return 1 + 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}" + return 0 +} # vim: set noexpandtab:tabstop=4