On Dienstag, 12. Juli 2016 17:08:05 CEST Marek Lindner wrote:
In a few situations batman-adv tries to determine whether a given
is a WiFi interface to enable specific WiFi optimizations. If the interface
batman-adv has been configured with is a virtual interface (e.g. VLAN) it
would not be properly detected as WiFi interface and thus not benefit from
the special WiFi treatment.
This patch changes that by peeking under the hood whenever a virtual
interface is in play.
Signed-off-by: Marek Lindner <mareklindner(a)neomailbox.ch>
net/batman-adv/hard-interface.c | 85 ++++++++++++++++++++++++++++++++++++++---
net/batman-adv/hard-interface.h | 1 +
2 files changed, 81 insertions(+), 5 deletions(-)
Most of the patch looks good. But you may want to first accept the netlink
patches and the rewrite the dev_get_link part.
diff --git a/net/batman-adv/hard-interface.c
index 478977b..6324474 100644
+struct net_device *batadv_get_real_netdev(struct net_device
+ net = dev_net(hard_iface->soft_iface);
+ ifindex = dev_get_iflink(net_device);
+ real_netdev = dev_get_by_index(net, ifindex);
Andrew provided a patch  which gets the correct namespace of a link. You
should consider to first accept his patch and then use batadv_getlink_net to
get the correct namespace for the device instead of just assuming that it will
be in the same netns as the batman-adv interface.
Something like this:
net = dev_net(hard_iface->soft_iface);
ifindex = dev_get_iflink(net_device);
real_net = = batadv_getlink_net(net_device, net);
real_netdev = dev_get_by_index(real_net, ifindex);
Could it also be that this has to be done with the rtnl lock held? Otherwise
some of the the information may change while we are going through all the
steps to get the real interface.