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