diff options
Diffstat (limited to 'net/ipv6/ip6_tunnel.c')
-rw-r--r-- | net/ipv6/ip6_tunnel.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index d453d07b0dfe..138980eec214 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
@@ -74,7 +74,6 @@ MODULE_LICENSE("GPL"); | |||
74 | (addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \ | 74 | (addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \ |
75 | (HASH_SIZE - 1)) | 75 | (HASH_SIZE - 1)) |
76 | 76 | ||
77 | static void ip6_fb_tnl_dev_init(struct net_device *dev); | ||
78 | static void ip6_tnl_dev_init(struct net_device *dev); | 77 | static void ip6_tnl_dev_init(struct net_device *dev); |
79 | static void ip6_tnl_dev_setup(struct net_device *dev); | 78 | static void ip6_tnl_dev_setup(struct net_device *dev); |
80 | 79 | ||
@@ -623,7 +622,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
623 | if (rt && rt->rt6i_dev) | 622 | if (rt && rt->rt6i_dev) |
624 | skb2->dev = rt->rt6i_dev; | 623 | skb2->dev = rt->rt6i_dev; |
625 | 624 | ||
626 | icmpv6_send(skb2, rel_type, rel_code, rel_info, skb2->dev); | 625 | icmpv6_send(skb2, rel_type, rel_code, rel_info); |
627 | 626 | ||
628 | if (rt) | 627 | if (rt) |
629 | dst_release(&rt->u.dst); | 628 | dst_release(&rt->u.dst); |
@@ -1015,7 +1014,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1015 | tel = (struct ipv6_tlv_tnl_enc_lim *)&skb_network_header(skb)[offset]; | 1014 | tel = (struct ipv6_tlv_tnl_enc_lim *)&skb_network_header(skb)[offset]; |
1016 | if (tel->encap_limit == 0) { | 1015 | if (tel->encap_limit == 0) { |
1017 | icmpv6_send(skb, ICMPV6_PARAMPROB, | 1016 | icmpv6_send(skb, ICMPV6_PARAMPROB, |
1018 | ICMPV6_HDR_FIELD, offset + 2, skb->dev); | 1017 | ICMPV6_HDR_FIELD, offset + 2); |
1019 | return -1; | 1018 | return -1; |
1020 | } | 1019 | } |
1021 | encap_limit = tel->encap_limit - 1; | 1020 | encap_limit = tel->encap_limit - 1; |
@@ -1034,7 +1033,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1034 | err = ip6_tnl_xmit2(skb, dev, dsfield, &fl, encap_limit, &mtu); | 1033 | err = ip6_tnl_xmit2(skb, dev, dsfield, &fl, encap_limit, &mtu); |
1035 | if (err != 0) { | 1034 | if (err != 0) { |
1036 | if (err == -EMSGSIZE) | 1035 | if (err == -EMSGSIZE) |
1037 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, dev); | 1036 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); |
1038 | return -1; | 1037 | return -1; |
1039 | } | 1038 | } |
1040 | 1039 | ||
@@ -1364,7 +1363,7 @@ static void ip6_tnl_dev_init(struct net_device *dev) | |||
1364 | * Return: 0 | 1363 | * Return: 0 |
1365 | **/ | 1364 | **/ |
1366 | 1365 | ||
1367 | static void ip6_fb_tnl_dev_init(struct net_device *dev) | 1366 | static void __net_init ip6_fb_tnl_dev_init(struct net_device *dev) |
1368 | { | 1367 | { |
1369 | struct ip6_tnl *t = netdev_priv(dev); | 1368 | struct ip6_tnl *t = netdev_priv(dev); |
1370 | struct net *net = dev_net(dev); | 1369 | struct net *net = dev_net(dev); |
@@ -1388,7 +1387,7 @@ static struct xfrm6_tunnel ip6ip6_handler = { | |||
1388 | .priority = 1, | 1387 | .priority = 1, |
1389 | }; | 1388 | }; |
1390 | 1389 | ||
1391 | static void ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n) | 1390 | static void __net_exit ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n) |
1392 | { | 1391 | { |
1393 | int h; | 1392 | int h; |
1394 | struct ip6_tnl *t; | 1393 | struct ip6_tnl *t; |
@@ -1407,7 +1406,7 @@ static void ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n) | |||
1407 | unregister_netdevice_many(&list); | 1406 | unregister_netdevice_many(&list); |
1408 | } | 1407 | } |
1409 | 1408 | ||
1410 | static int ip6_tnl_init_net(struct net *net) | 1409 | static int __net_init ip6_tnl_init_net(struct net *net) |
1411 | { | 1410 | { |
1412 | struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); | 1411 | struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); |
1413 | int err; | 1412 | int err; |
@@ -1436,7 +1435,7 @@ err_alloc_dev: | |||
1436 | return err; | 1435 | return err; |
1437 | } | 1436 | } |
1438 | 1437 | ||
1439 | static void ip6_tnl_exit_net(struct net *net) | 1438 | static void __net_exit ip6_tnl_exit_net(struct net *net) |
1440 | { | 1439 | { |
1441 | struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); | 1440 | struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); |
1442 | 1441 | ||
@@ -1462,27 +1461,29 @@ static int __init ip6_tunnel_init(void) | |||
1462 | { | 1461 | { |
1463 | int err; | 1462 | int err; |
1464 | 1463 | ||
1465 | if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) { | 1464 | err = register_pernet_device(&ip6_tnl_net_ops); |
1465 | if (err < 0) | ||
1466 | goto out_pernet; | ||
1467 | |||
1468 | err = xfrm6_tunnel_register(&ip4ip6_handler, AF_INET); | ||
1469 | if (err < 0) { | ||
1466 | printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n"); | 1470 | printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n"); |
1467 | err = -EAGAIN; | 1471 | goto out_ip4ip6; |
1468 | goto out; | ||
1469 | } | 1472 | } |
1470 | 1473 | ||
1471 | if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) { | 1474 | err = xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6); |
1475 | if (err < 0) { | ||
1472 | printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n"); | 1476 | printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n"); |
1473 | err = -EAGAIN; | 1477 | goto out_ip6ip6; |
1474 | goto unreg_ip4ip6; | ||
1475 | } | 1478 | } |
1476 | 1479 | ||
1477 | err = register_pernet_device(&ip6_tnl_net_ops); | ||
1478 | if (err < 0) | ||
1479 | goto err_pernet; | ||
1480 | return 0; | 1480 | return 0; |
1481 | err_pernet: | 1481 | |
1482 | xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6); | 1482 | out_ip6ip6: |
1483 | unreg_ip4ip6: | ||
1484 | xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET); | 1483 | xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET); |
1485 | out: | 1484 | out_ip4ip6: |
1485 | unregister_pernet_device(&ip6_tnl_net_ops); | ||
1486 | out_pernet: | ||
1486 | return err; | 1487 | return err; |
1487 | } | 1488 | } |
1488 | 1489 | ||