From patchwork Fri Aug 12 06:51:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eduardo Abinader X-Patchwork-Id: 658538 X-Patchwork-Delegate: nbd@openwrt.org 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 3s9bGP33Rzz9sXy for ; Fri, 12 Aug 2016 16:54:21 +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=mso2Df5j; 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 1bY6KV-0000dr-Kw; Fri, 12 Aug 2016 06:52:31 +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 1bY6KR-0000aw-RN for lede-dev@lists.infradead.org; Fri, 12 Aug 2016 06:52:29 +0000 Received: by mail-wm0-x241.google.com with SMTP id i138so1147599wmf.3 for ; Thu, 11 Aug 2016 23:52:07 -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=PAhofG/0cibxTSKFM6LknndnYJAcqijtQ0vM6xFch0A=; b=mso2Df5j2ZoDzSGc7Lgl1+KSXQ8ETT/9VdU/uK0Arojf55TYIdfaFymlUqBwQoRpOK 6b8mipUBFT1adGZ55DBDdcL3+qClY7IFPRNKaQy2UIEIJu2KgSGV5WN1i0h2BXREfSEO jWebgCknqe1E+WmRbUKQiKd3lYuR6F/eotVby6hv28n62Ji8ecp7tWVbDBRGVajoZJGj /sJYQE3FhvQix40sKiEJ40cqO1/9FjN9Kt0zS/AsXLi9ZxOTxHUoDaYjN4QQs7tuk8eF OPlvwVaTSDcNlG/HaZ5cVl/0OxgG05CSzmLkwbmmMu1Z76mDzAeug5b3mqyxznWeBR2r Z6XQ== 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=PAhofG/0cibxTSKFM6LknndnYJAcqijtQ0vM6xFch0A=; b=PseEPSFEV2H96ghDxQhH1CkMORdpwQG3EvLtm+mRqdPWrv3Oxr+FWugCePblbeFxrd ZKqFXaeaTOBBpoksTbZ1pDlHNsxSWxPfk006qc2uO6Hr7Orv0RWwaYiglIU5KvWhalrN bXzcAEnyK2/hYRsQAKRHX/DOMFBvnBOAaDAbaOgYlmzR308CIguh+2LtDy67ASvoWETp Gc0JDW2jc01Mt5G1h6RsaovKXL0FmxYVcJ+ctKi1QW7F6DPUYB4ORkQQ3MiByZq2UhqF Fd1d2EuDhn+jF2iDYUO0LG7EqTQ0OzAkRVqvnmfIx+7os8q5c8Q+CkahrZ8Psws1E9IK 5j7g== X-Gm-Message-State: AEkooutgUnO+Bw7M32e8SneqBOZ8ZezSGKqfn03otsVUv6NaFprAn0MvsGCGbu17UNX3WA== X-Received: by 10.28.3.69 with SMTP id 66mr1335253wmd.26.1470984725732; Thu, 11 Aug 2016 23:52:05 -0700 (PDT) Received: from localhost.localdomain ([5.158.136.57]) by smtp.gmail.com with ESMTPSA id k186sm1081196wmd.13.2016.08.11.23.52.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Aug 2016 23:52:05 -0700 (PDT) From: Eduardo Abinader To: opewrt-devel@lists.openwrt.org, lede-dev@lists.infradead.org Date: Fri, 12 Aug 2016 08:51:58 +0200 Message-Id: <1470984718-14923-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_235228_102470_3CC103C6 X-CRM114-Status: GOOD ( 10.83 ) 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 v5] 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: nbd@openwrt.org, Eduardo Abinader , Eduardo Abinader MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Eduardo Abinader 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 | 17 ++++++++++++----- wireless.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/wireless.c b/wireless.c index 34dd328..e30adb3 100644 --- a/wireless.c +++ b/wireless.c @@ -287,6 +287,12 @@ __wireless_device_set_up(struct wireless_device *wdev) if (wdev->disabled) return; + if (wdev->retry_setup_failed) + return; + + if (!wdev->autostart) + return; + if (wdev->state != IFS_DOWN || config_init) return; @@ -314,9 +320,9 @@ wdev_handle_config_change(struct wireless_device *wdev) switch(state) { case IFC_NORMAL: case IFC_RELOAD: + __wireless_device_set_up(wdev); + wdev->config_state = IFC_NORMAL; - if (wdev->autostart) - __wireless_device_set_up(wdev); break; case IFC_REMOVE: wireless_device_free(wdev); @@ -399,7 +405,7 @@ wireless_device_retry_setup(struct wireless_device *wdev) return; if (--wdev->retry < 0) - wdev->autostart = false; + wdev->retry_setup_failed = true; __wireless_device_set_down(wdev); } @@ -467,6 +473,7 @@ wdev_change_config(struct wireless_device *wdev, struct wireless_device *wd_new) free(wdev->config); wdev->config = blob_memdup(new_config); wdev->disabled = disabled; + wdev->retry_setup_failed = false; wdev_set_config_state(wdev, IFC_RELOAD); } @@ -681,6 +688,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 +999,5 @@ wireless_start_pending(void) struct wireless_device *wdev; vlist_for_each_element(&wireless_devices, wdev, node) - if (wdev->autostart) - __wireless_device_set_up(wdev); + __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;