diff options
| -rw-r--r-- | net/ipv4/ip_vti.c | 1 | ||||
| -rw-r--r-- | net/ipv6/ip6_vti.c | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index 3e861011e4a3..1a7e979e80ba 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c | |||
| @@ -528,6 +528,7 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = { | |||
| 528 | .validate = vti_tunnel_validate, | 528 | .validate = vti_tunnel_validate, |
| 529 | .newlink = vti_newlink, | 529 | .newlink = vti_newlink, |
| 530 | .changelink = vti_changelink, | 530 | .changelink = vti_changelink, |
| 531 | .dellink = ip_tunnel_dellink, | ||
| 531 | .get_size = vti_get_size, | 532 | .get_size = vti_get_size, |
| 532 | .fill_info = vti_fill_info, | 533 | .fill_info = vti_fill_info, |
| 533 | }; | 534 | }; |
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index 31089d153fd3..bcda14de7f84 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c | |||
| @@ -905,6 +905,15 @@ static int vti6_newlink(struct net *src_net, struct net_device *dev, | |||
| 905 | return vti6_tnl_create2(dev); | 905 | return vti6_tnl_create2(dev); |
| 906 | } | 906 | } |
| 907 | 907 | ||
| 908 | static void vti6_dellink(struct net_device *dev, struct list_head *head) | ||
| 909 | { | ||
| 910 | struct net *net = dev_net(dev); | ||
| 911 | struct vti6_net *ip6n = net_generic(net, vti6_net_id); | ||
| 912 | |||
| 913 | if (dev != ip6n->fb_tnl_dev) | ||
| 914 | unregister_netdevice_queue(dev, head); | ||
| 915 | } | ||
| 916 | |||
| 908 | static int vti6_changelink(struct net_device *dev, struct nlattr *tb[], | 917 | static int vti6_changelink(struct net_device *dev, struct nlattr *tb[], |
| 909 | struct nlattr *data[]) | 918 | struct nlattr *data[]) |
| 910 | { | 919 | { |
| @@ -980,6 +989,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = { | |||
| 980 | .setup = vti6_dev_setup, | 989 | .setup = vti6_dev_setup, |
| 981 | .validate = vti6_validate, | 990 | .validate = vti6_validate, |
| 982 | .newlink = vti6_newlink, | 991 | .newlink = vti6_newlink, |
| 992 | .dellink = vti6_dellink, | ||
| 983 | .changelink = vti6_changelink, | 993 | .changelink = vti6_changelink, |
| 984 | .get_size = vti6_get_size, | 994 | .get_size = vti6_get_size, |
| 985 | .fill_info = vti6_fill_info, | 995 | .fill_info = vti6_fill_info, |
| @@ -1020,6 +1030,7 @@ static int __net_init vti6_init_net(struct net *net) | |||
| 1020 | if (!ip6n->fb_tnl_dev) | 1030 | if (!ip6n->fb_tnl_dev) |
| 1021 | goto err_alloc_dev; | 1031 | goto err_alloc_dev; |
| 1022 | dev_net_set(ip6n->fb_tnl_dev, net); | 1032 | dev_net_set(ip6n->fb_tnl_dev, net); |
| 1033 | ip6n->fb_tnl_dev->rtnl_link_ops = &vti6_link_ops; | ||
| 1023 | 1034 | ||
| 1024 | err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev); | 1035 | err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev); |
| 1025 | if (err < 0) | 1036 | if (err < 0) |
