Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f44a3ae9 authored by Marek Lindner's avatar Marek Lindner Committed by Simon Wunderlich
Browse files

batman-adv: refactor wifi interface detection



The ELP protocol requires cfg80211 to auto-detect the WiFi througput
to a given neighbor. Use batadv_is_cfg80211_netdev() to determine
whether or not an interface is eligible.

Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: default avatarSven Eckelmann <sven.eckelmann@open-mesh.com>
Signed-off-by: default avatarSimon Wunderlich <sw@simonwunderlich.de>
parent 88ffc7d0
Loading
Loading
Loading
Loading
+14 −15
Original line number Original line Diff line number Diff line
@@ -90,7 +90,10 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
	 * cfg80211 API
	 * cfg80211 API
	 */
	 */
	if (batadv_is_wifi_netdev(hard_iface->net_dev)) {
	if (batadv_is_wifi_netdev(hard_iface->net_dev)) {
		if (hard_iface->net_dev->ieee80211_ptr) {
		if (!batadv_is_cfg80211_netdev(hard_iface->net_dev))
			/* unsupported WiFi driver version */
			goto default_throughput;

		ret = cfg80211_get_station(hard_iface->net_dev,
		ret = cfg80211_get_station(hard_iface->net_dev,
					   neigh->addr, &sinfo);
					   neigh->addr, &sinfo);
		if (ret == -ENOENT) {
		if (ret == -ENOENT) {
@@ -104,10 +107,6 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
			return sinfo.expected_throughput / 100;
			return sinfo.expected_throughput / 100;
	}
	}


		/* unsupported WiFi driver version */
		goto default_throughput;
	}

	/* if not a wifi interface, check if this device provides data via
	/* if not a wifi interface, check if this device provides data via
	 * ethtool (e.g. an Ethernet adapter)
	 * ethtool (e.g. an Ethernet adapter)
	 */
	 */
+21 −5
Original line number Original line Diff line number Diff line
@@ -201,6 +201,26 @@ static bool batadv_is_valid_iface(const struct net_device *net_dev)
	return true;
	return true;
}
}


/**
 * batadv_is_cfg80211_netdev - check if the given net_device struct is a
 *  cfg80211 wifi interface
 * @net_device: the device to check
 *
 * Return: true if the net device is a cfg80211 wireless device, false
 *  otherwise.
 */
bool batadv_is_cfg80211_netdev(struct net_device *net_device)
{
	if (!net_device)
		return false;

	/* cfg80211 drivers have to set ieee80211_ptr */
	if (net_device->ieee80211_ptr)
		return true;

	return false;
}

/**
/**
 * batadv_is_wifi_netdev - check if the given net_device struct is a wifi
 * batadv_is_wifi_netdev - check if the given net_device struct is a wifi
 *  interface
 *  interface
@@ -221,11 +241,7 @@ bool batadv_is_wifi_netdev(struct net_device *net_device)
		return true;
		return true;
#endif
#endif


	/* cfg80211 drivers have to set ieee80211_ptr */
	return batadv_is_cfg80211_netdev(net_device);
	if (net_device->ieee80211_ptr)
		return true;

	return false;
}
}


/**
/**
+1 −0
Original line number Original line Diff line number Diff line
@@ -65,6 +65,7 @@ enum batadv_hard_if_cleanup {


extern struct notifier_block batadv_hard_if_notifier;
extern struct notifier_block batadv_hard_if_notifier;


bool batadv_is_cfg80211_netdev(struct net_device *net_device);
bool batadv_is_wifi_netdev(struct net_device *net_device);
bool batadv_is_wifi_netdev(struct net_device *net_device);
bool batadv_is_wifi_iface(int ifindex);
bool batadv_is_wifi_iface(int ifindex);
struct batadv_hard_iface*
struct batadv_hard_iface*