mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-21 20:12:37 +01:00
wiphy: Obtain permanent mac address from sysfs
This commit is contained in:
parent
1e9f9e61f1
commit
1c22847cf2
38
src/wiphy.c
38
src/wiphy.c
@ -58,6 +58,7 @@ static char **blacklist_filter;
|
|||||||
struct wiphy {
|
struct wiphy {
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
char name[20];
|
char name[20];
|
||||||
|
uint8_t permanent_addr[ETH_ALEN];
|
||||||
uint32_t feature_flags;
|
uint32_t feature_flags;
|
||||||
uint8_t ext_features[(NUM_NL80211_EXT_FEATURES + 7) / 8];
|
uint8_t ext_features[(NUM_NL80211_EXT_FEATURES + 7) / 8];
|
||||||
uint8_t max_num_ssids_per_scan;
|
uint8_t max_num_ssids_per_scan;
|
||||||
@ -342,6 +343,11 @@ const char *wiphy_get_driver(struct wiphy *wiphy)
|
|||||||
return wiphy->driver_str;
|
return wiphy->driver_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy)
|
||||||
|
{
|
||||||
|
return wiphy->permanent_addr;
|
||||||
|
}
|
||||||
|
|
||||||
bool wiphy_constrain_freq_set(const struct wiphy *wiphy,
|
bool wiphy_constrain_freq_set(const struct wiphy *wiphy,
|
||||||
struct scan_freq_set *set)
|
struct scan_freq_set *set)
|
||||||
{
|
{
|
||||||
@ -401,6 +407,7 @@ static void wiphy_print_basic_info(struct wiphy *wiphy)
|
|||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
|
||||||
l_info("Wiphy: %d, Name: %s", wiphy->id, wiphy->name);
|
l_info("Wiphy: %d, Name: %s", wiphy->id, wiphy->name);
|
||||||
|
l_info("\tPermanent Address: "MAC, MAC_STR(wiphy->permanent_addr));
|
||||||
|
|
||||||
bands = scan_freq_set_get_bands(wiphy->supported_freqs);
|
bands = scan_freq_set_get_bands(wiphy->supported_freqs);
|
||||||
|
|
||||||
@ -708,6 +715,29 @@ static bool wiphy_get_driver_name(struct wiphy *wiphy)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wiphy_get_permanent_addr_from_sysfs(struct wiphy *wiphy)
|
||||||
|
{
|
||||||
|
char addr[32];
|
||||||
|
ssize_t len;
|
||||||
|
|
||||||
|
len = read_file(addr, sizeof(addr),
|
||||||
|
"/sys/class/ieee80211/%s/macaddress",
|
||||||
|
wiphy->name);
|
||||||
|
if (len != 18) {
|
||||||
|
if (len < 0)
|
||||||
|
return -errno;
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sysfs appends a \n at the end, strip it */
|
||||||
|
addr[17] = '\0';
|
||||||
|
|
||||||
|
if (!util_string_to_address(addr, wiphy->permanent_addr))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void wiphy_register(struct wiphy *wiphy)
|
static void wiphy_register(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct l_dbus *dbus = dbus_get_bus();
|
struct l_dbus *dbus = dbus_get_bus();
|
||||||
@ -807,6 +837,14 @@ void wiphy_update_from_genl(struct wiphy *wiphy, struct l_genl_msg *msg)
|
|||||||
|
|
||||||
void wiphy_create_complete(struct wiphy *wiphy)
|
void wiphy_create_complete(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
|
if (util_mem_is_zero(wiphy->permanent_addr, 6)) {
|
||||||
|
int err = wiphy_get_permanent_addr_from_sysfs(wiphy);
|
||||||
|
|
||||||
|
if (err < 0)
|
||||||
|
l_error("Can't read sysfs maccaddr for %s: %s",
|
||||||
|
wiphy->name, strerror(-err));
|
||||||
|
}
|
||||||
|
|
||||||
wiphy_print_basic_info(wiphy);
|
wiphy_print_basic_info(wiphy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ bool wiphy_supports_iftype(struct wiphy *wiphy, uint32_t iftype);
|
|||||||
bool wiphy_supports_adhoc_rsn(struct wiphy *wiphy);
|
bool wiphy_supports_adhoc_rsn(struct wiphy *wiphy);
|
||||||
bool wiphy_can_offchannel_tx(struct wiphy *wiphy);
|
bool wiphy_can_offchannel_tx(struct wiphy *wiphy);
|
||||||
const char *wiphy_get_driver(struct wiphy *wiphy);
|
const char *wiphy_get_driver(struct wiphy *wiphy);
|
||||||
|
const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy);
|
||||||
|
|
||||||
uint32_t wiphy_state_watch_add(struct wiphy *wiphy,
|
uint32_t wiphy_state_watch_add(struct wiphy *wiphy,
|
||||||
wiphy_state_watch_func_t func, void *user_data,
|
wiphy_state_watch_func_t func, void *user_data,
|
||||||
|
Loading…
Reference in New Issue
Block a user