authsae_start_interface() {
- local device="$1" # to use the correct channel
- local vif="$2"
- local band
-
- 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"
+ local mcast_rate
+ local mesh_htmode
+ local mesh_band
+ local authsae_conf_file="/var/run/authsae-$ifname.cfg"
+ local ret=1
+
+ json_get_vars mcast_rate mesh_id
+ set_default mcast_rate "12000"
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
+ if [ "$mcast_rate" -gt 1000 ]; then
+ # authsae only allows integers as rates and not things like 5.5
+ mcval=$(($mcast_rate / 1000))
+ else
+ # compat: to still support mbit/s rates
+ mcval="$mcast_rate"
+ fi
+
+ cat > "$authsae_conf_file" <<EOF
authsae:
{
sae:
passive = 0;
debug = 0;
mediaopt = 1;
- band = "$band";
+ band = "$mesh_band";
channel = $channel;
- htmode = "$htmode";
- mcast-rate = $mcast_rate;
+ htmode = "$mesh_htmode";
+ mcast-rate = $mcval;
};
};
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
}