On Monday 07 March 2016 15:31:30 Andrew Lunn wrote:
On Fri, Mar 04, 2016 at 01:35:01PM +0100, Sven
Eckelmann wrote:
On Tuesday 01 March 2016 22:19:07 Andrew Lunn
wrote:
batman-adv tries to prevent the user from placing
a batX soft
interface into another batman mesh as a hard interface. It does this
by walking up the devices list of parents and ensures they are all
none batX interfaces. iflink can point to an interface in a different
namespace, so also retrieve the parents name space when finding the
parent and use it when doing the comparison.
Signed-off-by: Andrew Lunn <andrew(a)lunn.ch>
Acked-by: Antonio Quartulli <a(a)untable.cc>
---
net/batman-adv/hard-interface.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
Include missing in net/batman-adv/hard-interface.c
#include <net/rtnetlink.h>
Hi Sven
How are you determining this? It compiled fine for me, which is my
usual test.
https://git.open-mesh.org/build_test.git/blob/a246d227882b7bc03ae602b41cf65…
Does anyone (not only Andrew) have a proposal regarding the compat code?
Patch 1+2 should be unproblematic (maybe these can already be applied?).
I've not much history with netns. One thing which might be interesting
it know, is when did it become mature enough to the usable? Maybe for
kernels older than v4.0, deny that netns exists, and find a way for
functions like get_link_net() to return the default net.
compat.h could contain
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
#if IS_ENABLED(CONFIG_NET_NS)
#error Network Namespaces not support with this vintage of kernel. Please disable
#endif
#endif
You then know everything is going to be in the default namespace for
these old kernels.
I think it is a good idea to deactivate it for too old kernels. But it
will explode in everyones face when build against the distro kernel.
But maybe letting some of the functions "fail" for old kernels might
be possible.
[...]
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
#define dev->rtnl_link_ops->get_link_net true
#define dev->rtnl_link_ops->get_link_net(dev) init_net
#endif
[...]
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
#define init_net.ns.inum 42
#define net->ns.inum 42
#endif
These defines should not work (I haven't actually tested them but they
should not work with all the . and ->). The preprocessor should fail
because it ends the preprocessor macro name with init_net and then
doesn't expect '.' to follow (only '(' or tab/space).
Kind regards,
Sven