xref: /openbmc/linux/net/ipv4/ip_gre.c (revision 6dfcd296)
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 <asm/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 int ipgre_net_id __read_mostly;
117 static 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 {
834 	struct ip_tunnel *t = netdev_priv(dev);
835 
836 	memset(parms, 0, sizeof(*parms));
837 
838 	parms->iph.protocol = IPPROTO_GRE;
839 
840 	if (!data)
841 		return 0;
842 
843 	if (data[IFLA_GRE_LINK])
844 		parms->link = nla_get_u32(data[IFLA_GRE_LINK]);
845 
846 	if (data[IFLA_GRE_IFLAGS])
847 		parms->i_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_IFLAGS]));
848 
849 	if (data[IFLA_GRE_OFLAGS])
850 		parms->o_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_OFLAGS]));
851 
852 	if (data[IFLA_GRE_IKEY])
853 		parms->i_key = nla_get_be32(data[IFLA_GRE_IKEY]);
854 
855 	if (data[IFLA_GRE_OKEY])
856 		parms->o_key = nla_get_be32(data[IFLA_GRE_OKEY]);
857 
858 	if (data[IFLA_GRE_LOCAL])
859 		parms->iph.saddr = nla_get_in_addr(data[IFLA_GRE_LOCAL]);
860 
861 	if (data[IFLA_GRE_REMOTE])
862 		parms->iph.daddr = nla_get_in_addr(data[IFLA_GRE_REMOTE]);
863 
864 	if (data[IFLA_GRE_TTL])
865 		parms->iph.ttl = nla_get_u8(data[IFLA_GRE_TTL]);
866 
867 	if (data[IFLA_GRE_TOS])
868 		parms->iph.tos = nla_get_u8(data[IFLA_GRE_TOS]);
869 
870 	if (!data[IFLA_GRE_PMTUDISC] || nla_get_u8(data[IFLA_GRE_PMTUDISC])) {
871 		if (t->ignore_df)
872 			return -EINVAL;
873 		parms->iph.frag_off = htons(IP_DF);
874 	}
875 
876 	if (data[IFLA_GRE_COLLECT_METADATA]) {
877 		t->collect_md = true;
878 		if (dev->type == ARPHRD_IPGRE)
879 			dev->type = ARPHRD_NONE;
880 	}
881 
882 	if (data[IFLA_GRE_IGNORE_DF]) {
883 		if (nla_get_u8(data[IFLA_GRE_IGNORE_DF])
884 		  && (parms->iph.frag_off & htons(IP_DF)))
885 			return -EINVAL;
886 		t->ignore_df = !!nla_get_u8(data[IFLA_GRE_IGNORE_DF]);
887 	}
888 
889 	return 0;
890 }
891 
892 /* This function returns true when ENCAP attributes are present in the nl msg */
893 static bool ipgre_netlink_encap_parms(struct nlattr *data[],
894 				      struct ip_tunnel_encap *ipencap)
895 {
896 	bool ret = false;
897 
898 	memset(ipencap, 0, sizeof(*ipencap));
899 
900 	if (!data)
901 		return ret;
902 
903 	if (data[IFLA_GRE_ENCAP_TYPE]) {
904 		ret = true;
905 		ipencap->type = nla_get_u16(data[IFLA_GRE_ENCAP_TYPE]);
906 	}
907 
908 	if (data[IFLA_GRE_ENCAP_FLAGS]) {
909 		ret = true;
910 		ipencap->flags = nla_get_u16(data[IFLA_GRE_ENCAP_FLAGS]);
911 	}
912 
913 	if (data[IFLA_GRE_ENCAP_SPORT]) {
914 		ret = true;
915 		ipencap->sport = nla_get_be16(data[IFLA_GRE_ENCAP_SPORT]);
916 	}
917 
918 	if (data[IFLA_GRE_ENCAP_DPORT]) {
919 		ret = true;
920 		ipencap->dport = nla_get_be16(data[IFLA_GRE_ENCAP_DPORT]);
921 	}
922 
923 	return ret;
924 }
925 
926 static int gre_tap_init(struct net_device *dev)
927 {
928 	__gre_tunnel_init(dev);
929 	dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
930 
931 	return ip_tunnel_init(dev);
932 }
933 
934 static const struct net_device_ops gre_tap_netdev_ops = {
935 	.ndo_init		= gre_tap_init,
936 	.ndo_uninit		= ip_tunnel_uninit,
937 	.ndo_start_xmit		= gre_tap_xmit,
938 	.ndo_set_mac_address 	= eth_mac_addr,
939 	.ndo_validate_addr	= eth_validate_addr,
940 	.ndo_change_mtu		= ip_tunnel_change_mtu,
941 	.ndo_get_stats64	= ip_tunnel_get_stats64,
942 	.ndo_get_iflink		= ip_tunnel_get_iflink,
943 	.ndo_fill_metadata_dst	= gre_fill_metadata_dst,
944 };
945 
946 static void ipgre_tap_setup(struct net_device *dev)
947 {
948 	ether_setup(dev);
949 	dev->netdev_ops	= &gre_tap_netdev_ops;
950 	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
951 	dev->priv_flags	|= IFF_LIVE_ADDR_CHANGE;
952 	ip_tunnel_setup(dev, gre_tap_net_id);
953 }
954 
955 static int ipgre_newlink(struct net *src_net, struct net_device *dev,
956 			 struct nlattr *tb[], struct nlattr *data[])
957 {
958 	struct ip_tunnel_parm p;
959 	struct ip_tunnel_encap ipencap;
960 	int err;
961 
962 	if (ipgre_netlink_encap_parms(data, &ipencap)) {
963 		struct ip_tunnel *t = netdev_priv(dev);
964 		err = ip_tunnel_encap_setup(t, &ipencap);
965 
966 		if (err < 0)
967 			return err;
968 	}
969 
970 	err = ipgre_netlink_parms(dev, data, tb, &p);
971 	if (err < 0)
972 		return err;
973 	return ip_tunnel_newlink(dev, tb, &p);
974 }
975 
976 static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
977 			    struct nlattr *data[])
978 {
979 	struct ip_tunnel_parm p;
980 	struct ip_tunnel_encap ipencap;
981 	int err;
982 
983 	if (ipgre_netlink_encap_parms(data, &ipencap)) {
984 		struct ip_tunnel *t = netdev_priv(dev);
985 		err = ip_tunnel_encap_setup(t, &ipencap);
986 
987 		if (err < 0)
988 			return err;
989 	}
990 
991 	err = ipgre_netlink_parms(dev, data, tb, &p);
992 	if (err < 0)
993 		return err;
994 	return ip_tunnel_changelink(dev, tb, &p);
995 }
996 
997 static size_t ipgre_get_size(const struct net_device *dev)
998 {
999 	return
1000 		/* IFLA_GRE_LINK */
1001 		nla_total_size(4) +
1002 		/* IFLA_GRE_IFLAGS */
1003 		nla_total_size(2) +
1004 		/* IFLA_GRE_OFLAGS */
1005 		nla_total_size(2) +
1006 		/* IFLA_GRE_IKEY */
1007 		nla_total_size(4) +
1008 		/* IFLA_GRE_OKEY */
1009 		nla_total_size(4) +
1010 		/* IFLA_GRE_LOCAL */
1011 		nla_total_size(4) +
1012 		/* IFLA_GRE_REMOTE */
1013 		nla_total_size(4) +
1014 		/* IFLA_GRE_TTL */
1015 		nla_total_size(1) +
1016 		/* IFLA_GRE_TOS */
1017 		nla_total_size(1) +
1018 		/* IFLA_GRE_PMTUDISC */
1019 		nla_total_size(1) +
1020 		/* IFLA_GRE_ENCAP_TYPE */
1021 		nla_total_size(2) +
1022 		/* IFLA_GRE_ENCAP_FLAGS */
1023 		nla_total_size(2) +
1024 		/* IFLA_GRE_ENCAP_SPORT */
1025 		nla_total_size(2) +
1026 		/* IFLA_GRE_ENCAP_DPORT */
1027 		nla_total_size(2) +
1028 		/* IFLA_GRE_COLLECT_METADATA */
1029 		nla_total_size(0) +
1030 		/* IFLA_GRE_IGNORE_DF */
1031 		nla_total_size(1) +
1032 		0;
1033 }
1034 
1035 static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
1036 {
1037 	struct ip_tunnel *t = netdev_priv(dev);
1038 	struct ip_tunnel_parm *p = &t->parms;
1039 
1040 	if (nla_put_u32(skb, IFLA_GRE_LINK, p->link) ||
1041 	    nla_put_be16(skb, IFLA_GRE_IFLAGS,
1042 			 gre_tnl_flags_to_gre_flags(p->i_flags)) ||
1043 	    nla_put_be16(skb, IFLA_GRE_OFLAGS,
1044 			 gre_tnl_flags_to_gre_flags(p->o_flags)) ||
1045 	    nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) ||
1046 	    nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) ||
1047 	    nla_put_in_addr(skb, IFLA_GRE_LOCAL, p->iph.saddr) ||
1048 	    nla_put_in_addr(skb, IFLA_GRE_REMOTE, p->iph.daddr) ||
1049 	    nla_put_u8(skb, IFLA_GRE_TTL, p->iph.ttl) ||
1050 	    nla_put_u8(skb, IFLA_GRE_TOS, p->iph.tos) ||
1051 	    nla_put_u8(skb, IFLA_GRE_PMTUDISC,
1052 		       !!(p->iph.frag_off & htons(IP_DF))))
1053 		goto nla_put_failure;
1054 
1055 	if (nla_put_u16(skb, IFLA_GRE_ENCAP_TYPE,
1056 			t->encap.type) ||
1057 	    nla_put_be16(skb, IFLA_GRE_ENCAP_SPORT,
1058 			 t->encap.sport) ||
1059 	    nla_put_be16(skb, IFLA_GRE_ENCAP_DPORT,
1060 			 t->encap.dport) ||
1061 	    nla_put_u16(skb, IFLA_GRE_ENCAP_FLAGS,
1062 			t->encap.flags))
1063 		goto nla_put_failure;
1064 
1065 	if (nla_put_u8(skb, IFLA_GRE_IGNORE_DF, t->ignore_df))
1066 		goto nla_put_failure;
1067 
1068 	if (t->collect_md) {
1069 		if (nla_put_flag(skb, IFLA_GRE_COLLECT_METADATA))
1070 			goto nla_put_failure;
1071 	}
1072 
1073 	return 0;
1074 
1075 nla_put_failure:
1076 	return -EMSGSIZE;
1077 }
1078 
1079 static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
1080 	[IFLA_GRE_LINK]		= { .type = NLA_U32 },
1081 	[IFLA_GRE_IFLAGS]	= { .type = NLA_U16 },
1082 	[IFLA_GRE_OFLAGS]	= { .type = NLA_U16 },
1083 	[IFLA_GRE_IKEY]		= { .type = NLA_U32 },
1084 	[IFLA_GRE_OKEY]		= { .type = NLA_U32 },
1085 	[IFLA_GRE_LOCAL]	= { .len = FIELD_SIZEOF(struct iphdr, saddr) },
1086 	[IFLA_GRE_REMOTE]	= { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1087 	[IFLA_GRE_TTL]		= { .type = NLA_U8 },
1088 	[IFLA_GRE_TOS]		= { .type = NLA_U8 },
1089 	[IFLA_GRE_PMTUDISC]	= { .type = NLA_U8 },
1090 	[IFLA_GRE_ENCAP_TYPE]	= { .type = NLA_U16 },
1091 	[IFLA_GRE_ENCAP_FLAGS]	= { .type = NLA_U16 },
1092 	[IFLA_GRE_ENCAP_SPORT]	= { .type = NLA_U16 },
1093 	[IFLA_GRE_ENCAP_DPORT]	= { .type = NLA_U16 },
1094 	[IFLA_GRE_COLLECT_METADATA]	= { .type = NLA_FLAG },
1095 	[IFLA_GRE_IGNORE_DF]	= { .type = NLA_U8 },
1096 };
1097 
1098 static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
1099 	.kind		= "gre",
1100 	.maxtype	= IFLA_GRE_MAX,
1101 	.policy		= ipgre_policy,
1102 	.priv_size	= sizeof(struct ip_tunnel),
1103 	.setup		= ipgre_tunnel_setup,
1104 	.validate	= ipgre_tunnel_validate,
1105 	.newlink	= ipgre_newlink,
1106 	.changelink	= ipgre_changelink,
1107 	.dellink	= ip_tunnel_dellink,
1108 	.get_size	= ipgre_get_size,
1109 	.fill_info	= ipgre_fill_info,
1110 	.get_link_net	= ip_tunnel_get_link_net,
1111 };
1112 
1113 static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
1114 	.kind		= "gretap",
1115 	.maxtype	= IFLA_GRE_MAX,
1116 	.policy		= ipgre_policy,
1117 	.priv_size	= sizeof(struct ip_tunnel),
1118 	.setup		= ipgre_tap_setup,
1119 	.validate	= ipgre_tap_validate,
1120 	.newlink	= ipgre_newlink,
1121 	.changelink	= ipgre_changelink,
1122 	.dellink	= ip_tunnel_dellink,
1123 	.get_size	= ipgre_get_size,
1124 	.fill_info	= ipgre_fill_info,
1125 	.get_link_net	= ip_tunnel_get_link_net,
1126 };
1127 
1128 struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
1129 					u8 name_assign_type)
1130 {
1131 	struct nlattr *tb[IFLA_MAX + 1];
1132 	struct net_device *dev;
1133 	LIST_HEAD(list_kill);
1134 	struct ip_tunnel *t;
1135 	int err;
1136 
1137 	memset(&tb, 0, sizeof(tb));
1138 
1139 	dev = rtnl_create_link(net, name, name_assign_type,
1140 			       &ipgre_tap_ops, tb);
1141 	if (IS_ERR(dev))
1142 		return dev;
1143 
1144 	/* Configure flow based GRE device. */
1145 	t = netdev_priv(dev);
1146 	t->collect_md = true;
1147 
1148 	err = ipgre_newlink(net, dev, tb, NULL);
1149 	if (err < 0) {
1150 		free_netdev(dev);
1151 		return ERR_PTR(err);
1152 	}
1153 
1154 	/* openvswitch users expect packet sizes to be unrestricted,
1155 	 * so set the largest MTU we can.
1156 	 */
1157 	err = __ip_tunnel_change_mtu(dev, IP_MAX_MTU, false);
1158 	if (err)
1159 		goto out;
1160 
1161 	err = rtnl_configure_link(dev, NULL);
1162 	if (err < 0)
1163 		goto out;
1164 
1165 	return dev;
1166 out:
1167 	ip_tunnel_dellink(dev, &list_kill);
1168 	unregister_netdevice_many(&list_kill);
1169 	return ERR_PTR(err);
1170 }
1171 EXPORT_SYMBOL_GPL(gretap_fb_dev_create);
1172 
1173 static int __net_init ipgre_tap_init_net(struct net *net)
1174 {
1175 	return ip_tunnel_init_net(net, gre_tap_net_id, &ipgre_tap_ops, "gretap0");
1176 }
1177 
1178 static void __net_exit ipgre_tap_exit_net(struct net *net)
1179 {
1180 	struct ip_tunnel_net *itn = net_generic(net, gre_tap_net_id);
1181 	ip_tunnel_delete_net(itn, &ipgre_tap_ops);
1182 }
1183 
1184 static struct pernet_operations ipgre_tap_net_ops = {
1185 	.init = ipgre_tap_init_net,
1186 	.exit = ipgre_tap_exit_net,
1187 	.id   = &gre_tap_net_id,
1188 	.size = sizeof(struct ip_tunnel_net),
1189 };
1190 
1191 static int __init ipgre_init(void)
1192 {
1193 	int err;
1194 
1195 	pr_info("GRE over IPv4 tunneling driver\n");
1196 
1197 	err = register_pernet_device(&ipgre_net_ops);
1198 	if (err < 0)
1199 		return err;
1200 
1201 	err = register_pernet_device(&ipgre_tap_net_ops);
1202 	if (err < 0)
1203 		goto pnet_tap_faied;
1204 
1205 	err = gre_add_protocol(&ipgre_protocol, GREPROTO_CISCO);
1206 	if (err < 0) {
1207 		pr_info("%s: can't add protocol\n", __func__);
1208 		goto add_proto_failed;
1209 	}
1210 
1211 	err = rtnl_link_register(&ipgre_link_ops);
1212 	if (err < 0)
1213 		goto rtnl_link_failed;
1214 
1215 	err = rtnl_link_register(&ipgre_tap_ops);
1216 	if (err < 0)
1217 		goto tap_ops_failed;
1218 
1219 	return 0;
1220 
1221 tap_ops_failed:
1222 	rtnl_link_unregister(&ipgre_link_ops);
1223 rtnl_link_failed:
1224 	gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1225 add_proto_failed:
1226 	unregister_pernet_device(&ipgre_tap_net_ops);
1227 pnet_tap_faied:
1228 	unregister_pernet_device(&ipgre_net_ops);
1229 	return err;
1230 }
1231 
1232 static void __exit ipgre_fini(void)
1233 {
1234 	rtnl_link_unregister(&ipgre_tap_ops);
1235 	rtnl_link_unregister(&ipgre_link_ops);
1236 	gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1237 	unregister_pernet_device(&ipgre_tap_net_ops);
1238 	unregister_pernet_device(&ipgre_net_ops);
1239 }
1240 
1241 module_init(ipgre_init);
1242 module_exit(ipgre_fini);
1243 MODULE_LICENSE("GPL");
1244 MODULE_ALIAS_RTNL_LINK("gre");
1245 MODULE_ALIAS_RTNL_LINK("gretap");
1246 MODULE_ALIAS_NETDEV("gre0");
1247 MODULE_ALIAS_NETDEV("gretap0");
1248