diff --git a/installers/raspapd.service b/installers/raspapd.service index c5738465..776cb16b 100644 --- a/installers/raspapd.service +++ b/installers/raspapd.service @@ -16,7 +16,7 @@ After=multi-user.target [Service] Type=oneshot -ExecStart=/bin/bash /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3 +ExecStart=/bin/bash /etc/raspap/hostapd/servicestart.sh --seconds 1 RemainAfterExit=no [Install] diff --git a/installers/servicestart.sh b/installers/servicestart.sh index 64e79143..6121e061 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -34,6 +34,20 @@ esac done set -- "${positional[@]}" +# Load config file into associative array +declare -A config +if [ -r "$CONFIGFILE" ]; then + while IFS=" = " read -r key value; do + config["$key"]="$value" + done < "$CONFIGFILE" +fi + +# Set interface from config if not set by parameter +if [ -z "$interface" ] && [ -n "${config[WifiInterface]}" ]; then + interface="${config[WifiInterface]}" + echo "Interface not provided. Using WifiInterface from config: $interface" +fi + echo "Stopping network services..." if [ $OPENVPNENABLED -eq 1 ]; then systemctl stop openvpn-client@client @@ -49,58 +63,51 @@ if [ "${action}" = "stop" ]; then exit 0 fi -if [ -f "$DAEMONPATH" ] && [ ! -z "$interface" ]; then +if [ -f "$DAEMONPATH" ] && [ -n "$interface" ]; 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[BridgedEnable]}" = 1 ]; then + if [ "${interface}" = "br0" ]; then + echo "Stopping systemd-networkd" + systemctl stop systemd-networkd - if [ "${config[BridgedEnable]}" = 1 ]; then - if [ "${interface}" = "br0" ]; then - echo "Stopping systemd-networkd" - systemctl stop systemd-networkd + echo "Restarting eth0 interface..." + ip link set down eth0 + ip link set up eth0 - echo "Restarting eth0 interface..." - ip link set down eth0 - ip link set up eth0 + echo "Removing uap0 interface..." + iw dev uap0 del - echo "Removing uap0 interface..." - iw dev uap0 del + echo "Enabling systemd-networkd" + systemctl start systemd-networkd + systemctl enable systemd-networkd + fi +else + echo "Disabling systemd-networkd" + systemctl disable systemd-networkd - echo "Enabling systemd-networkd" - systemctl start systemd-networkd - systemctl enable systemd-networkd - fi - else - echo "Disabling systemd-networkd" - systemctl disable systemd-networkd + ip link ls up | grep -q 'br0' &> /dev/null + if [ $? == 0 ]; then + echo "Removing br0 interface..." + ip link set down br0 + ip link del dev br0 + fi - ip link ls up | grep -q 'br0' &> /dev/null - if [ $? == 0 ]; then - echo "Removing br0 interface..." - ip link set down br0 - ip link del dev br0 - fi + if [ "${config[WifiAPEnable]}" = 1 ]; then + if [ "${interface}" = "uap0" ]; then - if [ "${config[WifiAPEnable]}" = 1 ]; then - if [ "${interface}" = "uap0" ]; then - - ip link ls up | grep -q 'uap0' &> /dev/null - if [ $? == 0 ]; then - echo "Removing uap0 interface..." - iw dev uap0 del - fi - - echo "Adding uap0 interface to ${config[WifiManaged]}" - iw dev ${config[WifiManaged]} interface add uap0 type __ap - # Bring up uap0 interface - ifconfig uap0 up + ip link ls up | grep -q 'uap0' &> /dev/null + if [ $? == 0 ]; then + echo "Removing uap0 interface..." + iw dev uap0 del fi + + 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 @@ -122,8 +129,6 @@ if [ $OPENVPNENABLED -eq 1 ]; then systemctl start openvpn-client@client fi -# @mp035 found that the wifi client interface would stop every 8 seconds -# for about 16 seconds. Reassociating seems to solve this if [ "${config[WifiAPEnable]}" = 1 ]; then echo "Reassociating wifi client interface..." sleep "${seconds}"