From b41d91bff67577039a9fb9825ba3efd1d0a163a6 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sat, 12 Apr 2014 21:22:17 +0000 Subject: 802.11s: fix authsae support in netifd This patch implements support for 802.11s protected mesh wireless networks (using authsae) in the netifd framework. Until meshd-nl80211 implements a proper -P option for the PID file, this uses shell backgrounding in order to be able to get the PID for the process. Signed-off-by: Vittorio Gambaletta git-svn-id: svn://svn.openwrt.org/openwrt/trunk@40497 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../mac80211/files/lib/netifd/wireless/mac80211.sh | 15 +++++++- .../services/authsae/files/lib/wifi/authsae.sh | 44 ++++++++++++---------- package/network/services/hostapd/files/netifd.sh | 2 +- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index c5d3482499..53d1cb9c8f 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -449,6 +449,7 @@ mac80211_setup_adhoc() { mac80211_setup_vif() { local name="$1" + local failed json_select data json_get_vars ifname @@ -473,7 +474,19 @@ mac80211_setup_vif() { json_get_var mp_val "$var" [ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$var" "$mp_val" done - # todo: authsae + + # authsae + json_get_vars key + if [ -n "$key" ]; then + if [ -e "/lib/wifi/authsae.sh" ]; then + . /lib/wifi/authsae.sh + authsae_start_interface || failed=1 + else + wireless_setup_vif_failed AUTHSAE_NOT_INSTALLED + json_select .. + return + fi + fi ;; adhoc) wireless_vif_parse_encryption diff --git a/package/network/services/authsae/files/lib/wifi/authsae.sh b/package/network/services/authsae/files/lib/wifi/authsae.sh index daa43eb22a..d8c5598ed5 100644 --- a/package/network/services/authsae/files/lib/wifi/authsae.sh +++ b/package/network/services/authsae/files/lib/wifi/authsae.sh @@ -1,28 +1,24 @@ authsae_start_interface() { - local device="$1" # to use the correct channel - local vif="$2" - local band + local mcast_rate + local mesh_htmode + local mesh_band + local authsae_conf_file="/var/run/authsae-$ifname.cfg" + local ret=1 - cfgfile="/var/run/authsae-$vif.cfg" - config_get channel "$device" channel - config_get hwmode "$device" hwmode - config_get htmode "$device" htmode - config_get ifname "$vif" ifname - config_get key "$vif" key - config_get mesh_id "$vif" mesh_id - config_get mcast_rate "$vif" mcast_rate "12" + json_get_vars mcast_rate + set_default mcast_rate "12" case "$htmode" in - HT20|HT40+|HT40-) htmode="$htmode";; - NOHT|none|*) htmode="none";; + HT20|HT40+|HT40-) mesh_htmode="$htmode";; + *) mesh_htmode="none";; esac case "$hwmode" in - *g*) band=11g;; - *a*) band=11a;; + *g*) mesh_band=11g;; + *a*) mesh_band=11a;; esac - cat > "$cfgfile" < "$authsae_conf_file" </dev/null 2>/dev/null & + authsae_pid="$!" + ret="$?" + + echo $authsae_pid > /var/run/authsae-$ifname.pid + wireless_add_process "$authsae_pid" "/usr/bin/meshd-nl80211" 1 + + [ "$ret" != 0 ] && wireless_setup_vif_failed AUTHSAE_FAILED + return $ret } diff --git a/package/network/services/hostapd/files/netifd.sh b/package/network/services/hostapd/files/netifd.sh index 12326698c5..1372b5ade7 100644 --- a/package/network/services/hostapd/files/netifd.sh +++ b/package/network/services/hostapd/files/netifd.sh @@ -586,5 +586,5 @@ wpa_supplicant_run() { } hostapd_common_cleanup() { - killall hostapd wpa_supplicant + killall hostapd wpa_supplicant meshd-nl80211 } -- cgit v1.2.3