1
2
3
4
5
6
7
8
9
10
11
12
13#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14
15#include <linux/capability.h>
16#include <linux/module.h>
17#include <linux/types.h>
18#include <linux/kernel.h>
19#include <linux/slab.h>
20#include <asm/uaccess.h>
21#include <linux/skbuff.h>
22#include <linux/netdevice.h>
23#include <linux/in.h>
24#include <linux/tcp.h>
25#include <linux/udp.h>
26#include <linux/if_arp.h>
27#include <linux/if_vlan.h>
28#include <linux/init.h>
29#include <linux/in6.h>
30#include <linux/inetdevice.h>
31#include <linux/igmp.h>
32#include <linux/netfilter_ipv4.h>
33#include <linux/etherdevice.h>
34#include <linux/if_ether.h>
35
36#include <net/sock.h>
37#include <net/ip.h>
38#include <net/icmp.h>
39#include <net/protocol.h>
40#include <net/ip_tunnels.h>
41#include <net/arp.h>
42#include <net/checksum.h>
43#include <net/dsfield.h>
44#include <net/inet_ecn.h>
45#include <net/xfrm.h>
46#include <net/net_namespace.h>
47#include <net/netns/generic.h>
48#include <net/rtnetlink.h>
49#include <net/gre.h>
50#include <net/dst_metadata.h>
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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
113static struct rtnl_link_ops ipgre_link_ops __read_mostly;
114static int ipgre_tunnel_init(struct net_device *dev);
115
116static int ipgre_net_id __read_mostly;
117static int gre_tap_net_id __read_mostly;
118
119static void ipgre_err(struct sk_buff *skb, u32 info,
120 const struct tnl_ptk_info *tpi)
121{
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 struct net *net = dev_net(skb->dev);
137 struct ip_tunnel_net *itn;
138 const struct iphdr *iph;
139 const int type = icmp_hdr(skb)->type;
140 const int code = icmp_hdr(skb)->code;
141 unsigned int data_len = 0;
142 struct ip_tunnel *t;
143
144 switch (type) {
145 default:
146 case ICMP_PARAMETERPROB:
147 return;
148
149 case ICMP_DEST_UNREACH:
150 switch (code) {
151 case ICMP_SR_FAILED:
152 case ICMP_PORT_UNREACH:
153
154 return;
155 default:
156
157
158
159
160 break;
161 }
162 break;
163
164 case ICMP_TIME_EXCEEDED:
165 if (code != ICMP_EXC_TTL)
166 return;
167 data_len = icmp_hdr(skb)->un.reserved[1] * 4;
168 break;
169
170 case ICMP_REDIRECT:
171 break;
172 }
173
174 if (tpi->proto == htons(ETH_P_TEB))
175 itn = net_generic(net, gre_tap_net_id);
176 else
177 itn = net_generic(net, ipgre_net_id);
178
179 iph = (const struct iphdr *)(icmp_hdr(skb) + 1);
180 t = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
181 iph->daddr, iph->saddr, tpi->key);
182
183 if (!t)
184 return;
185
186#if IS_ENABLED(CONFIG_IPV6)
187 if (tpi->proto == htons(ETH_P_IPV6) &&
188 !ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4 + tpi->hdr_len,
189 type, data_len))
190 return;
191#endif
192
193 if (t->parms.iph.daddr == 0 ||
194 ipv4_is_multicast(t->parms.iph.daddr))
195 return;
196
197 if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED)
198 return;
199
200 if (time_before(jiffies, t->err_time + IPTUNNEL_ERR_TIMEO))
201 t->err_count++;
202 else
203 t->err_count = 1;
204 t->err_time = jiffies;
205}
206
207static void gre_err(struct sk_buff *skb, u32 info)
208{
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223 const struct iphdr *iph = (struct iphdr *)skb->data;
224 const int type = icmp_hdr(skb)->type;
225 const int code = icmp_hdr(skb)->code;
226 struct tnl_ptk_info tpi;
227 bool csum_err = false;
228
229 if (gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP),
230 iph->ihl * 4) < 0) {
231 if (!csum_err)
232 return;
233 }
234
235 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
236 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
237 skb->dev->ifindex, 0, IPPROTO_GRE, 0);
238 return;
239 }
240 if (type == ICMP_REDIRECT) {
241 ipv4_redirect(skb, dev_net(skb->dev), skb->dev->ifindex, 0,
242 IPPROTO_GRE, 0);
243 return;
244 }
245
246 ipgre_err(skb, info, &tpi);
247}
248
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
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
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)
270{
271 struct metadata_dst *tun_dst = NULL;
272 const struct iphdr *iph;
273 struct ip_tunnel *tunnel;
274
275 iph = ip_hdr(skb);
276 tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
277 iph->saddr, iph->daddr, tpi->key);
278
279 if (tunnel) {
280 if (__iptunnel_pull_header(skb, hdr_len, tpi->proto,
281 raw_proto, false) < 0)
282 goto drop;
283
284 if (tunnel->dev->type != ARPHRD_NONE)
285 skb_pop_mac_header(skb);
286 else
287 skb_reset_mac_header(skb);
288 if (tunnel->collect_md) {
289 __be16 flags;
290 __be64 tun_id;
291
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);
295 if (!tun_dst)
296 return PACKET_REJECT;
297 }
298
299 ip_tunnel_rcv(tunnel, skb, tpi, tun_dst, log_ecn_error);
300 return PACKET_RCVD;
301 }
302 return PACKET_NEXT;
303
304drop:
305 kfree_skb(skb);
306 return PACKET_RCVD;
307}
308
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
324
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
332static int gre_rcv(struct sk_buff *skb)
333{
334 struct tnl_ptk_info tpi;
335 bool csum_err = false;
336 int hdr_len;
337
338#ifdef CONFIG_NET_IPGRE_BROADCAST
339 if (ipv4_is_multicast(ip_hdr(skb)->daddr)) {
340
341 if (rt_is_output_route(skb_rtable(skb)))
342 goto drop;
343 }
344#endif
345
346 hdr_len = gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP), 0);
347 if (hdr_len < 0)
348 goto drop;
349
350 if (ipgre_rcv(skb, &tpi, hdr_len) == PACKET_RCVD)
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
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);
364
365 if (tunnel->parms.o_flags & TUNNEL_SEQ)
366 tunnel->o_seqno++;
367
368
369 gre_build_header(skb, tunnel->tun_hlen,
370 tunnel->parms.o_flags, proto, tunnel->parms.o_key,
371 htonl(tunnel->o_seqno));
372
373 ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
374}
375
376static int gre_handle_offloads(struct sk_buff *skb, bool csum)
377{
378 return iptunnel_handle_offloads(skb, csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
379}
380
381static struct rtable *gre_get_rt(struct sk_buff *skb,
382 struct net_device *dev,
383 struct flowi4 *fl,
384 const struct ip_tunnel_key *key)
385{
386 struct net *net = dev_net(dev);
387
388 memset(fl, 0, sizeof(*fl));
389 fl->daddr = key->u.ipv4.dst;
390 fl->saddr = key->u.ipv4.src;
391 fl->flowi4_tos = RT_TOS(key->tos);
392 fl->flowi4_mark = skb->mark;
393 fl->flowi4_proto = IPPROTO_GRE;
394
395 return ip_route_output_key(net, fl);
396}
397
398static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev,
399 __be16 proto)
400{
401 struct ip_tunnel_info *tun_info;
402 const struct ip_tunnel_key *key;
403 struct rtable *rt = NULL;
404 struct flowi4 fl;
405 int min_headroom;
406 int tunnel_hlen;
407 __be16 df, flags;
408 bool use_cache;
409 int err;
410
411 tun_info = skb_tunnel_info(skb);
412 if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
413 ip_tunnel_info_af(tun_info) != AF_INET))
414 goto err_free_skb;
415
416 key = &tun_info->key;
417 use_cache = ip_tunnel_dst_cache_usable(skb, tun_info);
418 if (use_cache)
419 rt = dst_cache_get_ip4(&tun_info->dst_cache, &fl.saddr);
420 if (!rt) {
421 rt = gre_get_rt(skb, dev, &fl, key);
422 if (IS_ERR(rt))
423 goto err_free_skb;
424 if (use_cache)
425 dst_cache_set_ip4(&tun_info->dst_cache, &rt->dst,
426 fl.saddr);
427 }
428
429 tunnel_hlen = gre_calc_hlen(key->tun_flags);
430
431 min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len
432 + tunnel_hlen + sizeof(struct iphdr);
433 if (skb_headroom(skb) < min_headroom || skb_header_cloned(skb)) {
434 int head_delta = SKB_DATA_ALIGN(min_headroom -
435 skb_headroom(skb) +
436 16);
437 err = pskb_expand_head(skb, max_t(int, head_delta, 0),
438 0, GFP_ATOMIC);
439 if (unlikely(err))
440 goto err_free_rt;
441 }
442
443
444 if (gre_handle_offloads(skb, !!(tun_info->key.tun_flags & TUNNEL_CSUM)))
445 goto err_free_rt;
446
447 flags = tun_info->key.tun_flags & (TUNNEL_CSUM | TUNNEL_KEY);
448 gre_build_header(skb, tunnel_hlen, flags, proto,
449 tunnel_id_to_key(tun_info->key.tun_id), 0);
450
451 df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
452
453 iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,
454 key->tos, key->ttl, df, false);
455 return;
456
457err_free_rt:
458 ip_rt_put(rt);
459err_free_skb:
460 kfree_skb(skb);
461 dev->stats.tx_dropped++;
462}
463
464static int gre_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
465{
466 struct ip_tunnel_info *info = skb_tunnel_info(skb);
467 struct rtable *rt;
468 struct flowi4 fl4;
469
470 if (ip_tunnel_info_af(info) != AF_INET)
471 return -EINVAL;
472
473 rt = gre_get_rt(skb, dev, &fl4, &info->key);
474 if (IS_ERR(rt))
475 return PTR_ERR(rt);
476
477 ip_rt_put(rt);
478 info->key.u.ipv4.src = fl4.saddr;
479 return 0;
480}
481
482static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
483 struct net_device *dev)
484{
485 struct ip_tunnel *tunnel = netdev_priv(dev);
486 const struct iphdr *tnl_params;
487
488 if (tunnel->collect_md) {
489 gre_fb_xmit(skb, dev, skb->protocol);
490 return NETDEV_TX_OK;
491 }
492
493 if (dev->header_ops) {
494
495 if (skb_cow_head(skb, dev->needed_headroom -
496 (tunnel->hlen + sizeof(struct iphdr))))
497 goto free_skb;
498
499 tnl_params = (const struct iphdr *)skb->data;
500
501
502
503
504 skb_pull(skb, tunnel->hlen + sizeof(struct iphdr));
505 skb_reset_mac_header(skb);
506 } else {
507 if (skb_cow_head(skb, dev->needed_headroom))
508 goto free_skb;
509
510 tnl_params = &tunnel->parms.iph;
511 }
512
513 if (gre_handle_offloads(skb, !!(tunnel->parms.o_flags & TUNNEL_CSUM)))
514 goto free_skb;
515
516 __gre_xmit(skb, dev, tnl_params, skb->protocol);
517 return NETDEV_TX_OK;
518
519free_skb:
520 kfree_skb(skb);
521 dev->stats.tx_dropped++;
522 return NETDEV_TX_OK;
523}
524
525static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
526 struct net_device *dev)
527{
528 struct ip_tunnel *tunnel = netdev_priv(dev);
529
530 if (tunnel->collect_md) {
531 gre_fb_xmit(skb, dev, htons(ETH_P_TEB));
532 return NETDEV_TX_OK;
533 }
534
535 if (gre_handle_offloads(skb, !!(tunnel->parms.o_flags & TUNNEL_CSUM)))
536 goto free_skb;
537
538 if (skb_cow_head(skb, dev->needed_headroom))
539 goto free_skb;
540
541 __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_TEB));
542 return NETDEV_TX_OK;
543
544free_skb:
545 kfree_skb(skb);
546 dev->stats.tx_dropped++;
547 return NETDEV_TX_OK;
548}
549
550static int ipgre_tunnel_ioctl(struct net_device *dev,
551 struct ifreq *ifr, int cmd)
552{
553 int err;
554 struct ip_tunnel_parm p;
555
556 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
557 return -EFAULT;
558 if (cmd == SIOCADDTUNNEL || cmd == SIOCCHGTUNNEL) {
559 if (p.iph.version != 4 || p.iph.protocol != IPPROTO_GRE ||
560 p.iph.ihl != 5 || (p.iph.frag_off&htons(~IP_DF)) ||
561 ((p.i_flags|p.o_flags)&(GRE_VERSION|GRE_ROUTING)))
562 return -EINVAL;
563 }
564 p.i_flags = gre_flags_to_tnl_flags(p.i_flags);
565 p.o_flags = gre_flags_to_tnl_flags(p.o_flags);
566
567 err = ip_tunnel_ioctl(dev, &p, cmd);
568 if (err)
569 return err;
570
571 p.i_flags = gre_tnl_flags_to_gre_flags(p.i_flags);
572 p.o_flags = gre_tnl_flags_to_gre_flags(p.o_flags);
573
574 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
575 return -EFAULT;
576 return 0;
577}
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606static int ipgre_header(struct sk_buff *skb, struct net_device *dev,
607 unsigned short type,
608 const void *daddr, const void *saddr, unsigned int len)
609{
610 struct ip_tunnel *t = netdev_priv(dev);
611 struct iphdr *iph;
612 struct gre_base_hdr *greh;
613
614 iph = (struct iphdr *)skb_push(skb, t->hlen + sizeof(*iph));
615 greh = (struct gre_base_hdr *)(iph+1);
616 greh->flags = gre_tnl_flags_to_gre_flags(t->parms.o_flags);
617 greh->protocol = htons(type);
618
619 memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
620
621
622 if (saddr)
623 memcpy(&iph->saddr, saddr, 4);
624 if (daddr)
625 memcpy(&iph->daddr, daddr, 4);
626 if (iph->daddr)
627 return t->hlen + sizeof(*iph);
628
629 return -(t->hlen + sizeof(*iph));
630}
631
632static int ipgre_header_parse(const struct sk_buff *skb, unsigned char *haddr)
633{
634 const struct iphdr *iph = (const struct iphdr *) skb_mac_header(skb);
635 memcpy(haddr, &iph->saddr, 4);
636 return 4;
637}
638
639static const struct header_ops ipgre_header_ops = {
640 .create = ipgre_header,
641 .parse = ipgre_header_parse,
642};
643
644#ifdef CONFIG_NET_IPGRE_BROADCAST
645static int ipgre_open(struct net_device *dev)
646{
647 struct ip_tunnel *t = netdev_priv(dev);
648
649 if (ipv4_is_multicast(t->parms.iph.daddr)) {
650 struct flowi4 fl4;
651 struct rtable *rt;
652
653 rt = ip_route_output_gre(t->net, &fl4,
654 t->parms.iph.daddr,
655 t->parms.iph.saddr,
656 t->parms.o_key,
657 RT_TOS(t->parms.iph.tos),
658 t->parms.link);
659 if (IS_ERR(rt))
660 return -EADDRNOTAVAIL;
661 dev = rt->dst.dev;
662 ip_rt_put(rt);
663 if (!__in_dev_get_rtnl(dev))
664 return -EADDRNOTAVAIL;
665 t->mlink = dev->ifindex;
666 ip_mc_inc_group(__in_dev_get_rtnl(dev), t->parms.iph.daddr);
667 }
668 return 0;
669}
670
671static int ipgre_close(struct net_device *dev)
672{
673 struct ip_tunnel *t = netdev_priv(dev);
674
675 if (ipv4_is_multicast(t->parms.iph.daddr) && t->mlink) {
676 struct in_device *in_dev;
677 in_dev = inetdev_by_index(t->net, t->mlink);
678 if (in_dev)
679 ip_mc_dec_group(in_dev, t->parms.iph.daddr);
680 }
681 return 0;
682}
683#endif
684
685static const struct net_device_ops ipgre_netdev_ops = {
686 .ndo_init = ipgre_tunnel_init,
687 .ndo_uninit = ip_tunnel_uninit,
688#ifdef CONFIG_NET_IPGRE_BROADCAST
689 .ndo_open = ipgre_open,
690 .ndo_stop = ipgre_close,
691#endif
692 .ndo_start_xmit = ipgre_xmit,
693 .ndo_do_ioctl = ipgre_tunnel_ioctl,
694 .ndo_change_mtu = ip_tunnel_change_mtu,
695 .ndo_get_stats64 = ip_tunnel_get_stats64,
696 .ndo_get_iflink = ip_tunnel_get_iflink,
697};
698
699#define GRE_FEATURES (NETIF_F_SG | \
700 NETIF_F_FRAGLIST | \
701 NETIF_F_HIGHDMA | \
702 NETIF_F_HW_CSUM)
703
704static void ipgre_tunnel_setup(struct net_device *dev)
705{
706 dev->netdev_ops = &ipgre_netdev_ops;
707 dev->type = ARPHRD_IPGRE;
708 ip_tunnel_setup(dev, ipgre_net_id);
709}
710
711static void __gre_tunnel_init(struct net_device *dev)
712{
713 struct ip_tunnel *tunnel;
714 int t_hlen;
715
716 tunnel = netdev_priv(dev);
717 tunnel->tun_hlen = gre_calc_hlen(tunnel->parms.o_flags);
718 tunnel->parms.iph.protocol = IPPROTO_GRE;
719
720 tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;
721
722 t_hlen = tunnel->hlen + sizeof(struct iphdr);
723
724 dev->needed_headroom = LL_MAX_HEADER + t_hlen + 4;
725 dev->mtu = ETH_DATA_LEN - t_hlen - 4;
726
727 dev->features |= GRE_FEATURES;
728 dev->hw_features |= GRE_FEATURES;
729
730 if (!(tunnel->parms.o_flags & TUNNEL_SEQ)) {
731
732
733
734
735 if (!(tunnel->parms.o_flags & TUNNEL_CSUM) ||
736 (tunnel->encap.type == TUNNEL_ENCAP_NONE)) {
737 dev->features |= NETIF_F_GSO_SOFTWARE;
738 dev->hw_features |= NETIF_F_GSO_SOFTWARE;
739 }
740
741
742
743
744 dev->features |= NETIF_F_LLTX;
745 }
746}
747
748static int ipgre_tunnel_init(struct net_device *dev)
749{
750 struct ip_tunnel *tunnel = netdev_priv(dev);
751 struct iphdr *iph = &tunnel->parms.iph;
752
753 __gre_tunnel_init(dev);
754
755 memcpy(dev->dev_addr, &iph->saddr, 4);
756 memcpy(dev->broadcast, &iph->daddr, 4);
757
758 dev->flags = IFF_NOARP;
759 netif_keep_dst(dev);
760 dev->addr_len = 4;
761
762 if (iph->daddr && !tunnel->collect_md) {
763#ifdef CONFIG_NET_IPGRE_BROADCAST
764 if (ipv4_is_multicast(iph->daddr)) {
765 if (!iph->saddr)
766 return -EINVAL;
767 dev->flags = IFF_BROADCAST;
768 dev->header_ops = &ipgre_header_ops;
769 }
770#endif
771 } else if (!tunnel->collect_md) {
772 dev->header_ops = &ipgre_header_ops;
773 }
774
775 return ip_tunnel_init(dev);
776}
777
778static const struct gre_protocol ipgre_protocol = {
779 .handler = gre_rcv,
780 .err_handler = gre_err,
781};
782
783static int __net_init ipgre_init_net(struct net *net)
784{
785 return ip_tunnel_init_net(net, ipgre_net_id, &ipgre_link_ops, NULL);
786}
787
788static void __net_exit ipgre_exit_net(struct net *net)
789{
790 struct ip_tunnel_net *itn = net_generic(net, ipgre_net_id);
791 ip_tunnel_delete_net(itn, &ipgre_link_ops);
792}
793
794static struct pernet_operations ipgre_net_ops = {
795 .init = ipgre_init_net,
796 .exit = ipgre_exit_net,
797 .id = &ipgre_net_id,
798 .size = sizeof(struct ip_tunnel_net),
799};
800
801static int ipgre_tunnel_validate(struct nlattr *tb[], struct nlattr *data[])
802{
803 __be16 flags;
804
805 if (!data)
806 return 0;
807
808 flags = 0;
809 if (data[IFLA_GRE_IFLAGS])
810 flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
811 if (data[IFLA_GRE_OFLAGS])
812 flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
813 if (flags & (GRE_VERSION|GRE_ROUTING))
814 return -EINVAL;
815
816 if (data[IFLA_GRE_COLLECT_METADATA] &&
817 data[IFLA_GRE_ENCAP_TYPE] &&
818 nla_get_u16(data[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE)
819 return -EINVAL;
820
821 return 0;
822}
823
824static int ipgre_tap_validate(struct nlattr *tb[], struct nlattr *data[])
825{
826 __be32 daddr;
827
828 if (tb[IFLA_ADDRESS]) {
829 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
830 return -EINVAL;
831 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
832 return -EADDRNOTAVAIL;
833 }
834
835 if (!data)
836 goto out;
837
838 if (data[IFLA_GRE_REMOTE]) {
839 memcpy(&daddr, nla_data(data[IFLA_GRE_REMOTE]), 4);
840 if (!daddr)
841 return -EINVAL;
842 }
843
844out:
845 return ipgre_tunnel_validate(tb, data);
846}
847
848static int ipgre_netlink_parms(struct net_device *dev,
849 struct nlattr *data[],
850 struct nlattr *tb[],
851 struct ip_tunnel_parm *parms)
852{
853 struct ip_tunnel *t = netdev_priv(dev);
854
855 memset(parms, 0, sizeof(*parms));
856
857 parms->iph.protocol = IPPROTO_GRE;
858
859 if (!data)
860 return 0;
861
862 if (data[IFLA_GRE_LINK])
863 parms->link = nla_get_u32(data[IFLA_GRE_LINK]);
864
865 if (data[IFLA_GRE_IFLAGS])
866 parms->i_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_IFLAGS]));
867
868 if (data[IFLA_GRE_OFLAGS])
869 parms->o_flags = gre_flags_to_tnl_flags(nla_get_be16(data[IFLA_GRE_OFLAGS]));
870
871 if (data[IFLA_GRE_IKEY])
872 parms->i_key = nla_get_be32(data[IFLA_GRE_IKEY]);
873
874 if (data[IFLA_GRE_OKEY])
875 parms->o_key = nla_get_be32(data[IFLA_GRE_OKEY]);
876
877 if (data[IFLA_GRE_LOCAL])
878 parms->iph.saddr = nla_get_in_addr(data[IFLA_GRE_LOCAL]);
879
880 if (data[IFLA_GRE_REMOTE])
881 parms->iph.daddr = nla_get_in_addr(data[IFLA_GRE_REMOTE]);
882
883 if (data[IFLA_GRE_TTL])
884 parms->iph.ttl = nla_get_u8(data[IFLA_GRE_TTL]);
885
886 if (data[IFLA_GRE_TOS])
887 parms->iph.tos = nla_get_u8(data[IFLA_GRE_TOS]);
888
889 if (!data[IFLA_GRE_PMTUDISC] || nla_get_u8(data[IFLA_GRE_PMTUDISC])) {
890 if (t->ignore_df)
891 return -EINVAL;
892 parms->iph.frag_off = htons(IP_DF);
893 }
894
895 if (data[IFLA_GRE_COLLECT_METADATA]) {
896 t->collect_md = true;
897 if (dev->type == ARPHRD_IPGRE)
898 dev->type = ARPHRD_NONE;
899 }
900
901 if (data[IFLA_GRE_IGNORE_DF]) {
902 if (nla_get_u8(data[IFLA_GRE_IGNORE_DF])
903 && (parms->iph.frag_off & htons(IP_DF)))
904 return -EINVAL;
905 t->ignore_df = !!nla_get_u8(data[IFLA_GRE_IGNORE_DF]);
906 }
907
908 return 0;
909}
910
911
912static bool ipgre_netlink_encap_parms(struct nlattr *data[],
913 struct ip_tunnel_encap *ipencap)
914{
915 bool ret = false;
916
917 memset(ipencap, 0, sizeof(*ipencap));
918
919 if (!data)
920 return ret;
921
922 if (data[IFLA_GRE_ENCAP_TYPE]) {
923 ret = true;
924 ipencap->type = nla_get_u16(data[IFLA_GRE_ENCAP_TYPE]);
925 }
926
927 if (data[IFLA_GRE_ENCAP_FLAGS]) {
928 ret = true;
929 ipencap->flags = nla_get_u16(data[IFLA_GRE_ENCAP_FLAGS]);
930 }
931
932 if (data[IFLA_GRE_ENCAP_SPORT]) {
933 ret = true;
934 ipencap->sport = nla_get_be16(data[IFLA_GRE_ENCAP_SPORT]);
935 }
936
937 if (data[IFLA_GRE_ENCAP_DPORT]) {
938 ret = true;
939 ipencap->dport = nla_get_be16(data[IFLA_GRE_ENCAP_DPORT]);
940 }
941
942 return ret;
943}
944
945static int gre_tap_init(struct net_device *dev)
946{
947 __gre_tunnel_init(dev);
948 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
949
950 return ip_tunnel_init(dev);
951}
952
953static const struct net_device_ops gre_tap_netdev_ops = {
954 .ndo_init = gre_tap_init,
955 .ndo_uninit = ip_tunnel_uninit,
956 .ndo_start_xmit = gre_tap_xmit,
957 .ndo_set_mac_address = eth_mac_addr,
958 .ndo_validate_addr = eth_validate_addr,
959 .ndo_change_mtu = ip_tunnel_change_mtu,
960 .ndo_get_stats64 = ip_tunnel_get_stats64,
961 .ndo_get_iflink = ip_tunnel_get_iflink,
962 .ndo_fill_metadata_dst = gre_fill_metadata_dst,
963};
964
965static void ipgre_tap_setup(struct net_device *dev)
966{
967 ether_setup(dev);
968 dev->netdev_ops = &gre_tap_netdev_ops;
969 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
970 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
971 ip_tunnel_setup(dev, gre_tap_net_id);
972}
973
974static int ipgre_newlink(struct net *src_net, struct net_device *dev,
975 struct nlattr *tb[], struct nlattr *data[])
976{
977 struct ip_tunnel_parm p;
978 struct ip_tunnel_encap ipencap;
979 int err;
980
981 if (ipgre_netlink_encap_parms(data, &ipencap)) {
982 struct ip_tunnel *t = netdev_priv(dev);
983 err = ip_tunnel_encap_setup(t, &ipencap);
984
985 if (err < 0)
986 return err;
987 }
988
989 err = ipgre_netlink_parms(dev, data, tb, &p);
990 if (err < 0)
991 return err;
992 return ip_tunnel_newlink(dev, tb, &p);
993}
994
995static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[],
996 struct nlattr *data[])
997{
998 struct ip_tunnel_parm p;
999 struct ip_tunnel_encap ipencap;
1000 int err;
1001
1002 if (ipgre_netlink_encap_parms(data, &ipencap)) {
1003 struct ip_tunnel *t = netdev_priv(dev);
1004 err = ip_tunnel_encap_setup(t, &ipencap);
1005
1006 if (err < 0)
1007 return err;
1008 }
1009
1010 err = ipgre_netlink_parms(dev, data, tb, &p);
1011 if (err < 0)
1012 return err;
1013 return ip_tunnel_changelink(dev, tb, &p);
1014}
1015
1016static size_t ipgre_get_size(const struct net_device *dev)
1017{
1018 return
1019
1020 nla_total_size(4) +
1021
1022 nla_total_size(2) +
1023
1024 nla_total_size(2) +
1025
1026 nla_total_size(4) +
1027
1028 nla_total_size(4) +
1029
1030 nla_total_size(4) +
1031
1032 nla_total_size(4) +
1033
1034 nla_total_size(1) +
1035
1036 nla_total_size(1) +
1037
1038 nla_total_size(1) +
1039
1040 nla_total_size(2) +
1041
1042 nla_total_size(2) +
1043
1044 nla_total_size(2) +
1045
1046 nla_total_size(2) +
1047
1048 nla_total_size(0) +
1049
1050 nla_total_size(1) +
1051 0;
1052}
1053
1054static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
1055{
1056 struct ip_tunnel *t = netdev_priv(dev);
1057 struct ip_tunnel_parm *p = &t->parms;
1058
1059 if (nla_put_u32(skb, IFLA_GRE_LINK, p->link) ||
1060 nla_put_be16(skb, IFLA_GRE_IFLAGS,
1061 gre_tnl_flags_to_gre_flags(p->i_flags)) ||
1062 nla_put_be16(skb, IFLA_GRE_OFLAGS,
1063 gre_tnl_flags_to_gre_flags(p->o_flags)) ||
1064 nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) ||
1065 nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) ||
1066 nla_put_in_addr(skb, IFLA_GRE_LOCAL, p->iph.saddr) ||
1067 nla_put_in_addr(skb, IFLA_GRE_REMOTE, p->iph.daddr) ||
1068 nla_put_u8(skb, IFLA_GRE_TTL, p->iph.ttl) ||
1069 nla_put_u8(skb, IFLA_GRE_TOS, p->iph.tos) ||
1070 nla_put_u8(skb, IFLA_GRE_PMTUDISC,
1071 !!(p->iph.frag_off & htons(IP_DF))))
1072 goto nla_put_failure;
1073
1074 if (nla_put_u16(skb, IFLA_GRE_ENCAP_TYPE,
1075 t->encap.type) ||
1076 nla_put_be16(skb, IFLA_GRE_ENCAP_SPORT,
1077 t->encap.sport) ||
1078 nla_put_be16(skb, IFLA_GRE_ENCAP_DPORT,
1079 t->encap.dport) ||
1080 nla_put_u16(skb, IFLA_GRE_ENCAP_FLAGS,
1081 t->encap.flags))
1082 goto nla_put_failure;
1083
1084 if (nla_put_u8(skb, IFLA_GRE_IGNORE_DF, t->ignore_df))
1085 goto nla_put_failure;
1086
1087 if (t->collect_md) {
1088 if (nla_put_flag(skb, IFLA_GRE_COLLECT_METADATA))
1089 goto nla_put_failure;
1090 }
1091
1092 return 0;
1093
1094nla_put_failure:
1095 return -EMSGSIZE;
1096}
1097
1098static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
1099 [IFLA_GRE_LINK] = { .type = NLA_U32 },
1100 [IFLA_GRE_IFLAGS] = { .type = NLA_U16 },
1101 [IFLA_GRE_OFLAGS] = { .type = NLA_U16 },
1102 [IFLA_GRE_IKEY] = { .type = NLA_U32 },
1103 [IFLA_GRE_OKEY] = { .type = NLA_U32 },
1104 [IFLA_GRE_LOCAL] = { .len = FIELD_SIZEOF(struct iphdr, saddr) },
1105 [IFLA_GRE_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1106 [IFLA_GRE_TTL] = { .type = NLA_U8 },
1107 [IFLA_GRE_TOS] = { .type = NLA_U8 },
1108 [IFLA_GRE_PMTUDISC] = { .type = NLA_U8 },
1109 [IFLA_GRE_ENCAP_TYPE] = { .type = NLA_U16 },
1110 [IFLA_GRE_ENCAP_FLAGS] = { .type = NLA_U16 },
1111 [IFLA_GRE_ENCAP_SPORT] = { .type = NLA_U16 },
1112 [IFLA_GRE_ENCAP_DPORT] = { .type = NLA_U16 },
1113 [IFLA_GRE_COLLECT_METADATA] = { .type = NLA_FLAG },
1114 [IFLA_GRE_IGNORE_DF] = { .type = NLA_U8 },
1115};
1116
1117static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
1118 .kind = "gre",
1119 .maxtype = IFLA_GRE_MAX,
1120 .policy = ipgre_policy,
1121 .priv_size = sizeof(struct ip_tunnel),
1122 .setup = ipgre_tunnel_setup,
1123 .validate = ipgre_tunnel_validate,
1124 .newlink = ipgre_newlink,
1125 .changelink = ipgre_changelink,
1126 .dellink = ip_tunnel_dellink,
1127 .get_size = ipgre_get_size,
1128 .fill_info = ipgre_fill_info,
1129 .get_link_net = ip_tunnel_get_link_net,
1130};
1131
1132static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
1133 .kind = "gretap",
1134 .maxtype = IFLA_GRE_MAX,
1135 .policy = ipgre_policy,
1136 .priv_size = sizeof(struct ip_tunnel),
1137 .setup = ipgre_tap_setup,
1138 .validate = ipgre_tap_validate,
1139 .newlink = ipgre_newlink,
1140 .changelink = ipgre_changelink,
1141 .dellink = ip_tunnel_dellink,
1142 .get_size = ipgre_get_size,
1143 .fill_info = ipgre_fill_info,
1144 .get_link_net = ip_tunnel_get_link_net,
1145};
1146
1147struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
1148 u8 name_assign_type)
1149{
1150 struct nlattr *tb[IFLA_MAX + 1];
1151 struct net_device *dev;
1152 LIST_HEAD(list_kill);
1153 struct ip_tunnel *t;
1154 int err;
1155
1156 memset(&tb, 0, sizeof(tb));
1157
1158 dev = rtnl_create_link(net, name, name_assign_type,
1159 &ipgre_tap_ops, tb);
1160 if (IS_ERR(dev))
1161 return dev;
1162
1163
1164 t = netdev_priv(dev);
1165 t->collect_md = true;
1166
1167 err = ipgre_newlink(net, dev, tb, NULL);
1168 if (err < 0) {
1169 free_netdev(dev);
1170 return ERR_PTR(err);
1171 }
1172
1173
1174
1175
1176 err = __ip_tunnel_change_mtu(dev, IP_MAX_MTU, false);
1177 if (err)
1178 goto out;
1179
1180 err = rtnl_configure_link(dev, NULL);
1181 if (err < 0)
1182 goto out;
1183
1184 return dev;
1185out:
1186 ip_tunnel_dellink(dev, &list_kill);
1187 unregister_netdevice_many(&list_kill);
1188 return ERR_PTR(err);
1189}
1190EXPORT_SYMBOL_GPL(gretap_fb_dev_create);
1191
1192static int __net_init ipgre_tap_init_net(struct net *net)
1193{
1194 return ip_tunnel_init_net(net, gre_tap_net_id, &ipgre_tap_ops, "gretap0");
1195}
1196
1197static void __net_exit ipgre_tap_exit_net(struct net *net)
1198{
1199 struct ip_tunnel_net *itn = net_generic(net, gre_tap_net_id);
1200 ip_tunnel_delete_net(itn, &ipgre_tap_ops);
1201}
1202
1203static struct pernet_operations ipgre_tap_net_ops = {
1204 .init = ipgre_tap_init_net,
1205 .exit = ipgre_tap_exit_net,
1206 .id = &gre_tap_net_id,
1207 .size = sizeof(struct ip_tunnel_net),
1208};
1209
1210static int __init ipgre_init(void)
1211{
1212 int err;
1213
1214 pr_info("GRE over IPv4 tunneling driver\n");
1215
1216 err = register_pernet_device(&ipgre_net_ops);
1217 if (err < 0)
1218 return err;
1219
1220 err = register_pernet_device(&ipgre_tap_net_ops);
1221 if (err < 0)
1222 goto pnet_tap_faied;
1223
1224 err = gre_add_protocol(&ipgre_protocol, GREPROTO_CISCO);
1225 if (err < 0) {
1226 pr_info("%s: can't add protocol\n", __func__);
1227 goto add_proto_failed;
1228 }
1229
1230 err = rtnl_link_register(&ipgre_link_ops);
1231 if (err < 0)
1232 goto rtnl_link_failed;
1233
1234 err = rtnl_link_register(&ipgre_tap_ops);
1235 if (err < 0)
1236 goto tap_ops_failed;
1237
1238 return 0;
1239
1240tap_ops_failed:
1241 rtnl_link_unregister(&ipgre_link_ops);
1242rtnl_link_failed:
1243 gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1244add_proto_failed:
1245 unregister_pernet_device(&ipgre_tap_net_ops);
1246pnet_tap_faied:
1247 unregister_pernet_device(&ipgre_net_ops);
1248 return err;
1249}
1250
1251static void __exit ipgre_fini(void)
1252{
1253 rtnl_link_unregister(&ipgre_tap_ops);
1254 rtnl_link_unregister(&ipgre_link_ops);
1255 gre_del_protocol(&ipgre_protocol, GREPROTO_CISCO);
1256 unregister_pernet_device(&ipgre_tap_net_ops);
1257 unregister_pernet_device(&ipgre_net_ops);
1258}
1259
1260module_init(ipgre_init);
1261module_exit(ipgre_fini);
1262MODULE_LICENSE("GPL");
1263MODULE_ALIAS_RTNL_LINK("gre");
1264MODULE_ALIAS_RTNL_LINK("gretap");
1265MODULE_ALIAS_NETDEV("gre0");
1266MODULE_ALIAS_NETDEV("gretap0");
1267