]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
dbus: Add FILS to global capabilities
authorMasashi Honma <masashi.honma@gmail.com>
Sun, 4 Feb 2018 01:50:37 +0000 (10:50 +0900)
committerJouni Malinen <j@w1.fi>
Mon, 2 Apr 2018 08:56:06 +0000 (11:56 +0300)
If any of the interfaces supports FILS (and similarly for FILS-SK-PFS),
include the "fils" (and "fils_sk_pfs") capability in D-Bus information.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/dbus/dbus_new_handlers.c
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index 23681dcbfa2440620793f2bb0d76642210c312ab..a863584246e11a57741840aaf5d6813efddc53ee 100644 (file)
@@ -66,28 +66,6 @@ static int * freq_range_to_channel_list(struct wpa_supplicant *wpa_s,
                                        char *val);
 
 
-#ifdef CONFIG_FILS
-
-static int wpa_is_fils_supported(struct wpa_supplicant *wpa_s)
-{
-       return (((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
-                (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS)) ||
-               (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
-                (wpa_s->drv_flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD)));
-}
-
-
-#ifdef CONFIG_FILS_SK_PFS
-static int wpa_is_fils_sk_pfs_supported(struct wpa_supplicant *wpa_s)
-{
-       return (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
-               (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS);
-}
-#endif /* CONFIG_FILS_SK_PFS */
-
-#endif /* CONFIG_FILS */
-
-
 static int set_bssid_filter(struct wpa_supplicant *wpa_s, char *val)
 {
        char *pos;
index f4ebabe472cb19a29765812b99c11a1b87e3babf..a3c98fadd306d19726789841443d09a30b95bc3d 100644 (file)
@@ -980,8 +980,21 @@ dbus_bool_t wpas_dbus_getter_global_capabilities(
        const struct wpa_dbus_property_desc *property_desc,
        DBusMessageIter *iter, DBusError *error, void *user_data)
 {
-       const char *capabilities[6] = { NULL, NULL, NULL, NULL, NULL, NULL };
+       const char *capabilities[8] = { NULL, NULL, NULL, NULL, NULL, NULL,
+                                       NULL, NULL };
        size_t num_items = 0;
+#ifdef CONFIG_FILS
+       struct wpa_global *global = user_data;
+       struct wpa_supplicant *wpa_s;
+       int fils_supported = 0, fils_sk_pfs_supported = 0;
+
+       for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
+               if (wpa_is_fils_supported(wpa_s))
+                       fils_supported = 1;
+               if (wpa_is_fils_sk_pfs_supported(wpa_s))
+                       fils_sk_pfs_supported = 1;
+       }
+#endif /* CONFIG_FILS */
 
 #ifdef CONFIG_AP
        capabilities[num_items++] = "ap";
@@ -1001,6 +1014,12 @@ dbus_bool_t wpas_dbus_getter_global_capabilities(
 #ifdef CONFIG_MESH
        capabilities[num_items++] = "mesh";
 #endif /* CONFIG_MESH */
+#ifdef CONFIG_FILS
+       if (fils_supported)
+               capabilities[num_items++] = "fils";
+       if (fils_sk_pfs_supported)
+               capabilities[num_items++] = "fils_sk_pfs";
+#endif /* CONFIG_FILS */
 
        return wpas_dbus_simple_array_property_getter(iter,
                                                      DBUS_TYPE_STRING,
index fcb267764bdec1b8d12d49b3894badcda5937101..68184dfdee6a156c169c57a07d448e221dc6f300 100644 (file)
@@ -2344,6 +2344,27 @@ static size_t wpas_add_fils_hlp_req(struct wpa_supplicant *wpa_s, u8 *ie_buf,
 
        return ie_len;
 }
+
+
+int wpa_is_fils_supported(struct wpa_supplicant *wpa_s)
+{
+       return (((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
+                (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS)) ||
+               (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
+                (wpa_s->drv_flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD)));
+}
+
+
+int wpa_is_fils_sk_pfs_supported(struct wpa_supplicant *wpa_s)
+{
+#ifdef CONFIG_FILS_SK_PFS
+       return (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
+               (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS);
+#else /* CONFIG_FILS_SK_PFS */
+       return 0;
+#endif /* CONFIG_FILS_SK_PFS */
+}
+
 #endif /* CONFIG_FILS */
 
 
index 6f05d4592f4920f749221af190acf7310a4289a6..d5bfa7ddf8656387b4846a3cbe142323840bba29 100644 (file)
@@ -1475,4 +1475,7 @@ int wpas_ctrl_iface_get_pref_freq_list_override(struct wpa_supplicant *wpa_s,
                                                unsigned int *num,
                                                unsigned int *freq_list);
 
+int wpa_is_fils_supported(struct wpa_supplicant *wpa_s);
+int wpa_is_fils_sk_pfs_supported(struct wpa_supplicant *wpa_s);
+
 #endif /* WPA_SUPPLICANT_I_H */