diff options
| author | Michael Biebl <biebl@debian.org> | 2024-01-25 09:46:18 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2024-01-25 09:46:18 +0100 |
| commit | 70e18d99b8e3e77bb37e218d7ac582130156f8ef (patch) | |
| tree | d40c587e6d3f0e094ff558e415f1bb9803643214 /src/libnm-platform/wifi | |
| parent | d4d8b2b91f7ba000d97a8b2aab48c85000c11314 (diff) | |
New upstream version 1.45.90 upstream/1.45.90
Diffstat (limited to 'src/libnm-platform/wifi')
| -rw-r--r-- | src/libnm-platform/wifi/nm-wifi-utils-nl80211.c | 113 | ||||
| -rw-r--r-- | src/libnm-platform/wifi/nm-wifi-utils-private.h | 5 | ||||
| -rw-r--r-- | src/libnm-platform/wifi/nm-wifi-utils-wext.c | 16 | ||||
| -rw-r--r-- | src/libnm-platform/wifi/nm-wifi-utils.c | 22 | ||||
| -rw-r--r-- | src/libnm-platform/wifi/nm-wifi-utils.h | 6 |
5 files changed, 14 insertions, 148 deletions
diff --git a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c index beddaf22..6109849a 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c @@ -696,10 +696,12 @@ nl80211_wiphy_info_handler(const struct nl_msg *msg, void *arg) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_VALID; - if (f->freq > 2400 && f->freq < 2500) + if (f->freq >= 2401 && f->freq <= 2495) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ; - if (f->freq > 4900 && f->freq < 6000) + if (f->freq >= 5150 && f->freq <= 5895) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ; + if (f->freq >= 5925 && f->freq <= 7125) + info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ; info->num_freqs++; } @@ -825,111 +827,6 @@ nla_put_failure: g_return_val_if_reached(FALSE); } -struct nl80211_csme_conn_info { - NMWifiUtilsNl80211 *self; - NMPlatformCsmeConnInfo *conn_info; -}; - -static int -nl80211_csme_conn_event_handler(const struct nl_msg *msg, void *arg) -{ - struct nl80211_csme_conn_info *info = arg; - NMPlatformCsmeConnInfo *out_conn_info = info->conn_info; - NMWifiUtilsNl80211 *self = info->self; - struct genlmsghdr *gnlh = (void *) nlmsg_data(nlmsg_hdr(msg)); - struct nlattr *tb[NL80211_ATTR_MAX + 1]; - struct nlattr *data; - struct nlattr *attrs[NUM_IWL_MVM_VENDOR_ATTR]; - int err; - - static const struct nla_policy iwl_vendor_policy[NUM_IWL_MVM_VENDOR_ATTR] = { - [IWL_MVM_VENDOR_ATTR_AUTH_MODE] = {.type = NLA_U32}, - [IWL_MVM_VENDOR_ATTR_SSID] = {.type = NLA_UNSPEC, .maxlen = NM_IW_ESSID_MAX_SIZE}, - [IWL_MVM_VENDOR_ATTR_STA_CIPHER] = {.type = NLA_U32}, - [IWL_MVM_VENDOR_ATTR_CHANNEL_NUM] = {.type = NLA_U8}, - [IWL_MVM_VENDOR_ATTR_ADDR] = {.type = NLA_UNSPEC, .minlen = ETH_ALEN, .maxlen = ETH_ALEN}, - }; - - nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); - data = tb[NL80211_ATTR_VENDOR_DATA]; - - *out_conn_info = (NMPlatformCsmeConnInfo){}; - - err = nla_parse_nested(attrs, MAX_IWL_MVM_VENDOR_ATTR, data, iwl_vendor_policy); - if (err) { - _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO Failed to parse CSME connection info: %s", - nm_strerror(err)); - return -EINVAL; - } - - if (attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]) - out_conn_info->auth_mode = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]); - - if (attrs[IWL_MVM_VENDOR_ATTR_SSID]) - memcpy(out_conn_info->ssid, - nla_data(attrs[IWL_MVM_VENDOR_ATTR_SSID]), - nla_len(attrs[IWL_MVM_VENDOR_ATTR_SSID])); - - if (attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]) - out_conn_info->sta_cipher = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]); - - if (attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]) - out_conn_info->channel = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]); - - if (attrs[IWL_MVM_VENDOR_ATTR_ADDR]) - memcpy(&out_conn_info->addr, - nla_data(attrs[IWL_MVM_VENDOR_ATTR_ADDR]), - sizeof(out_conn_info->addr)); - - return NL_SKIP; -} - -static gboolean -wifi_nl80211_intel_vnd_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) -{ - NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; - nm_auto_nlmsg struct nl_msg *msg = NULL; - int err; - struct nl80211_csme_conn_info conn_info = { - .self = self, - .conn_info = out_conn_info, - }; - - msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO); - - err = nl80211_send_and_recv(self, msg, nl80211_csme_conn_event_handler, &conn_info); - if (err < 0) - _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO request failed: %s", nm_strerror(err)); - - return err >= 0; - -nla_put_failure: - g_return_val_if_reached(FALSE); -} - -static gboolean -wifi_nl80211_intel_vnd_get_device_from_csme(NMWifiUtils *data) -{ - NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; - nm_auto_nlmsg struct nl_msg *msg = NULL; - int err; - - msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP); - - err = nl80211_send_and_recv(self, msg, NULL, NULL); - if (err < 0) - _LOGD("IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP request failed: %s", nm_strerror(err)); - - return err >= 0; - -nla_put_failure: - g_return_val_if_reached(FALSE); -} - static void nm_wifi_utils_nl80211_init(NMWifiUtilsNl80211 *self) {} @@ -954,8 +851,6 @@ nm_wifi_utils_nl80211_class_init(NMWifiUtilsNl80211Class *klass) wifi_utils_class->get_mesh_channel = wifi_nl80211_get_mesh_channel; wifi_utils_class->set_mesh_channel = wifi_nl80211_set_mesh_channel; wifi_utils_class->set_mesh_ssid = wifi_nl80211_set_mesh_ssid; - wifi_utils_class->get_csme_conn_info = wifi_nl80211_intel_vnd_get_csme_conn_info; - wifi_utils_class->get_device_from_csme = wifi_nl80211_intel_vnd_get_device_from_csme; } NMWifiUtils * diff --git a/src/libnm-platform/wifi/nm-wifi-utils-private.h b/src/libnm-platform/wifi/nm-wifi-utils-private.h index 8fa593c0..abec38e2 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-private.h +++ b/src/libnm-platform/wifi/nm-wifi-utils-private.h @@ -7,7 +7,6 @@ #define __WIFI_UTILS_PRIVATE_H__ #include "nm-wifi-utils.h" -#include "libnm-platform/nm-platform.h" typedef struct { GObjectClass parent; @@ -55,10 +54,6 @@ typedef struct { gboolean (*set_mesh_ssid)(NMWifiUtils *data, const guint8 *ssid, gsize len); gboolean (*indicate_addressing_running)(NMWifiUtils *data, gboolean running); - - gboolean (*get_csme_conn_info)(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info); - - gboolean (*get_device_from_csme)(NMWifiUtils *data); } NMWifiUtilsClass; struct NMWifiUtils { diff --git a/src/libnm-platform/wifi/nm-wifi-utils-wext.c b/src/libnm-platform/wifi/nm-wifi-utils-wext.c index 0cc8b6a6..16503430 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-wext.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-wext.c @@ -548,7 +548,7 @@ wifi_wext_set_mesh_ssid(NMWifiUtils *data, const guint8 *ssid, gsize len) return FALSE; memset(buf, 0, sizeof(buf)); - memcpy(buf, ssid, MIN(sizeof(buf) - 1, len)); + memcpy(buf, ssid, NM_MIN(sizeof(buf) - 1, len)); wrq.u.essid.pointer = (caddr_t) buf; wrq.u.essid.length = len; @@ -724,8 +724,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) guint32 response_len = 0; struct iw_range_with_scan_capa *scan_capa_range; int i; - gboolean freq_valid = FALSE, has_5ghz = FALSE, has_2ghz = FALSE; - char ifname[IFNAMSIZ]; + gboolean freq_valid = FALSE, has_6ghz = FALSE, has_5ghz = FALSE, has_2ghz = FALSE; + char ifname[IFNAMSIZ]; if (!nmp_utils_if_indextoname(ifindex, ifname)) { _LOGW(LOGD_PLATFORM | LOGD_WIFI, "can't determine interface name for ifindex %d", ifindex); @@ -758,14 +758,16 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) wext->max_qual.noise = range.max_qual.noise; wext->max_qual.updated = range.max_qual.updated; - wext->num_freqs = MIN(range.num_frequency, IW_MAX_FREQUENCIES); + wext->num_freqs = NM_MIN(range.num_frequency, (guint) IW_MAX_FREQUENCIES); for (i = 0; i < wext->num_freqs; i++) { wext->freqs[i] = iw_freq_to_uint32(&range.freq[i]); freq_valid = TRUE; - if (wext->freqs[i] > 2400 && wext->freqs[i] < 2500) + if (wext->freqs[i] >= 2401 && wext->freqs[i] <= 2495) has_2ghz = TRUE; - else if (wext->freqs[i] > 4900 && wext->freqs[i] < 6000) + else if (wext->freqs[i] >= 5150 && wext->freqs[i] <= 5895) has_5ghz = TRUE; + else if (wext->freqs[i] >= 5925 && wext->freqs[i] <= 7125) + has_6ghz = TRUE; } /* Check for scanning capability; cards that can't scan are not supported */ @@ -798,6 +800,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ; if (has_5ghz) wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ; + if (has_6ghz) + wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ; _LOGI(LOGD_PLATFORM | LOGD_WIFI, "(%s): using WEXT for Wi-Fi device control", ifname); diff --git a/src/libnm-platform/wifi/nm-wifi-utils.c b/src/libnm-platform/wifi/nm-wifi-utils.c index 6f87e8c0..596ff644 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.c +++ b/src/libnm-platform/wifi/nm-wifi-utils.c @@ -157,28 +157,6 @@ nm_wifi_utils_is_wifi(int dirfd, const char *ifname) return FALSE; } -gboolean -nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) -{ - NMWifiUtilsClass *klass; - - g_return_val_if_fail(data != NULL, FALSE); - - klass = NM_WIFI_UTILS_GET_CLASS(data); - return klass->get_csme_conn_info ? klass->get_csme_conn_info(data, out_conn_info) : FALSE; -} - -gboolean -nm_wifi_utils_get_device_from_csme(NMWifiUtils *data) -{ - NMWifiUtilsClass *klass; - - g_return_val_if_fail(data != NULL, FALSE); - - klass = NM_WIFI_UTILS_GET_CLASS(data); - return klass->get_device_from_csme ? klass->get_device_from_csme(data) : FALSE; -} - /* OLPC Mesh-only functions */ guint32 diff --git a/src/libnm-platform/wifi/nm-wifi-utils.h b/src/libnm-platform/wifi/nm-wifi-utils.h index 84d724a5..0532817e 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.h +++ b/src/libnm-platform/wifi/nm-wifi-utils.h @@ -62,12 +62,6 @@ _NMSettingWirelessWakeOnWLan nm_wifi_utils_get_wake_on_wlan(NMWifiUtils *data); gboolean nm_wifi_utils_set_wake_on_wlan(NMWifiUtils *data, _NMSettingWirelessWakeOnWLan wowl); -struct _NMPlatformCsmeConnInfo; -gboolean nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, - struct _NMPlatformCsmeConnInfo *out_conn_info); - -gboolean nm_wifi_utils_get_device_from_csme(NMWifiUtils *data); - /* OLPC Mesh-only functions */ guint32 nm_wifi_utils_get_mesh_channel(NMWifiUtils *data); |