802.11s: fix authsae support in netifd
authorblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 12 Apr 2014 21:22:17 +0000 (21:22 +0000)
committerblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 12 Apr 2014 21:22:17 +0000 (21:22 +0000)
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 <openwrt@vittgam.net>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@40497 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
package/network/services/authsae/files/lib/wifi/authsae.sh
package/network/services/hostapd/files/netifd.sh

index c5d3482..53d1cb9 100644 (file)
@@ -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
index daa43eb..d8c5598 100644 (file)
@@ -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" <<EOF
+       cat > "$authsae_conf_file" <<EOF
 authsae:
 {
  sae:
@@ -41,13 +37,21 @@ authsae:
     passive = 0;
     debug = 0;
     mediaopt = 1;
-    band = "$band";
+    band = "$mesh_band";
     channel = $channel;
-    htmode = "$htmode";
+    htmode = "$mesh_htmode";
     mcast-rate = $mcast_rate;
   };
 };
 EOF
-       ifconfig "$ifname" up
-       meshd-nl80211 -i "$ifname" -s "$mesh_id" -c "$cfgfile" -B
+
+       /usr/bin/meshd-nl80211 -i "$ifname" -s "$mesh_id" -c "$authsae_conf_file" </dev/null >/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
 }
index 1232669..1372b5a 100644 (file)
@@ -586,5 +586,5 @@ wpa_supplicant_run() {
 }
 
 hostapd_common_cleanup() {
-       killall hostapd wpa_supplicant
+       killall hostapd wpa_supplicant meshd-nl80211
 }