diff mbox series

[02/11] knownnetworks: add option to force a default ECC group

Message ID 20240227183405.257206-2-prestwoj@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series [01/11] doc: Document UseDefaultEccGroup | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
prestwoj/iwd-ci-gitlint success GitLint

Commit Message

James Prestwood Feb. 27, 2024, 6:33 p.m. UTC
This adds the option [Settings].UseDefaultEccGroup which allows a
network profile to specify the behavior when using an ECC-based
protocol. If unset (default) IWD will learn the behavior of the
network for the lifetime of its process.

Many APs do not support group 20 which IWD tries first by default.
This leads to an initial failure followed by a retry using group 19.
This option will allow the user to configure IWD to use group 19
first or learn the network capabilities, if the authentication fails
with group 20 IWD will always use group 19 for the process lifetime.
---
 src/knownnetworks.c | 11 +++++++++++
 src/knownnetworks.h |  8 ++++++++
 2 files changed, 19 insertions(+)
diff mbox series

Patch

diff --git a/src/knownnetworks.c b/src/knownnetworks.c
index fc810057..6f65d2b3 100644
--- a/src/knownnetworks.c
+++ b/src/knownnetworks.c
@@ -123,6 +123,17 @@  void __network_config_parse(const struct l_settings *settings,
 
 		l_strfreev(modes);
 	}
+
+	if (l_settings_has_key(settings, NET_USE_DEFAULT_ECC_GROUP)) {
+		if (l_settings_get_bool(settings,
+					NET_USE_DEFAULT_ECC_GROUP, &b)) {
+			config->ecc_group = b ? KNOWN_NETWORK_ECC_GROUP_DEFAULT
+					: KNOWN_NETWORK_ECC_GROUP_MOST_SECURE;
+		} else
+			l_warn("[%s].%s is not a boolean value",
+					NET_USE_DEFAULT_ECC_GROUP);
+	} else
+		config->ecc_group = KNOWN_NETWORK_ECC_GROUP_AUTO;
 }
 
 void __network_info_init(struct network_info *info,
diff --git a/src/knownnetworks.h b/src/knownnetworks.h
index 741d42ed..c81bd9aa 100644
--- a/src/knownnetworks.h
+++ b/src/knownnetworks.h
@@ -27,6 +27,7 @@ 
 #define NET_ADDRESS_OVERRIDE SETTINGS, "AddressOverride"
 #define NET_TRANSITION_DISABLE SETTINGS, "TransitionDisable"
 #define NET_TRANSITION_DISABLE_MODES SETTINGS, "DisabledTransitionModes"
+#define NET_USE_DEFAULT_ECC_GROUP SETTINGS, "UseDefaultEccGroup"
 
 enum security;
 struct scan_freq_set;
@@ -38,6 +39,12 @@  enum known_networks_event {
 	KNOWN_NETWORKS_EVENT_UPDATED,
 };
 
+enum known_network_ecc_group {
+	KNOWN_NETWORK_ECC_GROUP_AUTO = 0,
+	KNOWN_NETWORK_ECC_GROUP_DEFAULT,
+	KNOWN_NETWORK_ECC_GROUP_MOST_SECURE,
+};
+
 struct network_info_ops {
 	struct l_settings *(*open)(struct network_info *info);
 	int (*touch)(struct network_info *info);
@@ -72,6 +79,7 @@  struct network_config {
 	uint8_t sta_addr[6];
 	bool have_transition_disable : 1;
 	uint8_t transition_disable;
+	enum known_network_ecc_group ecc_group;
 };
 
 struct network_info {