gre: Allow IPv6 ToS bits to be propagated to tunnel packets.
[sliver-openvswitch.git] / datapath / linux-2.6 / compat-2.6 / ip_gre.c
1 /* ip_gre driver port to Linux 2.6.18 and greater */
2
3 #include <linux/version.h>
4 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
5 #define HAVE_NETDEV_STATS
6 #endif
7 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
8 #define HAVE_NETDEV_HEADER_OPS
9 #endif
10 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
11 #define HAVE_NETDEV_NEEDED_HEADROOM
12 #endif
13
14 /*
15  *      Linux NET3:     GRE over IP protocol decoder.
16  *
17  *      Authors: Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
18  *
19  *      This program is free software; you can redistribute it and/or
20  *      modify it under the terms of the GNU General Public License
21  *      as published by the Free Software Foundation; either version
22  *      2 of the License, or (at your option) any later version.
23  *
24  */
25
26 #include <linux/capability.h>
27 #include <linux/ethtool.h>
28 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/kernel.h>
31 #include <asm/uaccess.h>
32 #include <linux/skbuff.h>
33 #include <linux/netdevice.h>
34 #include <linux/in.h>
35 #include <linux/tcp.h>
36 #include <linux/udp.h>
37 #include <linux/if_arp.h>
38 #include <linux/mroute.h>
39 #include <linux/init.h>
40 #include <linux/in6.h>
41 #include <linux/inetdevice.h>
42 #include <linux/igmp.h>
43 #include <linux/netfilter_ipv4.h>
44 #include <linux/etherdevice.h>
45 #include <linux/if_ether.h>
46
47 #include <net/sock.h>
48 #include <net/ip.h>
49 #include <net/icmp.h>
50 #include <net/protocol.h>
51 #include <net/ipip.h>
52 #include <net/arp.h>
53 #include <net/checksum.h>
54 #include <net/dsfield.h>
55 #include <net/inet_ecn.h>
56 #include <net/xfrm.h>
57 #include <net/net_namespace.h>
58 #include <net/netns/generic.h>
59
60 #ifdef CONFIG_IPV6
61 #include <net/ipv6.h>
62 #include <net/ip6_fib.h>
63 #include <net/ip6_route.h>
64 #endif
65
66 #include "compat.h"
67 #include "openvswitch/gre.h"
68
69 #ifndef GRE_IOCTL_ONLY
70 #include <net/rtnetlink.h>
71 #endif
72
73 /*
74    Problems & solutions
75    --------------------
76
77    1. The most important issue is detecting local dead loops.
78    They would cause complete host lockup in transmit, which
79    would be "resolved" by stack overflow or, if queueing is enabled,
80    with infinite looping in net_bh.
81
82    We cannot track such dead loops during route installation,
83    it is infeasible task. The most general solutions would be
84    to keep skb->encapsulation counter (sort of local ttl),
85    and silently drop packet when it expires. It is the best
86    solution, but it supposes maintaing new variable in ALL
87    skb, even if no tunneling is used.
88
89    Current solution: HARD_TX_LOCK lock breaks dead loops.
90
91
92
93    2. Networking dead loops would not kill routers, but would really
94    kill network. IP hop limit plays role of "t->recursion" in this case,
95    if we copy it from packet being encapsulated to upper header.
96    It is very good solution, but it introduces two problems:
97
98    - Routing protocols, using packets with ttl=1 (OSPF, RIP2),
99      do not work over tunnels.
100    - traceroute does not work. I planned to relay ICMP from tunnel,
101      so that this problem would be solved and traceroute output
102      would even more informative. This idea appeared to be wrong:
103      only Linux complies to rfc1812 now (yes, guys, Linux is the only
104      true router now :-)), all routers (at least, in neighbourhood of mine)
105      return only 8 bytes of payload. It is the end.
106
107    Hence, if we want that OSPF worked or traceroute said something reasonable,
108    we should search for another solution.
109
110    One of them is to parse packet trying to detect inner encapsulation
111    made by our node. It is difficult or even impossible, especially,
112    taking into account fragmentation. TO be short, tt is not solution at all.
113
114    Current solution: The solution was UNEXPECTEDLY SIMPLE.
115    We force DF flag on tunnels with preconfigured hop limit,
116    that is ALL. :-) Well, it does not remove the problem completely,
117    but exponential growth of network traffic is changed to linear
118    (branches, that exceed pmtu are pruned) and tunnel mtu
119    fastly degrades to value <68, where looping stops.
120    Yes, it is not good if there exists a router in the loop,
121    which does not force DF, even when encapsulating packets have DF set.
122    But it is not our problem! Nobody could accuse us, we made
123    all that we could make. Even if it is your gated who injected
124    fatal route to network, even if it were you who configured
125    fatal static route: you are innocent. :-)
126
127    XXX: Forcing the DF flag on was done only when setting up tunnels via the
128         ioctl interface and not Netlink.  Since it prevents some operations
129         and isn't very transparent I removed it.  It seems nobody really
130         cared about it anyways.
131         Moral: don't create loops.
132
133    3. Really, ipv4/ipip.c, ipv4/ip_gre.c and ipv6/sit.c contain
134    practically identical code. It would be good to glue them
135    together, but it is not very evident, how to make them modular.
136    sit is integral part of IPv6, ipip and gre are naturally modular.
137    We could extract common parts (hash table, ioctl etc)
138    to a separate module (ip_tunnel.c).
139
140    Alexey Kuznetsov.
141  */
142
143 #ifndef GRE_IOCTL_ONLY
144 static struct rtnl_link_ops ipgre_link_ops __read_mostly;
145 static struct rtnl_link_ops ipgre_tap_ops __read_mostly;
146 #endif
147 static int ipgre_tunnel_init(struct net_device *dev);
148 static void ipgre_tunnel_setup(struct net_device *dev);
149 static void ipgre_tap_setup(struct net_device *dev);
150 static int ipgre_tunnel_bind_dev(struct net_device *dev);
151
152 #define HASH_SIZE  16
153
154 static int ipgre_net_id __read_mostly;
155 struct ipgre_net {
156         struct ip_tunnel *tunnels[4][HASH_SIZE];
157
158         struct net_device *fb_tunnel_dev;
159 };
160
161 /* Tunnel hash table */
162
163 /*
164    4 hash tables:
165
166    3: (remote,local)
167    2: (remote,*)
168    1: (*,local)
169    0: (*,*)
170
171    We require exact key match i.e. if a key is present in packet
172    it will match only tunnel with the same key; if it is not present,
173    it will match only keyless tunnel.
174
175    All keysless packets, if not matched configured keyless tunnels
176    will match fallback tunnel.
177  */
178
179 #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF)
180
181 #define tunnels_r_l     tunnels[3]
182 #define tunnels_r       tunnels[2]
183 #define tunnels_l       tunnels[1]
184 #define tunnels_wc      tunnels[0]
185 /*
186  * Locking : hash tables are protected by RCU and a spinlock
187  */
188 static DEFINE_SPINLOCK(ipgre_lock);
189
190 #define for_each_ip_tunnel_rcu(start) \
191         for (t = rcu_dereference(start); t; t = rcu_dereference(t->next))
192
193 /* Given src, dst and key, find appropriate for input tunnel. */
194
195 static struct ip_tunnel * ipgre_tunnel_lookup(struct net_device *dev,
196                                               __be32 remote, __be32 local,
197                                               __be32 key, __be16 gre_proto)
198 {
199         struct net *net = dev_net(dev);
200         int link = dev->ifindex;
201         unsigned h0 = HASH(remote);
202         unsigned h1 = HASH(key);
203         struct ip_tunnel *t, *cand = NULL;
204         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
205         int dev_type = (gre_proto == htons(ETH_P_TEB)) ?
206                        ARPHRD_ETHER : ARPHRD_IPGRE;
207         int score, cand_score = 4;
208
209         for_each_ip_tunnel_rcu(ign->tunnels_r_l[h0 ^ h1]) {
210                 if (local != t->parms.iph.saddr ||
211                     remote != t->parms.iph.daddr ||
212                     key != t->parms.i_key ||
213                     !(t->dev->flags & IFF_UP))
214                         continue;
215
216                 if (t->dev->type != ARPHRD_IPGRE &&
217                     t->dev->type != dev_type)
218                         continue;
219
220                 score = 0;
221                 if (t->parms.link != link)
222                         score |= 1;
223                 if (t->dev->type != dev_type)
224                         score |= 2;
225                 if (score == 0)
226                         return t;
227
228                 if (score < cand_score) {
229                         cand = t;
230                         cand_score = score;
231                 }
232         }
233
234         for_each_ip_tunnel_rcu(ign->tunnels_r[h0 ^ h1]) {
235                 if (remote != t->parms.iph.daddr ||
236                     key != t->parms.i_key ||
237                     !(t->dev->flags & IFF_UP))
238                         continue;
239
240                 if (t->dev->type != ARPHRD_IPGRE &&
241                     t->dev->type != dev_type)
242                         continue;
243
244                 score = 0;
245                 if (t->parms.link != link)
246                         score |= 1;
247                 if (t->dev->type != dev_type)
248                         score |= 2;
249                 if (score == 0)
250                         return t;
251
252                 if (score < cand_score) {
253                         cand = t;
254                         cand_score = score;
255                 }
256         }
257
258         for_each_ip_tunnel_rcu(ign->tunnels_l[h1]) {
259                 if ((local != t->parms.iph.saddr &&
260                      (local != t->parms.iph.daddr ||
261                       !ipv4_is_multicast(local))) ||
262                     key != t->parms.i_key ||
263                     !(t->dev->flags & IFF_UP))
264                         continue;
265
266                 if (t->dev->type != ARPHRD_IPGRE &&
267                     t->dev->type != dev_type)
268                         continue;
269
270                 score = 0;
271                 if (t->parms.link != link)
272                         score |= 1;
273                 if (t->dev->type != dev_type)
274                         score |= 2;
275                 if (score == 0)
276                         return t;
277
278                 if (score < cand_score) {
279                         cand = t;
280                         cand_score = score;
281                 }
282         }
283
284         for_each_ip_tunnel_rcu(ign->tunnels_wc[h1]) {
285                 if (t->parms.i_key != key ||
286                     !(t->dev->flags & IFF_UP))
287                         continue;
288
289                 if (t->dev->type != ARPHRD_IPGRE &&
290                     t->dev->type != dev_type)
291                         continue;
292
293                 score = 0;
294                 if (t->parms.link != link)
295                         score |= 1;
296                 if (t->dev->type != dev_type)
297                         score |= 2;
298                 if (score == 0)
299                         return t;
300
301                 if (score < cand_score) {
302                         cand = t;
303                         cand_score = score;
304                 }
305         }
306
307         if (cand != NULL)
308                 return cand;
309
310         dev = ign->fb_tunnel_dev;
311         if (dev->flags & IFF_UP)
312                 return netdev_priv(dev);
313
314         return NULL;
315 }
316
317 static struct ip_tunnel **__ipgre_bucket(struct ipgre_net *ign,
318                 struct ip_tunnel_parm *parms)
319 {
320         __be32 remote = parms->iph.daddr;
321         __be32 local = parms->iph.saddr;
322         __be32 key = parms->i_key;
323         unsigned h = HASH(key);
324         int prio = 0;
325
326         if (local)
327                 prio |= 1;
328         if (remote && !ipv4_is_multicast(remote)) {
329                 prio |= 2;
330                 h ^= HASH(remote);
331         }
332
333         return &ign->tunnels[prio][h];
334 }
335
336 static inline struct ip_tunnel **ipgre_bucket(struct ipgre_net *ign,
337                 struct ip_tunnel *t)
338 {
339         return __ipgre_bucket(ign, &t->parms);
340 }
341
342 static void ipgre_tunnel_link(struct ipgre_net *ign, struct ip_tunnel *t)
343 {
344         struct ip_tunnel **tp = ipgre_bucket(ign, t);
345
346         spin_lock_bh(&ipgre_lock);
347         t->next = *tp;
348         rcu_assign_pointer(*tp, t);
349         spin_unlock_bh(&ipgre_lock);
350 }
351
352 static void ipgre_tunnel_unlink(struct ipgre_net *ign, struct ip_tunnel *t)
353 {
354         struct ip_tunnel **tp;
355
356         for (tp = ipgre_bucket(ign, t); *tp; tp = &(*tp)->next) {
357                 if (t == *tp) {
358                         spin_lock_bh(&ipgre_lock);
359                         *tp = t->next;
360                         spin_unlock_bh(&ipgre_lock);
361                         break;
362                 }
363         }
364 }
365
366 static struct ip_tunnel *ipgre_tunnel_find(struct net *net,
367                                            struct ip_tunnel_parm *parms,
368                                            int type)
369 {
370         __be32 remote = parms->iph.daddr;
371         __be32 local = parms->iph.saddr;
372         __be32 key = parms->i_key;
373         int link = parms->link;
374         struct ip_tunnel *t, **tp;
375         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
376
377         for (tp = __ipgre_bucket(ign, parms); (t = *tp) != NULL; tp = &t->next)
378                 if (local == t->parms.iph.saddr &&
379                     remote == t->parms.iph.daddr &&
380                     key == t->parms.i_key &&
381                     link == t->parms.link &&
382                     type == t->dev->type)
383                         break;
384
385         return t;
386 }
387
388 static struct ip_tunnel * ipgre_tunnel_locate(struct net *net,
389                 struct ip_tunnel_parm *parms, int gretap, int create)
390 {
391         struct ip_tunnel *t, *nt;
392         struct net_device *dev;
393         char name[IFNAMSIZ];
394         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
395
396         t = ipgre_tunnel_find(net, parms, gretap ? ARPHRD_ETHER : ARPHRD_IPGRE);
397         if (t || !create)
398                 return t;
399
400         if (parms->name[0])
401                 strlcpy(name, parms->name, IFNAMSIZ);
402         else
403                 sprintf(name, "gre%%d");
404
405         dev = alloc_netdev(sizeof(*t), name, gretap ? ipgre_tap_setup
406                                                     : ipgre_tunnel_setup);
407         if (!dev)
408           return NULL;
409
410         dev_net_set(dev, net);
411
412         if (strchr(name, '%')) {
413                 if (dev_alloc_name(dev, name) < 0)
414                         goto failed_free;
415         }
416
417         if (gretap)
418                 random_ether_addr(dev->dev_addr);
419
420 #ifndef GRE_IOCTL_ONLY
421         dev->rtnl_link_ops = gretap ? &ipgre_tap_ops : &ipgre_link_ops;
422 #endif
423         nt = netdev_priv(dev);
424         nt->parms = *parms;
425
426         dev->mtu = ipgre_tunnel_bind_dev(dev);
427
428         if (register_netdevice(dev) < 0)
429                 goto failed_free;
430
431         dev_hold(dev);
432         ipgre_tunnel_link(ign, nt);
433         return nt;
434
435 failed_free:
436         free_netdev(dev);
437         return NULL;
438 }
439
440 static void ipgre_tunnel_uninit(struct net_device *dev)
441 {
442         struct net *net = dev_net(dev);
443         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
444
445         ipgre_tunnel_unlink(ign, netdev_priv(dev));
446         dev_put(dev);
447 }
448
449
450 static void ipgre_err(struct sk_buff *skb, u32 info)
451 {
452
453 /* All the routers (except for Linux) return only
454    8 bytes of packet payload. It means, that precise relaying of
455    ICMP in the real Internet is absolutely infeasible.
456
457    Moreover, Cisco "wise men" put GRE key to the third word
458    in GRE header. It makes impossible maintaining even soft state for keyed
459    GRE tunnels with enabled checksum. Tell them "thank you".
460
461    Well, I wonder, rfc1812 was written by Cisco employee,
462    what the hell these idiots break standrads established
463    by themself???
464  */
465
466         struct iphdr *iph = (struct iphdr *)skb->data;
467         __be16       *p = (__be16*)(skb->data+(iph->ihl<<2));
468         int grehlen = (iph->ihl<<2) + 4;
469         const int type = icmp_hdr(skb)->type;
470         const int code = icmp_hdr(skb)->code;
471         struct ip_tunnel *t;
472         __be16 flags;
473
474         if (skb_headlen(skb) < grehlen)
475                 return;
476
477         flags = p[0];
478         if (flags&(GRE_CSUM|GRE_KEY|GRE_SEQ|GRE_ROUTING|GRE_VERSION)) {
479                 if (flags&(GRE_VERSION|GRE_ROUTING))
480                         return;
481                 if (flags&GRE_KEY) {
482                         grehlen += 4;
483                         if (flags&GRE_CSUM)
484                                 grehlen += 4;
485                 }
486         }
487
488         /* If only 8 bytes returned, keyed message will be dropped here */
489         if (skb_headlen(skb) < grehlen)
490                 return;
491
492         switch (type) {
493         default:
494         case ICMP_PARAMETERPROB:
495                 return;
496
497         case ICMP_DEST_UNREACH:
498                 switch (code) {
499                 case ICMP_SR_FAILED:
500                 case ICMP_PORT_UNREACH:
501                         /* Impossible event. */
502                         return;
503                 case ICMP_FRAG_NEEDED:
504                         /* Soft state for pmtu is maintained by IP core. */
505                         return;
506                 default:
507                         /* All others are translated to HOST_UNREACH.
508                            rfc2003 contains "deep thoughts" about NET_UNREACH,
509                            I believe they are just ether pollution. --ANK
510                          */
511                         break;
512                 }
513                 break;
514         case ICMP_TIME_EXCEEDED:
515                 if (code != ICMP_EXC_TTL)
516                         return;
517                 break;
518         }
519
520         rcu_read_lock();
521         t = ipgre_tunnel_lookup(skb->dev, iph->daddr, iph->saddr,
522                                 flags & GRE_KEY ?
523                                 *(((__be32 *)p) + (grehlen / 4) - 1) : 0,
524                                 p[1]);
525         if (t == NULL || t->parms.iph.daddr == 0 ||
526             ipv4_is_multicast(t->parms.iph.daddr))
527                 goto out;
528
529         if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED)
530                 goto out;
531
532         if (time_before(jiffies, t->err_time + IPTUNNEL_ERR_TIMEO))
533                 t->err_count++;
534         else
535                 t->err_count = 1;
536         t->err_time = jiffies;
537 out:
538         rcu_read_unlock();
539         return;
540 }
541
542 static inline void ipgre_ecn_decapsulate(struct iphdr *iph, struct sk_buff *skb)
543 {
544         if (INET_ECN_is_ce(iph->tos)) {
545                 if (skb->protocol == htons(ETH_P_IP)) {
546                         if (unlikely(!pskb_may_pull(skb, skb_network_header(skb)
547                             + sizeof(struct iphdr) - skb->data)))
548                                 return;
549
550                         IP_ECN_set_ce(ip_hdr(skb));
551                 } else if (skb->protocol == htons(ETH_P_IPV6)) {
552                         if (unlikely(!pskb_may_pull(skb, skb_network_header(skb)
553                             + sizeof(struct ipv6hdr) - skb->data)))
554                                 return;
555
556                         IP6_ECN_set_ce(ipv6_hdr(skb));
557                 }
558         }
559 }
560
561 static inline u8
562 ipgre_ecn_encapsulate(u8 tos, struct iphdr *old_iph, struct sk_buff *skb)
563 {
564         u8 inner = 0;
565         if (skb->protocol == htons(ETH_P_IP))
566                 inner = old_iph->tos;
567         else if (skb->protocol == htons(ETH_P_IPV6))
568                 inner = ipv6_get_dsfield((struct ipv6hdr *)old_iph);
569         return INET_ECN_encapsulate(tos, inner);
570 }
571
572 static int ipgre_rcv(struct sk_buff *skb)
573 {
574         struct iphdr *iph;
575         u8     *h;
576         __be16    flags;
577         __sum16   csum = 0;
578         __be32 key = 0;
579         u32    seqno = 0;
580         struct ip_tunnel *tunnel;
581         int    offset = 4;
582         __be16 gre_proto;
583         unsigned int len;
584
585         if (!pskb_may_pull(skb, 16))
586                 goto drop_nolock;
587
588         iph = ip_hdr(skb);
589         h = skb->data;
590         flags = *(__be16*)h;
591
592         if (flags&(GRE_CSUM|GRE_KEY|GRE_ROUTING|GRE_SEQ|GRE_VERSION)) {
593                 /* - Version must be 0.
594                    - We do not support routing headers.
595                  */
596                 if (flags&(GRE_VERSION|GRE_ROUTING))
597                         goto drop_nolock;
598
599                 if (flags&GRE_CSUM) {
600                         switch (skb->ip_summed) {
601                         case CHECKSUM_COMPLETE:
602                                 csum = csum_fold(skb->csum);
603                                 if (!csum)
604                                         break;
605                                 /* fall through */
606                         case CHECKSUM_NONE:
607                                 skb->csum = 0;
608                                 csum = __skb_checksum_complete(skb);
609                                 skb->ip_summed = CHECKSUM_COMPLETE;
610                         }
611                         offset += 4;
612                 }
613                 if (flags&GRE_KEY) {
614                         key = *(__be32*)(h + offset);
615                         offset += 4;
616                 }
617                 if (flags&GRE_SEQ) {
618                         seqno = ntohl(*(__be32*)(h + offset));
619                         offset += 4;
620                 }
621         }
622
623         gre_proto = *(__be16 *)(h + 2);
624
625         rcu_read_lock();
626         if ((tunnel = ipgre_tunnel_lookup(skb->dev,
627                                           iph->saddr, iph->daddr, key,
628                                           gre_proto))) {
629                 struct net_device_stats *stats;
630 #ifdef HAVE_NETDEV_STATS
631                 stats = &tunnel->dev->stats;
632 #else
633                 stats = &tunnel->stat;
634 #endif
635
636                 secpath_reset(skb);
637
638                 skb->protocol = gre_proto;
639                 /* WCCP version 1 and 2 protocol decoding.
640                  * - Change protocol to IP
641                  * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
642                  */
643                 if (flags == 0 && gre_proto == htons(ETH_P_WCCP)) {
644                         skb->protocol = htons(ETH_P_IP);
645                         if ((*(h + offset) & 0xF0) != 0x40)
646                                 offset += 4;
647                 }
648
649                 skb->mac_header = skb->network_header;
650                 __pskb_pull(skb, offset);
651                 skb_postpull_rcsum(skb, skb_transport_header(skb), offset);
652                 skb->pkt_type = PACKET_HOST;
653 #ifdef CONFIG_NET_IPGRE_BROADCAST
654                 if (ipv4_is_multicast(iph->daddr)) {
655                         /* Looped back packet, drop it! */
656                         if (skb_rtable(skb)->fl.iif == 0)
657                                 goto drop;
658                         stats->multicast++;
659                         skb->pkt_type = PACKET_BROADCAST;
660                 }
661 #endif
662
663                 if (((flags&GRE_CSUM) && csum) ||
664                     (!(flags&GRE_CSUM) && tunnel->parms.i_flags&GRE_CSUM)) {
665                         stats->rx_crc_errors++;
666                         stats->rx_errors++;
667                         goto drop;
668                 }
669                 if (tunnel->parms.i_flags&GRE_SEQ) {
670                         if (!(flags&GRE_SEQ) ||
671                             (tunnel->i_seqno && (s32)(seqno - tunnel->i_seqno) < 0)) {
672                                 stats->rx_fifo_errors++;
673                                 stats->rx_errors++;
674                                 goto drop;
675                         }
676                         tunnel->i_seqno = seqno + 1;
677                 }
678
679                 len = skb->len;
680
681                 /* Warning: All skb pointers will be invalidated! */
682                 if (tunnel->dev->type == ARPHRD_ETHER) {
683                         if (!pskb_may_pull(skb, ETH_HLEN)) {
684                                 stats->rx_length_errors++;
685                                 stats->rx_errors++;
686                                 goto drop;
687                         }
688
689                         iph = ip_hdr(skb);
690                         skb->protocol = eth_type_trans(skb, tunnel->dev);
691                         skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
692                 }
693
694                 stats->rx_packets++;
695                 stats->rx_bytes += len;
696                 skb->dev = tunnel->dev;
697                 skb_dst_drop(skb);
698                 nf_reset(skb);
699
700                 skb_reset_network_header(skb);
701
702                 /* Invalidates pointers. */
703                 ipgre_ecn_decapsulate(iph, skb);
704
705                 netif_rx(skb);
706                 rcu_read_unlock();
707                 return(0);
708         }
709         icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
710
711 drop:
712         rcu_read_unlock();
713 drop_nolock:
714         kfree_skb(skb);
715         return(0);
716 }
717
718 static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
719 {
720         struct ip_tunnel *tunnel = netdev_priv(dev);
721         struct net_device_stats *stats;
722 #ifdef HAVE_NETDEV_QUEUE_STATS
723         struct netdev_queue *txq = netdev_get_tx_queue(dev, 0);
724 #endif
725         struct iphdr  *old_iph = ip_hdr(skb);
726         struct iphdr  *tiph;
727         u8     tos;
728         __be16 df;
729         struct rtable *rt;                      /* Route to the other host */
730         struct net_device *tdev;                /* Device to other host */
731         struct iphdr  *iph;                     /* Our new IP header */
732         unsigned int max_headroom;              /* The extra header space needed */
733         int    gre_hlen;
734         __be32 dst;
735         int    mtu;
736         u8   original_protocol;
737
738 #ifdef HAVE_NETDEV_STATS
739         stats = &dev->stats;
740 #else
741         stats = &tunnel->stat;
742 #endif
743
744         /* Validate the protocol headers before we try to use them. */
745         original_protocol = skb->protocol;
746         if (skb->protocol == htons(ETH_P_IP)) {
747                 if (unlikely(!pskb_may_pull(skb, skb_network_header(skb)
748                     + sizeof(struct iphdr) - skb->data)))
749                         skb->protocol = 0;
750         } else if (skb->protocol == htons(ETH_P_IPV6)) {
751                 if (unlikely(!pskb_may_pull(skb, skb_network_header(skb)
752                     + sizeof(struct ipv6hdr) - skb->data)))
753                         skb->protocol = 0;
754         }
755
756         if (dev->type == ARPHRD_ETHER)
757                 IPCB(skb)->flags = 0;
758
759 #ifdef HAVE_NETDEV_HEADER_OPS
760         if (dev->header_ops && dev->type == ARPHRD_IPGRE) {
761 #else
762         if (dev->hard_header && dev->type == ARPHRD_IPGRE) {
763 #endif
764                 gre_hlen = 0;
765                 tiph = (struct iphdr *)skb->data;
766         } else {
767                 gre_hlen = tunnel->hlen;
768                 tiph = &tunnel->parms.iph;
769         }
770
771         if ((dst = tiph->daddr) == 0) {
772                 /* NBMA tunnel */
773
774                 if (skb_dst(skb) == NULL) {
775                         stats->tx_fifo_errors++;
776                         goto tx_error;
777                 }
778
779                 if (skb->protocol == htons(ETH_P_IP)) {
780                         rt = skb_rtable(skb);
781                         if ((dst = rt->rt_gateway) == 0)
782                                 goto tx_error_icmp;
783                 }
784 #ifdef CONFIG_IPV6
785                 else if (skb->protocol == htons(ETH_P_IPV6)) {
786                         struct in6_addr *addr6;
787                         int addr_type;
788                         struct neighbour *neigh = skb_dst(skb)->neighbour;
789
790                         if (neigh == NULL)
791                                 goto tx_error;
792
793                         addr6 = (struct in6_addr *)&neigh->primary_key;
794                         addr_type = ipv6_addr_type(addr6);
795
796                         if (addr_type == IPV6_ADDR_ANY) {
797                                 addr6 = &ipv6_hdr(skb)->daddr;
798                                 addr_type = ipv6_addr_type(addr6);
799                         }
800
801                         if ((addr_type & IPV6_ADDR_COMPATv4) == 0)
802                                 goto tx_error_icmp;
803
804                         dst = addr6->s6_addr32[3];
805                 }
806 #endif
807                 else
808                         goto tx_error;
809         }
810
811         tos = tiph->tos;
812         if (tos == 1) {
813                 tos = 0;
814                 if (skb->protocol == htons(ETH_P_IP))
815                         tos = old_iph->tos;
816                 else if (skb->protocol == htons(ETH_P_IPV6))
817                         tos = ipv6_get_dsfield(ipv6_hdr(skb));
818         }
819
820         {
821                 struct flowi fl = { .oif = tunnel->parms.link,
822                                     .nl_u = { .ip4_u =
823                                               { .daddr = dst,
824                                                 .saddr = tiph->saddr,
825                                                 .tos = RT_TOS(tos) } },
826                                     .proto = IPPROTO_GRE };
827                 if (ip_route_output_key(dev_net(dev), &rt, &fl)) {
828                         stats->tx_carrier_errors++;
829                         goto tx_error;
830                 }
831         }
832         tdev = rt->u.dst.dev;
833
834         if (tdev == dev) {
835                 ip_rt_put(rt);
836                 stats->collisions++;
837                 goto tx_error;
838         }
839
840         df = tiph->frag_off;
841         if (df)
842 #ifdef HAVE_NETDEV_NEEDED_HEADROOM
843                 mtu = dst_mtu(&rt->u.dst) - dev->hard_header_len - tunnel->hlen;
844 #else
845                 mtu = dst_mtu(&rt->u.dst) - tunnel->hlen;
846 #endif
847         else
848                 mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
849
850         if (skb_dst(skb))
851                 skb_dst(skb)->ops->update_pmtu(skb_dst(skb), mtu);
852
853         /* XXX: Temporarily allow fragmentation since DF doesn't
854          * do the right thing with bridging. */
855 /*
856         if (skb->protocol == htons(ETH_P_IP)) {
857                 df |= (old_iph->frag_off&htons(IP_DF));
858
859                 if ((old_iph->frag_off&htons(IP_DF)) &&
860                     mtu < ntohs(old_iph->tot_len)) {
861                         icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu));
862                         ip_rt_put(rt);
863                         goto tx_error;
864                 }
865         }
866 #ifdef CONFIG_IPV6
867         else if (skb->protocol == htons(ETH_P_IPV6)) {
868                 struct rt6_info *rt6 = (struct rt6_info *)skb_dst(skb);
869
870                 if (rt6 && mtu < dst_mtu(skb_dst(skb)) && mtu >= IPV6_MIN_MTU) {
871                         if ((tunnel->parms.iph.daddr &&
872                              !ipv4_is_multicast(tunnel->parms.iph.daddr)) ||
873                             rt6->rt6i_dst.plen == 128) {
874                                 rt6->rt6i_flags |= RTF_MODIFIED;
875                                 skb_dst(skb)->metrics[RTAX_MTU-1] = mtu;
876                         }
877                 }
878
879                 if (mtu >= IPV6_MIN_MTU && mtu < skb->len - tunnel->hlen + gre_hlen) {
880                         icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, dev);
881                         ip_rt_put(rt);
882                         goto tx_error;
883                 }
884         }
885 #endif
886 */
887         if (tunnel->err_count > 0) {
888                 if (time_before(jiffies,
889                                 tunnel->err_time + IPTUNNEL_ERR_TIMEO)) {
890                         tunnel->err_count--;
891
892                         dst_link_failure(skb);
893                 } else
894                         tunnel->err_count = 0;
895         }
896
897         max_headroom = LL_RESERVED_SPACE(tdev) + gre_hlen;
898
899         if (skb_headroom(skb) < max_headroom || skb_shared(skb)||
900             (skb_cloned(skb) && !skb_clone_writable(skb, 0))) {
901                 struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom);
902                 if (!new_skb) {
903                         ip_rt_put(rt);
904 #ifdef HAVE_NETDEV_QUEUE_STATS
905                         txq->tx_dropped++;
906 #else
907                         stats->tx_dropped++;
908 #endif
909                         dev_kfree_skb(skb);
910                         return NETDEV_TX_OK;
911                 }
912                 if (skb->sk)
913                         skb_set_owner_w(new_skb, skb->sk);
914                 dev_kfree_skb(skb);
915                 skb = new_skb;
916                 old_iph = ip_hdr(skb);
917         }
918
919         skb_reset_transport_header(skb);
920         skb_push(skb, gre_hlen);
921         skb_reset_network_header(skb);
922         memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
923         IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED |
924                               IPSKB_REROUTED);
925         skb_dst_drop(skb);
926         skb_dst_set(skb, &rt->u.dst);
927
928         /*
929          *      Push down and install the IPIP header.
930          */
931
932         iph                     =       ip_hdr(skb);
933         iph->version            =       4;
934         iph->ihl                =       sizeof(struct iphdr) >> 2;
935         iph->frag_off           =       df;
936         iph->protocol           =       IPPROTO_GRE;
937         iph->tos                =       ipgre_ecn_encapsulate(tos, old_iph, skb);
938         iph->daddr              =       rt->rt_dst;
939         iph->saddr              =       rt->rt_src;
940
941         if ((iph->ttl = tiph->ttl) == 0) {
942                 if (skb->protocol == htons(ETH_P_IP))
943                         iph->ttl = old_iph->ttl;
944 #ifdef CONFIG_IPV6
945                 else if (skb->protocol == htons(ETH_P_IPV6))
946                         iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit;
947 #endif
948                 else
949                         iph->ttl = dst_metric(&rt->u.dst, RTAX_HOPLIMIT);
950         }
951
952         skb->protocol = original_protocol;
953
954         ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags;
955         ((__be16 *)(iph + 1))[1] = (dev->type == ARPHRD_ETHER) ?
956                                    htons(ETH_P_TEB) : skb->protocol;
957
958         if (tunnel->parms.o_flags&(GRE_KEY|GRE_CSUM|GRE_SEQ)) {
959                 __be32 *ptr = (__be32*)(((u8*)iph) + tunnel->hlen - 4);
960
961                 if (tunnel->parms.o_flags&GRE_SEQ) {
962                         ++tunnel->o_seqno;
963                         *ptr = htonl(tunnel->o_seqno);
964                         ptr--;
965                 }
966                 if (tunnel->parms.o_flags&GRE_KEY) {
967                         *ptr = tunnel->parms.o_key;
968                         ptr--;
969                 }
970                 if (tunnel->parms.o_flags&GRE_CSUM) {
971                         *ptr = 0;
972                         *(__sum16*)ptr = ip_compute_csum((void*)(iph+1), skb->len - sizeof(struct iphdr));
973                 }
974         }
975
976         nf_reset(skb);
977
978         IPTUNNEL_XMIT();
979         return NETDEV_TX_OK;
980
981 tx_error_icmp:
982         dst_link_failure(skb);
983
984 tx_error:
985         stats->tx_errors++;
986         dev_kfree_skb(skb);
987         return NETDEV_TX_OK;
988 }
989
990 static int ipgre_tunnel_bind_dev(struct net_device *dev)
991 {
992         struct net_device *tdev = NULL;
993         struct ip_tunnel *tunnel;
994         struct iphdr *iph;
995         int hlen = LL_MAX_HEADER;
996         int mtu = ETH_DATA_LEN;
997         int addend = sizeof(struct iphdr) + 4;
998
999         tunnel = netdev_priv(dev);
1000         iph = &tunnel->parms.iph;
1001
1002         /* Guess output device to choose reasonable mtu and needed_headroom */
1003
1004         if (iph->daddr) {
1005                 struct flowi fl = { .oif = tunnel->parms.link,
1006                                     .nl_u = { .ip4_u =
1007                                               { .daddr = iph->daddr,
1008                                                 .saddr = iph->saddr,
1009                                                 .tos = RT_TOS(iph->tos) } },
1010                                     .proto = IPPROTO_GRE };
1011                 struct rtable *rt;
1012                 if (!ip_route_output_key(dev_net(dev), &rt, &fl)) {
1013                         tdev = rt->u.dst.dev;
1014                         ip_rt_put(rt);
1015                 }
1016
1017                 if (dev->type != ARPHRD_ETHER)
1018                         dev->flags |= IFF_POINTOPOINT;
1019         }
1020
1021         if (!tdev && tunnel->parms.link)
1022                 tdev = __dev_get_by_index(dev_net(dev), tunnel->parms.link);
1023
1024         if (tdev) {
1025 #ifdef HAVE_NETDEV_NEEDED_HEADROOM
1026                 hlen = tdev->hard_header_len + tdev->needed_headroom;
1027 #else
1028                 hlen = tdev->hard_header_len;
1029 #endif
1030                 mtu = tdev->mtu;
1031         }
1032         dev->iflink = tunnel->parms.link;
1033
1034         /* Precalculate GRE options length */
1035         if (tunnel->parms.o_flags&(GRE_CSUM|GRE_KEY|GRE_SEQ)) {
1036                 if (tunnel->parms.o_flags&GRE_CSUM)
1037                         addend += 4;
1038                 if (tunnel->parms.o_flags&GRE_KEY)
1039                         addend += 4;
1040                 if (tunnel->parms.o_flags&GRE_SEQ)
1041                         addend += 4;
1042         }
1043 #ifdef HAVE_NETDEV_NEEDED_HEADROOM
1044         dev->needed_headroom = hlen + addend;
1045         mtu -= dev->hard_header_len + addend;
1046 #else
1047         dev->hard_header_len = hlen + addend;
1048         mtu -= addend;
1049 #endif
1050         tunnel->hlen = addend;
1051
1052         if (mtu < 68)
1053                 mtu = 68;
1054
1055         /* XXX: Set MTU to the maximum possible value.  If we are bridged to a
1056         * device with a larger MTU then packets will be dropped. */
1057         mtu = 65482;
1058
1059         return mtu;
1060 }
1061
1062 static int
1063 ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)
1064 {
1065         int err = 0;
1066         struct ip_tunnel_parm p;
1067         struct ip_tunnel *t;
1068         struct net *net = dev_net(dev);
1069         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
1070         int add_tunnel, gretap;
1071
1072         switch (cmd) {
1073         case SIOCGETTUNNEL:
1074                 t = NULL;
1075                 if (dev == ign->fb_tunnel_dev) {
1076                         if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) {
1077                                 err = -EFAULT;
1078                                 break;
1079                         }
1080                         t = ipgre_tunnel_locate(net, &p, false, 0);
1081                 }
1082                 if (t == NULL)
1083                         t = netdev_priv(dev);
1084                 memcpy(&p, &t->parms, sizeof(p));
1085                 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
1086                         err = -EFAULT;
1087                 break;
1088
1089         case SIOCADDTUNNEL:
1090         case SIOCCHGTUNNEL:
1091         case SIOCADDGRETAP:
1092         case SIOCCHGGRETAP:
1093                 err = -EPERM;
1094                 if (!capable(CAP_NET_ADMIN))
1095                         goto done;
1096
1097                 err = -EFAULT;
1098                 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1099                         goto done;
1100
1101                 err = -EINVAL;
1102                 if (p.iph.version != 4 || p.iph.protocol != IPPROTO_GRE ||
1103                     p.iph.ihl != 5 || (p.iph.frag_off&htons(~IP_DF)) ||
1104                     ((p.i_flags|p.o_flags)&(GRE_VERSION|GRE_ROUTING)))
1105                         goto done;
1106
1107                 add_tunnel = (cmd == SIOCADDTUNNEL || cmd == SIOCADDGRETAP);
1108                 gretap = (cmd == SIOCADDGRETAP || cmd == SIOCCHGGRETAP);
1109
1110                 if (!(p.i_flags&GRE_KEY))
1111                         p.i_key = 0;
1112                 if (!(p.o_flags&GRE_KEY))
1113                         p.o_key = 0;
1114
1115                 t = ipgre_tunnel_locate(net, &p, gretap, add_tunnel);
1116
1117                 if (dev != ign->fb_tunnel_dev && !add_tunnel) {
1118                         if (t != NULL) {
1119                                 if (t->dev != dev) {
1120                                         err = -EEXIST;
1121                                         break;
1122                                 }
1123                         } else {
1124                                 unsigned nflags = 0;
1125
1126                                 t = netdev_priv(dev);
1127
1128                                 if (ipv4_is_multicast(p.iph.daddr))
1129                                         nflags = IFF_BROADCAST;
1130                                 else if (p.iph.daddr)
1131                                         nflags = IFF_POINTOPOINT;
1132
1133                                 if ((dev->flags^nflags)&(IFF_POINTOPOINT|IFF_BROADCAST)) {
1134                                         err = -EINVAL;
1135                                         break;
1136                                 }
1137                                 ipgre_tunnel_unlink(ign, t);
1138                                 t->parms.iph.saddr = p.iph.saddr;
1139                                 t->parms.iph.daddr = p.iph.daddr;
1140                                 t->parms.i_key = p.i_key;
1141                                 t->parms.o_key = p.o_key;
1142                                 memcpy(dev->dev_addr, &p.iph.saddr, 4);
1143                                 memcpy(dev->broadcast, &p.iph.daddr, 4);
1144                                 ipgre_tunnel_link(ign, t);
1145                                 netdev_state_change(dev);
1146                         }
1147                 }
1148
1149                 if (t) {
1150                         err = 0;
1151                         if (!add_tunnel) {
1152                                 t->parms.iph.ttl = p.iph.ttl;
1153                                 t->parms.iph.tos = p.iph.tos;
1154                                 t->parms.iph.frag_off = p.iph.frag_off;
1155                                 if (t->parms.link != p.link) {
1156                                         t->parms.link = p.link;
1157                                         dev->mtu = ipgre_tunnel_bind_dev(dev);
1158                                         netdev_state_change(dev);
1159                                 }
1160                         }
1161                         if (copy_to_user(ifr->ifr_ifru.ifru_data, &t->parms, sizeof(p)))
1162                                 err = -EFAULT;
1163                 } else
1164                         err = (add_tunnel ? -ENOBUFS : -ENOENT);
1165                 break;
1166
1167         case SIOCDELTUNNEL:
1168                 err = -EPERM;
1169                 if (!capable(CAP_NET_ADMIN))
1170                         goto done;
1171
1172                 if (dev == ign->fb_tunnel_dev) {
1173                         err = -EFAULT;
1174                         if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1175                                 goto done;
1176                         err = -ENOENT;
1177                         if ((t = ipgre_tunnel_locate(net, &p, false, 0)) == NULL)
1178                                 goto done;
1179                         err = -EPERM;
1180                         if (t == netdev_priv(ign->fb_tunnel_dev))
1181                                 goto done;
1182                         dev = t->dev;
1183                 }
1184                 unregister_netdevice(dev);
1185                 err = 0;
1186                 break;
1187
1188         default:
1189                 err = -EINVAL;
1190         }
1191
1192 done:
1193         return err;
1194 }
1195
1196 #ifndef HAVE_NETDEV_STATS
1197 static struct net_device_stats *ipgre_tunnel_get_stats(struct net_device *dev)
1198 {
1199         return &(((struct ip_tunnel*)netdev_priv(dev))->stat);
1200 }
1201 #endif
1202
1203 static int ipgre_tunnel_change_mtu(struct net_device *dev, int new_mtu)
1204 {
1205         struct ip_tunnel *tunnel = netdev_priv(dev);
1206         if (new_mtu < 68 ||
1207 #ifdef HAVE_NETDEV_NEEDED_HEADROOM
1208         new_mtu > 0xFFF8 - dev->hard_header_len - tunnel->hlen)
1209 #else
1210         new_mtu > 0xFFF8 - tunnel->hlen)
1211 #endif
1212                 return -EINVAL;
1213         dev->mtu = new_mtu;
1214         return 0;
1215 }
1216
1217 /* Nice toy. Unfortunately, useless in real life :-)
1218    It allows to construct virtual multiprotocol broadcast "LAN"
1219    over the Internet, provided multicast routing is tuned.
1220
1221
1222    I have no idea was this bicycle invented before me,
1223    so that I had to set ARPHRD_IPGRE to a random value.
1224    I have an impression, that Cisco could make something similar,
1225    but this feature is apparently missing in IOS<=11.2(8).
1226
1227    I set up 10.66.66/24 and fec0:6666:6666::0/96 as virtual networks
1228    with broadcast 224.66.66.66. If you have access to mbone, play with me :-)
1229
1230    ping -t 255 224.66.66.66
1231
1232    If nobody answers, mbone does not work.
1233
1234    ip tunnel add Universe mode gre remote 224.66.66.66 local <Your_real_addr> ttl 255
1235    ip addr add 10.66.66.<somewhat>/24 dev Universe
1236    ifconfig Universe up
1237    ifconfig Universe add fe80::<Your_real_addr>/10
1238    ifconfig Universe add fec0:6666:6666::<Your_real_addr>/96
1239    ftp 10.66.66.66
1240    ...
1241    ftp fec0:6666:6666::193.233.7.65
1242    ...
1243
1244  */
1245
1246 #ifdef HAVE_NETDEV_HEADER_OPS
1247 static int ipgre_header(struct sk_buff *skb, struct net_device *dev,
1248                        unsigned short type,
1249                        const void *daddr, const void *saddr, unsigned len)
1250 #else
1251 static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
1252                         void *daddr, void *saddr, unsigned len)
1253 #endif
1254 {
1255         struct ip_tunnel *t = netdev_priv(dev);
1256         struct iphdr *iph = (struct iphdr *)skb_push(skb, t->hlen);
1257         __be16 *p = (__be16*)(iph+1);
1258
1259         memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
1260         p[0]            = t->parms.o_flags;
1261         p[1]            = htons(type);
1262
1263         /*
1264          *      Set the source hardware address.
1265          */
1266
1267         if (saddr)
1268                 memcpy(&iph->saddr, saddr, 4);
1269
1270         if (daddr) {
1271                 memcpy(&iph->daddr, daddr, 4);
1272                 return t->hlen;
1273         }
1274         if (iph->daddr && !ipv4_is_multicast(iph->daddr))
1275                 return t->hlen;
1276
1277         return -t->hlen;
1278 }
1279
1280 #ifdef HAVE_NETDEV_HEADER_OPS
1281 static int ipgre_header_parse(const struct sk_buff *skb, unsigned char *haddr)
1282 #else
1283 static int ipgre_header_parse(struct sk_buff *skb, unsigned char *haddr)
1284 #endif
1285 {
1286         struct iphdr *iph = (struct iphdr *) skb_mac_header(skb);
1287         memcpy(haddr, &iph->saddr, 4);
1288         return 4;
1289 }
1290
1291 #ifdef HAVE_NETDEV_HEADER_OPS
1292 static const struct header_ops ipgre_header_ops = {
1293         .create = ipgre_header,
1294         .parse  = ipgre_header_parse,
1295 };
1296 #endif
1297
1298 #ifdef CONFIG_NET_IPGRE_BROADCAST
1299 static int ipgre_open(struct net_device *dev)
1300 {
1301         struct ip_tunnel *t = netdev_priv(dev);
1302
1303         if (ipv4_is_multicast(t->parms.iph.daddr)) {
1304                 struct flowi fl = { .oif = t->parms.link,
1305                                     .nl_u = { .ip4_u =
1306                                               { .daddr = t->parms.iph.daddr,
1307                                                 .saddr = t->parms.iph.saddr,
1308                                                 .tos = RT_TOS(t->parms.iph.tos) } },
1309                                     .proto = IPPROTO_GRE };
1310                 struct rtable *rt;
1311                 if (ip_route_output_key(dev_net(dev), &rt, &fl))
1312                         return -EADDRNOTAVAIL;
1313                 dev = rt->u.dst.dev;
1314                 ip_rt_put(rt);
1315                 if (__in_dev_get_rtnl(dev) == NULL)
1316                         return -EADDRNOTAVAIL;
1317                 t->mlink = dev->ifindex;
1318                 ip_mc_inc_group(__in_dev_get_rtnl(dev), t->parms.iph.daddr);
1319         }
1320         return 0;
1321 }
1322
1323 static int ipgre_close(struct net_device *dev)
1324 {
1325         struct ip_tunnel *t = netdev_priv(dev);
1326
1327         if (ipv4_is_multicast(t->parms.iph.daddr) && t->mlink) {
1328                 struct in_device *in_dev;
1329                 in_dev = inetdev_by_index(dev_net(dev), t->mlink);
1330                 if (in_dev) {
1331                         ip_mc_dec_group(in_dev, t->parms.iph.daddr);
1332                         in_dev_put(in_dev);
1333                 }
1334         }
1335         return 0;
1336 }
1337
1338 #endif
1339
1340 static void ethtool_getinfo(struct net_device *dev,
1341                             struct ethtool_drvinfo *info)
1342 {
1343         strcpy(info->driver, "ip_gre");
1344         strcpy(info->version, "Open vSwitch "VERSION BUILDNR);
1345         strcpy(info->bus_info, dev->type == ARPHRD_ETHER ? "gretap" : "gre");
1346 }
1347
1348 static struct ethtool_ops ethtool_ops = {
1349         .get_drvinfo = ethtool_getinfo,
1350 };
1351
1352 #ifdef HAVE_NET_DEVICE_OPS
1353 static const struct net_device_ops ipgre_netdev_ops = {
1354         .ndo_init               = ipgre_tunnel_init,
1355         .ndo_uninit             = ipgre_tunnel_uninit,
1356 #ifdef CONFIG_NET_IPGRE_BROADCAST
1357         .ndo_open               = ipgre_open,
1358         .ndo_stop               = ipgre_close,
1359 #endif
1360         .ndo_start_xmit         = ipgre_tunnel_xmit,
1361         .ndo_do_ioctl           = ipgre_tunnel_ioctl,
1362         .ndo_change_mtu         = ipgre_tunnel_change_mtu,
1363 };
1364 #endif
1365
1366 static void ipgre_tunnel_setup(struct net_device *dev)
1367 {
1368 #ifdef HAVE_NET_DEVICE_OPS
1369         dev->netdev_ops         = &ipgre_netdev_ops;
1370 #else
1371         dev->init               = ipgre_tunnel_init;
1372         dev->uninit             = ipgre_tunnel_uninit;
1373         dev->hard_start_xmit    = ipgre_tunnel_xmit;
1374 #ifndef HAVE_NETDEV_STATS
1375         dev->get_stats          = ipgre_tunnel_get_stats;
1376 #endif
1377         dev->do_ioctl           = ipgre_tunnel_ioctl;
1378         dev->change_mtu         = ipgre_tunnel_change_mtu;
1379 #endif /* HAVE_NET_DEVICE_OPS */
1380         dev->destructor         = free_netdev;
1381
1382         dev->type               = ARPHRD_IPGRE;
1383 #ifdef HAVE_NETDEV_NEEDED_HEADROOM
1384         dev->needed_headroom    = LL_MAX_HEADER + sizeof(struct iphdr) + 4;
1385 #else
1386         dev->hard_header_len    = LL_MAX_HEADER + sizeof(struct iphdr) + 4;
1387 #endif
1388         dev->mtu                = ETH_DATA_LEN - sizeof(struct iphdr) - 4;
1389         dev->flags              = IFF_NOARP;
1390         dev->iflink             = 0;
1391         dev->addr_len           = 4;
1392         dev->features           |= NETIF_F_NETNS_LOCAL;
1393         dev->priv_flags         &= ~IFF_XMIT_DST_RELEASE;
1394
1395         SET_ETHTOOL_OPS(dev, &ethtool_ops);
1396 }
1397
1398 static int ipgre_tunnel_init(struct net_device *dev)
1399 {
1400         struct ip_tunnel *tunnel;
1401         struct iphdr *iph;
1402
1403         tunnel = netdev_priv(dev);
1404         iph = &tunnel->parms.iph;
1405
1406         tunnel->dev = dev;
1407         strcpy(tunnel->parms.name, dev->name);
1408
1409         memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4);
1410         memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4);
1411
1412         if (iph->daddr) {
1413 #ifdef CONFIG_NET_IPGRE_BROADCAST
1414                 if (ipv4_is_multicast(iph->daddr)) {
1415                         if (!iph->saddr)
1416                                 return -EINVAL;
1417                         dev->flags = IFF_BROADCAST;
1418 #ifdef HAVE_NETDEV_HEADER_OPS
1419                         dev->header_ops = &ipgre_header_ops;
1420 #else
1421                         dev->hard_header = ipgre_header;
1422                         dev->hard_header_parse = ipgre_header_parse;
1423 #endif
1424 #ifndef HAVE_NET_DEVICE_OPS
1425                         dev->open = ipgre_open;
1426                         dev->stop = ipgre_close;
1427 #endif
1428                 }
1429 #endif
1430         } else {
1431 #ifdef HAVE_NETDEV_HEADER_OPS
1432                 dev->header_ops = &ipgre_header_ops;
1433 #else
1434                 dev->hard_header = ipgre_header;
1435                 dev->hard_header_parse = ipgre_header_parse;
1436 #endif
1437         }
1438
1439         return 0;
1440 }
1441
1442 #ifdef HAVE_NET_DEVICE_OPS
1443 static void ipgre_fb_tunnel_init(struct net_device *dev)
1444 #else
1445 static int ipgre_fb_tunnel_init(struct net_device *dev)
1446 #endif
1447 {
1448         struct ip_tunnel *tunnel = netdev_priv(dev);
1449         struct iphdr *iph = &tunnel->parms.iph;
1450         struct ipgre_net *ign = net_generic(dev_net(dev), ipgre_net_id);
1451
1452         tunnel->dev = dev;
1453         strcpy(tunnel->parms.name, dev->name);
1454
1455         iph->version            = 4;
1456         iph->protocol           = IPPROTO_GRE;
1457         iph->ihl                = 5;
1458         tunnel->hlen            = sizeof(struct iphdr) + 4;
1459
1460         dev_hold(dev);
1461         ign->tunnels_wc[0]      = tunnel;
1462
1463 #ifndef HAVE_NET_DEVICE_OPS
1464         return 0;
1465 #endif
1466 }
1467
1468 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
1469 static struct net_protocol ipgre_protocol = {
1470 #else
1471 static const struct net_protocol ipgre_protocol = {
1472 #endif
1473         .handler        =       ipgre_rcv,
1474         .err_handler    =       ipgre_err,
1475 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
1476         .netns_ok       =       1,
1477 #endif
1478 };
1479
1480 static void ipgre_destroy_tunnels(struct ipgre_net *ign, struct list_head *head)
1481 {
1482         int prio;
1483
1484         for (prio = 0; prio < 4; prio++) {
1485                 int h;
1486                 for (h = 0; h < HASH_SIZE; h++) {
1487                         struct ip_tunnel *t = ign->tunnels[prio][h];
1488
1489                         while (t != NULL) {
1490                                 unregister_netdevice_queue(t->dev, head);
1491                                 t = t->next;
1492                         }
1493                 }
1494         }
1495 }
1496
1497 static int ipgre_init_net(struct net *net)
1498 {
1499         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
1500         int err;
1501
1502         ign->fb_tunnel_dev = alloc_netdev(sizeof(struct ip_tunnel), GRE_IOCTL_DEVICE,
1503                                            ipgre_tunnel_setup);
1504         if (!ign->fb_tunnel_dev) {
1505                 err = -ENOMEM;
1506                 goto err_alloc_dev;
1507         }
1508         dev_net_set(ign->fb_tunnel_dev, net);
1509
1510 #ifdef HAVE_NET_DEVICE_OPS
1511         ipgre_fb_tunnel_init(ign->fb_tunnel_dev);
1512 #else
1513         ign->fb_tunnel_dev->init = ipgre_fb_tunnel_init;
1514 #endif
1515 #ifndef GRE_IOCTL_ONLY
1516         ign->fb_tunnel_dev->rtnl_link_ops = &ipgre_link_ops;
1517 #endif
1518
1519         if ((err = register_netdev(ign->fb_tunnel_dev)))
1520                 goto err_reg_dev;
1521
1522         return 0;
1523
1524 err_reg_dev:
1525         free_netdev(ign->fb_tunnel_dev);
1526 err_alloc_dev:
1527         return err;
1528 }
1529
1530 static void ipgre_exit_net(struct net *net)
1531 {
1532         struct ipgre_net *ign;
1533         LIST_HEAD(list);
1534
1535         ign = net_generic(net, ipgre_net_id);
1536         rtnl_lock();
1537         ipgre_destroy_tunnels(ign, &list);
1538         unregister_netdevice_many(&list);
1539         rtnl_unlock();
1540 }
1541
1542 static struct pernet_operations ipgre_net_ops = {
1543         .init = ipgre_init_net,
1544         .exit = ipgre_exit_net,
1545         .id   = &ipgre_net_id,
1546         .size = sizeof(struct ipgre_net),
1547 };
1548
1549 static int ipgre_tap_init(struct net_device *dev)
1550 {
1551         struct ip_tunnel *tunnel;
1552
1553         tunnel = netdev_priv(dev);
1554
1555         tunnel->dev = dev;
1556         strcpy(tunnel->parms.name, dev->name);
1557
1558         ipgre_tunnel_bind_dev(dev);
1559
1560         return 0;
1561 }
1562
1563 #ifdef HAVE_NET_DEVICE_OPS
1564 static const struct net_device_ops ipgre_tap_netdev_ops = {
1565         .ndo_init               = ipgre_tap_init,
1566         .ndo_uninit             = ipgre_tunnel_uninit,
1567         .ndo_start_xmit         = ipgre_tunnel_xmit,
1568         .ndo_set_mac_address    = eth_mac_addr,
1569         .ndo_validate_addr      = eth_validate_addr,
1570         .ndo_do_ioctl           = ipgre_tunnel_ioctl,
1571         .ndo_change_mtu         = ipgre_tunnel_change_mtu,
1572 };
1573 #endif
1574
1575 static void ipgre_tap_setup(struct net_device *dev)
1576 {
1577         ether_setup(dev);
1578
1579 #ifdef HAVE_NET_DEVICE_OPS
1580         dev->netdev_ops         = &ipgre_tap_netdev_ops;
1581 #else
1582         dev->init               = ipgre_tap_init;
1583         dev->uninit             = ipgre_tunnel_uninit;
1584         dev->hard_start_xmit    = ipgre_tunnel_xmit;
1585 #ifndef HAVE_NETDEV_STATS
1586         dev->get_stats          = ipgre_tunnel_get_stats;
1587 #endif
1588         dev->do_ioctl           = ipgre_tunnel_ioctl;
1589         dev->change_mtu         = ipgre_tunnel_change_mtu;
1590 #endif /* HAVE_NET_DEVICE_OPS */
1591         dev->destructor         = free_netdev;
1592
1593         dev->iflink             = 0;
1594         dev->features           |= NETIF_F_NETNS_LOCAL;
1595         dev->tx_queue_len       = 0;
1596
1597         SET_ETHTOOL_OPS(dev, &ethtool_ops);
1598 }
1599
1600 #ifndef GRE_IOCTL_ONLY
1601 static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
1602 {
1603         __be16 flags;
1604
1605         if (!data)
1606                 return 0;
1607
1608         flags = 0;
1609         if (data[IFLA_GRE_IFLAGS])
1610                 flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
1611         if (data[IFLA_GRE_OFLAGS])
1612                 flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
1613         if (flags & (GRE_VERSION|GRE_ROUTING))
1614                 return -EINVAL;
1615
1616         return 0;
1617 }
1618
1619 static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
1620 {
1621         __be32 daddr;
1622
1623         if (tb[IFLA_ADDRESS]) {
1624                 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
1625                         return -EINVAL;
1626                 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
1627                         return -EADDRNOTAVAIL;
1628         }
1629
1630         if (!data)
1631                 goto out;
1632
1633         if (data[IFLA_GRE_REMOTE]) {
1634                 memcpy(&daddr, nla_data(data[IFLA_GRE_REMOTE]), 4);
1635                 if (!daddr)
1636                         return -EINVAL;
1637         }
1638
1639 out:
1640         return ipgre_tunnel_validate(tb, data);
1641 }
1642
1643 static void ipgre_netlink_parms(struct nlattr *data[],
1644                                 struct ip_tunnel_parm *parms)
1645 {
1646         memset(parms, 0, sizeof(*parms));
1647
1648         parms->iph.protocol = IPPROTO_GRE;
1649
1650         if (!data)
1651                 return;
1652
1653         if (data[IFLA_GRE_LINK])
1654                 parms->link = nla_get_u32(data[IFLA_GRE_LINK]);
1655
1656         if (data[IFLA_GRE_IFLAGS])
1657                 parms->i_flags = nla_get_be16(data[IFLA_GRE_IFLAGS]);
1658
1659         if (data[IFLA_GRE_OFLAGS])
1660                 parms->o_flags = nla_get_be16(data[IFLA_GRE_OFLAGS]);
1661
1662         if (data[IFLA_GRE_IKEY])
1663                 parms->i_key = nla_get_be32(data[IFLA_GRE_IKEY]);
1664
1665         if (data[IFLA_GRE_OKEY])
1666                 parms->o_key = nla_get_be32(data[IFLA_GRE_OKEY]);
1667
1668         if (data[IFLA_GRE_LOCAL])
1669                 parms->iph.saddr = nla_get_be32(data[IFLA_GRE_LOCAL]);
1670
1671         if (data[IFLA_GRE_REMOTE])
1672                 parms->iph.daddr = nla_get_be32(data[IFLA_GRE_REMOTE]);
1673
1674         if (data[IFLA_GRE_TTL])
1675                 parms->iph.ttl = nla_get_u8(data[IFLA_GRE_TTL]);
1676
1677         if (data[IFLA_GRE_TOS])
1678                 parms->iph.tos = nla_get_u8(data[IFLA_GRE_TOS]);
1679
1680         if (!data[IFLA_GRE_PMTUDISC] || nla_get_u8(data[IFLA_GRE_PMTUDISC]))
1681                 parms->iph.frag_off = htons(IP_DF);
1682 }
1683
1684 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
1685 static int ipgre_newlink(struct net *src_net, struct net_device *dev, struct nlattr *tb[],
1686                          struct nlattr *data[])
1687 #else
1688 static int ipgre_newlink(struct net_device *dev, struct nlattr *tb[],
1689                          struct nlattr *data[])
1690 #endif
1691 {
1692         struct ip_tunnel *nt;
1693         struct net *net = dev_net(dev);
1694         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
1695         int mtu;
1696         int err;
1697
1698         nt = netdev_priv(dev);
1699         ipgre_netlink_parms(data, &nt->parms);
1700
1701         if (ipgre_tunnel_find(net, &nt->parms, dev->type))
1702                 return -EEXIST;
1703
1704         if (dev->type == ARPHRD_ETHER && !tb[IFLA_ADDRESS])
1705                 random_ether_addr(dev->dev_addr);
1706
1707         mtu = ipgre_tunnel_bind_dev(dev);
1708         if (!tb[IFLA_MTU])
1709                 dev->mtu = mtu;
1710
1711         err = register_netdevice(dev);
1712         if (err)
1713                 goto out;
1714
1715         dev_hold(dev);
1716         ipgre_tunnel_link(ign, nt);
1717
1718 out:
1719         return err;
1720 }
1721
1722 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
1723                             struct nlattr *data[])
1724 {
1725         struct ip_tunnel *t, *nt;
1726         struct net *net = dev_net(dev);
1727         struct ipgre_net *ign = net_generic(net, ipgre_net_id);
1728         struct ip_tunnel_parm p;
1729         int mtu;
1730
1731         if (dev == ign->fb_tunnel_dev)
1732                 return -EINVAL;
1733
1734         nt = netdev_priv(dev);
1735         ipgre_netlink_parms(data, &p);
1736
1737         t = ipgre_tunnel_locate(net, &p, false, 0);
1738
1739         if (t) {
1740                 if (t->dev != dev)
1741                         return -EEXIST;
1742         } else {
1743                 t = nt;
1744
1745                 if (dev->type != ARPHRD_ETHER) {
1746                         unsigned nflags = 0;
1747
1748                         if (ipv4_is_multicast(p.iph.daddr))
1749                                 nflags = IFF_BROADCAST;
1750                         else if (p.iph.daddr)
1751                                 nflags = IFF_POINTOPOINT;
1752
1753                         if ((dev->flags ^ nflags) &
1754                             (IFF_POINTOPOINT | IFF_BROADCAST))
1755                                 return -EINVAL;
1756                 }
1757
1758                 ipgre_tunnel_unlink(ign, t);
1759                 t->parms.iph.saddr = p.iph.saddr;
1760                 t->parms.iph.daddr = p.iph.daddr;
1761                 t->parms.i_key = p.i_key;
1762                 if (dev->type != ARPHRD_ETHER) {
1763                         memcpy(dev->dev_addr, &p.iph.saddr, 4);
1764                         memcpy(dev->broadcast, &p.iph.daddr, 4);
1765                 }
1766                 ipgre_tunnel_link(ign, t);
1767                 netdev_state_change(dev);
1768         }
1769
1770         t->parms.o_key = p.o_key;
1771         t->parms.iph.ttl = p.iph.ttl;
1772         t->parms.iph.tos = p.iph.tos;
1773         t->parms.iph.frag_off = p.iph.frag_off;
1774
1775         if (t->parms.link != p.link) {
1776                 t->parms.link = p.link;
1777                 mtu = ipgre_tunnel_bind_dev(dev);
1778                 if (!tb[IFLA_MTU])
1779                         dev->mtu = mtu;
1780                 netdev_state_change(dev);
1781         }
1782
1783         return 0;
1784 }
1785
1786 static size_t ipgre_get_size(const struct net_device *dev)
1787 {
1788         return
1789                 /* IFLA_GRE_LINK */
1790                 nla_total_size(4) +
1791                 /* IFLA_GRE_IFLAGS */
1792                 nla_total_size(2) +
1793                 /* IFLA_GRE_OFLAGS */
1794                 nla_total_size(2) +
1795                 /* IFLA_GRE_IKEY */
1796                 nla_total_size(4) +
1797                 /* IFLA_GRE_OKEY */
1798                 nla_total_size(4) +
1799                 /* IFLA_GRE_LOCAL */
1800                 nla_total_size(4) +
1801                 /* IFLA_GRE_REMOTE */
1802                 nla_total_size(4) +
1803                 /* IFLA_GRE_TTL */
1804                 nla_total_size(1) +
1805                 /* IFLA_GRE_TOS */
1806                 nla_total_size(1) +
1807                 /* IFLA_GRE_PMTUDISC */
1808                 nla_total_size(1) +
1809                 0;
1810 }
1811
1812 static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
1813 {
1814         struct ip_tunnel *t = netdev_priv(dev);
1815         struct ip_tunnel_parm *p = &t->parms;
1816
1817         NLA_PUT_U32(skb, IFLA_GRE_LINK, p->link);
1818         NLA_PUT_BE16(skb, IFLA_GRE_IFLAGS, p->i_flags);
1819         NLA_PUT_BE16(skb, IFLA_GRE_OFLAGS, p->o_flags);
1820         NLA_PUT_BE32(skb, IFLA_GRE_IKEY, p->i_key);
1821         NLA_PUT_BE32(skb, IFLA_GRE_OKEY, p->o_key);
1822         NLA_PUT_BE32(skb, IFLA_GRE_LOCAL, p->iph.saddr);
1823         NLA_PUT_BE32(skb, IFLA_GRE_REMOTE, p->iph.daddr);
1824         NLA_PUT_U8(skb, IFLA_GRE_TTL, p->iph.ttl);
1825         NLA_PUT_U8(skb, IFLA_GRE_TOS, p->iph.tos);
1826         NLA_PUT_U8(skb, IFLA_GRE_PMTUDISC, !!(p->iph.frag_off & htons(IP_DF)));
1827
1828         return 0;
1829
1830 nla_put_failure:
1831         return -EMSGSIZE;
1832 }
1833
1834 static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
1835         [IFLA_GRE_LINK]         = { .type = NLA_U32 },
1836         [IFLA_GRE_IFLAGS]       = { .type = NLA_U16 },
1837         [IFLA_GRE_OFLAGS]       = { .type = NLA_U16 },
1838         [IFLA_GRE_IKEY]         = { .type = NLA_U32 },
1839         [IFLA_GRE_OKEY]         = { .type = NLA_U32 },
1840         [IFLA_GRE_LOCAL]        = { .len = FIELD_SIZEOF(struct iphdr, saddr) },
1841         [IFLA_GRE_REMOTE]       = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1842         [IFLA_GRE_TTL]          = { .type = NLA_U8 },
1843         [IFLA_GRE_TOS]          = { .type = NLA_U8 },
1844         [IFLA_GRE_PMTUDISC]     = { .type = NLA_U8 },
1845 };
1846
1847 static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
1848         .kind           = "gre",
1849         .maxtype        = IFLA_GRE_MAX,
1850         .policy         = ipgre_policy,
1851         .priv_size      = sizeof(struct ip_tunnel),
1852         .setup          = ipgre_tunnel_setup,
1853         .validate       = ipgre_tunnel_validate,
1854         .newlink        = ipgre_newlink,
1855         .changelink     = ipgre_changelink,
1856         .get_size       = ipgre_get_size,
1857         .fill_info      = ipgre_fill_info,
1858 };
1859
1860 static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
1861         .kind           = "gretap",
1862         .maxtype        = IFLA_GRE_MAX,
1863         .policy         = ipgre_policy,
1864         .priv_size      = sizeof(struct ip_tunnel),
1865         .setup          = ipgre_tap_setup,
1866         .validate       = ipgre_tap_validate,
1867         .newlink        = ipgre_newlink,
1868         .changelink     = ipgre_changelink,
1869         .get_size       = ipgre_get_size,
1870         .fill_info      = ipgre_fill_info,
1871 };
1872 #endif
1873
1874 /*
1875  *      And now the modules code and kernel interface.
1876  */
1877
1878 static int __init ipgre_init(void)
1879 {
1880         int err;
1881
1882         printk(KERN_INFO "GRE over IPv4 tunneling driver\n");
1883
1884         if (inet_add_protocol(&ipgre_protocol, IPPROTO_GRE) < 0) {
1885                 printk(KERN_INFO "ipgre init: can't add protocol\n");
1886                 return -EAGAIN;
1887         }
1888
1889         err = register_pernet_device(&ipgre_net_ops);
1890         if (err < 0)
1891                 goto gen_device_failed;
1892
1893 #ifndef GRE_IOCTL_ONLY
1894         err = rtnl_link_register(&ipgre_link_ops);
1895         if (err < 0)
1896                 goto rtnl_link_failed;
1897
1898         err = rtnl_link_register(&ipgre_tap_ops);
1899         if (err < 0)
1900                 goto tap_ops_failed;
1901 #endif
1902
1903 out:
1904         return err;
1905
1906 #ifndef GRE_IOCTL_ONLY
1907 tap_ops_failed:
1908         rtnl_link_unregister(&ipgre_link_ops);
1909 rtnl_link_failed:
1910         unregister_pernet_device(&ipgre_net_ops);
1911 #endif
1912 gen_device_failed:
1913         inet_del_protocol(&ipgre_protocol, IPPROTO_GRE);
1914         goto out;
1915
1916 }
1917
1918 static void __exit ipgre_fini(void)
1919 {
1920 #ifndef GRE_IOCTL_ONLY
1921         rtnl_link_unregister(&ipgre_tap_ops);
1922         rtnl_link_unregister(&ipgre_link_ops);
1923 #endif
1924         unregister_pernet_device(&ipgre_net_ops);
1925         if (inet_del_protocol(&ipgre_protocol, IPPROTO_GRE) < 0)
1926                 printk(KERN_INFO "ipgre close: can't remove protocol\n");
1927 }
1928
1929 module_init(ipgre_init);
1930 module_exit(ipgre_fini);
1931 MODULE_DESCRIPTION("GRE over IPv4 tunneling driver");
1932 MODULE_LICENSE("GPL");
1933 #ifndef GRE_IOCTL_ONLY
1934 MODULE_ALIAS_RTNL_LINK("gre");
1935 MODULE_ALIAS_RTNL_LINK("gretap");
1936 #endif
1937