suspend: set wireless interfaces managed by NM as unmanaged before suspend

With these changes we tell NM to not manage the wireless interfaces before
unloading the wireless module. This was causing some unexpected behavior that
crashed NetworkManager.

Signed-off-by: Sebastian Pastor <sebastian.pastor@digi.com>
https://jira.digi.com/browse/DEL-5351
https://jira.digi.com/browse/DEL-4571
This commit is contained in:
Sebastian Pastor 2017-11-28 14:54:12 +01:00
parent a45357940a
commit b3ae030fce
3 changed files with 36 additions and 0 deletions

View File

@ -36,6 +36,13 @@ suspend_interfaces() {
for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do 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}" ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
done done
# Get a list of the wireless interfaces managed by NetworkManager
# and set them to unmanaged before suspend.
for i in $(nmcli -t -f DEVICE,TYPE,STATE dev | grep :wifi: | grep -v unmanaged | cut -d':' -f1); do
nmcli dev set "${i}" managed no && NM_MANAGED_IFACES="${NM_MANAGED_IFACES:+${NM_MANAGED_IFACES} }${i}"
done
grep -qs '^wlan' /proc/modules && rmmod wlan grep -qs '^wlan' /proc/modules && rmmod wlan
fi fi
@ -54,6 +61,11 @@ resume_interfaces() {
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d050A" 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 timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
# Set interfaces managed by NetworkManager back as managed
for i in $(echo ${NM_MANAGED_IFACES} | tr ' ' '\n' | sort); do
nmcli dev set "${i}" managed yes
done
# Bring up the interfaces that were bring down on suspend # Bring up the interfaces that were bring down on suspend
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
grep -qs "^${i}" /var/run/ifstate || ifup "${i}" grep -qs "^${i}" /var/run/ifstate || ifup "${i}"

View File

@ -36,6 +36,13 @@ suspend_interfaces() {
for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do 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}" ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
done done
# Get a list of the wireless interfaces managed by NetworkManager
# and set them to unmanaged before suspend.
for i in $(nmcli -t -f DEVICE,TYPE,STATE dev | grep :wifi: | grep -v unmanaged | cut -d':' -f1); do
nmcli dev set "${i}" managed no && NM_MANAGED_IFACES="${NM_MANAGED_IFACES:+${NM_MANAGED_IFACES} }${i}"
done
grep -qs '^ath6kl_sdio' /proc/modules && rmmod ath6kl_sdio ath6kl_core grep -qs '^ath6kl_sdio' /proc/modules && rmmod ath6kl_sdio ath6kl_core
fi fi
@ -54,6 +61,11 @@ resume_interfaces() {
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d0301" 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 timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
# Set interfaces managed by NetworkManager back as managed
for i in $(echo ${NM_MANAGED_IFACES} | tr ' ' '\n' | sort); do
nmcli dev set "${i}" managed yes
done
# Bring up the interfaces that were bring down on suspend # Bring up the interfaces that were bring down on suspend
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
grep -qs "^${i}" /var/run/ifstate || ifup "${i}" grep -qs "^${i}" /var/run/ifstate || ifup "${i}"

View File

@ -36,6 +36,13 @@ suspend_interfaces() {
for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do 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}" ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
done done
# Get a list of the wireless interfaces managed by NetworkManager
# and set them to unmanaged before suspend.
for i in $(nmcli -t -f DEVICE,TYPE,STATE dev | grep :wifi: | grep -v unmanaged | cut -d':' -f1); do
nmcli dev set "${i}" managed no && NM_MANAGED_IFACES="${NM_MANAGED_IFACES:+${NM_MANAGED_IFACES} }${i}"
done
grep -qs '^wlan' /proc/modules && rmmod wlan grep -qs '^wlan' /proc/modules && rmmod wlan
fi fi
@ -54,6 +61,11 @@ resume_interfaces() {
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d050A" 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 timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
# Set interfaces managed by NetworkManager back as managed
for i in $(echo ${NM_MANAGED_IFACES} | tr ' ' '\n' | sort); do
nmcli dev set "${i}" managed yes
done
# Bring up the interfaces that were bring down on suspend # Bring up the interfaces that were bring down on suspend
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
grep -qs "^${i}" /var/run/ifstate || ifup "${i}" grep -qs "^${i}" /var/run/ifstate || ifup "${i}"