suspend: adapt script for NetworkManager integration

Now the suspend script brings down all the wireless interfaces that are
managed by ifupdown command (in the '/etc/network/interfaces' file) and
then unloads the wireless driver.

On resume the script triggers an event so udev reloads the wireless
driver and then brings up the interfaces that were brought down on
suspend.

https://jira.digi.com/browse/DEL-4288

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
Javier Viguera 2017-07-06 20:16:26 +02:00
parent 6ffd69da82
commit eb76b2ac68
2 changed files with 32 additions and 15 deletions

View File

@ -31,9 +31,12 @@ usage() {
} }
suspend_interfaces() { suspend_interfaces() {
# Suspend wireless interface # Suspend wireless interfaces
if grep -qs '^wlan0' /var/run/ifstate; then if [ -d "/proc/device-tree/wireless" ]; then
ifdown wlan0 && up_wlan_on_resume="1" && sleep 0.5 && rmmod ath6kl_sdio for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do
ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
done
grep -qs '^ath6kl_sdio' /proc/modules && rmmod ath6kl_sdio ath6kl_core
fi fi
# Suspend bluetooth interface # Suspend bluetooth interface
@ -43,9 +46,16 @@ suspend_interfaces() {
} }
resume_interfaces() { resume_interfaces() {
# Resume wireless interface # Resume wireless interfaces
if ! grep -qs '^wlan0' /var/run/ifstate; then if [ -d "/proc/device-tree/wireless" ]; then
[ -n "${up_wlan_on_resume}" ] && modprobe ath6kl_sdio && sleep 0.5 && ifup wlan0 # Trigger wireless module loading event, and wait until the interface exists
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d0301"
timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
# Bring up the interfaces that were bring down on suspend
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
grep -qs "^${i}" /var/run/ifstate || ifup "${i}"
done
fi fi
# Resume bluetooth interface # Resume bluetooth interface

View File

@ -31,12 +31,12 @@ usage() {
} }
suspend_interfaces() { suspend_interfaces() {
# Suspend wireless interface # Suspend wireless interfaces
if grep -qs '^wlan0' /var/run/ifstate; then if [ -d "/proc/device-tree/wireless" ]; then
ifdown wlan0 && up_wlan_on_resume="1" for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do
fi ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
if grep -qs '^wlan' /proc/modules; then done
rmmod wlan grep -qs '^wlan' /proc/modules && rmmod wlan
fi fi
# Suspend bluetooth interface # Suspend bluetooth interface
@ -46,9 +46,16 @@ suspend_interfaces() {
} }
resume_interfaces() { resume_interfaces() {
# Resume wireless interface # Resume wireless interfaces
if ! grep -qs '^wlan0' /var/run/ifstate; then if [ -d "/proc/device-tree/wireless" ]; then
[ -n "${up_wlan_on_resume}" ] && ifup wlan0 # Trigger wireless module loading event, and wait until the interface exists
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d050A"
timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
# Bring up the interfaces that were bring down on suspend
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
grep -qs "^${i}" /var/run/ifstate || ifup "${i}"
done
fi fi
# Resume bluetooth interface # Resume bluetooth interface