On Dienstag, 12. Juli 2016 17:08:05 CEST Marek Lindner wrote:
In a few situations batman-adv tries to determine whether a given interface 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@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 b/net/batman-adv/hard-interface.c index 478977b..6324474 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c
[...]
+struct net_device *batadv_get_real_netdev(struct net_device *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 [1] 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.
Kind regards, Sven