802.11s: fix authsae support in netifd
[openwrt.git] / package / network / services / authsae / files / lib / wifi / authsae.sh
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
 }