batman-adv: retrieve B.A.T.M.A.N. V WiFi neighbor stats from real interface
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> [sven.eckelmann@open-mesh.com: re-add batadv_get_real_netdev to take rtnl semaphore for batadv_get_real_netdevice] Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
This commit is contained in:
parent
5ed4a460a1
commit
1942de1bba
@ -75,6 +75,7 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
|
|||||||
{
|
{
|
||||||
struct batadv_hard_iface *hard_iface = neigh->if_incoming;
|
struct batadv_hard_iface *hard_iface = neigh->if_incoming;
|
||||||
struct ethtool_link_ksettings link_settings;
|
struct ethtool_link_ksettings link_settings;
|
||||||
|
struct net_device *real_netdev;
|
||||||
struct station_info sinfo;
|
struct station_info sinfo;
|
||||||
u32 throughput;
|
u32 throughput;
|
||||||
int ret;
|
int ret;
|
||||||
@ -94,8 +95,13 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
|
|||||||
/* unsupported WiFi driver version */
|
/* unsupported WiFi driver version */
|
||||||
goto default_throughput;
|
goto default_throughput;
|
||||||
|
|
||||||
ret = cfg80211_get_station(hard_iface->net_dev,
|
real_netdev = batadv_get_real_netdev(hard_iface->net_dev);
|
||||||
neigh->addr, &sinfo);
|
if (!real_netdev)
|
||||||
|
goto default_throughput;
|
||||||
|
|
||||||
|
ret = cfg80211_get_station(real_netdev, neigh->addr, &sinfo);
|
||||||
|
|
||||||
|
dev_put(real_netdev);
|
||||||
if (ret == -ENOENT) {
|
if (ret == -ENOENT) {
|
||||||
/* Node is not associated anymore! It would be
|
/* Node is not associated anymore! It would be
|
||||||
* possible to delete this neighbor. For now set
|
* possible to delete this neighbor. For now set
|
||||||
|
@ -206,6 +206,9 @@ static bool batadv_is_valid_iface(const struct net_device *net_dev)
|
|||||||
* interface on top of another 'real' interface
|
* interface on top of another 'real' interface
|
||||||
* @netdev: the device to check
|
* @netdev: the device to check
|
||||||
*
|
*
|
||||||
|
* Callers must hold the rtnl semaphore. You may want batadv_get_real_netdev()
|
||||||
|
* instead of this.
|
||||||
|
*
|
||||||
* Return: the 'real' net device or the original net device and NULL in case
|
* Return: the 'real' net device or the original net device and NULL in case
|
||||||
* of an error.
|
* of an error.
|
||||||
*/
|
*/
|
||||||
@ -242,6 +245,25 @@ out:
|
|||||||
return real_netdev;
|
return real_netdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* batadv_get_real_netdev - check if the given net_device struct is a virtual
|
||||||
|
* interface on top of another 'real' interface
|
||||||
|
* @net_device: the device to check
|
||||||
|
*
|
||||||
|
* Return: the 'real' net device or the original net device and NULL in case
|
||||||
|
* of an error.
|
||||||
|
*/
|
||||||
|
struct net_device *batadv_get_real_netdev(struct net_device *net_device)
|
||||||
|
{
|
||||||
|
struct net_device *real_netdev;
|
||||||
|
|
||||||
|
rtnl_lock();
|
||||||
|
real_netdev = batadv_get_real_netdevice(net_device);
|
||||||
|
rtnl_unlock();
|
||||||
|
|
||||||
|
return real_netdev;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* batadv_is_wext_netdev - check if the given net_device struct is a
|
* batadv_is_wext_netdev - check if the given net_device struct is a
|
||||||
* wext wifi interface
|
* wext wifi interface
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
struct net_device *batadv_get_real_netdev(struct net_device *net_device);
|
||||||
bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface);
|
bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface);
|
||||||
bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface);
|
bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface);
|
||||||
struct batadv_hard_iface*
|
struct batadv_hard_iface*
|
||||||
|
Loading…
Reference in New Issue
Block a user