]> git.proxmox.com Git - ovs.git/blob - datapath/linux/compat/ip_gre.c
5911c6cc10a22ba99d41b4d7074071c73fa64dc1
[ovs.git] / datapath / linux / compat / ip_gre.c
1 /*
2 * Linux NET3: GRE over IP protocol decoder.
3 *
4 * Authors: Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 *
11 */
12
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14
15 #ifndef USE_UPSTREAM_TUNNEL
16 #include <linux/capability.h>
17 #include <linux/module.h>
18 #include <linux/types.h>
19 #include <linux/kernel.h>
20 #include <linux/kconfig.h>
21 #include <linux/slab.h>
22 #include <asm/uaccess.h>
23 #include <linux/skbuff.h>
24 #include <linux/netdevice.h>
25 #include <linux/netdev_features.h>
26 #include <linux/in.h>
27 #include <linux/tcp.h>
28 #include <linux/udp.h>
29 #include <linux/if_arp.h>
30 #include <linux/mroute.h>
31 #include <linux/if_vlan.h>
32 #include <linux/init.h>
33 #include <linux/in6.h>
34 #include <linux/inetdevice.h>
35 #include <linux/igmp.h>
36 #include <linux/netfilter_ipv4.h>
37 #include <linux/etherdevice.h>
38 #include <linux/if_ether.h>
39
40 #include <net/sock.h>
41 #include <net/ip.h>
42 #include <net/icmp.h>
43 #include <net/protocol.h>
44 #include <net/ip_tunnels.h>
45 #include <net/arp.h>
46 #include <net/checksum.h>
47 #include <net/dsfield.h>
48 #include <net/inet_ecn.h>
49 #include <net/xfrm.h>
50 #include <net/net_namespace.h>
51 #include <net/netns/generic.h>
52 #include <net/rtnetlink.h>
53 #include <net/gre.h>
54 #include <net/dst_metadata.h>
55 #include <net/erspan.h>
56
57 #if IS_ENABLED(CONFIG_IPV6)
58 #include <net/ipv6.h>
59 #include <net/ip6_fib.h>
60 #include <net/ip6_route.h>
61 #endif
62
63 #include "gso.h"
64 #include "vport-netdev.h"
65
66 static int gre_tap_net_id __read_mostly;
67 static int ipgre_net_id __read_mostly;
68 static unsigned int erspan_net_id __read_mostly;
69 static void erspan_build_header(struct sk_buff *skb,
70 __be32 id, u32 index,
71 bool truncate, bool is_ipv4);
72
73 static struct rtnl_link_ops ipgre_link_ops __read_mostly;
74
75 #define ip_gre_calc_hlen rpl_ip_gre_calc_hlen
76 static int ip_gre_calc_hlen(__be16 o_flags)
77 {
78 int addend = 4;
79
80 if (o_flags & TUNNEL_CSUM)
81 addend += 4;
82 if (o_flags & TUNNEL_KEY)
83 addend += 4;
84 if (o_flags & TUNNEL_SEQ)
85 addend += 4;
86 return addend;
87 }
88
89 /* Returns the least-significant 32 bits of a __be64. */
90 static __be32 tunnel_id_to_key(__be64 x)
91 {
92 #ifdef __BIG_ENDIAN
93 return (__force __be32)x;
94 #else
95 return (__force __be32)((__force u64)x >> 32);
96 #endif
97 }
98
99 #ifdef HAVE_DEMUX_PARSE_GRE_HEADER
100 /* Called with rcu_read_lock and BH disabled. */
101 static int gre_err(struct sk_buff *skb, u32 info,
102 const struct tnl_ptk_info *tpi)
103 {
104 return PACKET_REJECT;
105 }
106 #endif
107 static struct dst_ops md_dst_ops = {
108 .family = AF_UNSPEC,
109 };
110
111 #ifndef DST_METADATA
112 #define DST_METADATA 0x0080
113 #endif
114
115 static void rpl__metadata_dst_init(struct metadata_dst *md_dst,
116 enum metadata_type type, u8 optslen)
117
118 {
119 struct dst_entry *dst;
120
121 dst = &md_dst->dst;
122 dst_init(dst, &md_dst_ops, NULL, 1, DST_OBSOLETE_NONE,
123 DST_METADATA | DST_NOCOUNT);
124
125 #if 0
126 /* unused in OVS */
127 dst->input = dst_md_discard;
128 dst->output = dst_md_discard_out;
129 #endif
130 memset(dst + 1, 0, sizeof(*md_dst) + optslen - sizeof(*dst));
131 md_dst->type = type;
132 }
133
134 static struct metadata_dst *erspan_rpl_metadata_dst_alloc(u8 optslen, enum metadata_type type,
135 gfp_t flags)
136 {
137 struct metadata_dst *md_dst;
138
139 md_dst = kmalloc(sizeof(*md_dst) + optslen, flags);
140 if (!md_dst)
141 return NULL;
142
143 rpl__metadata_dst_init(md_dst, type, optslen);
144
145 return md_dst;
146 }
147 static inline struct metadata_dst *rpl_tun_rx_dst(int md_size)
148 {
149 struct metadata_dst *tun_dst;
150
151 tun_dst = erspan_rpl_metadata_dst_alloc(md_size, METADATA_IP_TUNNEL, GFP_ATOMIC);
152 if (!tun_dst)
153 return NULL;
154
155 tun_dst->u.tun_info.options_len = 0;
156 tun_dst->u.tun_info.mode = 0;
157 return tun_dst;
158 }
159 static inline struct metadata_dst *rpl__ip_tun_set_dst(__be32 saddr,
160 __be32 daddr,
161 __u8 tos, __u8 ttl,
162 __be16 tp_dst,
163 __be16 flags,
164 __be64 tunnel_id,
165 int md_size)
166 {
167 struct metadata_dst *tun_dst;
168
169 tun_dst = rpl_tun_rx_dst(md_size);
170 if (!tun_dst)
171 return NULL;
172
173 ip_tunnel_key_init(&tun_dst->u.tun_info.key,
174 saddr, daddr, tos, ttl,
175 0, 0, tp_dst, tunnel_id, flags);
176 return tun_dst;
177 }
178
179 static inline struct metadata_dst *rpl_ip_tun_rx_dst(struct sk_buff *skb,
180 __be16 flags,
181 __be64 tunnel_id,
182 int md_size)
183 {
184 const struct iphdr *iph = ip_hdr(skb);
185
186 return rpl__ip_tun_set_dst(iph->saddr, iph->daddr, iph->tos, iph->ttl,
187 0, flags, tunnel_id, md_size);
188 }
189
190 static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi,
191 int gre_hdr_len)
192 {
193 struct net *net = dev_net(skb->dev);
194 struct metadata_dst *tun_dst = NULL;
195 struct erspan_base_hdr *ershdr;
196 struct erspan_metadata *pkt_md;
197 struct ip_tunnel_net *itn;
198 struct ip_tunnel *tunnel;
199 const struct iphdr *iph;
200 struct erspan_md2 *md2;
201 int ver;
202 int len;
203
204 itn = net_generic(net, erspan_net_id);
205 len = gre_hdr_len + sizeof(*ershdr);
206
207 /* Check based hdr len */
208 if (unlikely(!pskb_may_pull(skb, len)))
209 return PACKET_REJECT;
210
211 iph = ip_hdr(skb);
212 ershdr = (struct erspan_base_hdr *)(skb->data + gre_hdr_len);
213 ver = ershdr->ver;
214
215 /* The original GRE header does not have key field,
216 * Use ERSPAN 10-bit session ID as key.
217 */
218 tpi->key = cpu_to_be32(get_session_id(ershdr));
219 /* OVS doesn't set tunnel key - so don't bother with it */
220 tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex,
221 tpi->flags,
222 iph->saddr, iph->daddr, 0);
223
224 if (tunnel) {
225 len = gre_hdr_len + erspan_hdr_len(ver);
226 if (unlikely(!pskb_may_pull(skb, len)))
227 return PACKET_REJECT;
228
229 ershdr = (struct erspan_base_hdr *)skb->data;
230 pkt_md = (struct erspan_metadata *)(ershdr + 1);
231
232 if (__iptunnel_pull_header(skb,
233 len,
234 htons(ETH_P_TEB),
235 false, false) < 0)
236 goto drop;
237
238 if (tunnel->collect_md) {
239 struct ip_tunnel_info *info;
240 struct erspan_metadata *md;
241 __be64 tun_id;
242 __be16 flags;
243
244 tpi->flags |= TUNNEL_KEY;
245 flags = tpi->flags;
246 tun_id = key32_to_tunnel_id(tpi->key);
247
248 tun_dst = rpl_ip_tun_rx_dst(skb, flags, tun_id, sizeof(*md));
249 if (!tun_dst)
250 return PACKET_REJECT;
251
252 md = ip_tunnel_info_opts(&tun_dst->u.tun_info);
253 md->version = ver;
254 md2 = &md->u.md2;
255 memcpy(md2, pkt_md, ver == 1 ? ERSPAN_V1_MDSIZE :
256 ERSPAN_V2_MDSIZE);
257
258 info = &tun_dst->u.tun_info;
259 info->key.tun_flags |= TUNNEL_ERSPAN_OPT;
260 info->options_len = sizeof(*md);
261 }
262
263 skb_reset_mac_header(skb);
264 ovs_ip_tunnel_rcv(tunnel->dev, skb, tun_dst);
265 kfree(tun_dst);
266 return PACKET_RCVD;
267 }
268 drop:
269 kfree_skb(skb);
270 return PACKET_RCVD;
271 }
272
273
274 static int __ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
275 struct ip_tunnel_net *itn, int hdr_len, bool raw_proto)
276 {
277 struct metadata_dst tun_dst;
278 const struct iphdr *iph;
279 struct ip_tunnel *tunnel;
280
281 iph = ip_hdr(skb);
282 tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
283 iph->saddr, iph->daddr, tpi->key);
284
285 if (tunnel) {
286 if (__iptunnel_pull_header(skb, hdr_len, tpi->proto,
287 raw_proto, false) < 0)
288 goto drop;
289
290 if (tunnel->dev->type != ARPHRD_NONE)
291 skb_pop_mac_header(skb);
292 else
293 skb_reset_mac_header(skb);
294 if (tunnel->collect_md) {
295 __be16 flags;
296 __be64 tun_id;
297
298 flags = tpi->flags & (TUNNEL_CSUM | TUNNEL_KEY);
299 tun_id = key32_to_tunnel_id(tpi->key);
300 ovs_ip_tun_rx_dst(&tun_dst, skb, flags, tun_id, 0);
301 }
302
303 ovs_ip_tunnel_rcv(tunnel->dev, skb, &tun_dst);
304 return PACKET_RCVD;
305 }
306 return PACKET_NEXT;
307
308 drop:
309 kfree_skb(skb);
310 return PACKET_RCVD;
311 }
312
313
314 static int ipgre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
315 int hdr_len)
316 {
317 struct net *net = dev_net(skb->dev);
318 struct ip_tunnel_net *itn;
319 int res;
320
321 if (tpi->proto == htons(ETH_P_TEB))
322 itn = net_generic(net, gre_tap_net_id);
323 else
324 itn = net_generic(net, ipgre_net_id);
325
326 res = __ipgre_rcv(skb, tpi, itn, hdr_len, false);
327 if (res == PACKET_NEXT && tpi->proto == htons(ETH_P_TEB)) {
328 /* ipgre tunnels in collect metadata mode should receive
329 * also ETH_P_TEB traffic.
330 */
331 itn = net_generic(net, ipgre_net_id);
332 res = __ipgre_rcv(skb, tpi, itn, hdr_len, true);
333 }
334 return res;
335 }
336
337 static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
338 const struct iphdr *tnl_params,
339 __be16 proto)
340 {
341 struct ip_tunnel *tunnel = netdev_priv(dev);
342 struct tnl_ptk_info tpi;
343
344 tpi.flags = tunnel->parms.o_flags;
345 tpi.proto = proto;
346 tpi.key = tunnel->parms.o_key;
347 if (tunnel->parms.o_flags & TUNNEL_SEQ)
348 tunnel->o_seqno++;
349 tpi.seq = htonl(tunnel->o_seqno);
350
351 /* Push GRE header. */
352 gre_build_header(skb, &tpi, tunnel->hlen);
353
354 ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
355 }
356
357 #ifndef HAVE_DEMUX_PARSE_GRE_HEADER
358 static int gre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *unused_tpi)
359 {
360 struct tnl_ptk_info tpi;
361 bool csum_err = false;
362 int hdr_len;
363
364 hdr_len = gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP), 0);
365 if (hdr_len < 0)
366 goto drop;
367
368 if (unlikely(tpi.proto == htons(ETH_P_ERSPAN) ||
369 tpi.proto == htons(ETH_P_ERSPAN2))) {
370 if (erspan_rcv(skb, &tpi, hdr_len) == PACKET_RCVD)
371 return 0;
372 goto drop;
373 }
374
375 if (ipgre_rcv(skb, &tpi, hdr_len) == PACKET_RCVD)
376 return 0;
377 drop:
378
379 kfree_skb(skb);
380 return 0;
381 }
382 #else
383 static int gre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *__tpi)
384 {
385 struct tnl_ptk_info tpi = *__tpi;
386
387 if (unlikely(tpi.proto == htons(ETH_P_ERSPAN) ||
388 tpi.proto == htons(ETH_P_ERSPAN2))) {
389 if (erspan_rcv(skb, &tpi, 0) == PACKET_RCVD)
390 return 0;
391 goto drop;
392 }
393
394 if (ipgre_rcv(skb, &tpi, 0) == PACKET_RCVD)
395 return 0;
396 drop:
397
398 kfree_skb(skb);
399 return 0;
400 }
401 #endif
402
403 #if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
404 /* gre_handle_offloads() has different return type on older kernsl. */
405 static void gre_nop_fix(struct sk_buff *skb) { }
406
407 static void gre_csum_fix(struct sk_buff *skb)
408 {
409 struct gre_base_hdr *greh;
410 __be32 *options;
411 int gre_offset = skb_transport_offset(skb);
412
413 greh = (struct gre_base_hdr *)skb_transport_header(skb);
414 options = ((__be32 *)greh + 1);
415
416 *options = 0;
417 *(__sum16 *)options = csum_fold(skb_checksum(skb, gre_offset,
418 skb->len - gre_offset, 0));
419 }
420
421 static bool is_gre_gso(struct sk_buff *skb)
422 {
423 return skb_is_gso(skb);
424 }
425
426 #define gre_handle_offloads rpl_gre_handle_offloads
427 static int rpl_gre_handle_offloads(struct sk_buff *skb, bool gre_csum)
428 {
429 int type = gre_csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE;
430 gso_fix_segment_t fix_segment;
431
432 if (gre_csum)
433 fix_segment = gre_csum_fix;
434 else
435 fix_segment = gre_nop_fix;
436
437 return ovs_iptunnel_handle_offloads(skb, type, fix_segment);
438 }
439 #else
440
441 static bool is_gre_gso(struct sk_buff *skb)
442 {
443 return skb_shinfo(skb)->gso_type &
444 (SKB_GSO_GRE | SKB_GSO_GRE_CSUM);
445 }
446
447 static int rpl_gre_handle_offloads(struct sk_buff *skb, bool gre_csum)
448 {
449 if (skb_is_gso(skb) && skb_is_encapsulated(skb))
450 return -ENOSYS;
451
452 #undef gre_handle_offloads
453 return gre_handle_offloads(skb, gre_csum);
454 }
455 #endif
456
457 static void build_header(struct sk_buff *skb, int hdr_len, __be16 flags,
458 __be16 proto, __be32 key, __be32 seq)
459 {
460 struct gre_base_hdr *greh;
461
462 skb_push(skb, hdr_len);
463
464 skb_reset_transport_header(skb);
465 greh = (struct gre_base_hdr *)skb->data;
466 greh->flags = tnl_flags_to_gre_flags(flags);
467 greh->protocol = proto;
468
469 if (flags & (TUNNEL_KEY | TUNNEL_CSUM | TUNNEL_SEQ)) {
470 __be32 *ptr = (__be32 *)(((u8 *)greh) + hdr_len - 4);
471
472 if (flags & TUNNEL_SEQ) {
473 *ptr = seq;
474 ptr--;
475 }
476 if (flags & TUNNEL_KEY) {
477 *ptr = key;
478 ptr--;
479 }
480 if (flags & TUNNEL_CSUM && !is_gre_gso(skb)) {
481 *ptr = 0;
482 *(__sum16 *)ptr = csum_fold(skb_checksum(skb, 0,
483 skb->len, 0));
484 }
485 }
486 ovs_skb_set_inner_protocol(skb, proto);
487 }
488
489 static struct rtable *gre_get_rt(struct sk_buff *skb,
490 struct net_device *dev,
491 struct flowi4 *fl,
492 const struct ip_tunnel_key *key)
493 {
494 struct net *net = dev_net(dev);
495
496 memset(fl, 0, sizeof(*fl));
497 fl->daddr = key->u.ipv4.dst;
498 fl->saddr = key->u.ipv4.src;
499 fl->flowi4_tos = RT_TOS(key->tos);
500 fl->flowi4_mark = skb->mark;
501 fl->flowi4_proto = IPPROTO_GRE;
502
503 return ip_route_output_key(net, fl);
504 }
505
506 static struct rtable *prepare_fb_xmit(struct sk_buff *skb,
507 struct net_device *dev,
508 struct flowi4 *fl,
509 int tunnel_hlen)
510 {
511 struct ip_tunnel_info *tun_info;
512 const struct ip_tunnel_key *key;
513 struct rtable *rt = NULL;
514 int min_headroom;
515 bool use_cache;
516 int err;
517
518 tun_info = skb_tunnel_info(skb);
519 key = &tun_info->key;
520 use_cache = ip_tunnel_dst_cache_usable(skb, tun_info);
521
522 if (use_cache)
523 rt = dst_cache_get_ip4(&tun_info->dst_cache, &fl->saddr);
524 if (!rt) {
525 rt = gre_get_rt(skb, dev, fl, key);
526 if (IS_ERR(rt))
527 goto err_free_skb;
528 if (use_cache)
529 dst_cache_set_ip4(&tun_info->dst_cache, &rt->dst,
530 fl->saddr);
531 }
532
533 min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len
534 + tunnel_hlen + sizeof(struct iphdr);
535 if (skb_headroom(skb) < min_headroom || skb_header_cloned(skb)) {
536 int head_delta = SKB_DATA_ALIGN(min_headroom -
537 skb_headroom(skb) +
538 16);
539 err = pskb_expand_head(skb, max_t(int, head_delta, 0),
540 0, GFP_ATOMIC);
541 if (unlikely(err))
542 goto err_free_rt;
543 }
544 return rt;
545
546 err_free_rt:
547 ip_rt_put(rt);
548 err_free_skb:
549 kfree_skb(skb);
550 dev->stats.tx_dropped++;
551 return NULL;
552 }
553
554 netdev_tx_t rpl_gre_fb_xmit(struct sk_buff *skb)
555 {
556 struct net_device *dev = skb->dev;
557 struct ip_tunnel_info *tun_info;
558 const struct ip_tunnel_key *key;
559 struct flowi4 fl;
560 struct rtable *rt;
561 int min_headroom;
562 int tunnel_hlen;
563 __be16 df, flags;
564 int err;
565
566 tun_info = skb_tunnel_info(skb);
567 if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
568 ip_tunnel_info_af(tun_info) != AF_INET))
569 goto err_free_skb;
570
571 key = &tun_info->key;
572
573 rt = gre_get_rt(skb, dev, &fl, key);
574 if (IS_ERR(rt))
575 goto err_free_skb;
576
577 tunnel_hlen = ip_gre_calc_hlen(key->tun_flags);
578
579 min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len
580 + tunnel_hlen + sizeof(struct iphdr)
581 + (skb_vlan_tag_present(skb) ? VLAN_HLEN : 0);
582 if (skb_headroom(skb) < min_headroom || skb_header_cloned(skb)) {
583 int head_delta = SKB_DATA_ALIGN(min_headroom -
584 skb_headroom(skb) +
585 16);
586 err = pskb_expand_head(skb, max_t(int, head_delta, 0),
587 0, GFP_ATOMIC);
588 if (unlikely(err))
589 goto err_free_rt;
590 }
591
592 skb = vlan_hwaccel_push_inside(skb);
593 if (unlikely(!skb)) {
594 err = -ENOMEM;
595 goto err_free_rt;
596 }
597
598 /* Push Tunnel header. */
599 err = rpl_gre_handle_offloads(skb, !!(tun_info->key.tun_flags & TUNNEL_CSUM));
600 if (err)
601 goto err_free_rt;
602
603 flags = tun_info->key.tun_flags & (TUNNEL_CSUM | TUNNEL_KEY);
604 build_header(skb, tunnel_hlen, flags, htons(ETH_P_TEB),
605 tunnel_id_to_key(tun_info->key.tun_id), 0);
606
607 df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
608 iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,
609 key->tos, key->ttl, df, false);
610 return NETDEV_TX_OK;
611
612 err_free_rt:
613 ip_rt_put(rt);
614 err_free_skb:
615 kfree_skb(skb);
616 dev->stats.tx_dropped++;
617 return NETDEV_TX_OK;
618 }
619 EXPORT_SYMBOL(rpl_gre_fb_xmit);
620
621 static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev,
622 __be16 proto)
623 {
624 struct ip_tunnel *tunnel = netdev_priv(dev);
625 struct ip_tunnel_info *tun_info;
626 const struct ip_tunnel_key *key;
627 struct erspan_metadata *md;
628 struct rtable *rt = NULL;
629 struct tnl_ptk_info tpi;
630 bool truncate = false;
631 struct flowi4 fl;
632 int tunnel_hlen;
633 int version;
634 __be16 df;
635 int nhoff;
636 int thoff;
637
638 tun_info = skb_tunnel_info(skb);
639 if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
640 ip_tunnel_info_af(tun_info) != AF_INET))
641 goto err_free_skb;
642
643 key = &tun_info->key;
644 md = ip_tunnel_info_opts(tun_info);
645 if (!md)
646 goto err_free_rt;
647
648 /* ERSPAN has fixed 8 byte GRE header */
649 version = md->version;
650 tunnel_hlen = 8 + erspan_hdr_len(version);
651
652 rt = prepare_fb_xmit(skb, dev, &fl, tunnel_hlen);
653 if (!rt)
654 return;
655
656 if (gre_handle_offloads(skb, false))
657 goto err_free_rt;
658
659 if (skb->len > dev->mtu + dev->hard_header_len) {
660 pskb_trim(skb, dev->mtu + dev->hard_header_len);
661 truncate = true;
662 }
663
664 nhoff = skb_network_header(skb) - skb_mac_header(skb);
665 if (skb->protocol == htons(ETH_P_IP) &&
666 (ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff))
667 truncate = true;
668
669 thoff = skb_transport_header(skb) - skb_mac_header(skb);
670 if (skb->protocol == htons(ETH_P_IPV6) &&
671 (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff))
672 truncate = true;
673
674 if (version == 1) {
675 erspan_build_header(skb, ntohl(tunnel_id_to_key32(key->tun_id)),
676 ntohl(md->u.index), truncate, true);
677 tpi.hdr_len = ERSPAN_V1_MDSIZE;
678 tpi.proto = htons(ETH_P_ERSPAN);
679 } else if (version == 2) {
680 erspan_build_header_v2(skb,
681 ntohl(tunnel_id_to_key32(key->tun_id)),
682 md->u.md2.dir,
683 get_hwid(&md->u.md2),
684 truncate, true);
685 tpi.hdr_len = ERSPAN_V2_MDSIZE;
686 tpi.proto = htons(ETH_P_ERSPAN2);
687 } else {
688 goto err_free_rt;
689 }
690
691 tpi.flags = TUNNEL_SEQ;
692 tpi.key = tunnel_id_to_key32(key->tun_id);
693 tpi.seq = htonl(tunnel->o_seqno++);
694
695 gre_build_header(skb, &tpi, 8);
696
697 df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
698
699 iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,
700 key->tos, key->ttl, df, false);
701 return;
702
703 err_free_rt:
704 ip_rt_put(rt);
705 err_free_skb:
706 kfree_skb(skb);
707 dev->stats.tx_dropped++;
708 }
709
710 #define GRE_FEATURES (NETIF_F_SG | \
711 NETIF_F_FRAGLIST | \
712 NETIF_F_HIGHDMA | \
713 NETIF_F_HW_CSUM | \
714 NETIF_F_NETNS_LOCAL)
715
716 static void __gre_tunnel_init(struct net_device *dev)
717 {
718 struct ip_tunnel *tunnel;
719 int t_hlen;
720
721 tunnel = netdev_priv(dev);
722 tunnel->tun_hlen = ip_gre_calc_hlen(tunnel->parms.o_flags);
723 tunnel->parms.iph.protocol = IPPROTO_GRE;
724
725 tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;
726
727 t_hlen = tunnel->hlen + sizeof(struct iphdr);
728
729 dev->features |= GRE_FEATURES;
730 dev->hw_features |= GRE_FEATURES;
731
732 if (!(tunnel->parms.o_flags & TUNNEL_SEQ)) {
733 /* TCP offload with GRE SEQ is not supported, nor
734 * can we support 2 levels of outer headers requiring
735 * an update.
736 */
737 if (!(tunnel->parms.o_flags & TUNNEL_CSUM) ||
738 (tunnel->encap.type == TUNNEL_ENCAP_NONE)) {
739 dev->features |= NETIF_F_GSO_SOFTWARE;
740 dev->hw_features |= NETIF_F_GSO_SOFTWARE;
741 }
742
743 /* Can use a lockless transmit, unless we generate
744 * output sequences
745 */
746 dev->features |= NETIF_F_LLTX;
747 }
748 }
749
750 #ifdef HAVE_DEMUX_PARSE_GRE_HEADER
751 static struct gre_cisco_protocol ipgre_cisco_protocol = {
752 .handler = gre_rcv,
753 .err_handler = gre_err,
754 .priority = 1,
755 };
756 #endif
757
758 static int __gre_rcv(struct sk_buff *skb)
759 {
760 return gre_rcv(skb, NULL);
761 }
762
763 void __gre_err(struct sk_buff *skb, u32 info)
764 {
765 pr_warn("%s: GRE receive error\n", __func__);
766 }
767
768 static const struct gre_protocol ipgre_protocol = {
769 .handler = __gre_rcv,
770 .err_handler = __gre_err,
771 };
772
773 static int __net_init ipgre_init_net(struct net *net)
774 {
775 return ip_tunnel_init_net(net, ipgre_net_id, &ipgre_link_ops, NULL);
776 }
777
778 static void __net_exit ipgre_exit_net(struct net *net)
779 {
780 struct ip_tunnel_net *itn = net_generic(net, ipgre_net_id);
781
782 ip_tunnel_delete_net(itn, &ipgre_link_ops);
783 }
784
785 static struct pernet_operations ipgre_net_ops = {
786 .init = ipgre_init_net,
787 .exit = ipgre_exit_net,
788 .id = &ipgre_net_id,
789 .size = sizeof(struct ip_tunnel_net),
790 };
791
792 static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
793 {
794 __be16 flags;
795
796 if (!data)
797 return 0;
798
799 flags = 0;
800 if (data[IFLA_GRE_IFLAGS])
801 flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
802 if (data[IFLA_GRE_OFLAGS])
803 flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
804 if (flags & (GRE_VERSION|GRE_ROUTING))
805 return -EINVAL;
806
807 return 0;
808 }
809
810 static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
811 {
812 __be32 daddr;
813
814 if (tb[IFLA_ADDRESS]) {
815 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
816 return -EINVAL;
817 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
818 return -EADDRNOTAVAIL;
819 }
820
821 if (!data)
822 goto out;
823
824 if (data[IFLA_GRE_REMOTE]) {
825 memcpy(&daddr, nla_data(data[IFLA_GRE_REMOTE]), 4);
826 if (!daddr)
827 return -EINVAL;
828 }
829
830 out:
831 return ipgre_tunnel_validate(tb, data);
832 }
833
834 enum {
835 #ifndef HAVE_IFLA_GRE_ENCAP_DPORT
836 IFLA_GRE_ENCAP_TYPE = IFLA_GRE_FLAGS + 1,
837 IFLA_GRE_ENCAP_FLAGS,
838 IFLA_GRE_ENCAP_SPORT,
839 IFLA_GRE_ENCAP_DPORT,
840 #endif
841 #ifndef HAVE_IFLA_GRE_COLLECT_METADATA
842 IFLA_GRE_COLLECT_METADATA = IFLA_GRE_ENCAP_DPORT + 1,
843 #endif
844 #ifndef HAVE_IFLA_GRE_IGNORE_DF
845 IFLA_GRE_IGNORE_DF = IFLA_GRE_COLLECT_METADATA + 1,
846 #endif
847 #ifndef HAVE_IFLA_GRE_FWMARK
848 IFLA_GRE_FWMARK = IFLA_GRE_IGNORE_DF + 1,
849 #endif
850 #ifndef HAVE_IFLA_GRE_ERSPAN_INDEX
851 IFLA_GRE_ERSPAN_INDEX = IFLA_GRE_FWMARK + 1,
852 #endif
853 #ifndef HAVE_IFLA_GRE_ERSPAN_HWID
854 IFLA_GRE_ERSPAN_VER = IFLA_GRE_ERSPAN_INDEX + 1,
855 IFLA_GRE_ERSPAN_DIR,
856 IFLA_GRE_ERSPAN_HWID,
857 #endif
858 };
859
860 #define RPL_IFLA_GRE_MAX (IFLA_GRE_ERSPAN_HWID + 1)
861
862 static int erspan_validate(struct nlattr *tb[], struct nlattr *data[])
863 {
864 __be16 flags = 0;
865 int ret;
866
867 if (!data)
868 return 0;
869
870 ret = ipgre_tap_validate(tb, data);
871 if (ret)
872 return ret;
873
874 /* ERSPAN should only have GRE sequence and key flag */
875 if (data[IFLA_GRE_OFLAGS])
876 flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
877 if (data[IFLA_GRE_IFLAGS])
878 flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
879 if (!data[IFLA_GRE_COLLECT_METADATA] &&
880 flags != (GRE_SEQ | GRE_KEY))
881 return -EINVAL;
882
883 /* ERSPAN Session ID only has 10-bit. Since we reuse
884 * 32-bit key field as ID, check it's range.
885 */
886 if (data[IFLA_GRE_OKEY] &&
887 (ntohl(nla_get_be32(data[IFLA_GRE_OKEY])) & ~ID_MASK))
888 return -EINVAL;
889
890 return 0;
891 }
892
893 static int ipgre_netlink_parms(struct net_device *dev,
894 struct nlattr *data[],
895 struct nlattr *tb[],
896 struct ip_tunnel_parm *parms)
897 {
898 struct ip_tunnel *t = netdev_priv(dev);
899
900 memset(parms, 0, sizeof(*parms));
901
902 parms->iph.protocol = IPPROTO_GRE;
903
904 if (!data)
905 return 0;
906
907 if (data[IFLA_GRE_LINK])
908 parms->link = nla_get_u32(data[IFLA_GRE_LINK]);
909
910 if (data[IFLA_GRE_IFLAGS])
911 parms->i_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_IFLAGS]));
912
913 if (data[IFLA_GRE_OFLAGS])
914 parms->o_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_OFLAGS]));
915
916 if (data[IFLA_GRE_IKEY])
917 parms->i_key = nla_get_be32(data[IFLA_GRE_IKEY]);
918
919 if (data[IFLA_GRE_OKEY])
920 parms->o_key = nla_get_be32(data[IFLA_GRE_OKEY]);
921
922 if (data[IFLA_GRE_LOCAL])
923 parms->iph.saddr = nla_get_in_addr(data[IFLA_GRE_LOCAL]);
924
925 if (data[IFLA_GRE_REMOTE])
926 parms->iph.daddr = nla_get_in_addr(data[IFLA_GRE_REMOTE]);
927
928 if (data[IFLA_GRE_TTL])
929 parms->iph.ttl = nla_get_u8(data[IFLA_GRE_TTL]);
930
931 if (data[IFLA_GRE_TOS])
932 parms->iph.tos = nla_get_u8(data[IFLA_GRE_TOS]);
933
934 if (!data[IFLA_GRE_PMTUDISC] || nla_get_u8(data[IFLA_GRE_PMTUDISC])) {
935 if (t->ignore_df)
936 return -EINVAL;
937 parms->iph.frag_off = htons(IP_DF);
938 }
939
940 if (data[IFLA_GRE_COLLECT_METADATA]) {
941 t->collect_md = true;
942 if (dev->type == ARPHRD_IPGRE)
943 dev->type = ARPHRD_NONE;
944 }
945
946 if (data[IFLA_GRE_IGNORE_DF]) {
947 if (nla_get_u8(data[IFLA_GRE_IGNORE_DF])
948 && (parms->iph.frag_off & htons(IP_DF)))
949 return -EINVAL;
950 t->ignore_df = !!nla_get_u8(data[IFLA_GRE_IGNORE_DF]);
951 }
952
953 if (data[IFLA_GRE_ERSPAN_INDEX]) {
954 t->index = nla_get_u32(data[IFLA_GRE_ERSPAN_INDEX]);
955
956 if (t->index & ~INDEX_MASK)
957 return -EINVAL;
958 }
959
960 return 0;
961 }
962
963 static int gre_tap_init(struct net_device *dev)
964 {
965 __gre_tunnel_init(dev);
966 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
967
968 return ip_tunnel_init(dev);
969 }
970
971 static netdev_tx_t gre_dev_xmit(struct sk_buff *skb, struct net_device *dev)
972 {
973 /* Drop All packets coming from networking stack. OVS-CB is
974 * not initialized for these packets.
975 */
976
977 dev_kfree_skb(skb);
978 dev->stats.tx_dropped++;
979 return NETDEV_TX_OK;
980 }
981
982 static netdev_tx_t erspan_xmit(struct sk_buff *skb,
983 struct net_device *dev)
984 {
985 struct ip_tunnel *tunnel = netdev_priv(dev);
986 bool truncate = false;
987
988 if (tunnel->collect_md) {
989 erspan_fb_xmit(skb, dev, skb->protocol);
990 return NETDEV_TX_OK;
991 }
992
993 if (gre_handle_offloads(skb, false))
994 goto free_skb;
995
996 if (skb_cow_head(skb, dev->needed_headroom))
997 goto free_skb;
998
999 if (skb->len > dev->mtu + dev->hard_header_len) {
1000 pskb_trim(skb, dev->mtu + dev->hard_header_len);
1001 truncate = true;
1002 }
1003
1004 /* Push ERSPAN header */
1005 if (tunnel->erspan_ver == 1)
1006 erspan_build_header(skb, ntohl(tunnel->parms.o_key),
1007 tunnel->index,
1008 truncate, true);
1009 else if (tunnel->erspan_ver == 2)
1010 erspan_build_header_v2(skb, ntohl(tunnel->parms.o_key),
1011 tunnel->dir, tunnel->hwid,
1012 truncate, true);
1013 else
1014 goto free_skb;
1015
1016 tunnel->parms.o_flags &= ~TUNNEL_KEY;
1017 __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_ERSPAN));
1018 return NETDEV_TX_OK;
1019
1020 free_skb:
1021 kfree_skb(skb);
1022 dev->stats.tx_dropped++;
1023 return NETDEV_TX_OK;
1024 }
1025
1026 static netdev_tx_t __erspan_fb_xmit(struct sk_buff *skb)
1027 {
1028 erspan_fb_xmit(skb, skb->dev, skb->protocol);
1029 return NETDEV_TX_OK;
1030 }
1031
1032 int ovs_gre_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
1033 {
1034 struct ip_tunnel_info *info = skb_tunnel_info(skb);
1035 struct rtable *rt;
1036 struct flowi4 fl4;
1037
1038 if (ip_tunnel_info_af(info) != AF_INET)
1039 return -EINVAL;
1040
1041 rt = gre_get_rt(skb, dev, &fl4, &info->key);
1042 if (IS_ERR(rt))
1043 return PTR_ERR(rt);
1044
1045 ip_rt_put(rt);
1046 info->key.u.ipv4.src = fl4.saddr;
1047 return 0;
1048 }
1049 EXPORT_SYMBOL_GPL(ovs_gre_fill_metadata_dst);
1050
1051 static int erspan_tunnel_init(struct net_device *dev)
1052 {
1053 struct ip_tunnel *tunnel = netdev_priv(dev);
1054 int t_hlen;
1055
1056 tunnel->tun_hlen = 8;
1057 tunnel->parms.iph.protocol = IPPROTO_GRE;
1058 tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen +
1059 erspan_hdr_len(tunnel->erspan_ver);
1060 t_hlen = tunnel->hlen + sizeof(struct iphdr);
1061
1062 dev->needed_headroom = LL_MAX_HEADER + t_hlen + 4;
1063 dev->mtu = ETH_DATA_LEN - t_hlen - 4;
1064 dev->features |= GRE_FEATURES;
1065 dev->hw_features |= GRE_FEATURES;
1066 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1067 netif_keep_dst(dev);
1068
1069 return ip_tunnel_init(dev);
1070 }
1071
1072 static int ipgre_header(struct sk_buff *skb, struct net_device *dev,
1073 unsigned short type,
1074 const void *daddr, const void *saddr, unsigned int len)
1075 {
1076 struct ip_tunnel *t = netdev_priv(dev);
1077 struct iphdr *iph;
1078 struct gre_base_hdr *greh;
1079
1080 iph = (struct iphdr *)__skb_push(skb, t->hlen + sizeof(*iph));
1081 greh = (struct gre_base_hdr *)(iph+1);
1082 greh->flags = gre_tnl_flags_to_gre_flags(t->parms.o_flags);
1083 greh->protocol = htons(type);
1084
1085 memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
1086
1087 /* Set the source hardware address. */
1088 if (saddr)
1089 memcpy(&iph->saddr, saddr, 4);
1090 if (daddr)
1091 memcpy(&iph->daddr, daddr, 4);
1092 if (iph->daddr)
1093 return t->hlen + sizeof(*iph);
1094
1095 return -(t->hlen + sizeof(*iph));
1096 }
1097
1098 static int ipgre_header_parse(const struct sk_buff *skb, unsigned char *haddr)
1099 {
1100 const struct iphdr *iph = (const struct iphdr *) skb_mac_header(skb);
1101 memcpy(haddr, &iph->saddr, 4);
1102 return 4;
1103 }
1104
1105 static const struct header_ops ipgre_header_ops = {
1106 .create = ipgre_header,
1107 .parse = ipgre_header_parse,
1108 };
1109
1110 static int ipgre_tunnel_init(struct net_device *dev)
1111 {
1112 struct ip_tunnel *tunnel = netdev_priv(dev);
1113 struct iphdr *iph = &tunnel->parms.iph;
1114
1115 __gre_tunnel_init(dev);
1116
1117 memcpy(dev->dev_addr, &iph->saddr, 4);
1118 memcpy(dev->broadcast, &iph->daddr, 4);
1119
1120 dev->flags = IFF_NOARP;
1121 netif_keep_dst(dev);
1122 dev->addr_len = 4;
1123
1124 if (!tunnel->collect_md) {
1125 dev->header_ops = &ipgre_header_ops;
1126 }
1127
1128 return ip_tunnel_init(dev);
1129 }
1130
1131 static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
1132 struct net_device *dev)
1133 {
1134 struct ip_tunnel *tunnel = netdev_priv(dev);
1135 const struct iphdr *tnl_params;
1136
1137 if (tunnel->collect_md) {
1138 gre_fb_xmit(skb);
1139 return NETDEV_TX_OK;
1140 }
1141
1142 if (dev->header_ops) {
1143 /* Need space for new headers */
1144 if (skb_cow_head(skb, dev->needed_headroom -
1145 (tunnel->hlen + sizeof(struct iphdr))))
1146 goto free_skb;
1147
1148 tnl_params = (const struct iphdr *)skb->data;
1149
1150 /* Pull skb since ip_tunnel_xmit() needs skb->data pointing
1151 * to gre header.
1152 */
1153 skb_pull(skb, tunnel->hlen + sizeof(struct iphdr));
1154 skb_reset_mac_header(skb);
1155 } else {
1156 if (skb_cow_head(skb, dev->needed_headroom))
1157 goto free_skb;
1158
1159 tnl_params = &tunnel->parms.iph;
1160 }
1161
1162 if (gre_handle_offloads(skb, !!(tunnel->parms.o_flags & TUNNEL_CSUM)))
1163 goto free_skb;
1164
1165 __gre_xmit(skb, dev, tnl_params, skb->protocol);
1166 return NETDEV_TX_OK;
1167
1168 free_skb:
1169 kfree_skb(skb);
1170 dev->stats.tx_dropped++;
1171 return NETDEV_TX_OK;
1172 }
1173
1174 static const struct net_device_ops ipgre_netdev_ops = {
1175 .ndo_init = ipgre_tunnel_init,
1176 .ndo_uninit = rpl_ip_tunnel_uninit,
1177 .ndo_start_xmit = ipgre_xmit,
1178 .ndo_change_mtu = ip_tunnel_change_mtu,
1179 .ndo_get_stats64 = ip_tunnel_get_stats64,
1180 #ifdef HAVE_GET_LINK_NET
1181 .ndo_get_iflink = ip_tunnel_get_iflink,
1182 #endif
1183 };
1184
1185 static const struct net_device_ops gre_tap_netdev_ops = {
1186 .ndo_init = gre_tap_init,
1187 .ndo_uninit = rpl_ip_tunnel_uninit,
1188 .ndo_start_xmit = gre_dev_xmit,
1189 .ndo_set_mac_address = eth_mac_addr,
1190 .ndo_validate_addr = eth_validate_addr,
1191 #ifdef HAVE_RHEL7_MAX_MTU
1192 .ndo_size = sizeof(struct net_device_ops),
1193 .extended.ndo_change_mtu = ip_tunnel_change_mtu,
1194 #else
1195 .ndo_change_mtu = ip_tunnel_change_mtu,
1196 #endif
1197 .ndo_get_stats64 = rpl_ip_tunnel_get_stats64,
1198 #ifdef HAVE_NDO_GET_IFLINK
1199 .ndo_get_iflink = rpl_ip_tunnel_get_iflink,
1200 #endif
1201 #ifdef HAVE_NDO_FILL_METADATA_DST
1202 .ndo_fill_metadata_dst = gre_fill_metadata_dst,
1203 #endif
1204 };
1205
1206 static const struct net_device_ops erspan_netdev_ops = {
1207 .ndo_init = erspan_tunnel_init,
1208 .ndo_uninit = rpl_ip_tunnel_uninit,
1209 .ndo_start_xmit = erspan_xmit,
1210 .ndo_set_mac_address = eth_mac_addr,
1211 .ndo_validate_addr = eth_validate_addr,
1212 .ndo_change_mtu = ip_tunnel_change_mtu,
1213 .ndo_get_stats64 = rpl_ip_tunnel_get_stats64,
1214 #ifdef HAVE_NDO_GET_IFLINK
1215 .ndo_get_iflink = rpl_ip_tunnel_get_iflink,
1216 #endif
1217 #ifdef HAVE_NDO_FILL_METADATA_DST
1218 .ndo_fill_metadata_dst = gre_fill_metadata_dst,
1219 #endif
1220 };
1221
1222 static void ipgre_tunnel_setup(struct net_device *dev)
1223 {
1224 dev->netdev_ops = &ipgre_netdev_ops;
1225 dev->type = ARPHRD_IPGRE;
1226 ip_tunnel_setup(dev, ipgre_net_id);
1227 }
1228
1229 static void ipgre_tap_setup(struct net_device *dev)
1230 {
1231 ether_setup(dev);
1232 #ifdef HAVE_NET_DEVICE_MAX_MTU
1233 dev->max_mtu = 0;
1234 #endif
1235 dev->netdev_ops = &gre_tap_netdev_ops;
1236 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1237 ip_tunnel_setup(dev, gre_tap_net_id);
1238 }
1239
1240 static void erspan_setup(struct net_device *dev)
1241 {
1242 eth_hw_addr_random(dev);
1243 ether_setup(dev);
1244 dev->netdev_ops = &erspan_netdev_ops;
1245 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1246 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1247 ip_tunnel_setup(dev, erspan_net_id);
1248 }
1249
1250 static int ipgre_newlink(struct net *src_net, struct net_device *dev,
1251 struct nlattr *tb[], struct nlattr *data[])
1252 {
1253 struct ip_tunnel_parm p;
1254 int err;
1255
1256 ipgre_netlink_parms(dev, data, tb, &p);
1257 err = ip_tunnel_newlink(dev, tb, &p);
1258 return err;
1259
1260 }
1261
1262 static size_t ipgre_get_size(const struct net_device *dev)
1263 {
1264 return
1265 /* IFLA_GRE_LINK */
1266 nla_total_size(4) +
1267 /* IFLA_GRE_IFLAGS */
1268 nla_total_size(2) +
1269 /* IFLA_GRE_OFLAGS */
1270 nla_total_size(2) +
1271 /* IFLA_GRE_IKEY */
1272 nla_total_size(4) +
1273 /* IFLA_GRE_OKEY */
1274 nla_total_size(4) +
1275 /* IFLA_GRE_LOCAL */
1276 nla_total_size(4) +
1277 /* IFLA_GRE_REMOTE */
1278 nla_total_size(4) +
1279 /* IFLA_GRE_TTL */
1280 nla_total_size(1) +
1281 /* IFLA_GRE_TOS */
1282 nla_total_size(1) +
1283 /* IFLA_GRE_PMTUDISC */
1284 nla_total_size(1) +
1285 /* IFLA_GRE_ENCAP_TYPE */
1286 nla_total_size(2) +
1287 /* IFLA_GRE_ENCAP_FLAGS */
1288 nla_total_size(2) +
1289 /* IFLA_GRE_ENCAP_SPORT */
1290 nla_total_size(2) +
1291 /* IFLA_GRE_ENCAP_DPORT */
1292 nla_total_size(2) +
1293 /* IFLA_GRE_COLLECT_METADATA */
1294 nla_total_size(0) +
1295 /* IFLA_GRE_ERSPAN_INDEX */
1296 nla_total_size(4) +
1297 /* IFLA_GRE_ERSPAN_VER */
1298 nla_total_size(1) +
1299 /* IFLA_GRE_ERSPAN_DIR */
1300 nla_total_size(1) +
1301 /* IFLA_GRE_ERSPAN_HWID */
1302 nla_total_size(2) +
1303 0;
1304 }
1305
1306 static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
1307 {
1308 struct ip_tunnel *t = netdev_priv(dev);
1309 struct ip_tunnel_parm *p = &t->parms;
1310
1311 if (nla_put_u32(skb, IFLA_GRE_LINK, p->link) ||
1312 nla_put_be16(skb, IFLA_GRE_IFLAGS, tnl_flags_to_gre_flags(p->i_flags)) ||
1313 nla_put_be16(skb, IFLA_GRE_OFLAGS, tnl_flags_to_gre_flags(p->o_flags)) ||
1314 nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) ||
1315 nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) ||
1316 nla_put_in_addr(skb, IFLA_GRE_LOCAL, p->iph.saddr) ||
1317 nla_put_in_addr(skb, IFLA_GRE_REMOTE, p->iph.daddr) ||
1318 nla_put_u8(skb, IFLA_GRE_TTL, p->iph.ttl) ||
1319 nla_put_u8(skb, IFLA_GRE_TOS, p->iph.tos) ||
1320 nla_put_u8(skb, IFLA_GRE_PMTUDISC,
1321 !!(p->iph.frag_off & htons(IP_DF))))
1322 goto nla_put_failure;
1323
1324 if (nla_put_u8(skb, IFLA_GRE_ERSPAN_VER, t->erspan_ver))
1325 goto nla_put_failure;
1326
1327 if (t->erspan_ver == 1) {
1328 if (nla_put_u32(skb, IFLA_GRE_ERSPAN_INDEX, t->index))
1329 goto nla_put_failure;
1330 } else if (t->erspan_ver == 2) {
1331 if (nla_put_u8(skb, IFLA_GRE_ERSPAN_DIR, t->dir))
1332 goto nla_put_failure;
1333 if (nla_put_u16(skb, IFLA_GRE_ERSPAN_HWID, t->hwid))
1334 goto nla_put_failure;
1335 }
1336
1337 return 0;
1338
1339 nla_put_failure:
1340 return -EMSGSIZE;
1341 }
1342
1343 static const struct nla_policy ipgre_policy[RPL_IFLA_GRE_MAX + 1] = {
1344 [IFLA_GRE_LINK] = { .type = NLA_U32 },
1345 [IFLA_GRE_IFLAGS] = { .type = NLA_U16 },
1346 [IFLA_GRE_OFLAGS] = { .type = NLA_U16 },
1347 [IFLA_GRE_IKEY] = { .type = NLA_U32 },
1348 [IFLA_GRE_OKEY] = { .type = NLA_U32 },
1349 [IFLA_GRE_LOCAL] = { .len = FIELD_SIZEOF(struct iphdr, saddr) },
1350 [IFLA_GRE_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1351 [IFLA_GRE_TTL] = { .type = NLA_U8 },
1352 [IFLA_GRE_TOS] = { .type = NLA_U8 },
1353 [IFLA_GRE_PMTUDISC] = { .type = NLA_U8 },
1354 [IFLA_GRE_ERSPAN_INDEX] = { .type = NLA_U32 },
1355 [IFLA_GRE_ERSPAN_VER] = { .type = NLA_U8 },
1356 [IFLA_GRE_ERSPAN_DIR] = { .type = NLA_U8 },
1357 [IFLA_GRE_ERSPAN_HWID] = { .type = NLA_U16 },
1358 };
1359
1360 static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
1361 .kind = "gre",
1362 .maxtype = RPL_IFLA_GRE_MAX,
1363 .policy = ipgre_policy,
1364 .priv_size = sizeof(struct ip_tunnel),
1365 .setup = ipgre_tunnel_setup,
1366 .validate = ipgre_tunnel_validate,
1367 .newlink = ipgre_newlink,
1368 .dellink = ip_tunnel_dellink,
1369 .get_size = ipgre_get_size,
1370 .fill_info = ipgre_fill_info,
1371 #ifdef HAVE_GET_LINK_NET
1372 .get_link_net = ip_tunnel_get_link_net,
1373 #endif
1374 };
1375
1376 static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
1377 .kind = "ovs_gretap",
1378 .maxtype = RPL_IFLA_GRE_MAX,
1379 .policy = ipgre_policy,
1380 .priv_size = sizeof(struct ip_tunnel),
1381 .setup = ipgre_tap_setup,
1382 .validate = ipgre_tap_validate,
1383 .newlink = ipgre_newlink,
1384 .dellink = ip_tunnel_dellink,
1385 .get_size = ipgre_get_size,
1386 .fill_info = ipgre_fill_info,
1387 #ifdef HAVE_GET_LINK_NET
1388 .get_link_net = ip_tunnel_get_link_net,
1389 #endif
1390 };
1391
1392 static struct rtnl_link_ops erspan_link_ops __read_mostly = {
1393 .kind = "erspan",
1394 .maxtype = RPL_IFLA_GRE_MAX,
1395 .policy = ipgre_policy,
1396 .priv_size = sizeof(struct ip_tunnel),
1397 .setup = erspan_setup,
1398 .validate = erspan_validate,
1399 .newlink = ipgre_newlink,
1400 .dellink = ip_tunnel_dellink,
1401 .get_size = ipgre_get_size,
1402 .fill_info = ipgre_fill_info,
1403 #ifdef HAVE_GET_LINK_NET
1404 .get_link_net = ip_tunnel_get_link_net,
1405 #endif
1406 };
1407
1408 struct net_device *rpl_gretap_fb_dev_create(struct net *net, const char *name,
1409 u8 name_assign_type)
1410 {
1411 struct nlattr *tb[IFLA_MAX + 1];
1412 struct net_device *dev;
1413 LIST_HEAD(list_kill);
1414 struct ip_tunnel *t;
1415 int err;
1416
1417 memset(&tb, 0, sizeof(tb));
1418
1419 dev = rtnl_create_link(net, (char *)name, name_assign_type,
1420 &ipgre_tap_ops, tb);
1421 if (IS_ERR(dev))
1422 return dev;
1423
1424 t = netdev_priv(dev);
1425 t->collect_md = true;
1426 /* Configure flow based GRE device. */
1427 err = ipgre_newlink(net, dev, tb, NULL);
1428 if (err < 0) {
1429 free_netdev(dev);
1430 return ERR_PTR(err);
1431 }
1432
1433 /* openvswitch users expect packet sizes to be unrestricted,
1434 * so set the largest MTU we can.
1435 */
1436 err = __ip_tunnel_change_mtu(dev, IP_MAX_MTU, false);
1437 if (err)
1438 goto out;
1439
1440 return dev;
1441 out:
1442 ip_tunnel_dellink(dev, &list_kill);
1443 unregister_netdevice_many(&list_kill);
1444 return ERR_PTR(err);
1445 }
1446 EXPORT_SYMBOL_GPL(rpl_gretap_fb_dev_create);
1447
1448 static int __net_init erspan_init_net(struct net *net)
1449 {
1450 return ip_tunnel_init_net(net, erspan_net_id,
1451 &erspan_link_ops, NULL);
1452 }
1453
1454 static void __net_exit erspan_exit_net(struct net *net)
1455 {
1456 struct ip_tunnel_net *itn = net_generic(net, erspan_net_id);
1457
1458 ip_tunnel_delete_net(itn, &erspan_link_ops);
1459 }
1460
1461 static struct pernet_operations erspan_net_ops = {
1462 .init = erspan_init_net,
1463 .exit = erspan_exit_net,
1464 .id = &erspan_net_id,
1465 .size = sizeof(struct ip_tunnel_net),
1466 };
1467
1468 static int __net_init ipgre_tap_init_net(struct net *net)
1469 {
1470 return ip_tunnel_init_net(net, gre_tap_net_id, &ipgre_tap_ops, "gretap0");
1471 }
1472
1473 static void __net_exit ipgre_tap_exit_net(struct net *net)
1474 {
1475 struct ip_tunnel_net *itn = net_generic(net, gre_tap_net_id);
1476
1477 ip_tunnel_delete_net(itn, &ipgre_tap_ops);
1478 }
1479
1480 static struct pernet_operations ipgre_tap_net_ops = {
1481 .init = ipgre_tap_init_net,
1482 .exit = ipgre_tap_exit_net,
1483 .id = &gre_tap_net_id,
1484 .size = sizeof(struct ip_tunnel_net),
1485 };
1486
1487 static struct net_device *erspan_fb_dev_create(struct net *net,
1488 const char *name,
1489 u8 name_assign_type)
1490 {
1491 struct nlattr *tb[IFLA_MAX + 1];
1492 struct net_device *dev;
1493 LIST_HEAD(list_kill);
1494 struct ip_tunnel *t;
1495 int err;
1496
1497 memset(&tb, 0, sizeof(tb));
1498
1499 dev = rtnl_create_link(net, (char *)name, name_assign_type,
1500 &erspan_link_ops, tb);
1501 if (IS_ERR(dev))
1502 return dev;
1503
1504 t = netdev_priv(dev);
1505 t->collect_md = true;
1506 /* Configure flow based GRE device. */
1507 err = ipgre_newlink(net, dev, tb, NULL);
1508 if (err < 0) {
1509 free_netdev(dev);
1510 return ERR_PTR(err);
1511 }
1512
1513 /* openvswitch users expect packet sizes to be unrestricted,
1514 * so set the largest MTU we can.
1515 */
1516 err = __ip_tunnel_change_mtu(dev, IP_MAX_MTU, false);
1517 if (err)
1518 goto out;
1519
1520 return dev;
1521 out:
1522 ip_tunnel_dellink(dev, &list_kill);
1523 unregister_netdevice_many(&list_kill);
1524 return ERR_PTR(err);
1525 }
1526
1527 static struct vport_ops ovs_erspan_vport_ops;
1528
1529 static struct vport *erspan_tnl_create(const struct vport_parms *parms)
1530 {
1531 struct net *net = ovs_dp_get_net(parms->dp);
1532 struct net_device *dev;
1533 struct vport *vport;
1534 int err;
1535
1536 vport = ovs_vport_alloc(0, &ovs_erspan_vport_ops, parms);
1537 if (IS_ERR(vport))
1538 return vport;
1539
1540 rtnl_lock();
1541 dev = erspan_fb_dev_create(net, parms->name, NET_NAME_USER);
1542 if (IS_ERR(dev)) {
1543 rtnl_unlock();
1544 ovs_vport_free(vport);
1545 return ERR_CAST(dev);
1546 }
1547
1548 err = dev_change_flags(dev, dev->flags | IFF_UP);
1549 if (err < 0) {
1550 rtnl_delete_link(dev);
1551 rtnl_unlock();
1552 ovs_vport_free(vport);
1553 return ERR_PTR(err);
1554 }
1555
1556 rtnl_unlock();
1557 return vport;
1558 }
1559
1560 static struct vport *erspan_create(const struct vport_parms *parms)
1561 {
1562 struct vport *vport;
1563
1564 vport = erspan_tnl_create(parms);
1565 if (IS_ERR(vport))
1566 return vport;
1567
1568 return ovs_netdev_link(vport, parms->name);
1569 }
1570
1571 static struct vport_ops ovs_erspan_vport_ops = {
1572 .type = OVS_VPORT_TYPE_ERSPAN,
1573 .create = erspan_create,
1574 .send = __erspan_fb_xmit,
1575 #ifndef USE_UPSTREAM_TUNNEL
1576 .fill_metadata_dst = gre_fill_metadata_dst,
1577 #endif
1578 .destroy = ovs_netdev_tunnel_destroy,
1579 };
1580
1581 static struct vport_ops ovs_ipgre_vport_ops;
1582
1583 static struct vport *ipgre_tnl_create(const struct vport_parms *parms)
1584 {
1585 struct net *net = ovs_dp_get_net(parms->dp);
1586 struct net_device *dev;
1587 struct vport *vport;
1588 int err;
1589
1590 vport = ovs_vport_alloc(0, &ovs_ipgre_vport_ops, parms);
1591 if (IS_ERR(vport))
1592 return vport;
1593
1594 rtnl_lock();
1595 dev = gretap_fb_dev_create(net, parms->name, NET_NAME_USER);
1596 if (IS_ERR(dev)) {
1597 rtnl_unlock();
1598 ovs_vport_free(vport);
1599 return ERR_CAST(dev);
1600 }
1601
1602 err = dev_change_flags(dev, dev->flags | IFF_UP);
1603 if (err < 0) {
1604 rtnl_delete_link(dev);
1605 rtnl_unlock();
1606 ovs_vport_free(vport);
1607 return ERR_PTR(err);
1608 }
1609
1610 rtnl_unlock();
1611 return vport;
1612 }
1613
1614 static struct vport *ipgre_create(const struct vport_parms *parms)
1615 {
1616 struct vport *vport;
1617
1618 vport = ipgre_tnl_create(parms);
1619 if (IS_ERR(vport))
1620 return vport;
1621
1622 return ovs_netdev_link(vport, parms->name);
1623 }
1624
1625 static struct vport_ops ovs_ipgre_vport_ops = {
1626 .type = OVS_VPORT_TYPE_GRE,
1627 .create = ipgre_create,
1628 .send = gre_fb_xmit,
1629 #ifndef USE_UPSTREAM_TUNNEL
1630 .fill_metadata_dst = gre_fill_metadata_dst,
1631 #endif
1632 .destroy = ovs_netdev_tunnel_destroy,
1633 };
1634
1635 int rpl_ipgre_init(void)
1636 {
1637 int err;
1638
1639 err = register_pernet_device(&ipgre_tap_net_ops);
1640 if (err < 0)
1641 goto pnet_tap_failed;
1642
1643 err = register_pernet_device(&erspan_net_ops);
1644 if (err < 0)
1645 goto pnet_erspan_failed;
1646
1647 err = register_pernet_device(&ipgre_net_ops);
1648 if (err < 0)
1649 goto pnet_ipgre_failed;
1650
1651 #ifdef HAVE_DEMUX_PARSE_GRE_HEADER
1652 err = gre_cisco_register(&ipgre_cisco_protocol);
1653 if (err < 0) {
1654 pr_info("%s: can't add protocol\n", __func__);
1655 goto add_proto_failed;
1656 }
1657 #else
1658 err = gre_add_protocol(&ipgre_protocol, GREPROTO_CISCO);
1659 if (err < 0) {
1660 pr_info("%s: can't add protocol\n", __func__);
1661 goto add_proto_failed;
1662 }
1663 #endif
1664
1665 pr_info("GRE over IPv4 tunneling driver\n");
1666
1667 ovs_vport_ops_register(&ovs_ipgre_vport_ops);
1668 ovs_vport_ops_register(&ovs_erspan_vport_ops);
1669 return 0;
1670
1671 add_proto_failed:
1672 unregister_pernet_device(&ipgre_net_ops);
1673 pnet_ipgre_failed:
1674 unregister_pernet_device(&erspan_net_ops);
1675 pnet_erspan_failed:
1676 unregister_pernet_device(&ipgre_tap_net_ops);
1677 pnet_tap_failed:
1678 pr_err("Error while initializing GRE %d\n", err);
1679 return err;
1680 }
1681
1682 void rpl_ipgre_fini(void)
1683 {
1684 ovs_vport_ops_unregister(&ovs_erspan_vport_ops);
1685 ovs_vport_ops_unregister(&ovs_ipgre_vport_ops);
1686 #ifdef HAVE_DEMUX_PARSE_GRE_HEADER
1687 gre_cisco_unregister(&ipgre_cisco_protocol);
1688 #else
1689 gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1690 #endif
1691 unregister_pernet_device(&ipgre_net_ops);
1692 unregister_pernet_device(&erspan_net_ops);
1693 unregister_pernet_device(&ipgre_tap_net_ops);
1694 }
1695
1696 #endif