mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
wiphy, netdev: Add enum values for P2P-related iftypes
Also add a mask parameter to wiphy_get_supported_iftypes to make sure the SupportedModes property only contains the values that can be used as Device.Mode.
This commit is contained in:
parent
e344df432b
commit
154e9f63bc
@ -306,9 +306,13 @@ enum netdev_iftype netdev_get_iftype(struct netdev *netdev)
|
|||||||
return NETDEV_IFTYPE_AP;
|
return NETDEV_IFTYPE_AP;
|
||||||
case NL80211_IFTYPE_ADHOC:
|
case NL80211_IFTYPE_ADHOC:
|
||||||
return NETDEV_IFTYPE_ADHOC;
|
return NETDEV_IFTYPE_ADHOC;
|
||||||
|
case NL80211_IFTYPE_P2P_CLIENT:
|
||||||
|
return NETDEV_IFTYPE_P2P_CLIENT;
|
||||||
|
case NL80211_IFTYPE_P2P_GO:
|
||||||
|
return NETDEV_IFTYPE_P2P_GO;
|
||||||
default:
|
default:
|
||||||
/* cant really do much here */
|
/* can't really do much here */
|
||||||
l_error("invalid iftype %u", netdev->type);
|
l_error("unknown iftype %u", netdev->type);
|
||||||
return NETDEV_IFTYPE_STATION;
|
return NETDEV_IFTYPE_STATION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,8 @@ enum netdev_iftype {
|
|||||||
NETDEV_IFTYPE_ADHOC = 1,
|
NETDEV_IFTYPE_ADHOC = 1,
|
||||||
NETDEV_IFTYPE_STATION = 2,
|
NETDEV_IFTYPE_STATION = 2,
|
||||||
NETDEV_IFTYPE_AP = 3,
|
NETDEV_IFTYPE_AP = 3,
|
||||||
|
NETDEV_IFTYPE_P2P_CLIENT,
|
||||||
|
NETDEV_IFTYPE_P2P_GO,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*netdev_command_cb_t)(struct netdev *netdev, int result,
|
typedef void (*netdev_command_cb_t)(struct netdev *netdev, int result,
|
||||||
|
19
src/wiphy.c
19
src/wiphy.c
@ -302,17 +302,17 @@ bool wiphy_supports_adhoc_rsn(struct wiphy *wiphy)
|
|||||||
return wiphy->support_adhoc_rsn;
|
return wiphy->support_adhoc_rsn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char **wiphy_get_supported_iftypes(struct wiphy *wiphy)
|
static char **wiphy_get_supported_iftypes(struct wiphy *wiphy, uint16_t mask)
|
||||||
{
|
{
|
||||||
char **ret = l_new(char *,
|
uint16_t supported_mask = wiphy->supported_iftypes & mask;
|
||||||
__builtin_popcount(wiphy->supported_iftypes) + 1);
|
char **ret = l_new(char *, __builtin_popcount(supported_mask) + 1);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
|
|
||||||
for (j = 0, i = 0; i < sizeof(wiphy->supported_iftypes) * 8; i++) {
|
for (j = 0, i = 0; i < sizeof(supported_mask) * 8; i++) {
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
if (!(wiphy->supported_iftypes & (1 << i)))
|
if (!(supported_mask & (1 << i)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
str = dbus_iftype_to_string(i + 1);
|
str = dbus_iftype_to_string(i + 1);
|
||||||
@ -384,7 +384,7 @@ static void wiphy_print_basic_info(struct wiphy *wiphy)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (wiphy->supported_iftypes) {
|
if (wiphy->supported_iftypes) {
|
||||||
char **iftypes = wiphy_get_supported_iftypes(wiphy);
|
char **iftypes = wiphy_get_supported_iftypes(wiphy, ~0);
|
||||||
char *joined = l_strjoinv(iftypes, ' ');
|
char *joined = l_strjoinv(iftypes, ' ');
|
||||||
|
|
||||||
l_info("\tSupported iftypes: %s", joined);
|
l_info("\tSupported iftypes: %s", joined);
|
||||||
@ -1019,6 +1019,11 @@ static bool wiphy_property_get_name(struct l_dbus *dbus,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define WIPHY_MODE_MASK ( \
|
||||||
|
(1 << (NL80211_IFTYPE_STATION - 1)) | \
|
||||||
|
(1 << (NL80211_IFTYPE_AP - 1)) | \
|
||||||
|
(1 << (NL80211_IFTYPE_ADHOC - 1)))
|
||||||
|
|
||||||
static bool wiphy_property_get_supported_modes(struct l_dbus *dbus,
|
static bool wiphy_property_get_supported_modes(struct l_dbus *dbus,
|
||||||
struct l_dbus_message *message,
|
struct l_dbus_message *message,
|
||||||
struct l_dbus_message_builder *builder,
|
struct l_dbus_message_builder *builder,
|
||||||
@ -1026,7 +1031,7 @@ static bool wiphy_property_get_supported_modes(struct l_dbus *dbus,
|
|||||||
{
|
{
|
||||||
struct wiphy *wiphy = user_data;
|
struct wiphy *wiphy = user_data;
|
||||||
unsigned int j = 0;
|
unsigned int j = 0;
|
||||||
char **iftypes = wiphy_get_supported_iftypes(wiphy);
|
char **iftypes = wiphy_get_supported_iftypes(wiphy, WIPHY_MODE_MASK);
|
||||||
|
|
||||||
l_dbus_message_builder_enter_array(builder, "s");
|
l_dbus_message_builder_enter_array(builder, "s");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user