|
@@ -2572,6 +2572,42 @@ static int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
|
|
|
}
|
|
|
|
|
|
|
|
|
+#ifdef ANDROID
|
|
|
+static int android_genl_ctrl_resolve(struct nl_handle *handle,
|
|
|
+ const char *name)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Android ICS has very minimal genl_ctrl_resolve() implementation, so
|
|
|
+ * need to work around that.
|
|
|
+ */
|
|
|
+ struct nl_cache *cache = NULL;
|
|
|
+ struct genl_family *nl80211 = NULL;
|
|
|
+ int id = -1;
|
|
|
+
|
|
|
+ if (genl_ctrl_alloc_cache(handle, &cache) < 0) {
|
|
|
+ wpa_printf(MSG_ERROR, "nl80211: Failed to allocate generic "
|
|
|
+ "netlink cache");
|
|
|
+ goto fail;
|
|
|
+ }
|
|
|
+
|
|
|
+ nl80211 = genl_ctrl_search_by_name(cache, name);
|
|
|
+ if (nl80211 == NULL)
|
|
|
+ goto fail;
|
|
|
+
|
|
|
+ id = genl_family_get_id(nl80211);
|
|
|
+
|
|
|
+fail:
|
|
|
+ if (nl80211)
|
|
|
+ genl_family_put(nl80211);
|
|
|
+ if (cache)
|
|
|
+ nl_cache_free(cache);
|
|
|
+
|
|
|
+ return id;
|
|
|
+}
|
|
|
+#define genl_ctrl_resolve android_genl_ctrl_resolve
|
|
|
+#endif /* ANDROID */
|
|
|
+
|
|
|
+
|
|
|
static int wpa_driver_nl80211_init_nl_global(struct nl80211_global *global)
|
|
|
{
|
|
|
int ret;
|