aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ipvlan/ipvlan.h
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2017-04-20 18:08:15 +0200
committerDavid S. Miller <davem@davemloft.net>2017-04-25 10:43:22 -0400
commit3133822f5ac13b04c2ca46f27cfe74606bbd4a6d (patch)
tree3834ea2bcc3a0520f80187cdcd094cff62fefab4 /drivers/net/ipvlan/ipvlan.h
parentMerge branch 'virtio-net-tx-napi' (diff)
downloadlinux-dev-3133822f5ac13b04c2ca46f27cfe74606bbd4a6d.tar.xz
linux-dev-3133822f5ac13b04c2ca46f27cfe74606bbd4a6d.zip
ipvlan: use pernet operations and restrict l3s hooks to master netns
commit 4fbae7d83c98c30efc ("ipvlan: Introduce l3s mode") added registration of netfilter hooks via nf_register_hooks(). This API provides the illusion of 'global' netfilter hooks by placing the hooks in all current and future network namespaces. In case of ipvlan the hook appears to be only needed in the namespace that contains the ipvlan master device (i.e., usually init_net), so placing them in all namespaces is not needed. This switches ipvlan driver to pernet operations, and then only registers hooks in namespaces where a ipvlan master device is set to l3s mode. Extra care has to be taken when the master device is moved to another namespace, as we might have to 'move' the netfilter hooks too. This is done by storing the namespace the ipvlan port was created in. On REGISTER event, do (un)register operations in the old/new namespaces. This will also allow removal of the nf_register_hooks() in a future patch. Cc: Mahesh Bandewar <maheshb@google.com> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ipvlan/ipvlan.h')
-rw-r--r--drivers/net/ipvlan/ipvlan.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h
index 800a46c8d26c..7919369c0a72 100644
--- a/drivers/net/ipvlan/ipvlan.h
+++ b/drivers/net/ipvlan/ipvlan.h
@@ -26,6 +26,7 @@
#include <linux/netfilter.h>
#include <net/ip.h>
#include <net/ip6_route.h>
+#include <net/netns/generic.h>
#include <net/rtnetlink.h>
#include <net/route.h>
#include <net/addrconf.h>
@@ -91,6 +92,7 @@ struct ipvl_addr {
struct ipvl_port {
struct net_device *dev;
+ possible_net_t pnet;
struct hlist_head hlhead[IPVLAN_HASH_SIZE];
struct list_head ipvlans;
u16 mode;