[source] mac80211: gracefully handle preexisting VIF

LEDE Commits lede-commits at lists.infradead.org
Sun May 14 12:43:31 PDT 2017


jow pushed a commit to source.git, branch master:
https://git.lede-project.org/4a033475453b63d0d5ae41489e7c395882567698

commit 4a033475453b63d0d5ae41489e7c395882567698
Author: Jo-Philipp Wich <jo at mein.io>
AuthorDate: Sun May 14 19:47:07 2017 +0200

    mac80211: gracefully handle preexisting VIF
    
    Gracefully handle cases where the to-be-created wireless interface already
    exists on the system which might commonly happen with non-multi-SSID capable
    wireless drivers.
    
    This fixes commit 8301e613655c2d95fa5430a1a57d92d966fdc70b which caused
    previously ignored "Too many open files in system (-23)" errors to fail the
    wireless setup procedure.
    
    With the updated approach we'll still try recreating the vif after one
    second if the first attempt to do so failed with ENFILE but we will now
    consider the operation successfull if a second attempt still yields ENFILE
    with the requested ifname already existing on the system.
    
    Fixes FS#664, FS#704.
    
    Suggested-by: Vittorio Gambaletta <openwrt at vittgam.net>
    Signed-off-by: Jo-Philipp Wich <jo at mein.io>
---
 package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
index cda6f9f..ebd24df 100644
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -429,6 +429,12 @@ mac80211_iw_interface_add() {
 		rc="$?"
 	}
 
+	[ "$rc" = 233 ] && {
+		# 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.
+		ip link show dev "$ifname" >/dev/null 2>/dev/null && rc=0
+	}
+
 	[ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED
 	return $rc
 }



More information about the lede-commits mailing list