From patchwork Mon Jun 19 18:09:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Prestwood X-Patchwork-Id: 13284876 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53FAE1426F for ; Mon, 19 Jun 2023 18:09:27 +0000 (UTC) Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-3fde0f72f61so11356191cf.1 for ; Mon, 19 Jun 2023 11:09:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687198166; x=1689790166; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=4TnC3oB+fAzquovUT30Y/jTLMjzhcam4zbWrgZDJn9s=; b=er2f7aQZca/jWnDM6m0BSkuyO+cnUbpbbDcLxr+E4oj1L0pgQGCaoFwOmmRhv5552Q tE9JU7YlIuDPqFrKuw37PpFzl2l5vkjub5LQau8xD1/dLs9HOcchd+BB5bOzCbOM/6AU aNgyuMQBBd71czoGzGi5hFEItWthpZ+zMsY5ZEePHOTrpRNE1XKCYPDCMUrcH+mt+z+z spV8jTnzfnhK0UyYC4iW/LG/zeyjCXimvrR1Att9I+lIDGAIYmNniEEtxn6JZ6AjWHcT S29yTv8VZ9PXhaNSVu7oMjfwIE8Kq/WAk3aAmgsXqBH89uTTkSGmG2T6+aM9qzf8MZcS I4Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687198166; x=1689790166; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4TnC3oB+fAzquovUT30Y/jTLMjzhcam4zbWrgZDJn9s=; b=HI/j3ck4lhPKWxL2NpZ8Elj5WhRi6UKUlZGInsD+9XUjqUl4EcVfe2gpZKfzp3MAjp fkX93PLSL8zS7fU/1EP4APCAofgq7U0ezkt+MTQsRr9Qq/qq2PJnxkQa3CiYDn5AKosw LCQ/b3T0f53ktJXplemwdAA4mIvcdv7d336PS621dhSvMdwhZ1u1Dyy4K0R8x1uR1zuV 5fkO6cNqui8e6T+0hCfyIQSm9wY/fSRRNTGKBKyP40BTPyyQv99Wih9boYMTE9OCu7Gn 7uLnH6YL0jgjeKwJXOBE+5jdX5mIAyOVU7mrS6F3QGbtM1N9vxiNrXWv7IwQRM1xgckv FhZw== X-Gm-Message-State: AC+VfDxbNw2QJR6a24c842acemcgZEtP0yTVtwsQ0MpRNhann2mqfw0M PGIR4CFisyUDwN2bGpk33Jc07S1yvpU= X-Google-Smtp-Source: ACHHUZ4WDQhwJf8uB6AkH5jzUUeDnFWwXKP4sO0YZG1FBrEgtjFhism8Y5eor9fUUpoePLdcSSjx5g== X-Received: by 2002:ac8:5895:0:b0:3f5:16af:17db with SMTP id t21-20020ac85895000000b003f516af17dbmr11093514qta.0.1687198165908; Mon, 19 Jun 2023 11:09:25 -0700 (PDT) Received: from LOCLAP699.rst-01.locus (50-78-19-50-static.hfc.comcastbusiness.net. [50.78.19.50]) by smtp.gmail.com with ESMTPSA id i21-20020ac84f55000000b003ff0d00a71esm148930qtw.13.2023.06.19.11.09.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Jun 2023 11:09:25 -0700 (PDT) From: James Prestwood To: iwd@lists.linux.dev Cc: James Prestwood Subject: [PATCH v3 1/3] netdev: move GETLINK into its own function, track command ID Date: Mon, 19 Jun 2023 11:09:20 -0700 Message-Id: <20230619180922.231506-1-prestwoj@gmail.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: iwd@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Move this logic into its own function and track the command ID so it can be canceled in case of netdev going down. --- src/netdev.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) v3: * Zero get_link_cmd_id in callback diff --git a/src/netdev.c b/src/netdev.c index 4ee17f3b..a72745b0 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -131,6 +131,7 @@ struct netdev { uint32_t qos_map_cmd_id; uint32_t mac_change_cmd_id; uint32_t get_oci_cmd_id; + uint32_t get_link_cmd_id; enum netdev_result result; uint16_t last_code; /* reason or status, depending on result */ struct l_timeout *neighbor_report_timeout; @@ -940,6 +941,11 @@ static void netdev_free(void *data) if (netdev->fw_roam_bss) scan_bss_free(netdev->fw_roam_bss); + if (netdev->get_link_cmd_id) { + l_netlink_cancel(rtnl, netdev->get_link_cmd_id); + netdev->get_link_cmd_id = 0; + } + scan_wdev_remove(netdev->wdev_id); watchlist_destroy(&netdev->station_watches); @@ -6116,12 +6122,14 @@ static void netdev_initial_down_cb(int error, uint16_t type, const void *data, static void netdev_getlink_cb(int error, uint16_t type, const void *data, uint32_t len, void *user_data) { + struct netdev *netdev = user_data; const struct ifinfomsg *ifi = data; unsigned int bytes; - struct netdev *netdev; l_netlink_command_func_t cb; bool powered; + netdev->get_link_cmd_id = 0; + if (error != 0) { l_error("RTM_GETLINK error %i: %s", error, strerror(-error)); return; @@ -6133,8 +6141,7 @@ static void netdev_getlink_cb(int error, uint16_t type, const void *data, return; } - netdev = netdev_find(ifi->ifi_index); - if (!netdev) + if (L_WARN_ON((uint32_t)ifi->ifi_index != netdev->index)) return; bytes = len - NLMSG_ALIGN(sizeof(struct ifinfomsg)); @@ -6212,6 +6219,27 @@ error: return NULL; } +static void netdev_get_link(struct netdev *netdev) +{ + struct ifinfomsg *rtmmsg; + size_t bufsize; + + /* Query interface flags */ + bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg)); + rtmmsg = l_malloc(bufsize); + memset(rtmmsg, 0, bufsize); + + rtmmsg->ifi_family = AF_UNSPEC; + rtmmsg->ifi_index = netdev->index; + + netdev->get_link_cmd_id = l_netlink_send(rtnl, RTM_GETLINK, 0, rtmmsg, + bufsize, netdev_getlink_cb, + netdev, NULL); + L_WARN_ON(netdev->get_link_cmd_id == 0); + + l_free(rtmmsg); +} + struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, const uint8_t *set_mac) { @@ -6223,8 +6251,6 @@ struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, uint32_t wiphy_id; struct netdev *netdev; struct wiphy *wiphy = NULL; - struct ifinfomsg *rtmmsg; - size_t bufsize; struct l_io *pae_io = NULL; if (nl80211_parse_attrs(msg, NL80211_ATTR_IFINDEX, &ifindex, @@ -6283,21 +6309,10 @@ struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, l_debug("Created interface %s[%d %" PRIx64 "]", netdev->name, netdev->index, netdev->wdev_id); - /* Query interface flags */ - bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg)); - rtmmsg = l_malloc(bufsize); - memset(rtmmsg, 0, bufsize); - - rtmmsg->ifi_family = AF_UNSPEC; - rtmmsg->ifi_index = ifindex; - - l_netlink_send(rtnl, RTM_GETLINK, 0, rtmmsg, bufsize, - netdev_getlink_cb, NULL, NULL); - - l_free(rtmmsg); - netdev_setup_interface(netdev); + netdev_get_link(netdev); + return netdev; } From patchwork Mon Jun 19 18:09:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Prestwood X-Patchwork-Id: 13284877 Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E88A14272 for ; Mon, 19 Jun 2023 18:09:28 +0000 (UTC) Received: by mail-qt1-f177.google.com with SMTP id d75a77b69052e-3f9e1ebbf31so30036291cf.2 for ; Mon, 19 Jun 2023 11:09:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687198167; x=1689790167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=E6y61ZgznrffdU9vfulnF+wu/INoVgVxOIMiS0Hvg3E=; b=RCnl8P6J7U2vJYv88RGvekwHAWx1vx0pTakdU7eiCPVGoA+yhq9IkxIYGz8dlca9YK +Wf8Ny7ULeEggUz+jygMXlyJeCh1Ol6OuI1jF+6oNJLQ/sIA2LZTVWZHjQ7z2FMRhqp3 GgGV5QE8/gI2BV40vaLdpAK7mtnILsN8wBlb9fLmkV91vz+/zzitoy7D2grCY4LrZiOb KDEQhS5ndAy2SfeGjic6KqT1OF0zxDG4MsREZV+PY/AyP/+VPC2XmX8Bq1+ZypTdyqi1 8Fe89YduzQQ74wZ4apqnRLAJYB5mIFi6ZT2PjMeRIQyFXwY4Mt0EFwc59vodEHSYw0O7 oRag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687198167; x=1689790167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E6y61ZgznrffdU9vfulnF+wu/INoVgVxOIMiS0Hvg3E=; b=ScfKWi1DElk2B3DvJX9wu81XK7Jq8Z5lctOCxQftCVkOotgnSfGCuiDX0sK9Sp/1gb AuXePiiik9q2qijaka7merY++YJhmURcPnqJCFdnUK8We19jiu0YzR5MI3//KHkzbPay OJFBO/fuArzz4Clah8AX/jsu/tYC6XSdJmgxYCPzJolTMeVmewa+LyRCseOsMPc7gWIy /ocAjgaYDmOAZ371yLVvH+E7JHPRFNPf3a/D1pjrKrEwf/tLj4lRIrwp3OCVwkZUaOZq ZTJWg94D/j9OMJOk0e9vxGKMhQPpozwR44if45QYu66Kk6ru+/KO6lSd2lr3smLij1lx xGDw== X-Gm-Message-State: AC+VfDyXeldD7nNfS0VpMXb0AwOGVXWcpue/3xVvkNPnc6UZHR82pAVB jmjDr/yAQmYWYhnYEQq3+U9AJzsa6aw= X-Google-Smtp-Source: ACHHUZ5EfF1m2idd97mMcjL2kBCJ6VtFlrsd+FiDUcMVNkM6NIoZmOZMC/UJN4SozFIkakkDkTrVHA== X-Received: by 2002:a05:622a:4e:b0:3f6:914f:5934 with SMTP id y14-20020a05622a004e00b003f6914f5934mr12884833qtw.58.1687198167120; Mon, 19 Jun 2023 11:09:27 -0700 (PDT) Received: from LOCLAP699.rst-01.locus (50-78-19-50-static.hfc.comcastbusiness.net. [50.78.19.50]) by smtp.gmail.com with ESMTPSA id i21-20020ac84f55000000b003ff0d00a71esm148930qtw.13.2023.06.19.11.09.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Jun 2023 11:09:26 -0700 (PDT) From: James Prestwood To: iwd@lists.linux.dev Cc: James Prestwood Subject: [PATCH v3 2/3] netdev: disable power save if required Date: Mon, 19 Jun 2023 11:09:21 -0700 Message-Id: <20230619180922.231506-2-prestwoj@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230619180922.231506-1-prestwoj@gmail.com> References: <20230619180922.231506-1-prestwoj@gmail.com> Precedence: bulk X-Mailing-List: iwd@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Disable power save if the wiphy indicates its needed. Do this before issuing GET_LINK so the netdev doesn't signal its up until power save is disabled. --- src/netdev.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) v3: * Zero power_save_cmd_id in callback diff --git a/src/netdev.c b/src/netdev.c index a72745b0..f5c5fc51 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -132,6 +132,7 @@ struct netdev { uint32_t mac_change_cmd_id; uint32_t get_oci_cmd_id; uint32_t get_link_cmd_id; + uint32_t power_save_cmd_id; enum netdev_result result; uint16_t last_code; /* reason or status, depending on result */ struct l_timeout *neighbor_report_timeout; @@ -6240,6 +6241,42 @@ static void netdev_get_link(struct netdev *netdev) l_free(rtmmsg); } +static void netdev_disable_ps_cb(struct l_genl_msg *msg, void *user_data) +{ + struct netdev *netdev = user_data; + int err = l_genl_msg_get_error(msg); + + netdev->power_save_cmd_id = 0; + + /* Can't do anything about it but inform the user */ + if (err < 0) + l_error("Failed to disable power save for ifindex %u (%s: %d)", + netdev->index, strerror(-err), err); + else + l_debug("Disabled power save for ifindex %u", netdev->index); + + netdev_get_link(netdev); +} + +static bool netdev_disable_power_save(struct netdev *netdev) +{ + struct l_genl_msg *msg = l_genl_msg_new(NL80211_CMD_SET_POWER_SAVE); + uint32_t disabled = NL80211_PS_DISABLED; + + l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index); + l_genl_msg_append_attr(msg, NL80211_ATTR_PS_STATE, 4, &disabled); + + netdev->power_save_cmd_id = l_genl_family_send(nl80211, msg, + netdev_disable_ps_cb, + netdev, NULL); + if (!netdev->power_save_cmd_id) { + l_error("Failed to send SET_POWER_SAVE (-EIO)"); + return false; + } + + return true; +} + struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, const uint8_t *set_mac) { @@ -6311,6 +6348,12 @@ struct netdev *netdev_create_from_genl(struct l_genl_msg *msg, netdev_setup_interface(netdev); + if (wiphy_power_save_disabled(wiphy)) { + /* Wait to issue GET_LINK until PS is disabled */ + if (netdev_disable_power_save(netdev)) + return netdev; + } + netdev_get_link(netdev); return netdev; From patchwork Mon Jun 19 18:09:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Prestwood X-Patchwork-Id: 13284878 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8C721426F for ; Mon, 19 Jun 2023 18:09:29 +0000 (UTC) Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-3f9e5c011cfso37996751cf.1 for ; Mon, 19 Jun 2023 11:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687198168; x=1689790168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nvjSP7iTjh3+N0OkRVEY+dGRNgXvdcsmdCzw187tvH8=; b=LAXJAQ9S3lHwE5iNWIxCjx1C/0IvH/yjnKMItuXPYczMQlIgM2Y3gi+FjfB4sP0hMO 0o1Bu+6zNO8vz2SMKemIFVxMRIW5s7VxR9U2hvpT85jtUcJh+c7zbcbJTYpTTyyNcO0V NFKlGUkhWJ5n2/Y8dpJArepG3Rt6137Tg6UzLpS3oqvMJfMyCOfOuFbCbmBrLqqYCE61 HtIPM7zdxAYOsDO2SBnu7PJ3qXs/VEmLBJmmTxd31S08+NaT1CjoMZ5bHq6+T8HT7/b7 HovuUddshDKvIFWvXpqCSxQyOJruwmclU0kLXC9dMCdHBpYhFy8c+Da5C35SXvrhKHSa HzGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687198168; x=1689790168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nvjSP7iTjh3+N0OkRVEY+dGRNgXvdcsmdCzw187tvH8=; b=Iz6RgOzhvdpgXwJaGr9A0kiBitNGy0zCHzAHzMCMKMpDEPqSzCMKDlMViVEcMChP/x IYUQz3E99D9dkYelrJElqwvctxaJyar5lcuh86SqFdpPoXy4n3zo97V4QOFJI+nfkvzf qvgeOOXdP9Fdbrq232RCTnAHAWU1yZbknBbmFTuUvAQU0PIoCKEwu5mEIx78YnSUmMy4 CJd1LMXNZS9haojZyI5o9kL/oKP0F62OxTnJokWluTDdtdxsxVzuXIzR0/1iGu/wJCAL lvWZeSZY4amOsGAHdPf8V52J4+TBVvgs6y4rqU5lEQ94g3pZNvg3l4sKr+/Wz0PNcBYB GTEQ== X-Gm-Message-State: AC+VfDwYjBYo19cP12iZx47yvyl/J0RZslaMay/3M7PstUP+/D6raubU tSfE8CHGt/iKd+8oHR3nDOw5TAbXkF0= X-Google-Smtp-Source: ACHHUZ51b7i8/EwQzYK+jNOEauvsL4M2R+7tF/6hrDH7tcvHpzWIIuxUr8tWVNpf4WJBXSfqIS7c5w== X-Received: by 2002:ac8:58ca:0:b0:3ff:230f:63a7 with SMTP id u10-20020ac858ca000000b003ff230f63a7mr3054211qta.27.1687198168582; Mon, 19 Jun 2023 11:09:28 -0700 (PDT) Received: from LOCLAP699.rst-01.locus (50-78-19-50-static.hfc.comcastbusiness.net. [50.78.19.50]) by smtp.gmail.com with ESMTPSA id i21-20020ac84f55000000b003ff0d00a71esm148930qtw.13.2023.06.19.11.09.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Jun 2023 11:09:28 -0700 (PDT) From: James Prestwood To: iwd@lists.linux.dev Cc: James Prestwood Subject: [PATCH v3 3/3] wiphy: remove l_info's for control port/power save Date: Mon, 19 Jun 2023 11:09:22 -0700 Message-Id: <20230619180922.231506-3-prestwoj@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230619180922.231506-1-prestwoj@gmail.com> References: <20230619180922.231506-1-prestwoj@gmail.com> Precedence: bulk X-Mailing-List: iwd@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 These should not have been put into a getter for wiphy and now the driver quirks are printed out in wiphy_print_basic_info. --- src/wiphy.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/wiphy.c b/src/wiphy.c index 39ebe276..77ed2acf 100644 --- a/src/wiphy.c +++ b/src/wiphy.c @@ -708,11 +708,8 @@ bool wiphy_control_port_enabled(struct wiphy *wiphy) const struct l_settings *settings = iwd_get_config(); bool enabled; - if (wiphy->driver_flags & FORCE_PAE) { - l_info("Not using Control Port due to driver quirks: %s", - wiphy_get_driver(wiphy)); + if (wiphy->driver_flags & FORCE_PAE) return false; - } if (!wiphy_has_ext_feature(wiphy, NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211)) @@ -727,11 +724,8 @@ bool wiphy_control_port_enabled(struct wiphy *wiphy) bool wiphy_power_save_disabled(struct wiphy *wiphy) { - if (wiphy->driver_flags & POWER_SAVE_DISABLE) { - l_info("Disabling power save due to driver quirks: %s", - wiphy_get_driver(wiphy)); + if (wiphy->driver_flags & POWER_SAVE_DISABLE) return true; - } return false; }