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