From 8823c0602eaf37761fed5c098766c9cc8557c973 Mon Sep 17 00:00:00 2001 From: Taikuh Date: Tue, 10 Mar 2020 16:42:08 +0800 Subject: [PATCH] Add bridged-routed toggle to webgui --- includes/hostapd.php | 23 ++++++++++++++- installers/common.sh | 9 ++++-- installers/servicestart.sh | 44 ++++++++++++++++++++++------ locale/en_US/LC_MESSAGES/messages.po | 3 ++ templates/hostapd.php | 9 ++++++ 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/includes/hostapd.php b/includes/hostapd.php index e33ca3c1..acfe88c3 100755 --- a/includes/hostapd.php +++ b/includes/hostapd.php @@ -33,6 +33,8 @@ function DisplayHostAPDConfig() $status->addMessage('Attempting to start hotspot', 'info'); if ($arrHostapdConf['WifiAPEnable'] == 1) { exec('sudo /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3', $return); + } elseif ($arrHostapdConf['BridgedEnable'] == 1) { + exec('sudo /etc/raspap/hostapd/servicestart.sh --interface br0 --seconds 3', $return); } else { exec('sudo /etc/raspap/hostapd/servicestart.sh --seconds 3', $return); } @@ -120,6 +122,18 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) } } + // 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; + } + } + // Check for Logfile output checkbox $logEnable = 0; if ($arrHostapdConf['LogEnable'] == 0) { @@ -140,6 +154,7 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) $cfg = []; $cfg['LogEnable'] = $logEnable; $cfg['WifiAPEnable'] = $wifiAPEnable; + $cfg['BridgedEnable'] = $bridgedEnable; $cfg['WifiManaged'] = RASPI_WIFI_CLIENT_INTERFACE; write_php_ini($cfg, '/etc/raspap/hostapd.ini'); @@ -228,6 +243,9 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) $config.= 'interface=uap0'.PHP_EOL; } else { $config.= 'interface='.$_POST['interface'].PHP_EOL; + if ($bridgedEnable == 1) { + $config.= 'bridge=br0'.PHP_EOL; + } } $config.= 'wpa='.$_POST['wpa'].PHP_EOL; $config.= 'wpa_pairwise='.$_POST['wpa_pairwise'].PHP_EOL; @@ -288,7 +306,10 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) $config[] = 'slaac private'; $config[] = 'nohook lookup-hostname'; - if ($wifiAPEnable == 1) { + if ($bridgedEnable == 1) { + $config[] = 'denyinterfaces eth0 wlan0'; + $config[] = 'interface br0'; + } elseif ($wifiAPEnable == 1) { // Enable uap0 configuration in dhcpcd for Wifi client AP mode $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']; diff --git a/installers/common.sh b/installers/common.sh index 475b2b82..ffaf76a0 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -177,7 +177,7 @@ function download_latest_files() { fi install_log "Cloning latest files from github" - git clone --single-branch $branch --depth 1 $git_source_url /tmp/raspap-webgui || install_error "Unable to download files from github" + git clone --branch $branch --depth 1 $git_source_url /tmp/raspap-webgui || install_error "Unable to download files from github" sudo mv /tmp/raspap-webgui $webroot_dir || install_error "Unable to move raspap-webgui to web root" } @@ -220,8 +220,11 @@ function check_for_old_configs() { fi for file in /etc/systemd/network/raspap-*.net*; do - sudo cp "$file" "${raspap_dir}/backups/${file}.`date +%F-%R`" - sudo ln -sf "${raspap_dir}/backups/${file}.`date +%F-%R`" "${raspap_dir}/backups/${file}" + if [-f "${file}" ]; then + filename = $(basename $file) + sudo cp "$file" "${raspap_dir}/backups/${filename}.`date +%F-%R`" + sudo ln -sf "${raspap_dir}/backups/${filename}.`date +%F-%R`" "${raspap_dir}/backups/${filename}" + fi done } diff --git a/installers/servicestart.sh b/installers/servicestart.sh index fa4dd446..76e7e2ea 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -6,6 +6,7 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=raspap DESC="Service control for RaspAP" CONFIGFILE="/etc/raspap/hostapd.ini" +DAEMONPATH="/lib/systemd/system/raspap.service" positional=() while [[ $# -gt 0 ]] @@ -28,25 +29,50 @@ done set -- "${positional[@]}" echo "Stopping network services..." +systemctl stop systemd-networkd systemctl stop hostapd.service systemctl stop dnsmasq.service systemctl stop dhcpcd.service +if [ -f "$DAEMONPATH" ]; then + echo "Changing RaspAP Daemon --interface to $interface" + sed -i "s/\(--interface \)[[:alnum:]]*/\1$interface/" "$DAEMONPATH" +fi + if [ -r "$CONFIGFILE" ]; then declare -A config while IFS=" = " read -r key value; do config["$key"]="$value" done < "$CONFIGFILE" - if [ "${config[WifiAPEnable]}" = 1 ]; then - if [ "${interface}" = "uap0" ]; then - echo "Removing uap0 interface..." - iw dev uap0 del - - echo "Adding uap0 interface to ${config[WifiManaged]}" - iw dev ${config[WifiManaged]} interface add uap0 type __ap - # Bring up uap0 interface - ifconfig uap0 up + if [ "${config[BridgedEnable]}" = 1 ]; then + if [ "${interface}" = "br0" ]; then + echo "Restarting eth0 interface..." + ip link set down eth0 + ip link set up eth0 + + echo "Enabling systemd-networkd" + systemctl start systemd-networkd + systemctl enable systemd-networkd + fi + else + echo "Disabling systemd-networkd" + systemctl disable systemd-networkd + + echo "Removing br0 interface..." + ip link set down br0 + ip link del dev br0 + + if [ "${config[WifiAPEnable]}" = 1 ]; then + if [ "${interface}" = "uap0" ]; then + echo "Removing uap0 interface..." + iw dev uap0 del + + echo "Adding uap0 interface to ${config[WifiManaged]}" + iw dev ${config[WifiManaged]} interface add uap0 type __ap + # Bring up uap0 interface + ifconfig uap0 up + fi fi fi fi diff --git a/locale/en_US/LC_MESSAGES/messages.po b/locale/en_US/LC_MESSAGES/messages.po index 7a513172..15e57c64 100644 --- a/locale/en_US/LC_MESSAGES/messages.po +++ b/locale/en_US/LC_MESSAGES/messages.po @@ -429,6 +429,9 @@ msgstr "Logfile output" msgid "WiFi client AP mode" msgstr "WiFi client AP mode" +msgid "Bridged AP mode" +msgstr "Bridged AP mode" + msgid "Hide SSID in broadcast" msgstr "Hide SSID in broadcast" diff --git a/templates/hostapd.php b/templates/hostapd.php index b4f4c8f7..b7f97899 100755 --- a/templates/hostapd.php +++ b/templates/hostapd.php @@ -134,6 +134,15 @@ +
+
+
+ + /> + +
+
+