mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 11:28:32 +02:00
wifi: use NMEtherAddr struct for bssid
This commit is contained in:
parent
07a60e859c
commit
42156b6010
14 changed files with 83 additions and 81 deletions
|
|
@ -70,7 +70,7 @@ typedef struct {
|
|||
gint64 last_scan;
|
||||
uint32_t ap_id;
|
||||
guint32 rate;
|
||||
uint8_t current_ap_bssid[ETH_ALEN];
|
||||
NMEtherAddr current_ap_bssid;
|
||||
GDBusMethodInvocation * pending_agent_request;
|
||||
NMActiveConnection * assumed_ac;
|
||||
guint assumed_ac_timeout;
|
||||
|
|
@ -174,7 +174,7 @@ set_current_ap(NMDeviceIwd *self, NMWifiAP *new_ap, gboolean recheck_available_c
|
|||
g_object_unref(old_ap);
|
||||
}
|
||||
|
||||
memset(priv->current_ap_bssid, 0, ETH_ALEN);
|
||||
memset(&priv->current_ap_bssid, 0, ETH_ALEN);
|
||||
_notify(self, PROP_ACTIVE_ACCESS_POINT);
|
||||
_notify(self, PROP_MODE);
|
||||
}
|
||||
|
|
@ -227,7 +227,6 @@ ap_from_network(NMDeviceIwd *self,
|
|||
const char * name;
|
||||
const char * type;
|
||||
uint32_t ap_id;
|
||||
uint8_t bssid[6];
|
||||
gs_unref_bytes GBytes *ssid = NULL;
|
||||
NMWifiAP * ap;
|
||||
NMSupplicantBssInfo bss_info;
|
||||
|
|
@ -256,13 +255,7 @@ ap_from_network(NMDeviceIwd *self,
|
|||
* already does that. We fake the BSSIDs as they don't play any
|
||||
* role either.
|
||||
*/
|
||||
ap_id = priv->ap_id++;
|
||||
bssid[0] = 0x00;
|
||||
bssid[1] = 0x01;
|
||||
bssid[2] = 0x02;
|
||||
bssid[3] = ap_id >> 16;
|
||||
bssid[4] = ap_id >> 8;
|
||||
bssid[5] = ap_id;
|
||||
ap_id = priv->ap_id++;
|
||||
|
||||
ssid = g_bytes_new(name, NM_MIN(32u, strlen(name)));
|
||||
|
||||
|
|
@ -276,8 +269,8 @@ ap_from_network(NMDeviceIwd *self,
|
|||
.signal_percent = nm_wifi_utils_level_to_quality(signal / 100),
|
||||
.frequency = 2417,
|
||||
.max_rate = 65000,
|
||||
.bssid = NM_ETHER_ADDR_INIT(0x00, 0x01, 0x02, ap_id >> 16, ap_id >> 8, ap_id),
|
||||
};
|
||||
memcpy(bss_info.bssid, bssid, sizeof(bssid));
|
||||
|
||||
ap = nm_wifi_ap_new_from_properties(&bss_info);
|
||||
|
||||
|
|
@ -423,7 +416,7 @@ periodic_update(NMDeviceIwd *self)
|
|||
int ifindex;
|
||||
guint32 new_rate;
|
||||
int percent;
|
||||
guint8 bssid[ETH_ALEN];
|
||||
NMEtherAddr bssid;
|
||||
gboolean ap_changed = FALSE;
|
||||
NMPlatform * platform;
|
||||
|
||||
|
|
@ -436,7 +429,7 @@ periodic_update(NMDeviceIwd *self)
|
|||
/* TODO: obtain quality through the net.connman.iwd.SignalLevelAgent API.
|
||||
* For now we're waking up for the rate/BSSID updates anyway.
|
||||
*/
|
||||
if (!nm_platform_wifi_get_station(platform, ifindex, bssid, &percent, &new_rate)) {
|
||||
if (!nm_platform_wifi_get_station(platform, ifindex, &bssid, &percent, &new_rate)) {
|
||||
_LOGD(LOGD_WIFI, "BSSID / quality / rate platform query failed");
|
||||
return;
|
||||
}
|
||||
|
|
@ -452,10 +445,10 @@ periodic_update(NMDeviceIwd *self)
|
|||
_notify(self, PROP_BITRATE);
|
||||
}
|
||||
|
||||
if (nm_ethernet_address_is_valid(bssid, ETH_ALEN)
|
||||
&& memcmp(bssid, priv->current_ap_bssid, ETH_ALEN)) {
|
||||
memcpy(priv->current_ap_bssid, bssid, ETH_ALEN);
|
||||
ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, bssid);
|
||||
if (nm_ethernet_address_is_valid(&bssid, ETH_ALEN)
|
||||
&& !nm_ether_addr_equal(&bssid, &priv->current_ap_bssid)) {
|
||||
priv->current_ap_bssid = bssid;
|
||||
ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, &bssid);
|
||||
ap_changed |= nm_wifi_ap_set_freq(priv->current_ap,
|
||||
nm_platform_wifi_get_frequency(platform, ifindex));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3369,11 +3369,11 @@ activation_success_handler(NMDevice *device)
|
|||
g_warn_if_fail(priv->current_ap);
|
||||
if (priv->current_ap) {
|
||||
if (nm_wifi_ap_get_fake(priv->current_ap)) {
|
||||
gboolean ap_changed = FALSE;
|
||||
gboolean update_bssid = !nm_wifi_ap_get_address(priv->current_ap);
|
||||
gboolean update_rate = !nm_wifi_ap_get_max_bitrate(priv->current_ap);
|
||||
guint8 bssid[ETH_ALEN];
|
||||
guint32 rate;
|
||||
gboolean ap_changed = FALSE;
|
||||
gboolean update_bssid = !nm_wifi_ap_get_address(priv->current_ap);
|
||||
gboolean update_rate = !nm_wifi_ap_get_max_bitrate(priv->current_ap);
|
||||
NMEtherAddr bssid;
|
||||
guint32 rate;
|
||||
|
||||
/* If the activation AP hasn't been seen by the supplicant in a scan
|
||||
* yet, it will be "fake". This usually happens for Ad-Hoc and
|
||||
|
|
@ -3388,11 +3388,11 @@ activation_success_handler(NMDevice *device)
|
|||
if ((update_bssid || update_rate)
|
||||
&& nm_platform_wifi_get_station(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
update_bssid ? bssid : NULL,
|
||||
update_bssid ? &bssid : NULL,
|
||||
NULL,
|
||||
update_rate ? &rate : NULL)) {
|
||||
if (update_bssid && nm_ethernet_address_is_valid(bssid, ETH_ALEN))
|
||||
ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, bssid);
|
||||
if (update_bssid && nm_ethernet_address_is_valid(&bssid, ETH_ALEN))
|
||||
ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, &bssid);
|
||||
if (update_rate)
|
||||
ap_changed |= nm_wifi_ap_set_max_bitrate(priv->current_ap, rate);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,10 +163,12 @@ nm_wifi_ap_get_address(const NMWifiAP *ap)
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_wifi_ap_set_address_bin(NMWifiAP *ap, const guint8 addr[static 6 /* ETH_ALEN */])
|
||||
nm_wifi_ap_set_address_bin(NMWifiAP *ap, const NMEtherAddr *addr)
|
||||
{
|
||||
NMWifiAPPrivate *priv = NM_WIFI_AP_GET_PRIVATE(ap);
|
||||
|
||||
nm_assert(addr);
|
||||
|
||||
if (!priv->address || !nm_utils_hwaddr_matches(addr, ETH_ALEN, priv->address, -1)) {
|
||||
g_free(priv->address);
|
||||
priv->address = nm_utils_hwaddr_ntoa(addr, ETH_ALEN);
|
||||
|
|
@ -179,13 +181,13 @@ nm_wifi_ap_set_address_bin(NMWifiAP *ap, const guint8 addr[static 6 /* ETH_ALEN
|
|||
gboolean
|
||||
nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr)
|
||||
{
|
||||
guint8 addr_buf[ETH_ALEN];
|
||||
NMEtherAddr addr_buf;
|
||||
|
||||
g_return_val_if_fail(NM_IS_WIFI_AP(ap), FALSE);
|
||||
if (!addr || !nm_utils_hwaddr_aton(addr, addr_buf, sizeof(addr_buf)))
|
||||
if (!addr || !nm_utils_hwaddr_aton(addr, &addr_buf, sizeof(addr_buf)))
|
||||
g_return_val_if_reached(FALSE);
|
||||
|
||||
return nm_wifi_ap_set_address_bin(ap, addr_buf);
|
||||
return nm_wifi_ap_set_address_bin(ap, &addr_buf);
|
||||
}
|
||||
|
||||
NM80211Mode
|
||||
|
|
@ -384,7 +386,7 @@ nm_wifi_ap_update_from_properties(NMWifiAP *ap, const NMSupplicantBssInfo *bss_i
|
|||
changed |= nm_wifi_ap_set_ssid(ap, bss_info->ssid);
|
||||
|
||||
if (bss_info->bssid_valid)
|
||||
changed |= nm_wifi_ap_set_address_bin(ap, bss_info->bssid);
|
||||
changed |= nm_wifi_ap_set_address_bin(ap, &bss_info->bssid);
|
||||
else {
|
||||
/* we don't actually clear the value. */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,23 +64,23 @@ nm_wifi_ap_get_supplicant_path(NMWifiAP *ap)
|
|||
return ap->_supplicant_path;
|
||||
}
|
||||
|
||||
GBytes * nm_wifi_ap_get_ssid(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_ssid(NMWifiAP *ap, GBytes *ssid);
|
||||
const char * nm_wifi_ap_get_address(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr);
|
||||
gboolean nm_wifi_ap_set_address_bin(NMWifiAP *ap, const guint8 addr[static 6 /* ETH_ALEN */]);
|
||||
NM80211Mode nm_wifi_ap_get_mode(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_is_hotspot(NMWifiAP *ap);
|
||||
gint8 nm_wifi_ap_get_strength(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_strength(NMWifiAP *ap, gint8 strength);
|
||||
guint32 nm_wifi_ap_get_freq(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_freq(NMWifiAP *ap, guint32 freq);
|
||||
guint32 nm_wifi_ap_get_max_bitrate(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_max_bitrate(NMWifiAP *ap, guint32 bitrate);
|
||||
gboolean nm_wifi_ap_get_fake(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_fake(NMWifiAP *ap, gboolean fake);
|
||||
NM80211ApFlags nm_wifi_ap_get_flags(const NMWifiAP *self);
|
||||
gboolean nm_wifi_ap_get_metered(const NMWifiAP *self);
|
||||
GBytes * nm_wifi_ap_get_ssid(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_ssid(NMWifiAP *ap, GBytes *ssid);
|
||||
const char * nm_wifi_ap_get_address(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr);
|
||||
gboolean nm_wifi_ap_set_address_bin(NMWifiAP *ap, const NMEtherAddr *addr);
|
||||
NM80211Mode nm_wifi_ap_get_mode(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_is_hotspot(NMWifiAP *ap);
|
||||
gint8 nm_wifi_ap_get_strength(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_strength(NMWifiAP *ap, gint8 strength);
|
||||
guint32 nm_wifi_ap_get_freq(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_freq(NMWifiAP *ap, guint32 freq);
|
||||
guint32 nm_wifi_ap_get_max_bitrate(NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_max_bitrate(NMWifiAP *ap, guint32 bitrate);
|
||||
gboolean nm_wifi_ap_get_fake(const NMWifiAP *ap);
|
||||
gboolean nm_wifi_ap_set_fake(NMWifiAP *ap, gboolean fake);
|
||||
NM80211ApFlags nm_wifi_ap_get_flags(const NMWifiAP *self);
|
||||
gboolean nm_wifi_ap_get_metered(const NMWifiAP *self);
|
||||
NM80211ApSecurityFlags nm_wifi_ap_get_wpa_flags(const NMWifiAP *self);
|
||||
NM80211ApSecurityFlags nm_wifi_ap_get_rsn_flags(const NMWifiAP *self);
|
||||
|
||||
|
|
|
|||
|
|
@ -8289,11 +8289,11 @@ wifi_get_frequency(NMPlatform *platform, int ifindex)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
wifi_get_station(NMPlatform *platform,
|
||||
int ifindex,
|
||||
guint8 * out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
wifi_get_station(NMPlatform * platform,
|
||||
int ifindex,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
{
|
||||
WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE);
|
||||
return nm_wifi_utils_get_station(wifi_data, out_bssid, out_quality, out_rate);
|
||||
|
|
|
|||
|
|
@ -3062,11 +3062,11 @@ nm_platform_wifi_get_frequency(NMPlatform *self, int ifindex)
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_platform_wifi_get_station(NMPlatform *self,
|
||||
int ifindex,
|
||||
guint8 * out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
nm_platform_wifi_get_station(NMPlatform * self,
|
||||
int ifindex,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
{
|
||||
_CHECK_SELF(self, klass, FALSE);
|
||||
|
||||
|
|
|
|||
|
|
@ -1182,11 +1182,11 @@ typedef struct {
|
|||
gboolean (*wifi_get_capabilities)(NMPlatform * self,
|
||||
int ifindex,
|
||||
NMDeviceWifiCapabilities *caps);
|
||||
gboolean (*wifi_get_station)(NMPlatform *self,
|
||||
int ifindex,
|
||||
guint8 * out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
gboolean (*wifi_get_station)(NMPlatform * self,
|
||||
int ifindex,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
gboolean (*wifi_get_bssid)(NMPlatform *self, int ifindex, guint8 *bssid);
|
||||
guint32 (*wifi_get_frequency)(NMPlatform *self, int ifindex);
|
||||
int (*wifi_get_quality)(NMPlatform *self, int ifindex);
|
||||
|
|
@ -1968,11 +1968,11 @@ gboolean nm_platform_link_tun_get_properties(NMPlatform * self,
|
|||
gboolean
|
||||
nm_platform_wifi_get_capabilities(NMPlatform *self, int ifindex, NMDeviceWifiCapabilities *caps);
|
||||
guint32 nm_platform_wifi_get_frequency(NMPlatform *self, int ifindex);
|
||||
gboolean nm_platform_wifi_get_station(NMPlatform *self,
|
||||
int ifindex,
|
||||
guint8 * out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
gboolean nm_platform_wifi_get_station(NMPlatform * self,
|
||||
int ifindex,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
NM80211Mode nm_platform_wifi_get_mode(NMPlatform *self, int ifindex);
|
||||
void nm_platform_wifi_set_mode(NMPlatform *self, int ifindex, NM80211Mode mode);
|
||||
void nm_platform_wifi_set_powersave(NMPlatform *self, int ifindex, guint32 powersave);
|
||||
|
|
|
|||
|
|
@ -494,7 +494,10 @@ nl80211_station_dump_handler(struct nl_msg *msg, void *arg)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
wifi_nl80211_get_station(NMWifiUtils *data, guint8 *out_bssid, int *out_quality, guint32 *out_rate)
|
||||
wifi_nl80211_get_station(NMWifiUtils *data,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
{
|
||||
NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data;
|
||||
nm_auto_nlmsg struct nl_msg *msg = NULL;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ typedef struct {
|
|||
* Returns %TRUE on succcess, %FALSE on errors or if not associated.
|
||||
*/
|
||||
gboolean (*get_station)(NMWifiUtils *data,
|
||||
guint8 * out_bssid,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ wifi_wext_find_freq(NMWifiUtils *data, const guint32 *freqs)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
wifi_wext_get_bssid(NMWifiUtils *data, guint8 *out_bssid)
|
||||
wifi_wext_get_bssid(NMWifiUtils *data, NMEtherAddr *out_bssid)
|
||||
{
|
||||
NMWifiUtilsWext *wext = (NMWifiUtilsWext *) data;
|
||||
struct iwreq wrq;
|
||||
|
|
@ -454,7 +454,10 @@ wifi_wext_get_qual(NMWifiUtils *data)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
wifi_wext_get_station(NMWifiUtils *data, guint8 *out_bssid, int *out_quality, guint32 *out_rate)
|
||||
wifi_wext_get_station(NMWifiUtils *data,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
{
|
||||
NMEtherAddr local_addr;
|
||||
|
||||
|
|
@ -462,7 +465,7 @@ wifi_wext_get_station(NMWifiUtils *data, guint8 *out_bssid, int *out_quality, gu
|
|||
/* hm, the caller requested no parameter at all?
|
||||
* Don't simply return TRUE, but at least check that
|
||||
* we can successfully fetch the bssid. */
|
||||
out_bssid = local_addr.ether_addr_octet;
|
||||
out_bssid = &local_addr;
|
||||
}
|
||||
|
||||
if (out_bssid) {
|
||||
|
|
|
|||
|
|
@ -132,7 +132,10 @@ nm_wifi_utils_find_freq(NMWifiUtils *data, const guint32 *freqs)
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_wifi_utils_get_station(NMWifiUtils *data, guint8 *out_bssid, int *out_quality, guint32 *out_rate)
|
||||
nm_wifi_utils_get_station(NMWifiUtils *data,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate)
|
||||
{
|
||||
g_return_val_if_fail(data != NULL, FALSE);
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ guint32 nm_wifi_utils_find_freq(NMWifiUtils *data, const guint32 *freqs);
|
|||
* Returns %TRUE on succcess.
|
||||
*/
|
||||
gboolean nm_wifi_utils_get_station(NMWifiUtils *data,
|
||||
guint8 * out_bssid,
|
||||
NMEtherAddr *out_bssid,
|
||||
int * out_quality,
|
||||
guint32 * out_rate);
|
||||
|
||||
|
|
|
|||
|
|
@ -668,19 +668,17 @@ _bss_info_properties_changed(NMSupplicantInterface *self,
|
|||
if (arr_len != 0) {
|
||||
nm_assert(arr_len == sizeof(bss_info->bssid));
|
||||
bss_info->bssid_valid = TRUE;
|
||||
memcpy(bss_info->bssid, arr_data, sizeof(bss_info->bssid));
|
||||
memcpy(&bss_info->bssid, arr_data, sizeof(bss_info->bssid));
|
||||
} else if (bss_info->bssid_valid) {
|
||||
bss_info->bssid_valid = FALSE;
|
||||
memset(bss_info->bssid, 0, sizeof(bss_info->bssid));
|
||||
memset(&bss_info->bssid, 0, sizeof(bss_info->bssid));
|
||||
}
|
||||
g_variant_unref(v_v);
|
||||
} else {
|
||||
nm_assert(!initial || !bss_info->bssid_valid);
|
||||
}
|
||||
nm_assert(
|
||||
(bss_info->bssid_valid && !nm_utils_memeqzero(bss_info->bssid, sizeof(bss_info->bssid)))
|
||||
|| (!bss_info->bssid_valid
|
||||
&& nm_utils_memeqzero(bss_info->bssid, sizeof(bss_info->bssid))));
|
||||
nm_assert((!!bss_info->bssid_valid)
|
||||
== (!nm_utils_memeqzero(&bss_info->bssid, sizeof(bss_info->bssid))));
|
||||
|
||||
p_max_rate_has = FALSE;
|
||||
p_max_rate = 0;
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ typedef struct _NMSupplicantBssInfo {
|
|||
|
||||
guint8 signal_percent;
|
||||
|
||||
guint8 bssid[6 /* ETH_ALEN */];
|
||||
NMEtherAddr bssid;
|
||||
|
||||
NM80211ApFlags ap_flags : 5;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue