diff --git a/includes/hostapd.php b/includes/hostapd.php index 2f6bfdcf..d5c72d43 100755 --- a/includes/hostapd.php +++ b/includes/hostapd.php @@ -27,7 +27,12 @@ function DisplayHostAPDConfig() } elseif( isset($_POST['StartHotspot']) ) { if (CSRFValidate()) { $status->addMessage('Attempting to start hotspot', 'info'); - exec( 'sudo /etc/init.d/hostapd start', $return ); + if ($arrHostapdConf['WifiAPEnable'] == 1) { + //exec('sudo /etc/raspap/hostapd/servicesdisable.sh'); + exec('sudo /etc/raspap/hostapd/servicesstart.sh', $return ); + } else { + exec( 'sudo /etc/init.d/hostapd start', $return ); + } foreach( $return as $line ) { $status->addMessage($line, 'info'); } @@ -186,7 +191,7 @@ if (in_array($arrConfig['country_code'], $countries_max11channels)) {
@@ -535,11 +540,13 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) $wifiAPEnable = 0; if($arrHostapdConf['WifiAPEnable'] == 0) { if(isset($_POST['wifiAPEnable'])) { - $wifiAPEnable = 1; - //exec('sudo /etc/raspap/hostapd/servicesdisable.sh'); - //exec('sudo /etc/raspap/hostapd/servicesstart.sh'); + $wifiAPEnable = 1; } - } + } else { + if(isset($_POST['wifiAPEnable'])) { + $wifiAPEnable = 1; + } + } // Check for Logfile output checkbox $logEnable = 0; @@ -558,7 +565,10 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) exec('sudo /etc/raspap/hostapd/disablelog.sh'); } } - write_php_ini(["LogEnable" => $logEnable],'/etc/raspap/hostapd.ini'); + $cfg = []; + $cfg['LogEnable'] = $logEnable; + $cfg['WifiAPEnable'] = $wifiAPEnable; + write_php_ini($cfg,'/etc/raspap/hostapd.ini'); // Verify input if (empty($_POST['ssid']) || strlen($_POST['ssid']) > 32) { @@ -619,15 +629,37 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) fwrite($tmp_file, 'hw_mode='.$_POST['hw_mode'].PHP_EOL); fwrite($tmp_file, 'ieee80211n=0'.PHP_EOL); } - fwrite($tmp_file, 'wpa_passphrase='.$_POST['wpa_passphrase'].PHP_EOL); - fwrite($tmp_file, 'interface='.$_POST['interface'].PHP_EOL); + if ($wifiAPEnable == 1) { + fwrite($tmp_file, 'interface=uap0'.PHP_EOL); + } else { + fwrite($tmp_file, 'interface='.$_POST['interface'].PHP_EOL); + } fwrite($tmp_file, 'wpa='.$_POST['wpa'].PHP_EOL); fwrite($tmp_file, 'wpa_pairwise='.$_POST['wpa_pairwise'].PHP_EOL); fwrite($tmp_file, 'country_code='.$_POST['country_code'].PHP_EOL); fwrite($tmp_file, 'ignore_broadcast_ssid='.$ignore_broadcast_ssid.PHP_EOL); fclose($tmp_file); + if ($wifiAPEnable == 1) { + // Enable uap0 configuration in dnsmasq for Wifi client AP mode + $arrDnsmasqConf = parse_ini_file(RASPI_DNSMASQ_CONFIG); + + $config = 'interface=lo,uap0 # Enable uap0 interface for wireless client AP mode'.PHP_EOL; + $config.= 'bind-interfaces # Bind to the interfaces'.PHP_EOL; + $config.= 'server=8.8.8.8 # Forward DNS requests to Google DNS'.PHP_EOL; + $config.= 'domain-needed # Don\'t forward short names'.PHP_EOL; + $config.= 'bogus-priv # Never forward addresses in the non-routed address spaces'.PHP_EOL; + $config.= 'dhcp-range=192.168.50.50,192.168.50.150,12h'.PHP_EOL; + } else { + // Fallback to default config + // Todo: + $config = 'interface='.$_POST['interface'].PHP_EOL; + $config .= 'dhcp-range=10.3.141.50,10.3.141.255,255.255.255.0,12h'.PHP_EOL; + } + exec('echo "'.$config.'" > /tmp/dhcpddata', $temp); + system('sudo cp /tmp/dhcpddata '.RASPI_DNSMASQ_CONFIG, $return); + system( "sudo cp /tmp/hostapddata " . RASPI_HOSTAPD_CONFIG, $return ); if( $return == 0 ) { $status->addMessage('Wifi Hotspot settings saved', 'success');