|
@@ -117,6 +117,58 @@ static int batadv_is_valid_iface(const struct net_device *net_dev)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * batadv_is_wifi_netdev - check if the given net_device struct is a wifi
|
|
|
+ * interface
|
|
|
+ * @net_device: the device to check
|
|
|
+ *
|
|
|
+ * Returns true if the net device is a 802.11 wireless device, false otherwise.
|
|
|
+ */
|
|
|
+static bool batadv_is_wifi_netdev(struct net_device *net_device)
|
|
|
+{
|
|
|
+#ifdef CONFIG_WIRELESS_EXT
|
|
|
+ /* pre-cfg80211 drivers have to implement WEXT, so it is possible to
|
|
|
+ * check for wireless_handlers != NULL
|
|
|
+ */
|
|
|
+ if (net_device->wireless_handlers)
|
|
|
+ return true;
|
|
|
+#endif
|
|
|
+
|
|
|
+ /* cfg80211 drivers have to set ieee80211_ptr */
|
|
|
+ if (net_device->ieee80211_ptr)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * batadv_is_wifi_iface - check if the given interface represented by ifindex
|
|
|
+ * is a wifi interface
|
|
|
+ * @ifindex: interface index to check
|
|
|
+ *
|
|
|
+ * Returns true if the interface represented by ifindex is a 802.11 wireless
|
|
|
+ * device, false otherwise.
|
|
|
+ */
|
|
|
+bool batadv_is_wifi_iface(int ifindex)
|
|
|
+{
|
|
|
+ struct net_device *net_device = NULL;
|
|
|
+ bool ret = false;
|
|
|
+
|
|
|
+ if (ifindex == BATADV_NULL_IFINDEX)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ net_device = dev_get_by_index(&init_net, ifindex);
|
|
|
+ if (!net_device)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret = batadv_is_wifi_netdev(net_device);
|
|
|
+
|
|
|
+out:
|
|
|
+ if (net_device)
|
|
|
+ dev_put(net_device);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static struct batadv_hard_iface *
|
|
|
batadv_hardif_get_active(const struct net_device *soft_iface)
|
|
|
{
|
|
@@ -657,38 +709,6 @@ out:
|
|
|
return NOTIFY_DONE;
|
|
|
}
|
|
|
|
|
|
-/* This function returns true if the interface represented by ifindex is a
|
|
|
- * 802.11 wireless device
|
|
|
- */
|
|
|
-bool batadv_is_wifi_iface(int ifindex)
|
|
|
-{
|
|
|
- struct net_device *net_device = NULL;
|
|
|
- bool ret = false;
|
|
|
-
|
|
|
- if (ifindex == BATADV_NULL_IFINDEX)
|
|
|
- goto out;
|
|
|
-
|
|
|
- net_device = dev_get_by_index(&init_net, ifindex);
|
|
|
- if (!net_device)
|
|
|
- goto out;
|
|
|
-
|
|
|
-#ifdef CONFIG_WIRELESS_EXT
|
|
|
- /* pre-cfg80211 drivers have to implement WEXT, so it is possible to
|
|
|
- * check for wireless_handlers != NULL
|
|
|
- */
|
|
|
- if (net_device->wireless_handlers)
|
|
|
- ret = true;
|
|
|
- else
|
|
|
-#endif
|
|
|
- /* cfg80211 drivers have to set ieee80211_ptr */
|
|
|
- if (net_device->ieee80211_ptr)
|
|
|
- ret = true;
|
|
|
-out:
|
|
|
- if (net_device)
|
|
|
- dev_put(net_device);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
struct notifier_block batadv_hard_if_notifier = {
|
|
|
.notifier_call = batadv_hard_if_event,
|
|
|
};
|