From patchwork Thu Aug 11 12:02:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduardo Abinader X-Patchwork-Id: 658192 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3s96Bn57hnz9sXx for ; Thu, 11 Aug 2016 22:04:33 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Ga1GS31b; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bXohK-0003Z8-D1; Thu, 11 Aug 2016 12:02:54 +0000 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bXohF-0003P9-P4 for lede-dev@lists.infradead.org; Thu, 11 Aug 2016 12:02:50 +0000 Received: by mail-wm0-x241.google.com with SMTP id i138so947118wmf.3 for ; Thu, 11 Aug 2016 05:02:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=ON7FzbVMKI3wRqw7j4AQ/Szu8/RfaFIWX7AQPhSqIZw=; b=Ga1GS31bccvdIllF3lnGuxsdgii8g3+f1TrnoC/XzsCFBSH2ttrGAImU9J7K12oPnT Q/Zb4t7IWPDD/7Q9ZynTVbedlMdeKbS60jeS5Fh2Uaot7OZGBf0PJx3jUDyNTU/xY6k8 oagqfxCFkiUX58EEFlsVRQI0b3EZOKUfoVSjbf+BTHlRFqe2HoJht/yXrhK920eONdMQ jZjU6rE1gNf9JKxf9IBEzaE7NSm8dIVk+x6wGLQhMFc+OaD8ka3PiU3FYa/hMxa4UIzU 3LzilZgr6f0DV7uYLH1L/7wAXf+whDHMTfgOUzg5/ShlwZuLfS67uYjKUq2asMzAgM0p 8crA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ON7FzbVMKI3wRqw7j4AQ/Szu8/RfaFIWX7AQPhSqIZw=; b=OSG5bF4RSszdqtEe+q9iicFJg2QZGwTdYdTWKS/smpFE1HJHpVtxIqz2S6mvRQSdtF s93hmyd7OfXLxz6Jw3M0pZB/lndevLnSkAU9n6fOy+YkhV+1ykn4mMr68LpEVYQ3rF9m fgJtsWu5cT709kgodbmMX8HPpVRqPcUYsM+7Wz5ixLxBlxbQbn1IbUvCEdBS0/HoZQdj Q3ConHh2HXtSeLQ4pknl19MFCQpBr3vkYBWKxVTGek15i+d5lmw+yhTOUTgVu4qMHjIF NudDxUgAq3QAeYK0WrKGUFswh3aY8XEO1MJRuSuj6mJIlB0B7jvf2JRUjrcZ9CbK4SQI ud9Q== X-Gm-Message-State: AEkooutLo5Phvw+b791Pqb9GbuBh4g4BpMSqYiQTrHMi7wxavWHrDyHlbt2TkWQq2Ixukw== X-Received: by 10.194.67.198 with SMTP id p6mr9219078wjt.138.1470916948277; Thu, 11 Aug 2016 05:02:28 -0700 (PDT) Received: from localhost.localdomain ([5.158.136.57]) by smtp.gmail.com with ESMTPSA id f4sm13160992wmf.8.2016.08.11.05.02.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Aug 2016 05:02:27 -0700 (PDT) From: Eduardo Abinader To: opewrt-devel@lists.openwrt.org, lede-dev@lists.infradead.org Date: Thu, 11 Aug 2016 14:02:20 +0200 Message-Id: <1470916940-28035-1-git-send-email-eduardoabinader@gmail.com> X-Mailer: git-send-email 2.5.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160811_050250_019096_809CB5FF X-CRM114-Status: GOOD ( 13.03 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2a00:1450:400c:c09:0:0:0:241 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (eduardoabinader[at]gmail.com) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid Subject: [LEDE-DEV] [PATCH 1/1 V3] netifd: track when wdev setup fails X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eduardo Abinader , nbd@openwrt.org MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org When netifd failed to load a valid configuration, after an invalid one, it was not possible to setup the wireless device. This patch aims to track this situation and behave acordingly, by keeping track of failed setup without affecting autostart behavior. Also block the restart of the wdev, when not applied. Signed-off-by: Eduardo Abinader --- wireless.c | 26 ++++++++++++++++++++------ wireless.h | 1 + 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/wireless.c b/wireless.c index 34dd328..1212a77 100644 --- a/wireless.c +++ b/wireless.c @@ -287,7 +287,7 @@ __wireless_device_set_up(struct wireless_device *wdev) if (wdev->disabled) return; - if (wdev->state != IFS_DOWN || config_init) + if ((wdev->config_state != IFC_RELOAD) && (wdev->state != IFS_DOWN || config_init)) return; free(wdev->prev_config); @@ -313,11 +313,15 @@ wdev_handle_config_change(struct wireless_device *wdev) switch(state) { case IFC_NORMAL: - case IFC_RELOAD: - wdev->config_state = IFC_NORMAL; if (wdev->autostart) __wireless_device_set_up(wdev); break; + case IFC_RELOAD: + if (wdev->autostart || wdev->retry_setup_failed) + __wireless_device_set_up(wdev); + + wdev->config_state = IFC_NORMAL; + break; case IFC_REMOVE: wireless_device_free(wdev); break; @@ -388,6 +392,13 @@ wireless_device_mark_up(struct wireless_device *wdev) D(WIRELESS, "Wireless device '%s' is now up\n", wdev->name); wdev->state = IFS_UP; + + if (wdev->retry_setup_failed) { + wdev->retry_setup_failed = false; + + /* a new chance is given, if a previous setup failed */ + wdev->autostart = true; + } vlist_for_each_element(&wdev->interfaces, vif, node) wireless_interface_handle_link(vif, true); } @@ -398,9 +409,10 @@ wireless_device_retry_setup(struct wireless_device *wdev) if (wdev->state == IFS_TEARDOWN || wdev->state == IFS_DOWN || wdev->cancel) return; - if (--wdev->retry < 0) + if (--wdev->retry < 0) { wdev->autostart = false; - + wdev->retry_setup_failed = true; + } __wireless_device_set_down(wdev); } @@ -681,6 +693,7 @@ wireless_device_create(struct wireless_driver *drv, const char *name, struct blo wdev->config_state = IFC_NORMAL; wdev->name = strcpy(name_buf, name); wdev->config = data; + wdev->retry_setup_failed = false; wdev->config_autostart = true; wdev->autostart = wdev->config_autostart; INIT_LIST_HEAD(&wdev->script_proc); @@ -991,6 +1004,7 @@ wireless_start_pending(void) struct wireless_device *wdev; vlist_for_each_element(&wireless_devices, wdev, node) - if (wdev->autostart) + if (wdev->autostart && wdev->state == IFS_DOWN) __wireless_device_set_up(wdev); + } diff --git a/wireless.h b/wireless.h index 665cdb7..403cc86 100644 --- a/wireless.h +++ b/wireless.h @@ -56,6 +56,7 @@ struct wireless_device { bool config_autostart; bool autostart; bool disabled; + bool retry_setup_failed; enum interface_state state; enum interface_config_state config_state;