diff options
author | David S. Miller <davem@davemloft.net> | 2014-11-29 23:47:48 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-29 23:47:48 -0500 |
commit | 60b7379dc5b1743427b031cca53e30860a38ada6 (patch) | |
tree | c0462b8dd188861bd04f36dd31672b7446e35dd8 /net/ipv6/ip6_vti.c | |
parent | a523a5ecc8c6ddceb8f783f600605553e5ad8963 (diff) | |
parent | 7a5a4f978750756755dc839014e13d1b088ccc8e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/ipv6/ip6_vti.c')
-rw-r--r-- | net/ipv6/ip6_vti.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index 83082168b056..16a7e81e3f99 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c | |||
@@ -911,6 +911,15 @@ static int vti6_newlink(struct net *src_net, struct net_device *dev, | |||
911 | return vti6_tnl_create2(dev); | 911 | return vti6_tnl_create2(dev); |
912 | } | 912 | } |
913 | 913 | ||
914 | static void vti6_dellink(struct net_device *dev, struct list_head *head) | ||
915 | { | ||
916 | struct net *net = dev_net(dev); | ||
917 | struct vti6_net *ip6n = net_generic(net, vti6_net_id); | ||
918 | |||
919 | if (dev != ip6n->fb_tnl_dev) | ||
920 | unregister_netdevice_queue(dev, head); | ||
921 | } | ||
922 | |||
914 | static int vti6_changelink(struct net_device *dev, struct nlattr *tb[], | 923 | static int vti6_changelink(struct net_device *dev, struct nlattr *tb[], |
915 | struct nlattr *data[]) | 924 | struct nlattr *data[]) |
916 | { | 925 | { |
@@ -986,6 +995,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = { | |||
986 | .setup = vti6_dev_setup, | 995 | .setup = vti6_dev_setup, |
987 | .validate = vti6_validate, | 996 | .validate = vti6_validate, |
988 | .newlink = vti6_newlink, | 997 | .newlink = vti6_newlink, |
998 | .dellink = vti6_dellink, | ||
989 | .changelink = vti6_changelink, | 999 | .changelink = vti6_changelink, |
990 | .get_size = vti6_get_size, | 1000 | .get_size = vti6_get_size, |
991 | .fill_info = vti6_fill_info, | 1001 | .fill_info = vti6_fill_info, |
@@ -1026,6 +1036,7 @@ static int __net_init vti6_init_net(struct net *net) | |||
1026 | if (!ip6n->fb_tnl_dev) | 1036 | if (!ip6n->fb_tnl_dev) |
1027 | goto err_alloc_dev; | 1037 | goto err_alloc_dev; |
1028 | dev_net_set(ip6n->fb_tnl_dev, net); | 1038 | dev_net_set(ip6n->fb_tnl_dev, net); |
1039 | ip6n->fb_tnl_dev->rtnl_link_ops = &vti6_link_ops; | ||
1029 | 1040 | ||
1030 | err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev); | 1041 | err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev); |
1031 | if (err < 0) | 1042 | if (err < 0) |