mac80211: make sure existing iface belongs to correct (fullmac) phy

Some FullMAC cfg80211 wireless devices do not support virtual
interfaces, hence there is script logic to keep the existing network
device. Improve this to support renaming the interface if needed and
make sure the existing interface actually belongs to the right phy.
Change calls to 'iw' to avoid outputing warnings and errors to not
confuse users of such devices.

Also bump PKG_RELEASE which has been forgotten in the previous two
mac80211 changes.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
Daniel Golle 2020-04-17 13:11:11 +01:00
parent edf812e25c
commit 0495324b9b
2 changed files with 19 additions and 9 deletions

View File

@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=mac80211 PKG_NAME:=mac80211
PKG_VERSION:=5.4.27-1 PKG_VERSION:=5.4.27-1
PKG_RELEASE:=2 PKG_RELEASE:=3
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.4.27/ PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.4.27/
PKG_HASH:=4c853a2f4c4fcc81cf60a3d59c5efbdb60c3e4acda22996cb192443581753950 PKG_HASH:=4c853a2f4c4fcc81cf60a3d59c5efbdb60c3e4acda22996cb192443581753950

View File

@ -440,15 +440,16 @@ mac80211_iw_interface_add() {
local type="$3" local type="$3"
local wdsflag="$4" local wdsflag="$4"
local rc local rc
local oldifname
iw phy "$phy" interface add "$ifname" type "$type" $wdsflag iw phy "$phy" interface add "$ifname" type "$type" $wdsflag >/dev/null 2>&1
rc="$?" rc="$?"
[ "$rc" = 233 ] && { [ "$rc" = 233 ] && {
# Device might have just been deleted, give the kernel some time to finish cleaning it up # Device might have just been deleted, give the kernel some time to finish cleaning it up
sleep 1 sleep 1
iw phy "$phy" interface add "$ifname" type "$type" $wdsflag iw phy "$phy" interface add "$ifname" type "$type" $wdsflag >/dev/null 2>&1
rc="$?" rc="$?"
} }
@ -475,17 +476,26 @@ mac80211_iw_interface_add() {
} }
[ "$rc" = 233 ] && { [ "$rc" = 233 ] && {
iw dev "$ifname" del iw dev "$ifname" del >/dev/null 2>&1
[ "$?" = 0 ] && {
sleep 1 sleep 1
iw phy "$phy" interface add "$ifname" type "$type" $wdsflag iw phy "$phy" interface add "$ifname" type "$type" $wdsflag >/dev/null 2>&1
rc="$?" rc="$?"
} }
}
[ "$rc" = 233 ] && { [ "$rc" != 0 ] && {
# Device might not support virtual interfaces, so the interface never got deleted in the first place. # Device might not support virtual interfaces, so the interface never got deleted in the first place.
# Check if the interface already exists, and avoid failing in this case. # Check if the interface already exists, and avoid failing in this case.
ip link show dev "$ifname" >/dev/null 2>/dev/null && rc=0 [ -d "/sys/class/ieee80211/${phy}/device/net/${ifname}" ] && rc=0
}
[ "$rc" != 0 ] && {
# Device doesn't support virtual interfaces and may have existing interface other than ifname.
oldifname="$(basename "/sys/class/ieee80211/${phy}/device/net"/* 2>/dev/null)"
[ "$oldifname" ] && ip link set "$oldifname" name "$ifname" 1>/dev/null 2>&1
rc="$?"
} }
[ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED [ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED