802.11s: fix authsae support in netifd
authorJohn Crispin <john@openwrt.org>
Sat, 12 Apr 2014 21:22:17 +0000 (21:22 +0000)
committerJohn Crispin <john@openwrt.org>
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>
SVN-Revision: 40497

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 c5d34824995a2fd8116ef67e61b066023079dc9e..53d1cb9c8ff532a9f3abcc711a32f956ec431930 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 daa43eb22a0d8a520b9bef8f98fa0387b6e468a0..d8c5598ed5939c1d5db8dc3478e3c2484461cc75 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 12326698c587a7f7ca3c88137334ed494c3f533d..1372b5ade7791661c82ddb224b758bfac423f2ad 100644 (file)
@@ -586,5 +586,5 @@ wpa_supplicant_run() {
 }
 
 hostapd_common_cleanup() {
-       killall hostapd wpa_supplicant
+       killall hostapd wpa_supplicant meshd-nl80211
 }