21 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23 #include <linux/module.h>
24 #include <linux/capability.h>
25 #include <linux/errno.h>
26 #include <linux/types.h>
28 #include <linux/icmp.h>
32 #include <linux/if_tunnel.h>
33 #include <linux/net.h>
34 #include <linux/in6.h>
35 #include <linux/netdevice.h>
36 #include <linux/if_arp.h>
37 #include <linux/icmpv6.h>
40 #include <linux/rtnetlink.h>
41 #include <linux/netfilter_ipv6.h>
42 #include <linux/slab.h>
43 #include <linux/hash.h>
45 #include <asm/uaccess.h>
66 #define IP6_TNL_TRACE(x...) pr_debug("%s:" x "\n", __func__)
68 #define IP6_TNL_TRACE(x...) do {;} while(0)
71 #define IPV6_TCLASS_MASK (IPV6_FLOWINFO_MASK & ~IPV6_FLOWLABEL_MASK)
72 #define IPV6_TCLASS_SHIFT 20
74 #define HASH_SIZE_SHIFT 5
75 #define HASH_SIZE (1 << HASH_SIZE_SHIFT)
79 u32 hash = ipv6_addr_hash(addr1) ^ ipv6_addr_hash(addr2);
171 #define for_each_ip6_tunnel_rcu(start) \
172 for (t = rcu_dereference(start); t; t = rcu_dereference(t->next))
177 unsigned int hash =
HASH(remote, local);
182 if (ipv6_addr_equal(local, &t->
parms.laddr) &&
183 ipv6_addr_equal(remote, &t->
parms.raddr) &&
213 if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) {
215 h =
HASH(remote, local);
245 for (tp = ip6_tnl_bucket(ip6n, &t->
parms);
286 dev =
alloc_netdev(
sizeof (*t), name, ip6_tnl_dev_setup);
290 dev_net_set(dev, net);
292 t = netdev_priv(dev);
294 err = ip6_tnl_dev_init(dev);
304 ip6_tnl_link(ip6n, t);
327 static struct ip6_tnl *ip6_tnl_locate(
struct net *net,
336 for (tp = ip6_tnl_bucket(ip6n, p);
339 if (ipv6_addr_equal(local, &t->
parms.laddr) &&
340 ipv6_addr_equal(remote, &t->
parms.raddr))
345 return ip6_tnl_create(net, p);
359 struct ip6_tnl *t = netdev_priv(dev);
360 struct net *net = dev_net(dev);
366 ip6_tnl_unlink(ip6n, t);
384 __u16 off =
sizeof (*ipv6h);
389 if (raw + off +
sizeof (*hdr) > skb->
data &&
390 !pskb_may_pull(skb, raw - skb->
data + off +
sizeof (*hdr)))
400 optlen = (hdr->
hdrlen + 2) << 2;
410 if (i +
sizeof (*tel) > off + optlen)
458 if ((t = ip6_tnl_lookup(dev_net(skb->
dev), &ipv6h->
daddr,
462 if (t->
parms.proto != ipproto && t->
parms.proto != 0)
488 if (teli && teli == *info - 2) {
535 const struct iphdr *eiph;
539 err = ip6_tnl_err(skb,
IPPROTO_IPIP, opt, &rel_type, &rel_code,
540 &rel_msg, &rel_info, offset);
567 if (!pskb_may_pull(skb, offset +
sizeof(
struct iphdr)))
577 skb_reset_network_header(skb2);
581 rt = ip_route_output_ports(dev_net(skb->
dev), &fl4,
NULL,
594 rt = ip_route_output_ports(dev_net(skb->
dev), &fl4,
NULL,
605 skb_dst_set(skb2, &rt->
dst);
608 if (ip_route_input(skb2, eiph->
daddr, eiph->
saddr, eiph->
tos,
616 if (rel_info > dst_mtu(skb_dst(skb2)))
619 skb_dst(skb2)->ops->update_pmtu(skb_dst(skb2),
NULL, skb2, rel_info);
622 skb_dst(skb2)->ops->redirect(skb_dst(skb2),
NULL, skb2);
641 err = ip6_tnl_err(skb,
IPPROTO_IPV6, opt, &rel_type, &rel_code,
642 &rel_msg, &rel_info, offset);
646 if (rel_msg && pskb_may_pull(skb, offset +
sizeof(
struct ipv6hdr))) {
655 skb_reset_network_header(skb2);
661 if (rt && rt->
dst.dev)
675 static void ip4ip6_dscp_ecn_decapsulate(
const struct ip6_tnl *t,
684 if (INET_ECN_is_ce(dsfield))
685 IP_ECN_set_ce(ip_hdr(skb));
688 static void ip6ip6_dscp_ecn_decapsulate(
const struct ip6_tnl *t,
693 ipv6_copy_dscp(ipv6_get_dsfield(ipv6h), ipv6_hdr(skb));
695 if (INET_ECN_is_ce(ipv6_get_dsfield(ipv6h)))
696 IP6_ECN_set_ce(ipv6_hdr(skb));
704 int ltype = ipv6_addr_type(laddr);
705 int rtype = ipv6_addr_type(raddr);
716 if (rtype&IPV6_ADDR_UNICAST)
730 struct net *net = dev_net(t->
dev);
740 if ((ipv6_addr_is_multicast(laddr) ||
760 void (*dscp_ecn_decapsulate)(
const struct ip6_tnl *t,
765 const struct ipv6hdr *ipv6h = ipv6_hdr(skb);
769 if ((t = ip6_tnl_lookup(dev_net(skb->
dev), &ipv6h->
saddr,
773 if (t->
parms.proto != ipproto && t->
parms.proto != 0) {
784 t->
dev->stats.rx_dropped++;
790 skb_reset_network_header(skb);
799 __skb_tunnel_rx(skb, t->
dev);
801 dscp_ecn_decapsulate(t, ipv6h, skb);
816 static int ip4ip6_rcv(
struct sk_buff *skb)
819 ip4ip6_dscp_ecn_decapsulate);
822 static int ip6ip6_rcv(
struct sk_buff *skb)
825 ip6ip6_dscp_ecn_decapsulate);
844 opt->
ops.opt_nflen = 8;
864 return ipv6_addr_equal(&t->
parms.raddr, &hdr->
saddr);
871 struct net *net = dev_net(t->
dev);
881 pr_warn(
"%s xmit: Local address not yet configured!\n",
883 else if (!ipv6_addr_is_multicast(&p->
raddr) &&
885 pr_warn(
"%s xmit: Routing loop! Remote address found on this node!\n",
914 static int ip6_tnl_xmit2(
struct sk_buff *skb,
921 struct net *net = dev_net(dev);
922 struct ip6_tnl *t = netdev_priv(dev);
924 struct ipv6hdr *ipv6h = ipv6_hdr(skb);
929 unsigned int max_headroom =
sizeof(
struct ipv6hdr);
934 if (!fl6->flowi6_mark)
940 goto tx_err_link_failure;
945 goto tx_err_link_failure;
956 goto tx_err_dst_release;
958 mtu = dst_mtu(dst) -
sizeof (*ipv6h);
959 if (encap_limit >= 0) {
966 skb_dst(skb)->ops->update_pmtu(skb_dst(skb),
NULL, skb, mtu);
967 if (skb->
len > mtu) {
970 goto tx_err_dst_release;
978 if (skb_headroom(skb) < max_headroom || skb_shared(skb) ||
979 (skb_cloned(skb) && !skb_clone_writable(skb, 0))) {
983 goto tx_err_dst_release;
986 skb_set_owner_w(new_skb, skb->
sk);
991 if (fl6->flowi6_mark) {
992 skb_dst_set(skb, dst);
999 proto = fl6->flowi6_proto;
1000 if (encap_limit >= 0) {
1001 init_tel_txopt(&opt, encap_limit);
1005 skb_reset_network_header(skb);
1006 ipv6h = ipv6_hdr(skb);
1008 dsfield = INET_ECN_encapsulate(0, dsfield);
1030 tx_err_link_failure:
1032 dst_link_failure(skb);
1041 struct ip6_tnl *t = netdev_priv(dev);
1042 const struct iphdr *iph = ip_hdr(skb);
1043 int encap_limit = -1;
1054 encap_limit = t->
parms.encap_limit;
1059 dsfield = ipv4_get_dsfield(iph);
1065 fl6.flowi6_mark = skb->
mark;
1067 err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
1082 struct ip6_tnl *t = netdev_priv(dev);
1083 struct ipv6hdr *ipv6h = ipv6_hdr(skb);
1084 int encap_limit = -1;
1106 encap_limit = t->
parms.encap_limit;
1111 dsfield = ipv6_get_dsfield(ipv6h);
1117 fl6.flowi6_mark = skb->
mark;
1119 err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
1132 struct ip6_tnl *t = netdev_priv(dev);
1138 ret = ip4ip6_tnl_xmit(skb, dev);
1141 ret = ip6ip6_tnl_xmit(skb, dev);
1159 static void ip6_tnl_link_config(
struct ip6_tnl *t)
1171 fl6->flowi6_oif = p->
link;
1190 int strict = (ipv6_addr_type(&p->
raddr) &
1236 ip6_tnl_link_config(t);
1303 struct net *net = dev_net(dev);
1313 ip6_tnl_parm_from_user(&
p1, &p);
1314 t = ip6_tnl_locate(net, &
p1, 0);
1316 memset(&p, 0,
sizeof(p));
1319 t = netdev_priv(dev);
1320 ip6_tnl_parm_to_user(&p, &t->
parms);
1337 ip6_tnl_parm_from_user(&
p1, &p);
1341 if (t->
dev != dev) {
1346 t = netdev_priv(dev);
1348 ip6_tnl_unlink(ip6n, t);
1350 err = ip6_tnl_change(t, &
p1);
1351 ip6_tnl_link(ip6n, t);
1356 ip6_tnl_parm_to_user(&p, &t->
parms);
1373 ip6_tnl_parm_from_user(&
p1, &p);
1374 t = ip6_tnl_locate(net, &
p1, 0);
1383 unregister_netdevice(dev);
1402 ip6_tnl_change_mtu(
struct net_device *dev,
int new_mtu)
1413 .ndo_uninit = ip6_tnl_dev_uninit,
1414 .ndo_start_xmit = ip6_tnl_xmit,
1415 .ndo_do_ioctl = ip6_tnl_ioctl,
1416 .ndo_change_mtu = ip6_tnl_change_mtu,
1417 .ndo_get_stats = ip6_get_stats,
1429 static void ip6_tnl_dev_setup(
struct net_device *dev)
1439 t = netdev_priv(dev);
1457 struct ip6_tnl *t = netdev_priv(dev);
1471 static int ip6_tnl_dev_init(
struct net_device *dev)
1473 struct ip6_tnl *t = netdev_priv(dev);
1474 int err = ip6_tnl_dev_init_gen(dev);
1478 ip6_tnl_link_config(t);
1491 struct ip6_tnl *t = netdev_priv(dev);
1492 struct net *net = dev_net(dev);
1494 int err = ip6_tnl_dev_init_gen(dev);
1502 ip6_tnl_link_config(t);
1509 .handler = ip4ip6_rcv,
1510 .err_handler = ip4ip6_err,
1514 static struct xfrm6_tunnel ip6ip6_handler __read_mostly = {
1516 .err_handler = ip6ip6_err,
1539 static int __net_init ip6_tnl_init_net(
struct net *net)
1575 static void __net_exit ip6_tnl_exit_net(
struct net *net)
1580 ip6_tnl_destroy_tunnels(ip6n);
1585 .init = ip6_tnl_init_net,
1586 .exit = ip6_tnl_exit_net,
1587 .id = &ip6_tnl_net_id,
1597 static int __init ip6_tunnel_init(
void)
1607 pr_err(
"%s: can't register ip4ip6\n", __func__);
1613 pr_err(
"%s: can't register ip6ip6\n", __func__);
1631 static void __exit ip6_tunnel_cleanup(
void)
1634 pr_info(
"%s: can't deregister ip4ip6\n", __func__);
1637 pr_info(
"%s: can't deregister ip6ip6\n", __func__);