]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/ipv4/ip_gre.c
mac80211: fix TX aggregation start/stop callback race
[karo-tx-linux.git] / net / ipv4 / ip_gre.c
1 /*
2  *      Linux NET3:     GRE over IP protocol decoder.
3  *
4  *      Authors: Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
5  *
6  *      This program is free software; you can redistribute it and/or
7  *      modify it under the terms of the GNU General Public License
8  *      as published by the Free Software Foundation; either version
9  *      2 of the License, or (at your option) any later version.
10  *
11  */
12
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14
15 #include <linux/capability.h>
16 #include <linux/module.h>
17 #include <linux/types.h>
18 #include <linux/kernel.h>
19 #include <linux/slab.h>
20 #include <linux/uaccess.h>
21 #include <linux/skbuff.h>
22 #include <linux/netdevice.h>
23 #include <linux/in.h>
24 #include <linux/tcp.h>
25 #include <linux/udp.h>
26 #include <linux/if_arp.h>
27 #include <linux/if_vlan.h>
28 #include <linux/init.h>
29 #include <linux/in6.h>
30 #include <linux/inetdevice.h>
31 #include <linux/igmp.h>
32 #include <linux/netfilter_ipv4.h>
33 #include <linux/etherdevice.h>
34 #include <linux/if_ether.h>
35
36 #include <net/sock.h>
37 #include <net/ip.h>
38 #include <net/icmp.h>
39 #include <net/protocol.h>
40 #include <net/ip_tunnels.h>
41 #include <net/arp.h>
42 #include <net/checksum.h>
43 #include <net/dsfield.h>
44 #include <net/inet_ecn.h>
45 #include <net/xfrm.h>
46 #include <net/net_namespace.h>
47 #include <net/netns/generic.h>
48 #include <net/rtnetlink.h>
49 #include <net/gre.h>
50 #include <net/dst_metadata.h>
51
52 /*
53    Problems & solutions
54    --------------------
55
56    1. The most important issue is detecting local dead loops.
57    They would cause complete host lockup in transmit, which
58    would be "resolved" by stack overflow or, if queueing is enabled,
59    with infinite looping in net_bh.
60
61    We cannot track such dead loops during route installation,
62    it is infeasible task. The most general solutions would be
63    to keep skb->encapsulation counter (sort of local ttl),
64    and silently drop packet when it expires. It is a good
65    solution, but it supposes maintaining new variable in ALL
66    skb, even if no tunneling is used.
67
68    Current solution: xmit_recursion breaks dead loops. This is a percpu
69    counter, since when we enter the first ndo_xmit(), cpu migration is
70    forbidden. We force an exit if this counter reaches RECURSION_LIMIT
71
72    2. Networking dead loops would not kill routers, but would really
73    kill network. IP hop limit plays role of "t->recursion" in this case,
74    if we copy it from packet being encapsulated to upper header.
75    It is very good solution, but it introduces two problems:
76
77    - Routing protocols, using packets with ttl=1 (OSPF, RIP2),
78      do not work over tunnels.
79    - traceroute does not work. I planned to relay ICMP from tunnel,
80      so that this problem would be solved and traceroute output
81      would even more informative. This idea appeared to be wrong:
82      only Linux complies to rfc1812 now (yes, guys, Linux is the only
83      true router now :-)), all routers (at least, in neighbourhood of mine)
84      return only 8 bytes of payload. It is the end.
85
86    Hence, if we want that OSPF worked or traceroute said something reasonable,
87    we should search for another solution.
88
89    One of them is to parse packet trying to detect inner encapsulation
90    made by our node. It is difficult or even impossible, especially,
91    taking into account fragmentation. TO be short, ttl is not solution at all.
92
93    Current solution: The solution was UNEXPECTEDLY SIMPLE.
94    We force DF flag on tunnels with preconfigured hop limit,
95    that is ALL. :-) Well, it does not remove the problem completely,
96    but exponential growth of network traffic is changed to linear
97    (branches, that exceed pmtu are pruned) and tunnel mtu
98    rapidly degrades to value <68, where looping stops.
99    Yes, it is not good if there exists a router in the loop,
100    which does not force DF, even when encapsulating packets have DF set.
101    But it is not our problem! Nobody could accuse us, we made
102    all that we could make. Even if it is your gated who injected
103    fatal route to network, even if it were you who configured
104    fatal static route: you are innocent. :-)
105
106    Alexey Kuznetsov.
107  */
108
109 static bool log_ecn_error = true;
110 module_param(log_ecn_error, bool, 0644);
111 MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
112
113 static struct rtnl_link_ops ipgre_link_ops __read_mostly;
114 static int ipgre_tunnel_init(struct net_device *dev);
115
116 static unsigned int ipgre_net_id __read_mostly;
117 static unsigned int gre_tap_net_id __read_mostly;
118
119 static void ipgre_err(struct sk_buff *skb, u32 info,
120                       const struct tnl_ptk_info *tpi)
121 {
122
123         /* All the routers (except for Linux) return only
124            8 bytes of packet payload. It means, that precise relaying of
125            ICMP in the real Internet is absolutely infeasible.
126
127            Moreover, Cisco "wise men" put GRE key to the third word
128            in GRE header. It makes impossible maintaining even soft
129            state for keyed GRE tunnels with enabled checksum. Tell
130            them "thank you".
131
132            Well, I wonder, rfc1812 was written by Cisco employee,
133            what the hell these idiots break standards established
134            by themselves???
135            */
136         struct net *net = dev_net(skb->dev);
137         struct ip_tunnel_net *itn;
138         const struct iphdr *iph;
139         const int type = icmp_hdr(skb)->type;
140         const int code = icmp_hdr(skb)->code;
141         unsigned int data_len = 0;
142         struct ip_tunnel *t;
143
144         switch (type) {
145         default:
146         case ICMP_PARAMETERPROB:
147                 return;
148
149         case ICMP_DEST_UNREACH:
150                 switch (code) {
151                 case ICMP_SR_FAILED:
152                 case ICMP_PORT_UNREACH:
153                         /* Impossible event. */
154                         return;
155                 default:
156                         /* All others are translated to HOST_UNREACH.
157                            rfc2003 contains "deep thoughts" about NET_UNREACH,
158                            I believe they are just ether pollution. --ANK
159                          */
160                         break;
161                 }
162                 break;
163
164         case ICMP_TIME_EXCEEDED:
165                 if (code != ICMP_EXC_TTL)
166                         return;
167                 data_len = icmp_hdr(skb)->un.reserved[1] * 4; /* RFC 4884 4.1 */
168                 break;
169
170         case ICMP_REDIRECT:
171                 break;
172         }
173
174         if (tpi->proto == htons(ETH_P_TEB))
175                 itn = net_generic(net, gre_tap_net_id);
176         else
177                 itn = net_generic(net, ipgre_net_id);
178
179         iph = (const struct iphdr *)(icmp_hdr(skb) + 1);
180         t = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
181                              iph->daddr, iph->saddr, tpi->key);
182
183         if (!t)
184                 return;
185
186 #if IS_ENABLED(CONFIG_IPV6)
187        if (tpi->proto == htons(ETH_P_IPV6) &&
188            !ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4 + tpi->hdr_len,
189                                        type, data_len))
190                return;
191 #endif
192
193         if (t->parms.iph.daddr == 0 ||
194             ipv4_is_multicast(t->parms.iph.daddr))
195                 return;
196
197         if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED)
198                 return;
199
200         if (time_before(jiffies, t->err_time + IPTUNNEL_ERR_TIMEO))
201                 t->err_count++;
202         else
203                 t->err_count = 1;
204         t->err_time = jiffies;
205 }
206
207 static void gre_err(struct sk_buff *skb, u32 info)
208 {
209         /* All the routers (except for Linux) return only
210          * 8 bytes of packet payload. It means, that precise relaying of
211          * ICMP in the real Internet is absolutely infeasible.
212          *
213          * Moreover, Cisco "wise men" put GRE key to the third word
214          * in GRE header. It makes impossible maintaining even soft
215          * state for keyed
216          * GRE tunnels with enabled checksum. Tell them "thank you".
217          *
218          * Well, I wonder, rfc1812 was written by Cisco employee,
219          * what the hell these idiots break standards established
220          * by themselves???
221          */
222
223         const struct iphdr *iph = (struct iphdr *)skb->data;
224         const int type = icmp_hdr(skb)->type;
225         const int code = icmp_hdr(skb)->code;
226         struct tnl_ptk_info tpi;
227         bool csum_err = false;
228
229         if (gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP),
230                              iph->ihl * 4) < 0) {
231                 if (!csum_err)          /* ignore csum errors. */
232                         return;
233         }
234
235         if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
236                 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
237                                  skb->dev->ifindex, 0, IPPROTO_GRE, 0);
238                 return;
239         }
240         if (type == ICMP_REDIRECT) {
241                 ipv4_redirect(skb, dev_net(skb->dev), skb->dev->ifindex, 0,
242                               IPPROTO_GRE, 0);
243                 return;
244         }
245
246         ipgre_err(skb, info, &tpi);
247 }
248
249 static int __ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
250                        struct ip_tunnel_net *itn, int hdr_len, bool raw_proto)
251 {
252         struct metadata_dst *tun_dst = NULL;
253         const struct iphdr *iph;
254         struct ip_tunnel *tunnel;
255
256         iph = ip_hdr(skb);
257         tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
258                                   iph->saddr, iph->daddr, tpi->key);
259
260         if (tunnel) {
261                 if (__iptunnel_pull_header(skb, hdr_len, tpi->proto,
262                                            raw_proto, false) < 0)
263                         goto drop;
264
265                 if (tunnel->dev->type != ARPHRD_NONE)
266                         skb_pop_mac_header(skb);
267                 else
268                         skb_reset_mac_header(skb);
269                 if (tunnel->collect_md) {
270                         __be16 flags;
271                         __be64 tun_id;
272
273                         flags = tpi->flags & (TUNNEL_CSUM | TUNNEL_KEY);
274                         tun_id = key32_to_tunnel_id(tpi->key);
275                         tun_dst = ip_tun_rx_dst(skb, flags, tun_id, 0);
276                         if (!tun_dst)
277                                 return PACKET_REJECT;
278                 }
279
280                 ip_tunnel_rcv(tunnel, skb, tpi, tun_dst, log_ecn_error);
281                 return PACKET_RCVD;
282         }
283         return PACKET_NEXT;
284
285 drop:
286         kfree_skb(skb);
287         return PACKET_RCVD;
288 }
289
290 static int ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
291                      int hdr_len)
292 {
293         struct net *net = dev_net(skb->dev);
294         struct ip_tunnel_net *itn;
295         int res;
296
297         if (tpi->proto == htons(ETH_P_TEB))
298                 itn = net_generic(net, gre_tap_net_id);
299         else
300                 itn = net_generic(net, ipgre_net_id);
301
302         res = __ipgre_rcv(skb, tpi, itn, hdr_len, false);
303         if (res == PACKET_NEXT && tpi->proto == htons(ETH_P_TEB)) {
304                 /* ipgre tunnels in collect metadata mode should receive
305                  * also ETH_P_TEB traffic.
306                  */
307                 itn = net_generic(net, ipgre_net_id);
308                 res = __ipgre_rcv(skb, tpi, itn, hdr_len, true);
309         }
310         return res;
311 }
312
313 static int gre_rcv(struct sk_buff *skb)
314 {
315         struct tnl_ptk_info tpi;
316         bool csum_err = false;
317         int hdr_len;
318
319 #ifdef CONFIG_NET_IPGRE_BROADCAST
320         if (ipv4_is_multicast(ip_hdr(skb)->daddr)) {
321                 /* Looped back packet, drop it! */
322                 if (rt_is_output_route(skb_rtable(skb)))
323                         goto drop;
324         }
325 #endif
326
327         hdr_len = gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP), 0);
328         if (hdr_len < 0)
329                 goto drop;
330
331         if (ipgre_rcv(skb, &tpi, hdr_len) == PACKET_RCVD)
332                 return 0;
333
334         icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
335 drop:
336         kfree_skb(skb);
337         return 0;
338 }
339
340 static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
341                        const struct iphdr *tnl_params,
342                        __be16 proto)
343 {
344         struct ip_tunnel *tunnel = netdev_priv(dev);
345
346         if (tunnel->parms.o_flags & TUNNEL_SEQ)
347                 tunnel->o_seqno++;
348
349         /* Push GRE header. */
350         gre_build_header(skb, tunnel->tun_hlen,
351                          tunnel->parms.o_flags, proto, tunnel->parms.o_key,
352                          htonl(tunnel->o_seqno));
353
354         ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
355 }
356
357 static int gre_handle_offloads(struct sk_buff *skb, bool csum)
358 {
359         return iptunnel_handle_offloads(skb, csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
360 }
361
362 static struct rtable *gre_get_rt(struct sk_buff *skb,
363                                  struct net_device *dev,
364                                  struct flowi4 *fl,
365                                  const struct ip_tunnel_key *key)
366 {
367         struct net *net = dev_net(dev);
368
369         memset(fl, 0, sizeof(*fl));
370         fl->daddr = key->u.ipv4.dst;
371         fl->saddr = key->u.ipv4.src;
372         fl->flowi4_tos = RT_TOS(key->tos);
373         fl->flowi4_mark = skb->mark;
374         fl->flowi4_proto = IPPROTO_GRE;
375
376         return ip_route_output_key(net, fl);
377 }
378
379 static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev,
380                         __be16 proto)
381 {
382         struct ip_tunnel_info *tun_info;
383         const struct ip_tunnel_key *key;
384         struct rtable *rt = NULL;
385         struct flowi4 fl;
386         int min_headroom;
387         int tunnel_hlen;
388         __be16 df, flags;
389         bool use_cache;
390         int err;
391
392         tun_info = skb_tunnel_info(skb);
393         if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
394                      ip_tunnel_info_af(tun_info) != AF_INET))
395                 goto err_free_skb;
396
397         key = &tun_info->key;
398         use_cache = ip_tunnel_dst_cache_usable(skb, tun_info);
399         if (use_cache)
400                 rt = dst_cache_get_ip4(&tun_info->dst_cache, &fl.saddr);
401         if (!rt) {
402                 rt = gre_get_rt(skb, dev, &fl, key);
403                 if (IS_ERR(rt))
404                                 goto err_free_skb;
405                 if (use_cache)
406                         dst_cache_set_ip4(&tun_info->dst_cache, &rt->dst,
407                                           fl.saddr);
408         }
409
410         tunnel_hlen = gre_calc_hlen(key->tun_flags);
411
412         min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len
413                         + tunnel_hlen + sizeof(struct iphdr);
414         if (skb_headroom(skb) < min_headroom || skb_header_cloned(skb)) {
415                 int head_delta = SKB_DATA_ALIGN(min_headroom -
416                                                 skb_headroom(skb) +
417                                                 16);
418                 err = pskb_expand_head(skb, max_t(int, head_delta, 0),
419                                        0, GFP_ATOMIC);
420                 if (unlikely(err))
421                         goto err_free_rt;
422         }
423
424         /* Push Tunnel header. */
425         if (gre_handle_offloads(skb, !!(tun_info->key.tun_flags & TUNNEL_CSUM)))
426                 goto err_free_rt;
427
428         flags = tun_info->key.tun_flags & (TUNNEL_CSUM | TUNNEL_KEY);
429         gre_build_header(skb, tunnel_hlen, flags, proto,
430                          tunnel_id_to_key32(tun_info->key.tun_id), 0);
431
432         df = key->tun_flags & TUNNEL_DONT_FRAGMENT ?  htons(IP_DF) : 0;
433
434         iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,
435                       key->tos, key->ttl, df, false);
436         return;
437
438 err_free_rt:
439         ip_rt_put(rt);
440 err_free_skb:
441         kfree_skb(skb);
442         dev->stats.tx_dropped++;
443 }
444
445 static int gre_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
446 {
447         struct ip_tunnel_info *info = skb_tunnel_info(skb);
448         struct rtable *rt;
449         struct flowi4 fl4;
450
451         if (ip_tunnel_info_af(info) != AF_INET)
452                 return -EINVAL;
453
454         rt = gre_get_rt(skb, dev, &fl4, &info->key);
455         if (IS_ERR(rt))
456                 return PTR_ERR(rt);
457
458         ip_rt_put(rt);
459         info->key.u.ipv4.src = fl4.saddr;
460         return 0;
461 }
462
463 static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
464                               struct net_device *dev)
465 {
466         struct ip_tunnel *tunnel = netdev_priv(dev);
467         const struct iphdr *tnl_params;
468
469         if (tunnel->collect_md) {
470                 gre_fb_xmit(skb, dev, skb->protocol);
471                 return NETDEV_TX_OK;
472         }
473
474         if (dev->header_ops) {
475                 /* Need space for new headers */
476                 if (skb_cow_head(skb, dev->needed_headroom -
477                                       (tunnel->hlen + sizeof(struct iphdr))))
478                         goto free_skb;
479
480                 tnl_params = (const struct iphdr *)skb->data;
481
482                 /* Pull skb since ip_tunnel_xmit() needs skb->data pointing
483                  * to gre header.
484                  */
485                 skb_pull(skb, tunnel->hlen + sizeof(struct iphdr));
486                 skb_reset_mac_header(skb);
487         } else {
488                 if (skb_cow_head(skb, dev->needed_headroom))
489                         goto free_skb;
490
491                 tnl_params = &tunnel->parms.iph;
492         }
493
494         if (gre_handle_offloads(skb, !!(tunnel->parms.o_flags & TUNNEL_CSUM)))
495                 goto free_skb;
496
497         __gre_xmit(skb, dev, tnl_params, skb->protocol);
498         return NETDEV_TX_OK;
499
500 free_skb:
501         kfree_skb(skb);
502         dev->stats.tx_dropped++;
503         return NETDEV_TX_OK;
504 }
505
506 static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
507                                 struct net_device *dev)
508 {
509         struct ip_tunnel *tunnel = netdev_priv(dev);
510
511         if (tunnel->collect_md) {
512                 gre_fb_xmit(skb, dev, htons(ETH_P_TEB));
513                 return NETDEV_TX_OK;
514         }
515
516         if (gre_handle_offloads(skb, !!(tunnel->parms.o_flags & TUNNEL_CSUM)))
517                 goto free_skb;
518
519         if (skb_cow_head(skb, dev->needed_headroom))
520                 goto free_skb;
521
522         __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_TEB));
523         return NETDEV_TX_OK;
524
525 free_skb:
526         kfree_skb(skb);
527         dev->stats.tx_dropped++;
528         return NETDEV_TX_OK;
529 }
530
531 static int ipgre_tunnel_ioctl(struct net_device *dev,
532                               struct ifreq *ifr, int cmd)
533 {
534         int err;
535         struct ip_tunnel_parm p;
536
537         if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
538                 return -EFAULT;
539         if (cmd == SIOCADDTUNNEL || cmd == SIOCCHGTUNNEL) {
540                 if (p.iph.version != 4 || p.iph.protocol != IPPROTO_GRE ||
541                     p.iph.ihl != 5 || (p.iph.frag_off&htons(~IP_DF)) ||
542                     ((p.i_flags|p.o_flags)&(GRE_VERSION|GRE_ROUTING)))
543                         return -EINVAL;
544         }
545         p.i_flags = gre_flags_to_tnl_flags(p.i_flags);
546         p.o_flags = gre_flags_to_tnl_flags(p.o_flags);
547
548         err = ip_tunnel_ioctl(dev, &p, cmd);
549         if (err)
550                 return err;
551
552         p.i_flags = gre_tnl_flags_to_gre_flags(p.i_flags);
553         p.o_flags = gre_tnl_flags_to_gre_flags(p.o_flags);
554
555         if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
556                 return -EFAULT;
557         return 0;
558 }
559
560 /* Nice toy. Unfortunately, useless in real life :-)
561    It allows to construct virtual multiprotocol broadcast "LAN"
562    over the Internet, provided multicast routing is tuned.
563
564
565    I have no idea was this bicycle invented before me,
566    so that I had to set ARPHRD_IPGRE to a random value.
567    I have an impression, that Cisco could make something similar,
568    but this feature is apparently missing in IOS<=11.2(8).
569
570    I set up 10.66.66/24 and fec0:6666:6666::0/96 as virtual networks
571    with broadcast 224.66.66.66. If you have access to mbone, play with me :-)
572
573    ping -t 255 224.66.66.66
574
575    If nobody answers, mbone does not work.
576
577    ip tunnel add Universe mode gre remote 224.66.66.66 local <Your_real_addr> ttl 255
578    ip addr add 10.66.66.<somewhat>/24 dev Universe
579    ifconfig Universe up
580    ifconfig Universe add fe80::<Your_real_addr>/10
581    ifconfig Universe add fec0:6666:6666::<Your_real_addr>/96
582    ftp 10.66.66.66
583    ...
584    ftp fec0:6666:6666::193.233.7.65
585    ...
586  */
587 static int ipgre_header(struct sk_buff *skb, struct net_device *dev,
588                         unsigned short type,
589                         const void *daddr, const void *saddr, unsigned int len)
590 {
591         struct ip_tunnel *t = netdev_priv(dev);
592         struct iphdr *iph;
593         struct gre_base_hdr *greh;
594
595         iph = (struct iphdr *)skb_push(skb, t->hlen + sizeof(*iph));
596         greh = (struct gre_base_hdr *)(iph+1);
597         greh->flags = gre_tnl_flags_to_gre_flags(t->parms.o_flags);
598         greh->protocol = htons(type);
599
600         memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
601
602         /* Set the source hardware address. */
603         if (saddr)
604                 memcpy(&iph->saddr, saddr, 4);
605         if (daddr)
606                 memcpy(&iph->daddr, daddr, 4);
607         if (iph->daddr)
608                 return t->hlen + sizeof(*iph);
609
610         return -(t->hlen + sizeof(*iph));
611 }
612
613 static int ipgre_header_parse(const struct sk_buff *skb, unsigned char *haddr)
614 {
615         const struct iphdr *iph = (const struct iphdr *) skb_mac_header(skb);
616         memcpy(haddr, &iph->saddr, 4);
617         return 4;
618 }
619
620 static const struct header_ops ipgre_header_ops = {
621         .create = ipgre_header,
622         .parse  = ipgre_header_parse,
623 };
624
625 #ifdef CONFIG_NET_IPGRE_BROADCAST
626 static int ipgre_open(struct net_device *dev)
627 {
628         struct ip_tunnel *t = netdev_priv(dev);
629
630         if (ipv4_is_multicast(t->parms.iph.daddr)) {
631                 struct flowi4 fl4;
632                 struct rtable *rt;
633
634                 rt = ip_route_output_gre(t->net, &fl4,
635                                          t->parms.iph.daddr,
636                                          t->parms.iph.saddr,
637                                          t->parms.o_key,
638                                          RT_TOS(t->parms.iph.tos),
639                                          t->parms.link);
640                 if (IS_ERR(rt))
641                         return -EADDRNOTAVAIL;
642                 dev = rt->dst.dev;
643                 ip_rt_put(rt);
644                 if (!__in_dev_get_rtnl(dev))
645                         return -EADDRNOTAVAIL;
646                 t->mlink = dev->ifindex;
647                 ip_mc_inc_group(__in_dev_get_rtnl(dev), t->parms.iph.daddr);
648         }
649         return 0;
650 }
651
652 static int ipgre_close(struct net_device *dev)
653 {
654         struct ip_tunnel *t = netdev_priv(dev);
655
656         if (ipv4_is_multicast(t->parms.iph.daddr) && t->mlink) {
657                 struct in_device *in_dev;
658                 in_dev = inetdev_by_index(t->net, t->mlink);
659                 if (in_dev)
660                         ip_mc_dec_group(in_dev, t->parms.iph.daddr);
661         }
662         return 0;
663 }
664 #endif
665
666 static const struct net_device_ops ipgre_netdev_ops = {
667         .ndo_init               = ipgre_tunnel_init,
668         .ndo_uninit             = ip_tunnel_uninit,
669 #ifdef CONFIG_NET_IPGRE_BROADCAST
670         .ndo_open               = ipgre_open,
671         .ndo_stop               = ipgre_close,
672 #endif
673         .ndo_start_xmit         = ipgre_xmit,
674         .ndo_do_ioctl           = ipgre_tunnel_ioctl,
675         .ndo_change_mtu         = ip_tunnel_change_mtu,
676         .ndo_get_stats64        = ip_tunnel_get_stats64,
677         .ndo_get_iflink         = ip_tunnel_get_iflink,
678 };
679
680 #define GRE_FEATURES (NETIF_F_SG |              \
681                       NETIF_F_FRAGLIST |        \
682                       NETIF_F_HIGHDMA |         \
683                       NETIF_F_HW_CSUM)
684
685 static void ipgre_tunnel_setup(struct net_device *dev)
686 {
687         dev->netdev_ops         = &ipgre_netdev_ops;
688         dev->type               = ARPHRD_IPGRE;
689         ip_tunnel_setup(dev, ipgre_net_id);
690 }
691
692 static void __gre_tunnel_init(struct net_device *dev)
693 {
694         struct ip_tunnel *tunnel;
695         int t_hlen;
696
697         tunnel = netdev_priv(dev);
698         tunnel->tun_hlen = gre_calc_hlen(tunnel->parms.o_flags);
699         tunnel->parms.iph.protocol = IPPROTO_GRE;
700
701         tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;
702
703         t_hlen = tunnel->hlen + sizeof(struct iphdr);
704
705         dev->needed_headroom    = LL_MAX_HEADER + t_hlen + 4;
706         dev->mtu                = ETH_DATA_LEN - t_hlen - 4;
707
708         dev->features           |= GRE_FEATURES;
709         dev->hw_features        |= GRE_FEATURES;
710
711         if (!(tunnel->parms.o_flags & TUNNEL_SEQ)) {
712                 /* TCP offload with GRE SEQ is not supported, nor
713                  * can we support 2 levels of outer headers requiring
714                  * an update.
715                  */
716                 if (!(tunnel->parms.o_flags & TUNNEL_CSUM) ||
717                     (tunnel->encap.type == TUNNEL_ENCAP_NONE)) {
718                         dev->features    |= NETIF_F_GSO_SOFTWARE;
719                         dev->hw_features |= NETIF_F_GSO_SOFTWARE;
720                 }
721
722                 /* Can use a lockless transmit, unless we generate
723                  * output sequences
724                  */
725                 dev->features |= NETIF_F_LLTX;
726         }
727 }
728
729 static int ipgre_tunnel_init(struct net_device *dev)
730 {
731         struct ip_tunnel *tunnel = netdev_priv(dev);
732         struct iphdr *iph = &tunnel->parms.iph;
733
734         __gre_tunnel_init(dev);
735
736         memcpy(dev->dev_addr, &iph->saddr, 4);
737         memcpy(dev->broadcast, &iph->daddr, 4);
738
739         dev->flags              = IFF_NOARP;
740         netif_keep_dst(dev);
741         dev->addr_len           = 4;
742
743         if (iph->daddr && !tunnel->collect_md) {
744 #ifdef CONFIG_NET_IPGRE_BROADCAST
745                 if (ipv4_is_multicast(iph->daddr)) {
746                         if (!iph->saddr)
747                                 return -EINVAL;
748                         dev->flags = IFF_BROADCAST;
749                         dev->header_ops = &ipgre_header_ops;
750                 }
751 #endif
752         } else if (!tunnel->collect_md) {
753                 dev->header_ops = &ipgre_header_ops;
754         }
755
756         return ip_tunnel_init(dev);
757 }
758
759 static const struct gre_protocol ipgre_protocol = {
760         .handler     = gre_rcv,
761         .err_handler = gre_err,
762 };
763
764 static int __net_init ipgre_init_net(struct net *net)
765 {
766         return ip_tunnel_init_net(net, ipgre_net_id, &ipgre_link_ops, NULL);
767 }
768
769 static void __net_exit ipgre_exit_net(struct net *net)
770 {
771         struct ip_tunnel_net *itn = net_generic(net, ipgre_net_id);
772         ip_tunnel_delete_net(itn, &ipgre_link_ops);
773 }
774
775 static struct pernet_operations ipgre_net_ops = {
776         .init = ipgre_init_net,
777         .exit = ipgre_exit_net,
778         .id   = &ipgre_net_id,
779         .size = sizeof(struct ip_tunnel_net),
780 };
781
782 static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
783 {
784         __be16 flags;
785
786         if (!data)
787                 return 0;
788
789         flags = 0;
790         if (data[IFLA_GRE_IFLAGS])
791                 flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
792         if (data[IFLA_GRE_OFLAGS])
793                 flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
794         if (flags & (GRE_VERSION|GRE_ROUTING))
795                 return -EINVAL;
796
797         if (data[IFLA_GRE_COLLECT_METADATA] &&
798             data[IFLA_GRE_ENCAP_TYPE] &&
799             nla_get_u16(data[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE)
800                 return -EINVAL;
801
802         return 0;
803 }
804
805 static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
806 {
807         __be32 daddr;
808
809         if (tb[IFLA_ADDRESS]) {
810                 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
811                         return -EINVAL;
812                 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
813                         return -EADDRNOTAVAIL;
814         }
815
816         if (!data)
817                 goto out;
818
819         if (data[IFLA_GRE_REMOTE]) {
820                 memcpy(&daddr, nla_data(data[IFLA_GRE_REMOTE]), 4);
821                 if (!daddr)
822                         return -EINVAL;
823         }
824
825 out:
826         return ipgre_tunnel_validate(tb, data);
827 }
828
829 static int ipgre_netlink_parms(struct net_device *dev,
830                                 struct nlattr *data[],
831                                 struct nlattr *tb[],
832                                 struct ip_tunnel_parm *parms,
833                                 __u32 *fwmark)
834 {
835         struct ip_tunnel *t = netdev_priv(dev);
836
837         memset(parms, 0, sizeof(*parms));
838
839         parms->iph.protocol = IPPROTO_GRE;
840
841         if (!data)
842                 return 0;
843
844         if (data[IFLA_GRE_LINK])
845                 parms->link = nla_get_u32(data[IFLA_GRE_LINK]);
846
847         if (data[IFLA_GRE_IFLAGS])
848                 parms->i_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_IFLAGS]));
849
850         if (data[IFLA_GRE_OFLAGS])
851                 parms->o_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_OFLAGS]));
852
853         if (data[IFLA_GRE_IKEY])
854                 parms->i_key = nla_get_be32(data[IFLA_GRE_IKEY]);
855
856         if (data[IFLA_GRE_OKEY])
857                 parms->o_key = nla_get_be32(data[IFLA_GRE_OKEY]);
858
859         if (data[IFLA_GRE_LOCAL])
860                 parms->iph.saddr = nla_get_in_addr(data[IFLA_GRE_LOCAL]);
861
862         if (data[IFLA_GRE_REMOTE])
863                 parms->iph.daddr = nla_get_in_addr(data[IFLA_GRE_REMOTE]);
864
865         if (data[IFLA_GRE_TTL])
866                 parms->iph.ttl = nla_get_u8(data[IFLA_GRE_TTL]);
867
868         if (data[IFLA_GRE_TOS])
869                 parms->iph.tos = nla_get_u8(data[IFLA_GRE_TOS]);
870
871         if (!data[IFLA_GRE_PMTUDISC] || nla_get_u8(data[IFLA_GRE_PMTUDISC])) {
872                 if (t->ignore_df)
873                         return -EINVAL;
874                 parms->iph.frag_off = htons(IP_DF);
875         }
876
877         if (data[IFLA_GRE_COLLECT_METADATA]) {
878                 t->collect_md = true;
879                 if (dev->type == ARPHRD_IPGRE)
880                         dev->type = ARPHRD_NONE;
881         }
882
883         if (data[IFLA_GRE_IGNORE_DF]) {
884                 if (nla_get_u8(data[IFLA_GRE_IGNORE_DF])
885                   && (parms->iph.frag_off & htons(IP_DF)))
886                         return -EINVAL;
887                 t->ignore_df = !!nla_get_u8(data[IFLA_GRE_IGNORE_DF]);
888         }
889
890         if (data[IFLA_GRE_FWMARK])
891                 *fwmark = nla_get_u32(data[IFLA_GRE_FWMARK]);
892
893         return 0;
894 }
895
896 /* This function returns true when ENCAP attributes are present in the nl msg */
897 static bool ipgre_netlink_encap_parms(struct nlattr *data[],
898                                       struct ip_tunnel_encap *ipencap)
899 {
900         bool ret = false;
901
902         memset(ipencap, 0, sizeof(*ipencap));
903
904         if (!data)
905                 return ret;
906
907         if (data[IFLA_GRE_ENCAP_TYPE]) {
908                 ret = true;
909                 ipencap->type = nla_get_u16(data[IFLA_GRE_ENCAP_TYPE]);
910         }
911
912         if (data[IFLA_GRE_ENCAP_FLAGS]) {
913                 ret = true;
914                 ipencap->flags = nla_get_u16(data[IFLA_GRE_ENCAP_FLAGS]);
915         }
916
917         if (data[IFLA_GRE_ENCAP_SPORT]) {
918                 ret = true;
919                 ipencap->sport = nla_get_be16(data[IFLA_GRE_ENCAP_SPORT]);
920         }
921
922         if (data[IFLA_GRE_ENCAP_DPORT]) {
923                 ret = true;
924                 ipencap->dport = nla_get_be16(data[IFLA_GRE_ENCAP_DPORT]);
925         }
926
927         return ret;
928 }
929
930 static int gre_tap_init(struct net_device *dev)
931 {
932         __gre_tunnel_init(dev);
933         dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
934
935         return ip_tunnel_init(dev);
936 }
937
938 static const struct net_device_ops gre_tap_netdev_ops = {
939         .ndo_init               = gre_tap_init,
940         .ndo_uninit             = ip_tunnel_uninit,
941         .ndo_start_xmit         = gre_tap_xmit,
942         .ndo_set_mac_address    = eth_mac_addr,
943         .ndo_validate_addr      = eth_validate_addr,
944         .ndo_change_mtu         = ip_tunnel_change_mtu,
945         .ndo_get_stats64        = ip_tunnel_get_stats64,
946         .ndo_get_iflink         = ip_tunnel_get_iflink,
947         .ndo_fill_metadata_dst  = gre_fill_metadata_dst,
948 };
949
950 static void ipgre_tap_setup(struct net_device *dev)
951 {
952         ether_setup(dev);
953         dev->netdev_ops = &gre_tap_netdev_ops;
954         dev->priv_flags &= ~IFF_TX_SKB_SHARING;
955         dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
956         ip_tunnel_setup(dev, gre_tap_net_id);
957 }
958
959 static int ipgre_newlink(struct net *src_net, struct net_device *dev,
960                          struct nlattr *tb[], struct nlattr *data[])
961 {
962         struct ip_tunnel_parm p;
963         struct ip_tunnel_encap ipencap;
964         __u32 fwmark = 0;
965         int err;
966
967         if (ipgre_netlink_encap_parms(data, &ipencap)) {
968                 struct ip_tunnel *t = netdev_priv(dev);
969                 err = ip_tunnel_encap_setup(t, &ipencap);
970
971                 if (err < 0)
972                         return err;
973         }
974
975         err = ipgre_netlink_parms(dev, data, tb, &p, &fwmark);
976         if (err < 0)
977                 return err;
978         return ip_tunnel_newlink(dev, tb, &p, fwmark);
979 }
980
981 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
982                             struct nlattr *data[])
983 {
984         struct ip_tunnel *t = netdev_priv(dev);
985         struct ip_tunnel_parm p;
986         struct ip_tunnel_encap ipencap;
987         __u32 fwmark = t->fwmark;
988         int err;
989
990         if (ipgre_netlink_encap_parms(data, &ipencap)) {
991                 err = ip_tunnel_encap_setup(t, &ipencap);
992
993                 if (err < 0)
994                         return err;
995         }
996
997         err = ipgre_netlink_parms(dev, data, tb, &p, &fwmark);
998         if (err < 0)
999                 return err;
1000         return ip_tunnel_changelink(dev, tb, &p, fwmark);
1001 }
1002
1003 static size_t ipgre_get_size(const struct net_device *dev)
1004 {
1005         return
1006                 /* IFLA_GRE_LINK */
1007                 nla_total_size(4) +
1008                 /* IFLA_GRE_IFLAGS */
1009                 nla_total_size(2) +
1010                 /* IFLA_GRE_OFLAGS */
1011                 nla_total_size(2) +
1012                 /* IFLA_GRE_IKEY */
1013                 nla_total_size(4) +
1014                 /* IFLA_GRE_OKEY */
1015                 nla_total_size(4) +
1016                 /* IFLA_GRE_LOCAL */
1017                 nla_total_size(4) +
1018                 /* IFLA_GRE_REMOTE */
1019                 nla_total_size(4) +
1020                 /* IFLA_GRE_TTL */
1021                 nla_total_size(1) +
1022                 /* IFLA_GRE_TOS */
1023                 nla_total_size(1) +
1024                 /* IFLA_GRE_PMTUDISC */
1025                 nla_total_size(1) +
1026                 /* IFLA_GRE_ENCAP_TYPE */
1027                 nla_total_size(2) +
1028                 /* IFLA_GRE_ENCAP_FLAGS */
1029                 nla_total_size(2) +
1030                 /* IFLA_GRE_ENCAP_SPORT */
1031                 nla_total_size(2) +
1032                 /* IFLA_GRE_ENCAP_DPORT */
1033                 nla_total_size(2) +
1034                 /* IFLA_GRE_COLLECT_METADATA */
1035                 nla_total_size(0) +
1036                 /* IFLA_GRE_IGNORE_DF */
1037                 nla_total_size(1) +
1038                 /* IFLA_GRE_FWMARK */
1039                 nla_total_size(4) +
1040                 0;
1041 }
1042
1043 static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
1044 {
1045         struct ip_tunnel *t = netdev_priv(dev);
1046         struct ip_tunnel_parm *p = &t->parms;
1047
1048         if (nla_put_u32(skb, IFLA_GRE_LINK, p->link) ||
1049             nla_put_be16(skb, IFLA_GRE_IFLAGS,
1050                          gre_tnl_flags_to_gre_flags(p->i_flags)) ||
1051             nla_put_be16(skb, IFLA_GRE_OFLAGS,
1052                          gre_tnl_flags_to_gre_flags(p->o_flags)) ||
1053             nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) ||
1054             nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) ||
1055             nla_put_in_addr(skb, IFLA_GRE_LOCAL, p->iph.saddr) ||
1056             nla_put_in_addr(skb, IFLA_GRE_REMOTE, p->iph.daddr) ||
1057             nla_put_u8(skb, IFLA_GRE_TTL, p->iph.ttl) ||
1058             nla_put_u8(skb, IFLA_GRE_TOS, p->iph.tos) ||
1059             nla_put_u8(skb, IFLA_GRE_PMTUDISC,
1060                        !!(p->iph.frag_off & htons(IP_DF))) ||
1061             nla_put_u32(skb, IFLA_GRE_FWMARK, t->fwmark))
1062                 goto nla_put_failure;
1063
1064         if (nla_put_u16(skb, IFLA_GRE_ENCAP_TYPE,
1065                         t->encap.type) ||
1066             nla_put_be16(skb, IFLA_GRE_ENCAP_SPORT,
1067                          t->encap.sport) ||
1068             nla_put_be16(skb, IFLA_GRE_ENCAP_DPORT,
1069                          t->encap.dport) ||
1070             nla_put_u16(skb, IFLA_GRE_ENCAP_FLAGS,
1071                         t->encap.flags))
1072                 goto nla_put_failure;
1073
1074         if (nla_put_u8(skb, IFLA_GRE_IGNORE_DF, t->ignore_df))
1075                 goto nla_put_failure;
1076
1077         if (t->collect_md) {
1078                 if (nla_put_flag(skb, IFLA_GRE_COLLECT_METADATA))
1079                         goto nla_put_failure;
1080         }
1081
1082         return 0;
1083
1084 nla_put_failure:
1085         return -EMSGSIZE;
1086 }
1087
1088 static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
1089         [IFLA_GRE_LINK]         = { .type = NLA_U32 },
1090         [IFLA_GRE_IFLAGS]       = { .type = NLA_U16 },
1091         [IFLA_GRE_OFLAGS]       = { .type = NLA_U16 },
1092         [IFLA_GRE_IKEY]         = { .type = NLA_U32 },
1093         [IFLA_GRE_OKEY]         = { .type = NLA_U32 },
1094         [IFLA_GRE_LOCAL]        = { .len = FIELD_SIZEOF(struct iphdr, saddr) },
1095         [IFLA_GRE_REMOTE]       = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1096         [IFLA_GRE_TTL]          = { .type = NLA_U8 },
1097         [IFLA_GRE_TOS]          = { .type = NLA_U8 },
1098         [IFLA_GRE_PMTUDISC]     = { .type = NLA_U8 },
1099         [IFLA_GRE_ENCAP_TYPE]   = { .type = NLA_U16 },
1100         [IFLA_GRE_ENCAP_FLAGS]  = { .type = NLA_U16 },
1101         [IFLA_GRE_ENCAP_SPORT]  = { .type = NLA_U16 },
1102         [IFLA_GRE_ENCAP_DPORT]  = { .type = NLA_U16 },
1103         [IFLA_GRE_COLLECT_METADATA]     = { .type = NLA_FLAG },
1104         [IFLA_GRE_IGNORE_DF]    = { .type = NLA_U8 },
1105         [IFLA_GRE_FWMARK]       = { .type = NLA_U32 },
1106 };
1107
1108 static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
1109         .kind           = "gre",
1110         .maxtype        = IFLA_GRE_MAX,
1111         .policy         = ipgre_policy,
1112         .priv_size      = sizeof(struct ip_tunnel),
1113         .setup          = ipgre_tunnel_setup,
1114         .validate       = ipgre_tunnel_validate,
1115         .newlink        = ipgre_newlink,
1116         .changelink     = ipgre_changelink,
1117         .dellink        = ip_tunnel_dellink,
1118         .get_size       = ipgre_get_size,
1119         .fill_info      = ipgre_fill_info,
1120         .get_link_net   = ip_tunnel_get_link_net,
1121 };
1122
1123 static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
1124         .kind           = "gretap",
1125         .maxtype        = IFLA_GRE_MAX,
1126         .policy         = ipgre_policy,
1127         .priv_size      = sizeof(struct ip_tunnel),
1128         .setup          = ipgre_tap_setup,
1129         .validate       = ipgre_tap_validate,
1130         .newlink        = ipgre_newlink,
1131         .changelink     = ipgre_changelink,
1132         .dellink        = ip_tunnel_dellink,
1133         .get_size       = ipgre_get_size,
1134         .fill_info      = ipgre_fill_info,
1135         .get_link_net   = ip_tunnel_get_link_net,
1136 };
1137
1138 struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
1139                                         u8 name_assign_type)
1140 {
1141         struct nlattr *tb[IFLA_MAX + 1];
1142         struct net_device *dev;
1143         LIST_HEAD(list_kill);
1144         struct ip_tunnel *t;
1145         int err;
1146
1147         memset(&tb, 0, sizeof(tb));
1148
1149         dev = rtnl_create_link(net, name, name_assign_type,
1150                                &ipgre_tap_ops, tb);
1151         if (IS_ERR(dev))
1152                 return dev;
1153
1154         /* Configure flow based GRE device. */
1155         t = netdev_priv(dev);
1156         t->collect_md = true;
1157
1158         err = ipgre_newlink(net, dev, tb, NULL);
1159         if (err < 0) {
1160                 free_netdev(dev);
1161                 return ERR_PTR(err);
1162         }
1163
1164         /* openvswitch users expect packet sizes to be unrestricted,
1165          * so set the largest MTU we can.
1166          */
1167         err = __ip_tunnel_change_mtu(dev, IP_MAX_MTU, false);
1168         if (err)
1169                 goto out;
1170
1171         err = rtnl_configure_link(dev, NULL);
1172         if (err < 0)
1173                 goto out;
1174
1175         return dev;
1176 out:
1177         ip_tunnel_dellink(dev, &list_kill);
1178         unregister_netdevice_many(&list_kill);
1179         return ERR_PTR(err);
1180 }
1181 EXPORT_SYMBOL_GPL(gretap_fb_dev_create);
1182
1183 static int __net_init ipgre_tap_init_net(struct net *net)
1184 {
1185         return ip_tunnel_init_net(net, gre_tap_net_id, &ipgre_tap_ops, "gretap0");
1186 }
1187
1188 static void __net_exit ipgre_tap_exit_net(struct net *net)
1189 {
1190         struct ip_tunnel_net *itn = net_generic(net, gre_tap_net_id);
1191         ip_tunnel_delete_net(itn, &ipgre_tap_ops);
1192 }
1193
1194 static struct pernet_operations ipgre_tap_net_ops = {
1195         .init = ipgre_tap_init_net,
1196         .exit = ipgre_tap_exit_net,
1197         .id   = &gre_tap_net_id,
1198         .size = sizeof(struct ip_tunnel_net),
1199 };
1200
1201 static int __init ipgre_init(void)
1202 {
1203         int err;
1204
1205         pr_info("GRE over IPv4 tunneling driver\n");
1206
1207         err = register_pernet_device(&ipgre_net_ops);
1208         if (err < 0)
1209                 return err;
1210
1211         err = register_pernet_device(&ipgre_tap_net_ops);
1212         if (err < 0)
1213                 goto pnet_tap_faied;
1214
1215         err = gre_add_protocol(&ipgre_protocol, GREPROTO_CISCO);
1216         if (err < 0) {
1217                 pr_info("%s: can't add protocol\n", __func__);
1218                 goto add_proto_failed;
1219         }
1220
1221         err = rtnl_link_register(&ipgre_link_ops);
1222         if (err < 0)
1223                 goto rtnl_link_failed;
1224
1225         err = rtnl_link_register(&ipgre_tap_ops);
1226         if (err < 0)
1227                 goto tap_ops_failed;
1228
1229         return 0;
1230
1231 tap_ops_failed:
1232         rtnl_link_unregister(&ipgre_link_ops);
1233 rtnl_link_failed:
1234         gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1235 add_proto_failed:
1236         unregister_pernet_device(&ipgre_tap_net_ops);
1237 pnet_tap_faied:
1238         unregister_pernet_device(&ipgre_net_ops);
1239         return err;
1240 }
1241
1242 static void __exit ipgre_fini(void)
1243 {
1244         rtnl_link_unregister(&ipgre_tap_ops);
1245         rtnl_link_unregister(&ipgre_link_ops);
1246         gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1247         unregister_pernet_device(&ipgre_tap_net_ops);
1248         unregister_pernet_device(&ipgre_net_ops);
1249 }
1250
1251 module_init(ipgre_init);
1252 module_exit(ipgre_fini);
1253 MODULE_LICENSE("GPL");
1254 MODULE_ALIAS_RTNL_LINK("gre");
1255 MODULE_ALIAS_RTNL_LINK("gretap");
1256 MODULE_ALIAS_NETDEV("gre0");
1257 MODULE_ALIAS_NETDEV("gretap0");