mirror of https://github.com/aredn/aredn.git
aredn: Mesh RF enable/disable (#307)
add feature to turn off Mesh RF if not in use. When off, section to re-purpose wireless card to LAN bridged Access Point becomes visable. Closes #155
This commit is contained in:
parent
ce5a757ca0
commit
f777e914f9
|
@ -8,11 +8,12 @@ wifi_channel = 1
|
||||||
wifi_chanbw = 20
|
wifi_chanbw = 20
|
||||||
wifi_distance = 0
|
wifi_distance = 0
|
||||||
wifi_country = 00
|
wifi_country = 00
|
||||||
|
wifi_enable = 1
|
||||||
|
|
||||||
wifi2_enable = 0
|
wifi2_enable = 0
|
||||||
wifi2_ssid = NoCall-AREDN
|
wifi2_ssid = NoCall-AREDN
|
||||||
wifi2_channel = 36
|
wifi2_channel = 36
|
||||||
wifi2_encryption = none
|
wifi2_encryption =
|
||||||
wifi2_key =
|
wifi2_key =
|
||||||
|
|
||||||
dmz_mode = 3
|
dmz_mode = 3
|
||||||
|
|
|
@ -8,6 +8,7 @@ wifi_channel = 1
|
||||||
wifi_chanbw = 20
|
wifi_chanbw = 20
|
||||||
wifi_distance = 0
|
wifi_distance = 0
|
||||||
wifi_country = 00
|
wifi_country = 00
|
||||||
|
wifi_enable = 1
|
||||||
|
|
||||||
wifi2_enable = 0
|
wifi2_enable = 0
|
||||||
wifi2_ssid = NoCAll-AREDN
|
wifi2_ssid = NoCAll-AREDN
|
||||||
|
|
|
@ -36,6 +36,12 @@ LICENSE
|
||||||
# Look for hung 'iw' zombie processes prone to hang
|
# Look for hung 'iw' zombie processes prone to hang
|
||||||
# when available memory is low.
|
# when available memory is low.
|
||||||
|
|
||||||
|
# if Mesh RF is disabled, then nothing to do
|
||||||
|
iface=$(uci -q get 'network.wifi.ifname')
|
||||||
|
if [ "$iface" = "${iface##wlan*}" ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
zombiepid="/tmp/clean_zombie.pid"
|
zombiepid="/tmp/clean_zombie.pid"
|
||||||
|
|
||||||
[ -e $zombiepid ] && [ -d "/proc/$(cat $zombiepid)" ] && exit
|
[ -e $zombiepid ] && [ -d "/proc/$(cat $zombiepid)" ] && exit
|
||||||
|
|
|
@ -124,15 +124,23 @@ foreach $line (`cat /etc/config.mesh/_setup`)
|
||||||
}
|
}
|
||||||
|
|
||||||
chomp ($lanintf=`jsonfilter -e '@.network.lan.ifname' < /etc/board.json`);
|
chomp ($lanintf=`jsonfilter -e '@.network.lan.ifname' < /etc/board.json`);
|
||||||
$cfg{"lan_intf"} = "$lanintf";
|
$cfg{lan_intf} = "$lanintf";
|
||||||
if ( ! $cfg{"wifi_intf"} )
|
|
||||||
{
|
|
||||||
$cfg{"wifi_intf"} = get_interface("wifi");
|
|
||||||
}
|
|
||||||
$cfg{"wan_intf"} = get_bridge_interfaces("wan");
|
|
||||||
$cfg{"dtdlink_intf"} = get_bridge_interfaces("dtdlink");
|
|
||||||
|
|
||||||
$cfg{"wifi_intf"} =~ /wlan(\d+)/;
|
$cfg{wan_intf} = get_bridge_interfaces("wan");
|
||||||
|
$cfg{dtdlink_intf} = get_bridge_interfaces("dtdlink");
|
||||||
|
|
||||||
|
if ( $cfg{wifi_enable} == 1 )
|
||||||
|
{
|
||||||
|
$cfg{wifi_intf} = `jsonfilter -e '@.network.wifi.ifname' < /etc/board.json | cut -f1`;
|
||||||
|
$cfg{wifi_intf} =~ /wlan(\d+)/;
|
||||||
|
chomp $cfg{wifi_intf};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$wifi_sudo_intf = "$lanintf";
|
||||||
|
$wifi_sudo_intf =~ s/^([^\. \t]+).*$/$1/;
|
||||||
|
$cfg{wifi_intf} = $wifi_sudo_intf . ".3975";
|
||||||
|
}
|
||||||
|
|
||||||
die "configuration load failed\n" unless keys %cfg;
|
die "configuration load failed\n" unless keys %cfg;
|
||||||
|
|
||||||
|
@ -417,7 +425,10 @@ unless($cfg{wifi_proto} eq "disabled")
|
||||||
{
|
{
|
||||||
$cfg{wifi_txpower} = wifi_maxpower($cfg{wifi_channel}) if not defined $cfg{wifi_txpower} or $cfg{wifi_txpower} > wifi_maxpower($cfg{wifi_channel});
|
$cfg{wifi_txpower} = wifi_maxpower($cfg{wifi_channel}) if not defined $cfg{wifi_txpower} or $cfg{wifi_txpower} > wifi_maxpower($cfg{wifi_channel});
|
||||||
$cfg{wifi_txpower} = 1 if $cfg{wifi_txpower} < 1;
|
$cfg{wifi_txpower} = 1 if $cfg{wifi_txpower} < 1;
|
||||||
print FILE "/usr/sbin/iw dev $cfg{wifi_intf} set txpower fixed $cfg{wifi_txpower}00\n";
|
if ( $cfg{wifi_enable} == 1 )
|
||||||
|
{
|
||||||
|
print FILE "/usr/sbin/iw dev $cfg{wifi_intf} set txpower fixed $cfg{wifi_txpower}00\n";
|
||||||
|
}
|
||||||
if(defined $cfg{aprs_lat} and defined $cfg{aprs_lon})
|
if(defined $cfg{aprs_lat} and defined $cfg{aprs_lon})
|
||||||
{
|
{
|
||||||
printf FILE "echo %s,%s > /tmp/latlon.txt\n", $cfg{aprs_lat}, $cfg{aprs_lon};
|
printf FILE "echo %s,%s > /tmp/latlon.txt\n", $cfg{aprs_lat}, $cfg{aprs_lon};
|
||||||
|
@ -467,8 +478,6 @@ if(-f "/etc/config.mesh/olsrd")
|
||||||
print OUT "config LoadPlugin\n";
|
print OUT "config LoadPlugin\n";
|
||||||
print OUT " option library 'olsrd_dyn_gw.so.0.5'\n";
|
print OUT " option library 'olsrd_dyn_gw.so.0.5'\n";
|
||||||
print OUT " option Interval '60'\n";
|
print OUT " option Interval '60'\n";
|
||||||
print OUT " list Ping '71.42.236.91'\n"; # hsmm-mesh.org\n";
|
|
||||||
print OUT " list Ping '71.42.236.90'\n"; # hsmm-mesh.org\n";
|
|
||||||
print OUT " list Ping '8.8.8.8'\n"; # google dns\n";
|
print OUT " list Ping '8.8.8.8'\n"; # google dns\n";
|
||||||
print OUT " list Ping '8.8.4.4'\n"; # google dns\n";
|
print OUT " list Ping '8.8.4.4'\n"; # google dns\n";
|
||||||
print OUT "\n\n";
|
print OUT "\n\n";
|
||||||
|
|
|
@ -39,6 +39,11 @@
|
||||||
# The wireless driver poorly tunes and treats these neighbors as noise in error.
|
# The wireless driver poorly tunes and treats these neighbors as noise in error.
|
||||||
# This is a workaround until root cause driver updates occur.
|
# This is a workaround until root cause driver updates occur.
|
||||||
|
|
||||||
|
chomp ($iface=`uci -q get 'network.wifi.ifname'`); # wireless interface
|
||||||
|
$wifi_disable = ( $iface =~ /eth.*$/ )? 1 : 0;
|
||||||
|
exit 0 if $wifi_disable;
|
||||||
|
|
||||||
|
|
||||||
$now=`cat /proc/uptime | cut -f1 -d" "`;
|
$now=`cat /proc/uptime | cut -f1 -d" "`;
|
||||||
chomp $now;
|
chomp $now;
|
||||||
exit 0 unless $now > 119;
|
exit 0 unless $now > 119;
|
||||||
|
@ -75,7 +80,6 @@ if ( -f "$snrlogpid" )
|
||||||
|
|
||||||
sleep 7;
|
sleep 7;
|
||||||
|
|
||||||
chomp ($iface=`uci -q get 'network.wifi.ifname'`); # wireless interface
|
|
||||||
foreach(`iwinfo $iface info`)
|
foreach(`iwinfo $iface info`)
|
||||||
{
|
{
|
||||||
next unless /^.*PHY name:\s*([a-z0-4]+)/;
|
next unless /^.*PHY name:\s*([a-z0-4]+)/;
|
||||||
|
|
|
@ -256,6 +256,14 @@ end
|
||||||
-- Neighbor Class END
|
-- Neighbor Class END
|
||||||
|
|
||||||
-- MAIN() -------------------------------------------------------------------------------------
|
-- MAIN() -------------------------------------------------------------------------------------
|
||||||
|
-- get wifi interface name
|
||||||
|
wifiiface=get_ifname("wifi")
|
||||||
|
|
||||||
|
-- if Mesh RF is turned off do nothing
|
||||||
|
if ( wifiiface == string.match(wifiiface,'eth.*')) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- check to make sure a prior instance is not still running
|
-- check to make sure a prior instance is not still running
|
||||||
local f = io.open(pidfile,"r")
|
local f = io.open(pidfile,"r")
|
||||||
if (f) then
|
if (f) then
|
||||||
|
@ -285,9 +293,6 @@ if (f) then
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get wifi interface name
|
|
||||||
wifiiface=get_ifname("wifi")
|
|
||||||
|
|
||||||
-- load the lasttime table
|
-- load the lasttime table
|
||||||
if file_exists(lastdat) then
|
if file_exists(lastdat) then
|
||||||
local f,err=io.open(lastdat,"r")
|
local f,err=io.open(lastdat,"r")
|
||||||
|
|
|
@ -52,6 +52,7 @@ done < $configfile
|
||||||
|
|
||||||
meshif="$(uci -q get network.wifi.ifname)"
|
meshif="$(uci -q get network.wifi.ifname)"
|
||||||
meshphy="phy${meshif#wlan}"
|
meshphy="phy${meshif#wlan}"
|
||||||
|
hwtype="$(/usr/local/bin/get_hardwaretype)"
|
||||||
|
|
||||||
rm -f "${dropdir}/wireless"
|
rm -f "${dropdir}/wireless"
|
||||||
touch "${dropdir}/wireless"
|
touch "${dropdir}/wireless"
|
||||||
|
@ -109,7 +110,6 @@ for _dev in /sys/class/ieee80211/*; do
|
||||||
key=""
|
key=""
|
||||||
network="wifi"
|
network="wifi"
|
||||||
else
|
else
|
||||||
# mesh AP bridged with lan
|
|
||||||
disabled="${wifi2_disabled}"
|
disabled="${wifi2_disabled}"
|
||||||
channel="${wifi2_channel}"
|
channel="${wifi2_channel}"
|
||||||
chanbw=""
|
chanbw=""
|
||||||
|
@ -126,39 +126,42 @@ for _dev in /sys/class/ieee80211/*; do
|
||||||
network="lan"
|
network="lan"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
uci -c ${dropdir} -q batch > /dev/null <<-EOF
|
# test for devices with 2 wireless cards -- don't setup 2 APs
|
||||||
set wireless.${radio}=wifi-device
|
if [ "$hwtype" != "rb-952ui-5ac2nd" -o "$hwmode" != "11g" -o ${is_mesh_rf} -eq 1 ]; then
|
||||||
set wireless.${radio}.type=mac80211
|
|
||||||
set wireless.${radio}.disabled=${disabled}
|
|
||||||
set wireless.${radio}.channel=${channel}
|
|
||||||
set wireless.${radio}.chanbw=${chanbw}
|
|
||||||
set wireless.${radio}.country=${country}
|
|
||||||
set wireless.${radio}.distance=${distance}
|
|
||||||
set wireless.${radio}.hwmode=${hwmode}
|
|
||||||
set wireless.${radio}.htmode=${htmode}
|
|
||||||
${dev_id}
|
|
||||||
add wireless wifi-iface
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].device=${radio}
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].network=${network}
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].mode=${mode}
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].ssid="${ssid}"
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].encryption=${encryption}
|
|
||||||
set wireless.@wifi-iface[${ifacenum}].key="${key}"
|
|
||||||
EOF
|
|
||||||
uci -c ${dropdir} -q commit wireless
|
|
||||||
|
|
||||||
if [ ${is_mesh_rf} -eq 1 ]; then
|
|
||||||
# add monitor interface on mesh rf
|
|
||||||
ifacenum=$((ifacenum + 1))
|
|
||||||
uci -c ${dropdir} -q batch > /dev/null <<-EOF
|
uci -c ${dropdir} -q batch > /dev/null <<-EOF
|
||||||
|
set wireless.${radio}=wifi-device
|
||||||
|
set wireless.${radio}.type=mac80211
|
||||||
|
set wireless.${radio}.disabled=${disabled}
|
||||||
|
set wireless.${radio}.channel=${channel}
|
||||||
|
set wireless.${radio}.chanbw=${chanbw}
|
||||||
|
set wireless.${radio}.country=${country}
|
||||||
|
set wireless.${radio}.distance=${distance}
|
||||||
|
set wireless.${radio}.hwmode=${hwmode}
|
||||||
|
set wireless.${radio}.htmode=${htmode}
|
||||||
|
${dev_id}
|
||||||
add wireless wifi-iface
|
add wireless wifi-iface
|
||||||
set wireless.@wifi-iface[${ifacenum}].device=${radio}
|
set wireless.@wifi-iface[${ifacenum}].device=${radio}
|
||||||
set wireless.@wifi-iface[${ifacenum}].network=wifi_mon
|
set wireless.@wifi-iface[${ifacenum}].network=${network}
|
||||||
set wireless.@wifi-iface[${ifacenum}].mode=monitor
|
set wireless.@wifi-iface[${ifacenum}].mode=${mode}
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].ssid="${ssid}"
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].encryption=${encryption}
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].key="${key}"
|
||||||
EOF
|
EOF
|
||||||
uci -q -c ${dropdir} commit wireless
|
uci -c ${dropdir} -q commit wireless
|
||||||
fi
|
|
||||||
|
|
||||||
|
if [ ${is_mesh_rf} -eq 1 ]; then
|
||||||
|
# add monitor interface on mesh rf
|
||||||
|
ifacenum=$((ifacenum + 1))
|
||||||
|
uci -c ${dropdir} -q batch > /dev/null <<-EOF
|
||||||
|
add wireless wifi-iface
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].device=${radio}
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].network=wifi_mon
|
||||||
|
set wireless.@wifi-iface[${ifacenum}].mode=monitor
|
||||||
|
EOF
|
||||||
|
uci -q -c ${dropdir} commit wireless
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
ifacenum=$((ifacenum + 1))
|
ifacenum=$((ifacenum + 1))
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
|
@ -128,7 +128,7 @@ else
|
||||||
}
|
}
|
||||||
|
|
||||||
# make sure unchecked checkboxes are accounted for
|
# make sure unchecked checkboxes are accounted for
|
||||||
foreach(qw(lan_dhcp olsrd_bridge olsrd_gw wifi2_enable lan_dhcp_noroute))
|
foreach(qw(lan_dhcp olsrd_bridge olsrd_gw wifi2_enable lan_dhcp_noroute wifi_enable))
|
||||||
{
|
{
|
||||||
$parms{$_} = 0 unless $parms{$_};
|
$parms{$_} = 0 unless $parms{$_};
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ $parms{wifi_txpower} = $wifi_txpower;
|
||||||
# apply the wifi settings
|
# apply the wifi settings
|
||||||
#
|
#
|
||||||
|
|
||||||
if($parms{button_apply} or $parms{button_save})
|
if(($parms{button_apply} or $parms{button_save}) and $wifi_enable )
|
||||||
{
|
{
|
||||||
if($wifi_distance < 1 or $wifi_distance =~ /\D/)
|
if($wifi_distance < 1 or $wifi_distance =~ /\D/)
|
||||||
{
|
{
|
||||||
|
@ -682,6 +682,14 @@ print "<table width=100% style='border-collapse: collapse;'>
|
||||||
|
|
||||||
push @hidden, "<input type=hidden name=wifi_proto value='static'>";
|
push @hidden, "<input type=hidden name=wifi_proto value='static'>";
|
||||||
|
|
||||||
|
# add enable/disable
|
||||||
|
#
|
||||||
|
|
||||||
|
print "\n<tr><td>Enable</td>";
|
||||||
|
print "<td><input type=checkbox name=wifi_enable value=1";
|
||||||
|
print " checked" if $wifi_enable;
|
||||||
|
print "></td></tr>\n";
|
||||||
|
|
||||||
print "<tr><td><nobr>IP Address</nobr></td>\n";
|
print "<tr><td><nobr>IP Address</nobr></td>\n";
|
||||||
print "<td><input type=text size=15 name=wifi_ip value='$wifi_ip'></td></tr>\n";
|
print "<td><input type=text size=15 name=wifi_ip value='$wifi_ip'></td></tr>\n";
|
||||||
print "<tr><td>Netmask</td>\n";
|
print "<tr><td>Netmask</td>\n";
|
||||||
|
@ -694,53 +702,67 @@ if ( -f "/etc/config/unconfigured" || $parms{button_reset} ) {
|
||||||
$wifi_chanbw = $defaultwifi->{'chanbw'};
|
$wifi_chanbw = $defaultwifi->{'chanbw'};
|
||||||
}
|
}
|
||||||
|
|
||||||
print "<tr><td>SSID</td>\n";
|
if ( ${wifi_enable} )
|
||||||
print "<td><input type=text size=15 name=wifi_ssid value='$wifi_ssid'>";
|
|
||||||
print "-$wifi_chanbw-v3</td></tr>\n";
|
|
||||||
|
|
||||||
push @hidden, "<input type=hidden name=wifi_mode value='$wifi_mode'>";
|
|
||||||
|
|
||||||
print "<tr><td>Channel</td>\n";
|
|
||||||
print "<td><select name=wifi_channel>\n";
|
|
||||||
my $rfchannels=rf_channels_list();
|
|
||||||
foreach $channelnumber (sort {$a <=> $b} keys %{$rfchannels} )
|
|
||||||
{
|
{
|
||||||
selopt($rfchannels->{$channelnumber}, $channelnumber, $wifi_channel);
|
print "<tr><td>SSID</td>\n";
|
||||||
|
print "<td><input type=text size=15 name=wifi_ssid value='$wifi_ssid'>";
|
||||||
|
print "-$wifi_chanbw-v3</td></tr>\n";
|
||||||
|
|
||||||
|
push @hidden, "<input type=hidden name=wifi_mode value='$wifi_mode'>";
|
||||||
|
|
||||||
|
print "<tr><td>Channel</td>\n";
|
||||||
|
print "<td><select name=wifi_channel>\n";
|
||||||
|
my $rfchannels=rf_channels_list();
|
||||||
|
foreach $channelnumber (sort {$a <=> $b} keys %{$rfchannels} )
|
||||||
|
{
|
||||||
|
selopt($rfchannels->{$channelnumber}, $channelnumber, $wifi_channel);
|
||||||
|
}
|
||||||
|
print "</select></td></tr>\n";
|
||||||
|
|
||||||
|
print "<tr><td>Channel Width</td>\n";
|
||||||
|
print "<td><select name=wifi_chanbw>\n";
|
||||||
|
selopt("20 MHz","20",$wifi_chanbw);
|
||||||
|
selopt("10 MHz","10",$wifi_chanbw);
|
||||||
|
selopt("5 MHz","5",$wifi_chanbw);
|
||||||
|
print "</select></td></tr>\n";
|
||||||
|
|
||||||
|
push (@hidden, "<input type=hidden name=wifi_country value='HX'>");
|
||||||
|
|
||||||
|
print "<tr><td colspan=2 align=center><hr><small>Active Settings</small></td></tr>\n";
|
||||||
|
|
||||||
|
print "<tr><td><nobr>Tx Power</nobr></td>\n";
|
||||||
|
print "<td><select name=wifi_txpower>\n";
|
||||||
|
my $txpoweroffset = wifi_txpoweroffset();
|
||||||
|
for($i = wifi_maxpower($wifi_channel); $i >= 1; --$i) { selopt($i+$txpoweroffset ." dBm", $i, $wifi_txpower) }
|
||||||
|
print "</select> <a href=\"/help.html\#power\" target=\"_blank\"><img src=\"/qmark.png\"></a></td></tr>\n";
|
||||||
|
|
||||||
|
print "<tr id='dist' class='dist-norm'><td>Distance to<br />FARTHEST Neighbor</td>\n";
|
||||||
|
|
||||||
|
$wifi_distance=int($wifi_distance); # in meters
|
||||||
|
$wifi_distance_disp_km=int($wifi_distance/1000);
|
||||||
|
$wifi_distance_disp_miles=sprintf("%.2f",$wifi_distance_disp_km*.621371192);
|
||||||
|
|
||||||
|
print "<td><input disabled size=6 type=text name='wifi_distance_disp_miles' value='$wifi_distance_disp_miles' title='Distance to the farthest neighbor'> miles<br />";
|
||||||
|
print "<input disabled size=6 type=text size=4 name='wifi_distance_disp_km' value='$wifi_distance_disp_km' title='Distance to the farthest neighbor'> kilometers<br />";
|
||||||
|
print "<input disabled size=6 type=text size=4 name='wifi_distance_disp_meters' value='$wifi_distance' title='Distance to the farthest neighbor'> meters<br />";
|
||||||
|
|
||||||
|
print "<input id='distance_slider' type='range' min='0' max='150' step='1' value='$wifi_distance_disp_km' oninput='updDist(this.value)' onchange='updDist(this.value)' /><br />";
|
||||||
|
print "<input type='hidden' size='6' name='wifi_distance' value='$wifi_distance' />";
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
print "<tr><td></td><td><input type=submit name=button_apply value=Apply title='Immediately use these active settings'></td></tr>\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
print "</select></td></tr>\n";
|
else
|
||||||
|
{
|
||||||
print "<tr><td>Channel Width</td>\n";
|
push @hidden, "<input type=hidden name=wifi_ssid value='$wifi_ssid'>";
|
||||||
print "<td><select name=wifi_chanbw>\n";
|
push @hidden, "<input type=hidden name=wifi_mode value='$wifi_mode'>";
|
||||||
selopt("20 MHz","20",$wifi_chanbw);
|
push @hidden, "<input type=hidden name=wifi_txpower value='$wifi_txpower'>";
|
||||||
selopt("10 MHz","10",$wifi_chanbw);
|
push @hidden, "<input type=hidden name=wifi_channel value='$wifi_channel'>";
|
||||||
selopt("5 MHz","5",$wifi_chanbw);
|
push @hidden, "<input type=hidden name=wifi_chanbw value='$wifi_chanbw'>";
|
||||||
print "</select></td></tr>\n";
|
push @hidden, "<input type=hidden name=wifi_distance value='$wifi_distance'>";
|
||||||
|
push (@hidden, "<input type=hidden name=wifi_country value='HX'>");
|
||||||
push (@hidden, "<input type=hidden name=wifi_country value='HX'>");
|
}
|
||||||
|
|
||||||
print "<tr><td colspan=2 align=center><hr><small>Active Settings</small></td></tr>\n";
|
|
||||||
|
|
||||||
print "<tr><td><nobr>Tx Power</nobr></td>\n";
|
|
||||||
print "<td><select name=wifi_txpower>\n";
|
|
||||||
my $txpoweroffset = wifi_txpoweroffset();
|
|
||||||
for($i = wifi_maxpower($wifi_channel); $i >= 1; --$i) { selopt($i+$txpoweroffset ." dBm", $i, $wifi_txpower) }
|
|
||||||
print "</select> <a href=\"/help.html\#power\" target=\"_blank\"><img src=\"/qmark.png\"></a></td></tr>\n";
|
|
||||||
|
|
||||||
print "<tr id='dist' class='dist-norm'><td>Distance to<br />FARTHEST Neighbor</td>\n";
|
|
||||||
|
|
||||||
$wifi_distance=int($wifi_distance); # in meters
|
|
||||||
$wifi_distance_disp_km=int($wifi_distance/1000);
|
|
||||||
$wifi_distance_disp_miles=sprintf("%.2f",$wifi_distance_disp_km*.621371192);
|
|
||||||
|
|
||||||
print "<td><input disabled size=6 type=text name='wifi_distance_disp_miles' value='$wifi_distance_disp_miles' title='Distance to the farthest neighbor'> miles<br />";
|
|
||||||
print "<input disabled size=6 type=text size=4 name='wifi_distance_disp_km' value='$wifi_distance_disp_km' title='Distance to the farthest neighbor'> kilometers<br />";
|
|
||||||
print "<input disabled size=6 type=text size=4 name='wifi_distance_disp_meters' value='$wifi_distance' title='Distance to the farthest neighbor'> meters<br />";
|
|
||||||
|
|
||||||
print "<input id='distance_slider' type='range' min='0' max='150' step='1' value='$wifi_distance_disp_km' oninput='updDist(this.value)' onchange='updDist(this.value)' /><br />";
|
|
||||||
print "<input type='hidden' size='6' name='wifi_distance' value='$wifi_distance' />";
|
|
||||||
print "</td></tr>\n";
|
|
||||||
|
|
||||||
print "<tr><td></td><td><input type=submit name=button_apply value=Apply title='Immediately use these active settings'></td></tr>\n";
|
|
||||||
|
|
||||||
print "</table></td>\n";
|
print "</table></td>\n";
|
||||||
|
|
||||||
|
@ -833,18 +855,18 @@ else
|
||||||
|
|
||||||
print "<tr><td colspan=2><hr></hr></td></tr>";
|
print "<tr><td colspan=2><hr></hr></td></tr>";
|
||||||
|
|
||||||
if ( $phycount > 1 ) {
|
if ( $phycount > 1 or ! $wifi_enable ) {
|
||||||
|
|
||||||
# determine AP's band
|
# determine AP's band
|
||||||
if ( "$phy" eq "phy0" ) { $APphy="phy1"; }
|
if ( "$phy" eq "phy0" ) { $APphy="phy1"; }
|
||||||
else { $APphy="phy0"; }
|
else { $APphy="phy0"; }
|
||||||
$rc3 = system("iw phy ${APphy} info | grep -q '5180 MHz > /dev/null");
|
$rc3 = system("iw phy ${APphy} info | grep -q '5180 MHz' > /dev/null");
|
||||||
undef @chan;
|
undef @chan;
|
||||||
if ( $rc3 ) {
|
if ( $rc3 ) {
|
||||||
@chan=@cfive;
|
@chan=@ctwo;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@chan=@ctwo;
|
@chan=@cfive;
|
||||||
}
|
}
|
||||||
|
|
||||||
print "<tr><th colspan=2>LAN Access Point</th></tr>";
|
print "<tr><th colspan=2>LAN Access Point</th></tr>";
|
||||||
|
@ -874,6 +896,14 @@ if ( $phycount > 1 ) {
|
||||||
print "<td><input type=password size=15 name=wifi2_key value='$wifi2_key'>";
|
print "<td><input type=password size=15 name=wifi2_key value='$wifi2_key'>";
|
||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
push @hidden, "<input type=hidden name=wifi2_enable value='$wifi2_enable'>";
|
||||||
|
push @hidden, "<input type=hidden name=wifi2_ssid value='$wifi2_ssid'>";
|
||||||
|
push @hidden, "<input type=hidden name=wifi2_key value='$wifi2_key'>";
|
||||||
|
push @hidden, "<input type=hidden name=wifi2_channel value='$wifi2_channel'>";
|
||||||
|
push @hidden, "<input type=hidden name=wifi2_encryption value='$wifi2_encryption'>";
|
||||||
|
}
|
||||||
|
|
||||||
if(0) # disable for now
|
if(0) # disable for now
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,21 +50,27 @@ $config = "not set" if $config eq "" or not -d "/etc/config.mesh";
|
||||||
$wifi_iface = get_interface("wifi");
|
$wifi_iface = get_interface("wifi");
|
||||||
$wifi_iface =~ /wlan(\d+)/;
|
$wifi_iface =~ /wlan(\d+)/;
|
||||||
$radio = ( defined $1 )? "radio$1" : "radio0";
|
$radio = ( defined $1 )? "radio$1" : "radio0";
|
||||||
|
$wifi_disable = ( $wifi_iface =~ /eth.*$/ )? 1 : 0;
|
||||||
|
|
||||||
($junk, $wifi_channel) = &uci_get_named_option("wireless", "$radio", "channel");
|
if ( ! $wifi_disable )
|
||||||
if ($wifi_channel >= 76 and $wifi_channel <= 99)
|
|
||||||
{
|
{
|
||||||
$wifi_channel = ($wifi_channel*5+3000);
|
($junk, $wifi_channel) = &uci_get_named_option("wireless", "$radio", "channel");
|
||||||
}
|
if ($wifi_channel >= 76 and $wifi_channel <= 99)
|
||||||
($junk, $wifi_chanbw) = &uci_get_named_option("wireless", "$radio", "chanbw");
|
{
|
||||||
$node_desc = `/sbin/uci -q get system.\@system[0].description`; #pull the node description from uci
|
$wifi_channel = ($wifi_channel*5+3000);
|
||||||
$wifi_ssid = "N/A";
|
}
|
||||||
@wisections = &uci_get_all_indexed_by_sectiontype("wireless", "wifi-iface");
|
($junk, $wifi_chanbw) = &uci_get_named_option("wireless", "$radio", "chanbw");
|
||||||
foreach(@wisections) {
|
|
||||||
if ($_->{network} eq "wifi") {
|
$wifi_ssid = "N/A";
|
||||||
$wifi_ssid = $_->{ssid};
|
@wisections = &uci_get_all_indexed_by_sectiontype("wireless", "wifi-iface");
|
||||||
|
foreach(@wisections) {
|
||||||
|
if ($_->{network} eq "wifi") {
|
||||||
|
$wifi_ssid = $_->{ssid};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$node_desc = `/sbin/uci -q get system.\@system[0].description`; #pull the node description from uci
|
||||||
#get location info if available
|
#get location info if available
|
||||||
$lat_lon = "<strong>Location Not Available</strong>";
|
$lat_lon = "<strong>Location Not Available</strong>";
|
||||||
if(-f "/etc/latlon") {
|
if(-f "/etc/latlon") {
|
||||||
|
@ -117,8 +123,11 @@ if($config eq "mesh")
|
||||||
{
|
{
|
||||||
print " ";
|
print " ";
|
||||||
print "<button type=button onClick='window.location=\"mesh\"' title='See what is on the mesh'>Mesh Status</button>\n";
|
print "<button type=button onClick='window.location=\"mesh\"' title='See what is on the mesh'>Mesh Status</button>\n";
|
||||||
print " ";
|
if ( ! $wifi_disable )
|
||||||
print "<button type=button onClick='window.location=\"scan\"' title='See what wireless networks are nearby'>WiFi Scan</button>\n";
|
{
|
||||||
|
print " ";
|
||||||
|
print "<button type=button onClick='window.location=\"scan\"' title='See what wireless networks are nearby'>WiFi Scan</button>\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print " ";
|
print " ";
|
||||||
|
@ -164,10 +173,18 @@ $browser_ip = "";
|
||||||
|
|
||||||
# left column - network interface info
|
# left column - network interface info
|
||||||
|
|
||||||
# show the wifi address
|
# show the Primary/Wifi address
|
||||||
($ip, $mask, $bcast, $net, $cidr) = get_ip4_network($wifi_iface);
|
($ip, $mask, $bcast, $net, $cidr) = get_ip4_network($wifi_iface);
|
||||||
$cidr = "/ $cidr" if $cidr;
|
$cidr = "/ $cidr" if $cidr;
|
||||||
$str = "<th align=right><nobr>WiFi address</nobr></th><td>$ip <small>$cidr</small><br>";
|
if (! $wifi_disable )
|
||||||
|
{
|
||||||
|
$str = "<th align=right><nobr>Wifi address</nobr></th><td>$ip <small>$cidr</small><br>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$str = "<th align=right><nobr>Primary address</nobr></th><td>$ip <small>$cidr</small><br>";
|
||||||
|
}
|
||||||
|
|
||||||
# $str .= "<small><nobr>" . get_ip6_addr($wifi_iface) . "</nobr></small></td>";
|
# $str .= "<small><nobr>" . get_ip6_addr($wifi_iface) . "</nobr></small></td>";
|
||||||
push @col1, $str;
|
push @col1, $str;
|
||||||
|
|
||||||
|
@ -217,19 +234,21 @@ if($browser_ip)
|
||||||
push @col1, $str . "</td>";
|
push @col1, $str . "</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$str = "<th align=right><nobr>SSID</nobr></th><td>$wifi_ssid";
|
if ( ! $wifi_disable )
|
||||||
push @col1, $str . "</td>";
|
{
|
||||||
|
$str = "<th align=right><nobr>SSID</nobr></th><td>$wifi_ssid";
|
||||||
|
push @col1, $str . "</td>";
|
||||||
|
|
||||||
$str = "<th align=right><nobr>Channel</nobr></th><td>$wifi_channel";
|
$str = "<th align=right><nobr>Channel</nobr></th><td>$wifi_channel";
|
||||||
push @col1, $str . "</td>";
|
push @col1, $str . "</td>";
|
||||||
|
|
||||||
$str = "<th align=right><nobr>Bandwidth</nobr></th><td>$wifi_chanbw Mhz";
|
|
||||||
push @col1, $str . "</td>";
|
|
||||||
|
|
||||||
|
$str = "<th align=right><nobr>Bandwidth</nobr></th><td>$wifi_chanbw Mhz";
|
||||||
|
push @col1, $str . "</td>";
|
||||||
|
}
|
||||||
|
|
||||||
# right column - system info
|
# right column - system info
|
||||||
|
|
||||||
if($config eq "mesh")
|
if($config eq "mesh" and ! $wifi_disable )
|
||||||
{
|
{
|
||||||
$str = "<th align=right valign=middle><nobr>Signal/Noise/Ratio</nobr></th><td valign=middle><nobr>";
|
$str = "<th align=right valign=middle><nobr>Signal/Noise/Ratio</nobr></th><td valign=middle><nobr>";
|
||||||
($s, $n) = get_wifi_signal($wifi_iface);
|
($s, $n) = get_wifi_signal($wifi_iface);
|
||||||
|
|
|
@ -111,6 +111,8 @@ system ("rm", "-r", "-f", "/tmp/sd");
|
||||||
|
|
||||||
foreach $path (@files) {
|
foreach $path (@files) {
|
||||||
|
|
||||||
|
next if (! -e $path and ! -d $path);
|
||||||
|
|
||||||
if ( $path =~ /^\/(.*\/).*\/$/ ) {
|
if ( $path =~ /^\/(.*\/).*\/$/ ) {
|
||||||
my $rpath = $1;
|
my $rpath = $1;
|
||||||
system("mkdir", "-p", "/tmp/sd/$rpath");
|
system("mkdir", "-p", "/tmp/sd/$rpath");
|
||||||
|
@ -132,6 +134,13 @@ foreach $path (@sensitive) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#Remove passwords from config files
|
||||||
|
system ("cat /tmp/sd/etc/config/wireless | sed -e 's/ key.*\$/ key \*\*\*\*\*\*/' > /tmp/sd/etc/config/wireless.sav");
|
||||||
|
unlink "rm /tmp/sd/etc/config/wireless";
|
||||||
|
rename "/tmp/sd/etc/config/wireless.sav", "/tmp/sd/etc/config/wireless";
|
||||||
|
system ("cat /tmp/sd/etc/config.mesh/_setup | sed -e 's/_key =.*\$/_key =/' > /tmp/sd/etc/config.mesh/_setup.sav");
|
||||||
|
unlink "/tmp/sd/etc/config.mesh/_setup";
|
||||||
|
rename "/tmp/sd/etc/config.mesh/_setup.sav", "/tmp/sd/etc/config.mesh/_setup";
|
||||||
|
|
||||||
|
|
||||||
system("touch","/tmp/sd/data.txt");
|
system("touch","/tmp/sd/data.txt");
|
||||||
|
|
Loading…
Reference in New Issue