Merge pull request #609 from zbchristian/zbchristian-wlan-switch

add session variable for wifi client interface
This commit is contained in:
Bill Zimmerman 2020-06-09 21:17:31 +02:00 committed by GitHub
commit 9faa98dd51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 30 deletions

View File

@ -17,7 +17,7 @@ function DisplayWPAConfig()
if (isset($_POST['connect'])) { if (isset($_POST['connect'])) {
$result = 0; $result = 0;
exec('sudo wpa_cli -i ' . $_SESSION['ap_interface'] . ' select_network '.strval($_POST['connect'])); exec('sudo wpa_cli -i ' . $_SESSION['wifi_client_interface'] . ' select_network '.strval($_POST['connect']));
$status->addMessage('New network selected', 'success'); $status->addMessage('New network selected', 'success');
} elseif (isset($_POST['client_settings'])) { } elseif (isset($_POST['client_settings'])) {
$tmp_networks = $networks; $tmp_networks = $networks;
@ -77,7 +77,7 @@ function DisplayWPAConfig()
if ($ok) { if ($ok) {
system('sudo cp /tmp/wifidata ' . RASPI_WPA_SUPPLICANT_CONFIG, $returnval); system('sudo cp /tmp/wifidata ' . RASPI_WPA_SUPPLICANT_CONFIG, $returnval);
if ($returnval == 0) { if ($returnval == 0) {
exec('sudo wpa_cli -i ' . $_SESSION['ap_interface'] . ' reconfigure', $reconfigure_out, $reconfigure_return); exec('sudo wpa_cli -i ' . $_SESSION['wifi_client_interface'] . ' reconfigure', $reconfigure_out, $reconfigure_return);
if ($reconfigure_return == 0) { if ($reconfigure_return == 0) {
$status->addMessage('Wifi settings updated successfully', 'success'); $status->addMessage('Wifi settings updated successfully', 'success');
$networks = $tmp_networks; $networks = $tmp_networks;

View File

@ -11,7 +11,7 @@ function DisplayDashboard(&$extraFooterScripts)
getWifiInterface(); getWifiInterface();
$status = new StatusMessages(); $status = new StatusMessages();
// Need this check interface name for proper shell execution. // Need this check interface name for proper shell execution.
if (!preg_match('/^([a-zA-Z0-9]+)$/', $_SESSION['ap_interface'])) { if (!preg_match('/^([a-zA-Z0-9]+)$/', $_SESSION['wifi_client_interface'])) {
$status->addMessage(_('Interface name invalid.'), 'danger'); $status->addMessage(_('Interface name invalid.'), 'danger');
$status->showMessages(); $status->showMessages();
return; return;
@ -22,7 +22,7 @@ function DisplayDashboard(&$extraFooterScripts)
$status->showMessages(); $status->showMessages();
return; return;
} }
exec('ip a show '.$_SESSION['ap_interface'], $stdoutIp); exec('ip a show '.$_SESSION['wifi_client_interface'], $stdoutIp);
$stdoutIpAllLinesGlued = implode(" ", $stdoutIp); $stdoutIpAllLinesGlued = implode(" ", $stdoutIp);
$stdoutIpWRepeatedSpaces = preg_replace('/\s\s+/', ' ', $stdoutIpAllLinesGlued); $stdoutIpWRepeatedSpaces = preg_replace('/\s\s+/', ' ', $stdoutIpAllLinesGlued);
@ -90,10 +90,7 @@ function DisplayDashboard(&$extraFooterScripts)
define('SSIDMAXLEN', 32); define('SSIDMAXLEN', 32);
// Warning iw comes with: "Do NOT screenscrape this tool, we don't consider its output stable." // Warning iw comes with: "Do NOT screenscrape this tool, we don't consider its output stable."
// fetch first wireless interface // fetch first wireless interface
$iface = $_SESSION['ap_interface']; exec('iw dev ' .$_SESSION['wifi_client_interface']. ' link ', $stdoutIw);
exec("iw dev | awk '$1==\"Interface\" && $2!=\"$iface\" {print $2}'",$iface2);
$wifi_client_interface = empty($iface2) ? $iface1 : trim($iface2[0]);
exec('iw dev ' .$wifi_client_interface. ' link ', $stdoutIw);
$stdoutIwAllLinesGlued = implode(' ', $stdoutIw); $stdoutIwAllLinesGlued = implode(' ', $stdoutIw);
$stdoutIwWRepSpaces = preg_replace('/\s\s+/', ' ', $stdoutIwAllLinesGlued); $stdoutIwWRepSpaces = preg_replace('/\s\s+/', ' ', $stdoutIwAllLinesGlued);
@ -125,7 +122,7 @@ function DisplayDashboard(&$extraFooterScripts)
$bitrate = empty($bitrate) ? "-" : $bitrate; $bitrate = empty($bitrate) ? "-" : $bitrate;
// txpower is now displayed on iw dev(..) info command, not on link command. // txpower is now displayed on iw dev(..) info command, not on link command.
exec('iw dev '.$_SESSION['ap_interface'].' info ', $stdoutIwInfo); exec('iw dev '.$_SESSION['wifi_client_interface'].' info ', $stdoutIwInfo);
$stdoutIwInfoAllLinesGlued = implode(' ', $stdoutIwInfo); $stdoutIwInfoAllLinesGlued = implode(' ', $stdoutIwInfo);
$stdoutIpInfoWRepSpaces = preg_replace('/\s\s+/', ' ', $stdoutIwInfoAllLinesGlued); $stdoutIpInfoWRepSpaces = preg_replace('/\s\s+/', ' ', $stdoutIwInfoAllLinesGlued);
@ -156,7 +153,7 @@ function DisplayDashboard(&$extraFooterScripts)
// Pressed stop button // Pressed stop button
if ($interfaceState === 'UP') { if ($interfaceState === 'UP') {
$status->addMessage(sprintf(_('Interface is going %s.'), _('down')), 'warning'); $status->addMessage(sprintf(_('Interface is going %s.'), _('down')), 'warning');
exec('sudo ip link set '.$_SESSION['ap_interface'].' down'); exec('sudo ip link set '.$_SESSION['wifi_client_interface'].' down');
$wlan0up = false; $wlan0up = false;
$status->addMessage(sprintf(_('Interface is now %s.'), _('down')), 'success'); $status->addMessage(sprintf(_('Interface is now %s.'), _('down')), 'success');
} elseif ($interfaceState === 'unknown') { } elseif ($interfaceState === 'unknown') {
@ -168,8 +165,8 @@ function DisplayDashboard(&$extraFooterScripts)
// Pressed start button // Pressed start button
if ($interfaceState === 'DOWN') { if ($interfaceState === 'DOWN') {
$status->addMessage(sprintf(_('Interface is going %s.'), _('up')), 'warning'); $status->addMessage(sprintf(_('Interface is going %s.'), _('up')), 'warning');
exec('sudo ip link set ' .$_SESSION['ap_interface']. ' up'); exec('sudo ip link set ' .$_SESSION['wifi_client_interface']. ' up');
exec('sudo ip -s a f label ' . $_SESSION['ap_interface']); exec('sudo ip -s a f label ' . $_SESSION['wifi_client_interface']);
$wlan0up = true; $wlan0up = true;
$status->addMessage(sprintf(_('Interface is now %s.'), _('up')), 'success'); $status->addMessage(sprintf(_('Interface is now %s.'), _('up')), 'success');
} elseif ($interfaceState === 'unknown') { } elseif ($interfaceState === 'unknown') {

View File

@ -53,10 +53,10 @@ function nearbyWifiStations(&$networks, $cached = true)
$scan_results = cache( $scan_results = cache(
$cacheKey, function () { $cacheKey, function () {
exec('sudo wpa_cli -i ' .$_SESSION['ap_interface']. ' scan'); exec('sudo wpa_cli -i ' .$_SESSION['wifi_client_interface']. ' scan');
sleep(3); sleep(3);
exec('sudo wpa_cli -i ' .$_SESSION['ap_interface']. ' scan_results', $stdout); exec('sudo wpa_cli -i ' .$_SESSION['wifi_client_interface']. ' scan_results', $stdout);
array_shift($stdout); array_shift($stdout);
return implode("\n", $stdout); return implode("\n", $stdout);
@ -107,7 +107,7 @@ function nearbyWifiStations(&$networks, $cached = true)
function connectedWifiStations(&$networks) function connectedWifiStations(&$networks)
{ {
exec('iwconfig ' .$_SESSION['ap_interface'], $iwconfig_return); exec('iwconfig ' .$_SESSION['wifi_client_interface'], $iwconfig_return);
foreach ($iwconfig_return as $line) { foreach ($iwconfig_return as $line) {
if (preg_match('/ESSID:\"([^"]+)\"/i', $line, $iwconfig_ssid)) { if (preg_match('/ESSID:\"([^"]+)\"/i', $line, $iwconfig_ssid)) {
$networks[$iwconfig_ssid[1]]['connected'] = true; $networks[$iwconfig_ssid[1]]['connected'] = true;
@ -144,14 +144,10 @@ function getWifiInterface()
{ {
if (empty($_SESSION['ap_interface'])) { if (empty($_SESSION['ap_interface'])) {
$arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini'); $arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini');
if (isset($arrHostapdConf['WifiInterface'])) { $iface = $_SESSION['ap_interface'] = isset($arrHostapdConf['WifiInterface']) ? $arrHostapdConf['WifiInterface'] : RASPI_WIFI_AP_INTERFACE;
$iface = $arrHostapdConf['WifiInterface']; // check for 2nd wifi interface -> wifi client on different interface
// check for 2nd wifi interface exec("iw dev | awk '$1==\"Interface\" && $2!=\"$iface\" {print $2}'",$iface2);
exec("iw dev | awk '$1==\"Interface\" && $2!=\"$iface\" {print $2}'",$iface2); $_SESSION['wifi_client_interface'] = empty($iface2) ? $iface : trim($iface2[0]);
$_SESSION['ap_interface'] = empty($iface2) ? $iface : trim($iface2[0]);
} else { // fallback to default
$_SESSION['ap_interface'] = RASPI_WIFI_AP_INTERFACE;
}
} }
} }

View File

@ -1,12 +1,11 @@
<?php <?php
$arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini'); $arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini');
if ($arrHostapdConf['WifiAPEnable'] == 1) { if ($arrHostapdConf['WifiAPEnable'] == 1) {
$ap_interface = 'uap0'; $client_interface = 'uap0';
} else { } else {
$ap_interface = $_SESSION['ap_interface']; $client_interface = $_SESSION['wifi_client_interface'];
} }
$pars=parse_ini_file(RASPI_HOSTAPD_CONFIG,false,INI_SCANNER_RAW ); $ap_iface = $_SESSION['ap_interface'];
$ap_iface = $pars['interface'];
$MACPattern = '"([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}"'; $MACPattern = '"([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}"';
if ($arrHostapdConf['BridgedEnable'] == 1) { if ($arrHostapdConf['BridgedEnable'] == 1) {
$moreLink = "index.php?page=hostapd_conf"; $moreLink = "index.php?page=hostapd_conf";
@ -28,7 +27,7 @@ $ifaceStatus = $wlan0up ? "up" : "down";
<div class="col"> <div class="col">
<button class="btn btn-light btn-icon-split btn-sm service-status float-right"> <button class="btn btn-light btn-icon-split btn-sm service-status float-right">
<span class="icon"><i class="fas fa-circle service-status-<?php echo $ifaceStatus ?>"></i></span> <span class="icon"><i class="fas fa-circle service-status-<?php echo $ifaceStatus ?>"></i></span>
<span class="text service-status"><?php echo strtolower($ap_interface) .' '. _($ifaceStatus) ?></span> <span class="text service-status"><?php echo strtolower($client_interface) .' '. _($ifaceStatus) ?></span>
</button> </button>
</div> </div>
</div><!-- /.row --> </div><!-- /.row -->
@ -128,9 +127,9 @@ $ifaceStatus = $wlan0up ? "up" : "down";
<?php echo CSRFTokenFieldTag() ?> <?php echo CSRFTokenFieldTag() ?>
<?php if (!RASPI_MONITOR_ENABLED) : ?> <?php if (!RASPI_MONITOR_ENABLED) : ?>
<?php if (!$wlan0up) : ?> <?php if (!$wlan0up) : ?>
<input type="submit" class="btn btn-success" value="<?php echo _("Start").' '.$ap_interface ?>" name="ifup_wlan0" /> <input type="submit" class="btn btn-success" value="<?php echo _("Start").' '.$client_interface ?>" name="ifup_wlan0" />
<?php else : ?> <?php else : ?>
<input type="submit" class="btn btn-warning" value="<?php echo _("Stop").' '.$ap_interface ?>" name="ifdown_wlan0" /> <input type="submit" class="btn btn-warning" value="<?php echo _("Stop").' '.$client_interface ?>" name="ifdown_wlan0" />
<?php endif ?> <?php endif ?>
<?php endif ?> <?php endif ?>
<a href="?page=<?php echo $_GET['page'] ?>" class="btn btn-outline btn-primary"><i class="fas fa-sync-alt"></i> <?php echo _("Refresh") ?></a> <a href="?page=<?php echo $_GET['page'] ?>" class="btn btn-outline btn-primary"><i class="fas fa-sync-alt"></i> <?php echo _("Refresh") ?></a>