2 * Copyright (c) 2013 Nicira, Inc.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of version 2 of the GNU General Public
6 * License as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
21 #include <linux/capability.h>
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/kernel.h>
25 #include <linux/slab.h>
26 #include <linux/uaccess.h>
27 #include <linux/skbuff.h>
28 #include <linux/netdevice.h>
30 #include <linux/tcp.h>
31 #include <linux/udp.h>
32 #include <linux/if_arp.h>
33 #include <linux/mroute.h>
34 #include <linux/init.h>
35 #include <linux/in6.h>
36 #include <linux/inetdevice.h>
37 #include <linux/igmp.h>
38 #include <linux/netfilter_ipv4.h>
39 #include <linux/etherdevice.h>
40 #include <linux/if_ether.h>
41 #include <linux/if_vlan.h>
42 #include <linux/rculist.h>
43 #include <linux/err.h>
48 #include <net/protocol.h>
49 #include <net/ip_tunnels.h>
51 #include <net/checksum.h>
52 #include <net/dsfield.h>
53 #include <net/inet_ecn.h>
55 #include <net/net_namespace.h>
56 #include <net/netns/generic.h>
57 #include <net/rtnetlink.h>
59 #if IS_ENABLED(CONFIG_IPV6)
61 #include <net/ip6_fib.h>
62 #include <net/ip6_route.h>
65 static unsigned int ip_tunnel_hash(__be32 key, __be32 remote)
67 return hash_32((__force u32)key ^ (__force u32)remote,
71 static void __tunnel_dst_set(struct ip_tunnel_dst *idst,
72 struct dst_entry *dst)
74 struct dst_entry *old_dst;
77 if (dst->flags & DST_NOCACHE)
82 old_dst = xchg((__force struct dst_entry **)&idst->dst, dst);
86 static void tunnel_dst_set(struct ip_tunnel *t, struct dst_entry *dst)
88 __tunnel_dst_set(this_cpu_ptr(t->dst_cache), dst);
91 static void tunnel_dst_reset(struct ip_tunnel *t)
93 tunnel_dst_set(t, NULL);
96 static void tunnel_dst_reset_all(struct ip_tunnel *t)
100 for_each_possible_cpu(i)
101 __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
104 static struct rtable *tunnel_rtable_get(struct ip_tunnel *t, u32 cookie)
106 struct dst_entry *dst;
109 dst = rcu_dereference(this_cpu_ptr(t->dst_cache)->dst);
111 if (dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
119 return (struct rtable *)dst;
122 /* Often modified stats are per cpu, other are shared (netdev->stats) */
123 struct rtnl_link_stats64 *ip_tunnel_get_stats64(struct net_device *dev,
124 struct rtnl_link_stats64 *tot)
128 for_each_possible_cpu(i) {
129 const struct pcpu_sw_netstats *tstats =
130 per_cpu_ptr(dev->tstats, i);
131 u64 rx_packets, rx_bytes, tx_packets, tx_bytes;
135 start = u64_stats_fetch_begin_bh(&tstats->syncp);
136 rx_packets = tstats->rx_packets;
137 tx_packets = tstats->tx_packets;
138 rx_bytes = tstats->rx_bytes;
139 tx_bytes = tstats->tx_bytes;
140 } while (u64_stats_fetch_retry_bh(&tstats->syncp, start));
142 tot->rx_packets += rx_packets;
143 tot->tx_packets += tx_packets;
144 tot->rx_bytes += rx_bytes;
145 tot->tx_bytes += tx_bytes;
148 tot->multicast = dev->stats.multicast;
150 tot->rx_crc_errors = dev->stats.rx_crc_errors;
151 tot->rx_fifo_errors = dev->stats.rx_fifo_errors;
152 tot->rx_length_errors = dev->stats.rx_length_errors;
153 tot->rx_frame_errors = dev->stats.rx_frame_errors;
154 tot->rx_errors = dev->stats.rx_errors;
156 tot->tx_fifo_errors = dev->stats.tx_fifo_errors;
157 tot->tx_carrier_errors = dev->stats.tx_carrier_errors;
158 tot->tx_dropped = dev->stats.tx_dropped;
159 tot->tx_aborted_errors = dev->stats.tx_aborted_errors;
160 tot->tx_errors = dev->stats.tx_errors;
162 tot->collisions = dev->stats.collisions;
166 EXPORT_SYMBOL_GPL(ip_tunnel_get_stats64);
168 static bool ip_tunnel_key_match(const struct ip_tunnel_parm *p,
169 __be16 flags, __be32 key)
171 if (p->i_flags & TUNNEL_KEY) {
172 if (flags & TUNNEL_KEY)
173 return key == p->i_key;
175 /* key expected, none present */
178 return !(flags & TUNNEL_KEY);
181 /* Fallback tunnel: no source, no destination, no key, no options
184 We require exact key match i.e. if a key is present in packet
185 it will match only tunnel with the same key; if it is not present,
186 it will match only keyless tunnel.
188 All keysless packets, if not matched configured keyless tunnels
189 will match fallback tunnel.
190 Given src, dst and key, find appropriate for input tunnel.
192 struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
193 int link, __be16 flags,
194 __be32 remote, __be32 local,
198 struct ip_tunnel *t, *cand = NULL;
199 struct hlist_head *head;
201 hash = ip_tunnel_hash(key, remote);
202 head = &itn->tunnels[hash];
204 hlist_for_each_entry_rcu(t, head, hash_node) {
205 if (local != t->parms.iph.saddr ||
206 remote != t->parms.iph.daddr ||
207 !(t->dev->flags & IFF_UP))
210 if (!ip_tunnel_key_match(&t->parms, flags, key))
213 if (t->parms.link == link)
219 hlist_for_each_entry_rcu(t, head, hash_node) {
220 if (remote != t->parms.iph.daddr ||
221 !(t->dev->flags & IFF_UP))
224 if (!ip_tunnel_key_match(&t->parms, flags, key))
227 if (t->parms.link == link)
233 hash = ip_tunnel_hash(key, 0);
234 head = &itn->tunnels[hash];
236 hlist_for_each_entry_rcu(t, head, hash_node) {
237 if ((local != t->parms.iph.saddr &&
238 (local != t->parms.iph.daddr ||
239 !ipv4_is_multicast(local))) ||
240 !(t->dev->flags & IFF_UP))
243 if (!ip_tunnel_key_match(&t->parms, flags, key))
246 if (t->parms.link == link)
252 if (flags & TUNNEL_NO_KEY)
253 goto skip_key_lookup;
255 hlist_for_each_entry_rcu(t, head, hash_node) {
256 if (t->parms.i_key != key ||
257 !(t->dev->flags & IFF_UP))
260 if (t->parms.link == link)
270 if (itn->fb_tunnel_dev && itn->fb_tunnel_dev->flags & IFF_UP)
271 return netdev_priv(itn->fb_tunnel_dev);
276 EXPORT_SYMBOL_GPL(ip_tunnel_lookup);
278 static struct hlist_head *ip_bucket(struct ip_tunnel_net *itn,
279 struct ip_tunnel_parm *parms)
284 if (parms->iph.daddr && !ipv4_is_multicast(parms->iph.daddr))
285 remote = parms->iph.daddr;
289 h = ip_tunnel_hash(parms->i_key, remote);
290 return &itn->tunnels[h];
293 static void ip_tunnel_add(struct ip_tunnel_net *itn, struct ip_tunnel *t)
295 struct hlist_head *head = ip_bucket(itn, &t->parms);
297 hlist_add_head_rcu(&t->hash_node, head);
300 static void ip_tunnel_del(struct ip_tunnel *t)
302 hlist_del_init_rcu(&t->hash_node);
305 static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
306 struct ip_tunnel_parm *parms,
309 __be32 remote = parms->iph.daddr;
310 __be32 local = parms->iph.saddr;
311 __be32 key = parms->i_key;
312 int link = parms->link;
313 struct ip_tunnel *t = NULL;
314 struct hlist_head *head = ip_bucket(itn, parms);
316 hlist_for_each_entry_rcu(t, head, hash_node) {
317 if (local == t->parms.iph.saddr &&
318 remote == t->parms.iph.daddr &&
319 key == t->parms.i_key &&
320 link == t->parms.link &&
321 type == t->dev->type)
327 static struct net_device *__ip_tunnel_create(struct net *net,
328 const struct rtnl_link_ops *ops,
329 struct ip_tunnel_parm *parms)
332 struct ip_tunnel *tunnel;
333 struct net_device *dev;
337 strlcpy(name, parms->name, IFNAMSIZ);
339 if (strlen(ops->kind) > (IFNAMSIZ - 3)) {
343 strlcpy(name, ops->kind, IFNAMSIZ);
344 strncat(name, "%d", 2);
348 dev = alloc_netdev(ops->priv_size, name, ops->setup);
353 dev_net_set(dev, net);
355 dev->rtnl_link_ops = ops;
357 tunnel = netdev_priv(dev);
358 tunnel->parms = *parms;
361 err = register_netdevice(dev);
373 static inline void init_tunnel_flow(struct flowi4 *fl4,
375 __be32 daddr, __be32 saddr,
376 __be32 key, __u8 tos, int oif)
378 memset(fl4, 0, sizeof(*fl4));
379 fl4->flowi4_oif = oif;
382 fl4->flowi4_tos = tos;
383 fl4->flowi4_proto = proto;
384 fl4->fl4_gre_key = key;
387 static int ip_tunnel_bind_dev(struct net_device *dev)
389 struct net_device *tdev = NULL;
390 struct ip_tunnel *tunnel = netdev_priv(dev);
391 const struct iphdr *iph;
392 int hlen = LL_MAX_HEADER;
393 int mtu = ETH_DATA_LEN;
394 int t_hlen = tunnel->hlen + sizeof(struct iphdr);
396 iph = &tunnel->parms.iph;
398 /* Guess output device to choose reasonable mtu and needed_headroom */
403 init_tunnel_flow(&fl4, iph->protocol, iph->daddr,
404 iph->saddr, tunnel->parms.o_key,
405 RT_TOS(iph->tos), tunnel->parms.link);
406 rt = ip_route_output_key(tunnel->net, &fl4);
410 tunnel_dst_set(tunnel, &rt->dst);
413 if (dev->type != ARPHRD_ETHER)
414 dev->flags |= IFF_POINTOPOINT;
417 if (!tdev && tunnel->parms.link)
418 tdev = __dev_get_by_index(tunnel->net, tunnel->parms.link);
421 hlen = tdev->hard_header_len + tdev->needed_headroom;
424 dev->iflink = tunnel->parms.link;
426 dev->needed_headroom = t_hlen + hlen;
427 mtu -= (dev->hard_header_len + t_hlen);
435 static struct ip_tunnel *ip_tunnel_create(struct net *net,
436 struct ip_tunnel_net *itn,
437 struct ip_tunnel_parm *parms)
439 struct ip_tunnel *nt, *fbt;
440 struct net_device *dev;
442 BUG_ON(!itn->fb_tunnel_dev);
443 fbt = netdev_priv(itn->fb_tunnel_dev);
444 dev = __ip_tunnel_create(net, itn->fb_tunnel_dev->rtnl_link_ops, parms);
448 dev->mtu = ip_tunnel_bind_dev(dev);
450 nt = netdev_priv(dev);
451 ip_tunnel_add(itn, nt);
455 int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
456 const struct tnl_ptk_info *tpi, bool log_ecn_error)
458 struct pcpu_sw_netstats *tstats;
459 const struct iphdr *iph = ip_hdr(skb);
462 #ifdef CONFIG_NET_IPGRE_BROADCAST
463 if (ipv4_is_multicast(iph->daddr)) {
464 /* Looped back packet, drop it! */
465 if (rt_is_output_route(skb_rtable(skb)))
467 tunnel->dev->stats.multicast++;
468 skb->pkt_type = PACKET_BROADCAST;
472 if ((!(tpi->flags&TUNNEL_CSUM) && (tunnel->parms.i_flags&TUNNEL_CSUM)) ||
473 ((tpi->flags&TUNNEL_CSUM) && !(tunnel->parms.i_flags&TUNNEL_CSUM))) {
474 tunnel->dev->stats.rx_crc_errors++;
475 tunnel->dev->stats.rx_errors++;
479 if (tunnel->parms.i_flags&TUNNEL_SEQ) {
480 if (!(tpi->flags&TUNNEL_SEQ) ||
481 (tunnel->i_seqno && (s32)(ntohl(tpi->seq) - tunnel->i_seqno) < 0)) {
482 tunnel->dev->stats.rx_fifo_errors++;
483 tunnel->dev->stats.rx_errors++;
486 tunnel->i_seqno = ntohl(tpi->seq) + 1;
489 err = IP_ECN_decapsulate(iph, skb);
492 net_info_ratelimited("non-ECT from %pI4 with TOS=%#x\n",
493 &iph->saddr, iph->tos);
495 ++tunnel->dev->stats.rx_frame_errors;
496 ++tunnel->dev->stats.rx_errors;
501 tstats = this_cpu_ptr(tunnel->dev->tstats);
502 u64_stats_update_begin(&tstats->syncp);
503 tstats->rx_packets++;
504 tstats->rx_bytes += skb->len;
505 u64_stats_update_end(&tstats->syncp);
507 skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(tunnel->dev)));
509 if (tunnel->dev->type == ARPHRD_ETHER) {
510 skb->protocol = eth_type_trans(skb, tunnel->dev);
511 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
513 skb->dev = tunnel->dev;
516 gro_cells_receive(&tunnel->gro_cells, skb);
523 EXPORT_SYMBOL_GPL(ip_tunnel_rcv);
525 static int tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb,
526 struct rtable *rt, __be16 df)
528 struct ip_tunnel *tunnel = netdev_priv(dev);
529 int pkt_size = skb->len - tunnel->hlen - dev->hard_header_len;
533 mtu = dst_mtu(&rt->dst) - dev->hard_header_len
534 - sizeof(struct iphdr) - tunnel->hlen;
536 mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
539 skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu);
541 if (skb->protocol == htons(ETH_P_IP)) {
542 if (!skb_is_gso(skb) &&
543 (df & htons(IP_DF)) && mtu < pkt_size) {
544 memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
545 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu));
549 #if IS_ENABLED(CONFIG_IPV6)
550 else if (skb->protocol == htons(ETH_P_IPV6)) {
551 struct rt6_info *rt6 = (struct rt6_info *)skb_dst(skb);
553 if (rt6 && mtu < dst_mtu(skb_dst(skb)) &&
554 mtu >= IPV6_MIN_MTU) {
555 if ((tunnel->parms.iph.daddr &&
556 !ipv4_is_multicast(tunnel->parms.iph.daddr)) ||
557 rt6->rt6i_dst.plen == 128) {
558 rt6->rt6i_flags |= RTF_MODIFIED;
559 dst_metric_set(skb_dst(skb), RTAX_MTU, mtu);
563 if (!skb_is_gso(skb) && mtu >= IPV6_MIN_MTU &&
565 icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
573 void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
574 const struct iphdr *tnl_params, const u8 protocol)
576 struct ip_tunnel *tunnel = netdev_priv(dev);
577 const struct iphdr *inner_iph;
581 struct rtable *rt; /* Route to the other host */
582 unsigned int max_headroom; /* The extra header space needed */
585 bool connected = true;
587 inner_iph = (const struct iphdr *)skb_inner_network_header(skb);
589 dst = tnl_params->daddr;
593 if (skb_dst(skb) == NULL) {
594 dev->stats.tx_fifo_errors++;
598 if (skb->protocol == htons(ETH_P_IP)) {
599 rt = skb_rtable(skb);
600 dst = rt_nexthop(rt, inner_iph->daddr);
602 #if IS_ENABLED(CONFIG_IPV6)
603 else if (skb->protocol == htons(ETH_P_IPV6)) {
604 const struct in6_addr *addr6;
605 struct neighbour *neigh;
606 bool do_tx_error_icmp;
609 neigh = dst_neigh_lookup(skb_dst(skb),
610 &ipv6_hdr(skb)->daddr);
614 addr6 = (const struct in6_addr *)&neigh->primary_key;
615 addr_type = ipv6_addr_type(addr6);
617 if (addr_type == IPV6_ADDR_ANY) {
618 addr6 = &ipv6_hdr(skb)->daddr;
619 addr_type = ipv6_addr_type(addr6);
622 if ((addr_type & IPV6_ADDR_COMPATv4) == 0)
623 do_tx_error_icmp = true;
625 do_tx_error_icmp = false;
626 dst = addr6->s6_addr32[3];
628 neigh_release(neigh);
629 if (do_tx_error_icmp)
639 tos = tnl_params->tos;
642 if (skb->protocol == htons(ETH_P_IP)) {
643 tos = inner_iph->tos;
645 } else if (skb->protocol == htons(ETH_P_IPV6)) {
646 tos = ipv6_get_dsfield((const struct ipv6hdr *)inner_iph);
651 init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr,
652 tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link);
654 rt = connected ? tunnel_rtable_get(tunnel, 0) : NULL;
657 rt = ip_route_output_key(tunnel->net, &fl4);
660 dev->stats.tx_carrier_errors++;
664 tunnel_dst_set(tunnel, &rt->dst);
667 if (rt->dst.dev == dev) {
669 dev->stats.collisions++;
673 if (tnl_update_pmtu(dev, skb, rt, tnl_params->frag_off)) {
678 if (tunnel->err_count > 0) {
679 if (time_before(jiffies,
680 tunnel->err_time + IPTUNNEL_ERR_TIMEO)) {
683 memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
684 dst_link_failure(skb);
686 tunnel->err_count = 0;
689 tos = ip_tunnel_ecn_encap(tos, inner_iph, skb);
690 ttl = tnl_params->ttl;
692 if (skb->protocol == htons(ETH_P_IP))
693 ttl = inner_iph->ttl;
694 #if IS_ENABLED(CONFIG_IPV6)
695 else if (skb->protocol == htons(ETH_P_IPV6))
696 ttl = ((const struct ipv6hdr *)inner_iph)->hop_limit;
699 ttl = ip4_dst_hoplimit(&rt->dst);
702 df = tnl_params->frag_off;
703 if (skb->protocol == htons(ETH_P_IP))
704 df |= (inner_iph->frag_off&htons(IP_DF));
706 max_headroom = LL_RESERVED_SPACE(rt->dst.dev) + sizeof(struct iphdr)
707 + rt->dst.header_len;
708 if (max_headroom > dev->needed_headroom)
709 dev->needed_headroom = max_headroom;
711 if (skb_cow_head(skb, dev->needed_headroom)) {
712 dev->stats.tx_dropped++;
717 err = iptunnel_xmit(rt, skb, fl4.saddr, fl4.daddr, protocol,
718 tos, ttl, df, !net_eq(tunnel->net, dev_net(dev)));
719 iptunnel_xmit_stats(err, &dev->stats, dev->tstats);
723 #if IS_ENABLED(CONFIG_IPV6)
725 dst_link_failure(skb);
728 dev->stats.tx_errors++;
731 EXPORT_SYMBOL_GPL(ip_tunnel_xmit);
733 static void ip_tunnel_update(struct ip_tunnel_net *itn,
735 struct net_device *dev,
736 struct ip_tunnel_parm *p,
740 t->parms.iph.saddr = p->iph.saddr;
741 t->parms.iph.daddr = p->iph.daddr;
742 t->parms.i_key = p->i_key;
743 t->parms.o_key = p->o_key;
744 if (dev->type != ARPHRD_ETHER) {
745 memcpy(dev->dev_addr, &p->iph.saddr, 4);
746 memcpy(dev->broadcast, &p->iph.daddr, 4);
748 ip_tunnel_add(itn, t);
750 t->parms.iph.ttl = p->iph.ttl;
751 t->parms.iph.tos = p->iph.tos;
752 t->parms.iph.frag_off = p->iph.frag_off;
754 if (t->parms.link != p->link) {
757 t->parms.link = p->link;
758 mtu = ip_tunnel_bind_dev(dev);
762 tunnel_dst_reset_all(t);
763 netdev_state_change(dev);
766 int ip_tunnel_ioctl(struct net_device *dev, struct ip_tunnel_parm *p, int cmd)
770 struct net *net = dev_net(dev);
771 struct ip_tunnel *tunnel = netdev_priv(dev);
772 struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id);
774 BUG_ON(!itn->fb_tunnel_dev);
778 if (dev == itn->fb_tunnel_dev)
779 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
781 t = netdev_priv(dev);
782 memcpy(p, &t->parms, sizeof(*p));
788 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
791 p->iph.frag_off |= htons(IP_DF);
792 if (!(p->i_flags&TUNNEL_KEY))
794 if (!(p->o_flags&TUNNEL_KEY))
797 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
799 if (!t && (cmd == SIOCADDTUNNEL))
800 t = ip_tunnel_create(net, itn, p);
802 if (dev != itn->fb_tunnel_dev && cmd == SIOCCHGTUNNEL) {
809 unsigned int nflags = 0;
811 if (ipv4_is_multicast(p->iph.daddr))
812 nflags = IFF_BROADCAST;
813 else if (p->iph.daddr)
814 nflags = IFF_POINTOPOINT;
816 if ((dev->flags^nflags)&(IFF_POINTOPOINT|IFF_BROADCAST)) {
821 t = netdev_priv(dev);
827 ip_tunnel_update(itn, t, dev, p, true);
829 err = (cmd == SIOCADDTUNNEL ? -ENOBUFS : -ENOENT);
834 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
837 if (dev == itn->fb_tunnel_dev) {
839 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
843 if (t == netdev_priv(itn->fb_tunnel_dev))
847 unregister_netdevice(dev);
858 EXPORT_SYMBOL_GPL(ip_tunnel_ioctl);
860 int ip_tunnel_change_mtu(struct net_device *dev, int new_mtu)
862 struct ip_tunnel *tunnel = netdev_priv(dev);
863 int t_hlen = tunnel->hlen + sizeof(struct iphdr);
866 new_mtu > 0xFFF8 - dev->hard_header_len - t_hlen)
871 EXPORT_SYMBOL_GPL(ip_tunnel_change_mtu);
873 static void ip_tunnel_dev_free(struct net_device *dev)
875 struct ip_tunnel *tunnel = netdev_priv(dev);
877 gro_cells_destroy(&tunnel->gro_cells);
878 free_percpu(tunnel->dst_cache);
879 free_percpu(dev->tstats);
883 void ip_tunnel_dellink(struct net_device *dev, struct list_head *head)
885 struct ip_tunnel *tunnel = netdev_priv(dev);
886 struct ip_tunnel_net *itn;
888 itn = net_generic(tunnel->net, tunnel->ip_tnl_net_id);
890 if (itn->fb_tunnel_dev != dev) {
891 ip_tunnel_del(netdev_priv(dev));
892 unregister_netdevice_queue(dev, head);
895 EXPORT_SYMBOL_GPL(ip_tunnel_dellink);
897 int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
898 struct rtnl_link_ops *ops, char *devname)
900 struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id);
901 struct ip_tunnel_parm parms;
904 for (i = 0; i < IP_TNL_HASH_SIZE; i++)
905 INIT_HLIST_HEAD(&itn->tunnels[i]);
908 itn->fb_tunnel_dev = NULL;
912 memset(&parms, 0, sizeof(parms));
914 strlcpy(parms.name, devname, IFNAMSIZ);
917 itn->fb_tunnel_dev = __ip_tunnel_create(net, ops, &parms);
918 /* FB netdevice is special: we have one, and only one per netns.
919 * Allowing to move it to another netns is clearly unsafe.
921 if (!IS_ERR(itn->fb_tunnel_dev)) {
922 itn->fb_tunnel_dev->features |= NETIF_F_NETNS_LOCAL;
923 ip_tunnel_add(itn, netdev_priv(itn->fb_tunnel_dev));
927 return PTR_ERR_OR_ZERO(itn->fb_tunnel_dev);
929 EXPORT_SYMBOL_GPL(ip_tunnel_init_net);
931 static void ip_tunnel_destroy(struct ip_tunnel_net *itn, struct list_head *head,
932 struct rtnl_link_ops *ops)
934 struct net *net = dev_net(itn->fb_tunnel_dev);
935 struct net_device *dev, *aux;
938 for_each_netdev_safe(net, dev, aux)
939 if (dev->rtnl_link_ops == ops)
940 unregister_netdevice_queue(dev, head);
942 for (h = 0; h < IP_TNL_HASH_SIZE; h++) {
944 struct hlist_node *n;
945 struct hlist_head *thead = &itn->tunnels[h];
947 hlist_for_each_entry_safe(t, n, thead, hash_node)
948 /* If dev is in the same netns, it has already
949 * been added to the list by the previous loop.
951 if (!net_eq(dev_net(t->dev), net))
952 unregister_netdevice_queue(t->dev, head);
956 void ip_tunnel_delete_net(struct ip_tunnel_net *itn, struct rtnl_link_ops *ops)
961 ip_tunnel_destroy(itn, &list, ops);
962 unregister_netdevice_many(&list);
965 EXPORT_SYMBOL_GPL(ip_tunnel_delete_net);
967 int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
968 struct ip_tunnel_parm *p)
970 struct ip_tunnel *nt;
971 struct net *net = dev_net(dev);
972 struct ip_tunnel_net *itn;
976 nt = netdev_priv(dev);
977 itn = net_generic(net, nt->ip_tnl_net_id);
979 if (ip_tunnel_find(itn, p, dev->type))
984 err = register_netdevice(dev);
988 if (dev->type == ARPHRD_ETHER && !tb[IFLA_ADDRESS])
989 eth_hw_addr_random(dev);
991 mtu = ip_tunnel_bind_dev(dev);
995 ip_tunnel_add(itn, nt);
1000 EXPORT_SYMBOL_GPL(ip_tunnel_newlink);
1002 int ip_tunnel_changelink(struct net_device *dev, struct nlattr *tb[],
1003 struct ip_tunnel_parm *p)
1005 struct ip_tunnel *t;
1006 struct ip_tunnel *tunnel = netdev_priv(dev);
1007 struct net *net = tunnel->net;
1008 struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id);
1010 if (dev == itn->fb_tunnel_dev)
1013 t = ip_tunnel_find(itn, p, dev->type);
1021 if (dev->type != ARPHRD_ETHER) {
1022 unsigned int nflags = 0;
1024 if (ipv4_is_multicast(p->iph.daddr))
1025 nflags = IFF_BROADCAST;
1026 else if (p->iph.daddr)
1027 nflags = IFF_POINTOPOINT;
1029 if ((dev->flags ^ nflags) &
1030 (IFF_POINTOPOINT | IFF_BROADCAST))
1035 ip_tunnel_update(itn, t, dev, p, !tb[IFLA_MTU]);
1038 EXPORT_SYMBOL_GPL(ip_tunnel_changelink);
1040 int ip_tunnel_init(struct net_device *dev)
1042 struct ip_tunnel *tunnel = netdev_priv(dev);
1043 struct iphdr *iph = &tunnel->parms.iph;
1046 dev->destructor = ip_tunnel_dev_free;
1047 dev->tstats = alloc_percpu(struct pcpu_sw_netstats);
1051 for_each_possible_cpu(i) {
1052 struct pcpu_sw_netstats *ipt_stats;
1053 ipt_stats = per_cpu_ptr(dev->tstats, i);
1054 u64_stats_init(&ipt_stats->syncp);
1057 tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst);
1058 if (!tunnel->dst_cache) {
1059 free_percpu(dev->tstats);
1063 err = gro_cells_init(&tunnel->gro_cells, dev);
1065 free_percpu(tunnel->dst_cache);
1066 free_percpu(dev->tstats);
1071 tunnel->net = dev_net(dev);
1072 strcpy(tunnel->parms.name, dev->name);
1078 EXPORT_SYMBOL_GPL(ip_tunnel_init);
1080 void ip_tunnel_uninit(struct net_device *dev)
1082 struct ip_tunnel *tunnel = netdev_priv(dev);
1083 struct net *net = tunnel->net;
1084 struct ip_tunnel_net *itn;
1086 itn = net_generic(net, tunnel->ip_tnl_net_id);
1087 /* fb_tunnel_dev will be unregisted in net-exit call. */
1088 if (itn->fb_tunnel_dev != dev)
1089 ip_tunnel_del(netdev_priv(dev));
1091 tunnel_dst_reset_all(tunnel);
1093 EXPORT_SYMBOL_GPL(ip_tunnel_uninit);
1095 /* Do least required initialization, rest of init is done in tunnel_init call */
1096 void ip_tunnel_setup(struct net_device *dev, int net_id)
1098 struct ip_tunnel *tunnel = netdev_priv(dev);
1099 tunnel->ip_tnl_net_id = net_id;
1101 EXPORT_SYMBOL_GPL(ip_tunnel_setup);
1103 MODULE_LICENSE("GPL");