2016-07-27 20:43:40 +00:00
< ? php
2016-08-05 14:50:05 +00:00
2020-06-07 18:12:00 +00:00
require_once 'status_messages.php' ;
2020-02-15 17:57:46 +00:00
require_once 'app/lib/system.php' ;
2020-06-07 16:17:16 +00:00
require_once 'includes/wifi_functions.php' ;
2020-06-07 16:25:11 +00:00
require_once 'includes/config.php' ;
2016-08-05 14:50:05 +00:00
2020-06-07 16:17:16 +00:00
getWifiInterface ();
2020-06-07 13:23:40 +00:00
2016-07-27 20:43:40 +00:00
/**
2020-02-15 17:57:46 +00:00
*
*
*/
2018-10-03 12:40:55 +00:00
function DisplayHostAPDConfig ()
{
2019-04-10 08:37:35 +00:00
$status = new StatusMessages ();
2020-02-15 17:57:46 +00:00
$system = new System ();
2019-04-10 08:37:35 +00:00
$arrConfig = array ();
2019-08-01 21:01:31 +00:00
$arr80211Standard = [
'a' => '802.11a - 5 GHz' ,
'b' => '802.11b - 2.4 GHz' ,
'g' => '802.11g - 2.4 GHz' ,
2019-12-26 06:17:27 +00:00
'n' => '802.11n - 2.4 GHz' ,
'ac' => '802.11.ac - 5 GHz'
2020-02-15 17:57:46 +00:00
];
2019-04-10 08:37:35 +00:00
$arrSecurity = array ( 1 => 'WPA' , 2 => 'WPA2' , 3 => 'WPA+WPA2' , 'none' => _ ( " None " ));
$arrEncType = array ( 'TKIP' => 'TKIP' , 'CCMP' => 'CCMP' , 'TKIP CCMP' => 'TKIP+CCMP' );
2019-12-13 14:05:41 +00:00
$managedModeEnabled = false ;
2019-04-10 08:37:35 +00:00
exec ( " ip -o link show | awk -F': ' ' { print $ 2}' " , $interfaces );
2020-07-10 17:28:28 +00:00
exec ( " iw reg get | awk '/country / { sub(/:/, \" \" , $ 2); print $ 2 }' " , $country_code );
2019-04-10 08:37:35 +00:00
2020-02-14 02:38:46 +00:00
if ( ! RASPI_MONITOR_ENABLED ) {
if ( isset ( $_POST [ 'SaveHostAPDSettings' ])) {
SaveHostAPDConfig ( $arrSecurity , $arrEncType , $arr80211Standard , $interfaces , $status );
2020-03-23 12:41:06 +00:00
}
}
$arrHostapdConf = parse_ini_file ( '/etc/raspap/hostapd.ini' );
if ( ! RASPI_MONITOR_ENABLED ) {
if ( isset ( $_POST [ 'StartHotspot' ]) || isset ( $_POST [ 'RestartHotspot' ])) {
2020-02-14 02:38:46 +00:00
$status -> addMessage ( 'Attempting to start hotspot' , 'info' );
2020-03-12 21:02:26 +00:00
if ( $arrHostapdConf [ 'BridgedEnable' ] == 1 ) {
2020-03-10 08:42:08 +00:00
exec ( 'sudo /etc/raspap/hostapd/servicestart.sh --interface br0 --seconds 3' , $return );
2020-03-12 21:02:26 +00:00
} elseif ( $arrHostapdConf [ 'WifiAPEnable' ] == 1 ) {
exec ( 'sudo /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3' , $return );
2020-02-14 02:38:46 +00:00
} else {
2020-02-18 21:01:38 +00:00
exec ( 'sudo /etc/raspap/hostapd/servicestart.sh --seconds 3' , $return );
2020-02-14 02:38:46 +00:00
}
foreach ( $return as $line ) {
$status -> addMessage ( $line , 'info' );
}
} elseif ( isset ( $_POST [ 'StopHotspot' ])) {
$status -> addMessage ( 'Attempting to stop hotspot' , 'info' );
exec ( 'sudo /bin/systemctl stop hostapd.service' , $return );
foreach ( $return as $line ) {
$status -> addMessage ( $line , 'info' );
}
2019-04-10 08:37:35 +00:00
}
}
2017-11-02 14:43:41 +00:00
2019-04-10 08:37:35 +00:00
exec ( 'cat ' . RASPI_HOSTAPD_CONFIG , $hostapdconfig );
2020-05-12 06:50:28 +00:00
exec ( 'iwgetid ' . $_POST [ 'interface' ] . ' -r' , $wifiNetworkID );
2020-02-15 17:57:46 +00:00
if ( ! empty ( $wifiNetworkID [ 0 ])) {
2019-12-13 14:05:41 +00:00
$managedModeEnabled = true ;
}
2020-02-01 11:07:54 +00:00
$hostapdstatus = $system -> hostapdStatus ();
2019-11-01 09:10:24 +00:00
$serviceStatus = $hostapdstatus [ 0 ] == 0 ? " down " : " up " ;
2016-07-27 20:43:40 +00:00
2019-04-10 08:37:35 +00:00
foreach ( $hostapdconfig as $hostapdconfigline ) {
if ( strlen ( $hostapdconfigline ) === 0 ) {
continue ;
}
2016-07-27 20:43:40 +00:00
2019-04-10 08:37:35 +00:00
if ( $hostapdconfigline [ 0 ] != " # " ) {
2020-02-15 17:57:46 +00:00
$arrLine = explode ( " = " , $hostapdconfigline );
2019-04-10 08:37:35 +00:00
$arrConfig [ $arrLine [ 0 ]] = $arrLine [ 1 ];
}
};
2020-09-11 18:03:14 +00:00
// assign beacon_int boolean if value is set
if ( isset ( $arrConfig [ 'beacon_int' ])) {
$arrConfig [ 'beacon_interval_bool' ] = 1 ;
}
// assign disassoc_low_ack boolean if value is set
if ( isset ( $arrConfig [ 'disassoc_low_ack' ])) {
$arrConfig [ 'disassoc_low_ack_bool' ] = 1 ;
}
2020-07-10 17:28:28 +00:00
// assign country_code from iw reg if not set in config
if ( ! isset ( $arrConfig [ 'country_code' ]) && isset ( $country_code [ 0 ])) {
$arrConfig [ 'country_code' ] = $country_code [ 0 ];
}
2020-02-15 17:57:46 +00:00
echo renderTemplate (
" hostapd " , compact (
" status " ,
" serviceStatus " ,
" hostapdstatus " ,
" managedModeEnabled " ,
" interfaces " ,
" arrConfig " ,
" arr80211Standard " ,
" selectedHwMode " ,
" arrSecurity " ,
" arrEncType " ,
" arrHostapdConf "
)
);
2016-07-27 20:43:40 +00:00
}
2016-07-27 20:48:27 +00:00
2019-04-10 08:37:35 +00:00
function SaveHostAPDConfig ( $wpa_array , $enc_types , $modes , $interfaces , $status )
{
// It should not be possible to send bad data for these fields so clearly
// someone is up to something if they fail. Fail silently.
2020-02-15 17:57:46 +00:00
if ( ! ( array_key_exists ( $_POST [ 'wpa' ], $wpa_array )
&& array_key_exists ( $_POST [ 'wpa_pairwise' ], $enc_types )
&& array_key_exists ( $_POST [ 'hw_mode' ], $modes ))
) {
2019-04-10 08:37:35 +00:00
error_log ( " Attempting to set hostapd config with wpa=' " . $_POST [ 'wpa' ] . " ', wpa_pairwise=' " . $_POST [ 'wpa_pairwise' ] . " ' and hw_mode=' " . $_POST [ 'hw_mode' ] . " ' " ); // FIXME: log injection
return false ;
}
2020-10-25 07:48:41 +00:00
// Validate input
$good_input = true ;
2018-08-03 23:58:34 +00:00
2019-04-10 08:37:35 +00:00
if ( ! filter_var ( $_POST [ 'channel' ], FILTER_VALIDATE_INT )) {
2020-10-25 07:48:41 +00:00
$status -> addMessage ( 'Attempting to set channel to invalid number.' , 'danger' );
$good_input = false ;
2019-04-10 08:37:35 +00:00
}
2018-10-03 12:40:55 +00:00
2020-10-25 07:48:41 +00:00
if ( intval ( $_POST [ 'channel' ]) < 1 || intval ( $_POST [ 'channel' ]) > RASPI_5GHZ_MAX_CHANNEL ) {
$status -> addMessage ( 'Attempting to set channel outside of permitted range' , 'danger' );
$good_input = false ;
2019-04-10 08:37:35 +00:00
}
2020-12-15 10:45:27 +00:00
$arrHostapdConf = parse_ini_file ( '/etc/raspap/hostapd.ini' );
2019-03-06 13:24:51 +00:00
2020-03-10 08:42:08 +00:00
// Check for Bridged AP mode checkbox
$bridgedEnable = 0 ;
if ( $arrHostapdConf [ 'BridgedEnable' ] == 0 ) {
if ( isset ( $_POST [ 'bridgedEnable' ])) {
$bridgedEnable = 1 ;
}
} else {
if ( isset ( $_POST [ 'bridgedEnable' ])) {
$bridgedEnable = 1 ;
}
}
2020-03-12 21:02:26 +00:00
// Check for WiFi client AP mode checkbox
$wifiAPEnable = 0 ;
if ( $bridgedEnable == 0 ) { // enable client mode actions when not bridged
if ( $arrHostapdConf [ 'WifiAPEnable' ] == 0 ) {
if ( isset ( $_POST [ 'wifiAPEnable' ])) {
$wifiAPEnable = 1 ;
}
} else {
if ( isset ( $_POST [ 'wifiAPEnable' ])) {
$wifiAPEnable = 1 ;
}
}
}
2019-04-10 08:37:35 +00:00
// Check for Logfile output checkbox
$logEnable = 0 ;
if ( $arrHostapdConf [ 'LogEnable' ] == 0 ) {
if ( isset ( $_POST [ 'logEnable' ])) {
$logEnable = 1 ;
2020-06-07 13:23:40 +00:00
exec ( 'sudo ' . RASPI_CONFIG . '/hostapd/enablelog.sh' );
2019-04-10 08:37:35 +00:00
} else {
2020-06-07 13:23:40 +00:00
exec ( 'sudo ' . RASPI_CONFIG . '/hostapd/disablelog.sh' );
2019-04-10 08:37:35 +00:00
}
2019-03-11 23:47:09 +00:00
} else {
2019-04-10 08:37:35 +00:00
if ( isset ( $_POST [ 'logEnable' ])) {
$logEnable = 1 ;
2020-06-07 13:23:40 +00:00
exec ( 'sudo ' . RASPI_CONFIG . '/hostapd/enablelog.sh' );
2019-04-10 08:37:35 +00:00
} else {
2020-06-07 13:23:40 +00:00
exec ( 'sudo ' . RASPI_CONFIG . '/hostapd/disablelog.sh' );
2019-04-10 08:37:35 +00:00
}
2019-03-11 23:47:09 +00:00
}
2020-03-12 21:02:26 +00:00
2019-04-10 08:37:35 +00:00
$cfg = [];
2020-06-07 13:23:40 +00:00
$cfg [ 'WifiInterface' ] = $_POST [ 'interface' ];
2019-04-10 08:37:35 +00:00
$cfg [ 'LogEnable' ] = $logEnable ;
2020-03-12 21:02:26 +00:00
// Save previous Client mode status when Bridged
$cfg [ 'WifiAPEnable' ] = ( $bridgedEnable == 1 ?
$arrHostapdConf [ 'WifiAPEnable' ] : $wifiAPEnable );
2020-03-10 08:42:08 +00:00
$cfg [ 'BridgedEnable' ] = $bridgedEnable ;
2020-05-12 06:50:28 +00:00
$cfg [ 'WifiManaged' ] = $_POST [ 'interface' ];
2020-06-07 13:23:40 +00:00
write_php_ini ( $cfg , RASPI_CONFIG . '/hostapd.ini' );
2020-06-09 14:32:49 +00:00
$_SESSION [ 'ap_interface' ] = $_POST [ 'interface' ];
2019-04-10 08:37:35 +00:00
// Verify input
if ( empty ( $_POST [ 'ssid' ]) || strlen ( $_POST [ 'ssid' ]) > 32 ) {
// Not sure of all the restrictions of SSID
$status -> addMessage ( 'SSID must be between 1 and 32 characters' , 'danger' );
$good_input = false ;
2019-03-11 23:47:09 +00:00
}
2019-03-06 18:42:13 +00:00
2020-02-15 17:57:46 +00:00
if ( $_POST [ 'wpa' ] !== 'none'
&& ( strlen ( $_POST [ 'wpa_passphrase' ]) < 8 || strlen ( $_POST [ 'wpa_passphrase' ]) > 63 )
) {
2019-04-10 08:37:35 +00:00
$status -> addMessage ( 'WPA passphrase must be between 8 and 63 characters' , 'danger' );
$good_input = false ;
}
2019-03-11 23:47:09 +00:00
2019-04-10 08:37:35 +00:00
if ( isset ( $_POST [ 'hiddenSSID' ])) {
if ( ! is_int (( int ) $_POST [ 'hiddenSSID' ])) {
$status -> addMessage ( 'Parameter hiddenSSID not a number.' , 'danger' );
$good_input = false ;
} elseif (( int ) $_POST [ 'hiddenSSID' ] < 0 || ( int ) $_POST [ 'hiddenSSID' ] >= 3 ) {
$status -> addMessage ( 'Parameter hiddenSSID contains invalid configuratie value.' , 'danger' );
$good_input = false ;
} else {
$ignore_broadcast_ssid = $_POST [ 'hiddenSSID' ];
}
2019-03-11 23:47:09 +00:00
} else {
2019-04-10 08:37:35 +00:00
$ignore_broadcast_ssid = '0' ;
2019-03-11 23:47:09 +00:00
}
2019-04-10 08:37:35 +00:00
if ( ! in_array ( $_POST [ 'interface' ], $interfaces )) {
// The user is probably up to something here but it may also be a
// genuine error.
$status -> addMessage ( 'Unknown interface ' . htmlspecialchars ( $_POST [ 'interface' ], ENT_QUOTES ), 'danger' );
$good_input = false ;
2019-03-11 23:47:09 +00:00
}
2019-04-10 08:37:35 +00:00
if ( strlen ( $_POST [ 'country_code' ]) !== 0 && strlen ( $_POST [ 'country_code' ]) != 2 ) {
$status -> addMessage ( 'Country code must be blank or two characters' , 'danger' );
$good_input = false ;
}
2020-09-11 18:03:14 +00:00
if ( isset ( $_POST [ 'beaconintervalEnable' ])) {
if ( ! is_numeric ( $_POST [ 'beacon_interval' ])) {
$status -> addMessage ( 'Beacon interval must be a numeric value' , 'danger' );
$good_input = false ;
} elseif ( $_POST [ 'beacon_interval' ] < 15 || $_POST [ 'beacon_interval' ] > 65535 ) {
$status -> addMessage ( 'Beacon interval must be between 15 and 65535' , 'danger' );
$good_input = false ;
}
}
2019-08-01 20:32:44 +00:00
$_POST [ 'max_num_sta' ] = ( int ) $_POST [ 'max_num_sta' ];
$_POST [ 'max_num_sta' ] = $_POST [ 'max_num_sta' ] > 2007 ? 2007 : $_POST [ 'max_num_sta' ];
$_POST [ 'max_num_sta' ] = $_POST [ 'max_num_sta' ] < 1 ? null : $_POST [ 'max_num_sta' ];
2019-04-10 08:37:35 +00:00
if ( $good_input ) {
// Fixed values
2019-12-26 06:17:27 +00:00
$country_code = $_POST [ 'country_code' ];
2019-04-10 08:37:35 +00:00
$config = 'driver=nl80211' . PHP_EOL ;
$config .= 'ctrl_interface=' . RASPI_HOSTAPD_CTRL_INTERFACE . PHP_EOL ;
$config .= 'ctrl_interface_group=0' . PHP_EOL ;
$config .= 'auth_algs=1' . PHP_EOL ;
$config .= 'wpa_key_mgmt=WPA-PSK' . PHP_EOL ;
2020-09-11 18:03:14 +00:00
if ( isset ( $_POST [ 'beaconintervalEnable' ])) {
$config .= 'beacon_int=' . $_POST [ 'beacon_interval' ] . PHP_EOL ;
}
if ( isset ( $_POST [ 'disassoc_low_ackEnable' ])) {
$config .= 'disassoc_low_ack=0' . PHP_EOL ;
}
2019-04-10 08:37:35 +00:00
$config .= 'ssid=' . $_POST [ 'ssid' ] . PHP_EOL ;
$config .= 'channel=' . $_POST [ 'channel' ] . PHP_EOL ;
if ( $_POST [ 'hw_mode' ] === 'n' ) {
$config .= 'hw_mode=g' . PHP_EOL ;
$config .= 'ieee80211n=1' . PHP_EOL ;
// Enable basic Quality of service
2019-08-01 20:19:46 +00:00
$config .= 'wmm_enabled=1' . PHP_EOL ;
2019-12-26 06:17:27 +00:00
} elseif ( $_POST [ 'hw_mode' ] === 'ac' ) {
$config .= 'hw_mode=a' . PHP_EOL . PHP_EOL ;
$config .= '# N' . PHP_EOL ;
$config .= 'ieee80211n=1' . PHP_EOL ;
$config .= 'require_ht=1' . PHP_EOL ;
$config .= 'ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]' . PHP_EOL . PHP_EOL ;
$config .= '# AC' . PHP_EOL ;
$config .= 'ieee80211ac=1' . PHP_EOL ;
$config .= 'require_vht=1' . PHP_EOL ;
$config .= 'ieee80211d=0' . PHP_EOL ;
$config .= 'ieee80211h=0' . PHP_EOL ;
$config .= 'vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]' . PHP_EOL ;
$config .= 'vht_oper_chwidth=1' . PHP_EOL ;
$config .= 'vht_oper_centr_freq_seg0_idx=42' . PHP_EOL . PHP_EOL ;
2020-05-19 16:28:48 +00:00
} elseif ( $_POST [ 'hw_mode' ] === 'w' ) {
$config .= 'ieee80211w=2' . PHP_EOL ;
$config .= 'wpa_key_mgmt=WPA-EAP-SHA256' . PHP_EOL ;
2019-04-10 08:37:35 +00:00
} else {
$config .= 'hw_mode=' . $_POST [ 'hw_mode' ] . PHP_EOL ;
$config .= 'ieee80211n=0' . PHP_EOL ;
}
2019-11-26 13:14:14 +00:00
if ( $_POST [ 'wpa' ] !== 'none' ) {
$config .= 'wpa_passphrase=' . $_POST [ 'wpa_passphrase' ] . PHP_EOL ;
}
2019-04-10 08:37:35 +00:00
if ( $wifiAPEnable == 1 ) {
$config .= 'interface=uap0' . PHP_EOL ;
2020-03-15 11:02:20 +00:00
} elseif ( $bridgedEnable == 1 ) {
2020-05-12 06:50:28 +00:00
$config .= 'interface=' . $_POST [ 'interface' ] . PHP_EOL ;
2020-03-15 11:02:20 +00:00
$config .= 'bridge=br0' . PHP_EOL ;
2019-04-10 08:37:35 +00:00
} else {
$config .= 'interface=' . $_POST [ 'interface' ] . PHP_EOL ;
}
$config .= 'wpa=' . $_POST [ 'wpa' ] . PHP_EOL ;
$config .= 'wpa_pairwise=' . $_POST [ 'wpa_pairwise' ] . PHP_EOL ;
$config .= 'country_code=' . $_POST [ 'country_code' ] . PHP_EOL ;
$config .= 'ignore_broadcast_ssid=' . $ignore_broadcast_ssid . PHP_EOL ;
2019-08-01 20:32:44 +00:00
if ( isset ( $_POST [ 'max_num_sta' ])) {
$config .= 'max_num_sta=' . $_POST [ 'max_num_sta' ] . PHP_EOL ;
}
2019-04-10 08:37:35 +00:00
2019-07-30 18:51:48 +00:00
file_put_contents ( " /tmp/hostapddata " , $config );
2019-04-10 08:37:35 +00:00
system ( " sudo cp /tmp/hostapddata " . RASPI_HOSTAPD_CONFIG , $return );
2019-11-04 09:40:23 +00:00
// Fetch dhcp-range, lease time from system config
2019-09-08 15:28:01 +00:00
$dhcpConfig = parse_ini_file ( RASPI_DNSMASQ_CONFIG , false , INI_SCANNER_RAW );
2019-04-10 08:37:35 +00:00
if ( $wifiAPEnable == 1 ) {
// Enable uap0 configuration in dnsmasq for Wifi client AP mode
2019-11-04 09:40:23 +00:00
// Set dhcp-range from system config. If undefined, fallback to default
2020-01-06 18:00:07 +00:00
$dhcp_range = ( $dhcpConfig [ 'dhcp-range' ] == '10.3.141.50,10.3.141.255,255.255.255.0,12h' ||
$dhcpConfig [ 'dhcp-range' ] == '' ) ? '192.168.50.50,192.168.50.150,12h' : $dhcpConfig [ 'dhcp-range' ];
2019-04-10 08:37:35 +00:00
$config = 'interface=lo,uap0 # Enable uap0 interface for wireless client AP mode' . PHP_EOL ;
2020-01-13 09:42:05 +00:00
$config .= 'bind-dynamic # Hybrid between --bind-interfaces and default' . PHP_EOL ;
2019-04-10 08:37:35 +00:00
$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 ;
2019-11-04 09:40:23 +00:00
$config .= 'dhcp-range=' . $dhcp_range . PHP_EOL ;
if ( ! empty ( $dhcpConfig [ 'dhcp-option' ])) {
$config .= 'dhcp-option=' . $dhcpConfig [ 'dhcp-option' ] . PHP_EOL ;
}
2019-04-10 08:37:35 +00:00
} else {
2019-11-04 09:40:23 +00:00
// Set dhcp-range from system config. If undefined, fallback to default
2020-01-06 18:00:07 +00:00
$dhcp_range = ( $dhcpConfig [ 'dhcp-range' ] == '192.168.50.50,192.168.50.150,12h' ||
$dhcpConfig [ 'dhcp-range' ] == '' ) ? '10.3.141.50,10.3.141.255,255.255.255.0,12h' : $dhcpConfig [ 'dhcp-range' ];
2019-04-10 08:37:35 +00:00
$config = 'domain-needed' . PHP_EOL ;
$config .= 'interface=' . $_POST [ 'interface' ] . PHP_EOL ;
2019-09-08 15:28:01 +00:00
$config .= 'dhcp-range=' . $dhcp_range . PHP_EOL ;
2019-11-04 09:40:23 +00:00
if ( ! empty ( $dhcpConfig [ 'dhcp-option' ])) {
$config .= 'dhcp-option=' . $dhcpConfig [ 'dhcp-option' ] . PHP_EOL ;
}
2019-04-10 08:37:35 +00:00
}
2019-07-30 19:16:43 +00:00
file_put_contents ( " /tmp/dnsmasqdata " , $config );
system ( 'sudo cp /tmp/dnsmasqdata ' . RASPI_DNSMASQ_CONFIG , $return );
2019-04-10 08:37:35 +00:00
2019-09-08 15:28:01 +00:00
// Set dnsmasq values from ini, fallback to default if undefined
2020-05-12 06:50:28 +00:00
$intConfig = parse_ini_file ( RASPI_CONFIG_NETWORKING . '/' . $_POST [ 'interface' ] . '.ini' , false , INI_SCANNER_RAW );
2019-09-08 15:28:01 +00:00
$domain_name_server = ( $intConfig [ 'domain_name_server' ] == '' ) ? '1.1.1.1 8.8.8.8' : $intConfig [ 'domain_name_server' ];
$routers = ( $intConfig [ 'routers' ] == '' ) ? '10.3.141.1' : $intConfig [ 'routers' ];
2020-06-03 21:32:32 +00:00
// write options to dhcpcd.conf
$config = [ '# RaspAP ' . $_POST [ 'interface' ] . ' configuration' ];
$config [] = 'hostname' ;
$config [] = 'clientid' ;
$config [] = 'persistent' ;
$config [] = 'option rapid_commit' ;
$config [] = 'option domain_name_servers, domain_name, domain_search, host_name' ;
$config [] = 'option classless_static_routes' ;
$config [] = 'option ntp_servers' ;
$config [] = 'require dhcp_server_identifier' ;
$config [] = 'slaac private' ;
$config [] = 'nohook lookup-hostname' ;
2020-02-28 17:51:33 +00:00
2020-03-10 08:42:08 +00:00
if ( $bridgedEnable == 1 ) {
$config [] = 'denyinterfaces eth0 wlan0' ;
$config [] = 'interface br0' ;
} elseif ( $wifiAPEnable == 1 ) {
2019-04-10 08:37:35 +00:00
// Enable uap0 configuration in dhcpcd for Wifi client AP mode
2019-11-04 10:04:11 +00:00
$intConfig = parse_ini_file ( RASPI_CONFIG_NETWORKING . '/uap0.ini' , false , INI_SCANNER_RAW );
$ip_address = ( $intConfig [ 'ip_address' ] == '' ) ? '192.168.50.1/24' : $intConfig [ 'ip_address' ];
2020-02-28 17:51:33 +00:00
$config [] = 'interface uap0' ;
$config [] = 'static ip_address=' . $ip_address ;
$config [] = 'nohook wpa_supplicant' ;
2019-04-10 08:37:35 +00:00
} else {
2020-05-12 06:50:28 +00:00
// Default config
2020-05-12 07:10:54 +00:00
$ip_address = " 10.3.141.1/24 " ; // fallback IP
// default IP of the AP xxx.xxx.xxx.1/24 of the selected dhcp range
$def_ip = array ();
2020-05-12 06:50:28 +00:00
if ( preg_match ( " /^([0-9] { 1,3} \ .) { 3}/ " , $dhcp_range , $def_ip ) ) $ip_address = $def_ip [ 0 ] . " 1/24 " ;
2020-05-12 07:10:54 +00:00
// use static IP assigned to interface only, if consistent with the selected dhcp range
2020-05-12 06:50:28 +00:00
if ( preg_match ( " /^([0-9] { 1,3} \ .) { 3}/ " , $intConfig [ 'ip_address' ], $int_ip ) && $def_ip [ 0 ] === $int_ip [ 0 ]) $ip_address = $intConfig [ 'ip_address' ];
$config [] = 'interface ' . $_POST [ 'interface' ];
2020-02-28 17:51:33 +00:00
$config [] = 'static ip_address=' . $ip_address ;
$config [] = 'static domain_name_server=' . $domain_name_server ;
2020-05-12 08:16:04 +00:00
$config [] = PHP_EOL ;
2020-02-28 17:51:33 +00:00
2020-05-12 06:50:28 +00:00
// write the static IP back to the $_POST['interface'].ini file
$intConfig [ 'interface' ] = $_POST [ 'interface' ];
$intConfig [ 'ip_address' ] = $ip_address ;
$intConfig [ 'domain_name_server' ] = $domain_name_server ;
$intConfig [ 'routers' ] = $routers ;
$intConfig [ 'static' ] = " true " ;
$intConfig [ 'failover' ] = " false " ;
write_php_ini ( $intConfig , RASPI_CONFIG_NETWORKING . '/' . $_POST [ 'interface' ] . " .ini " );
2020-05-12 07:10:54 +00:00
}
2020-05-12 06:50:28 +00:00
2020-02-28 17:51:33 +00:00
$config = join ( PHP_EOL , $config );
2019-07-30 18:51:48 +00:00
file_put_contents ( " /tmp/dhcpddata " , $config );
2019-04-10 08:37:35 +00:00
system ( 'sudo cp /tmp/dhcpddata ' . RASPI_DHCPCD_CONFIG , $return );
if ( $return == 0 ) {
$status -> addMessage ( 'Wifi Hotspot settings saved' , 'success' );
} else {
$status -> addMessage ( 'Unable to save wifi hotspot settings' , 'danger' );
}
2016-08-05 20:38:02 +00:00
} else {
2019-04-10 08:37:35 +00:00
$status -> addMessage ( 'Unable to save wifi hotspot settings' , 'danger' );
return false ;
2016-07-27 20:48:27 +00:00
}
2018-08-03 23:58:34 +00:00
2019-04-10 08:37:35 +00:00
return true ;
2016-07-27 20:48:27 +00:00
}