From: Denis Kenzior <denkenz@gmail.com>
To: iwd@lists.01.org
Subject: [PATCH 1/8] netdev: Track SET_INTERFACE events
Date: Tue, 20 Apr 2021 11:35:12 -0500 [thread overview]
Message-ID: <20210420163519.12375-1-denkenz@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2304 bytes --]
And set the interface type based on the event rather than the command
callback. This allows us to track interface type changes even if they
come from outside iwd (which shouldn't happen.)
---
src/netdev.c | 47 +++++++++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 6 deletions(-)
diff --git a/src/netdev.c b/src/netdev.c
index a63c6b12a5d1..05e22148e495 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -4867,6 +4867,43 @@ static int netdev_cqm_rssi_update(struct netdev *netdev)
return 0;
}
+static void netdev_set_interface_event(struct l_genl_msg *msg,
+ struct netdev *netdev)
+{
+ uint32_t iftype;
+
+ if (nl80211_parse_attrs(msg, NL80211_ATTR_IFTYPE, &iftype,
+ NL80211_ATTR_UNSPEC) < 0)
+ return;
+
+ if (iftype == netdev->type)
+ return;
+
+ l_debug("Interface type changed from %s to %s",
+ netdev_iftype_to_string(netdev->type),
+ netdev_iftype_to_string(iftype));
+ netdev->type = iftype;
+
+ /* Set RSSI threshold for CQM notifications */
+ if (netdev->type == NL80211_IFTYPE_STATION)
+ netdev_cqm_rssi_update(netdev);
+}
+
+static void netdev_config_notify(struct l_genl_msg *msg, void *user_data)
+{
+ struct netdev *netdev;
+
+ netdev = netdev_from_message(msg);
+ if (!netdev)
+ return;
+
+ switch (l_genl_msg_get_command(msg)) {
+ case NL80211_CMD_SET_INTERFACE:
+ netdev_set_interface_event(msg, netdev);
+ break;
+ }
+}
+
static struct l_genl_msg *netdev_build_cmd_set_interface(struct netdev *netdev,
uint32_t iftype)
{
@@ -4927,12 +4964,6 @@ static void netdev_set_iftype_cb(struct l_genl_msg *msg, void *user_data)
if (error != 0)
goto done;
- netdev->type = req->pending_type;
-
- /* Set RSSI threshold for CQM notifications */
- if (netdev->type == NL80211_IFTYPE_STATION)
- netdev_cqm_rssi_update(netdev);
-
/* If the netdev was down originally, we're done */
if (!req->bring_up)
goto done;
@@ -5635,6 +5666,10 @@ static int netdev_init(void)
NULL, NULL))
l_error("Registering for scan notifications failed");
+ if (!l_genl_family_register(nl80211, "config", netdev_config_notify,
+ NULL, NULL))
+ l_error("Registering for config notifications failed");
+
return 0;
fail_netlink:
--
2.26.3
next reply other threads:[~2021-04-20 16:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-20 16:35 Denis Kenzior [this message]
2021-04-20 16:35 ` [PATCH 2/8] frame-xchg: iftype changes to be managed by netdev Denis Kenzior
2021-04-20 16:35 ` [PATCH 3/8] netdev: Re-add frame watches on iftype change Denis Kenzior
2021-04-20 16:35 ` [PATCH 4/8] rrm: Track that station is removed Denis Kenzior
2021-04-20 16:35 ` [PATCH 5/8] netdev: Add new iftype change event Denis Kenzior
2021-04-20 16:35 ` [PATCH 6/8] rrm: Always create RRM state Denis Kenzior
2021-04-20 16:35 ` [PATCH 7/8] rrm: React to IFTYPE_CHANGE events Denis Kenzior
2021-04-20 16:35 ` [PATCH 8/8] station: Move AP directed roam watch to station Denis Kenzior
2021-04-23 14:52 ` [PATCH 1/8] netdev: Track SET_INTERFACE events Denis Kenzior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210420163519.12375-1-denkenz@gmail.com \
--to=denkenz@gmail.com \
--cc=iwd@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox