GNU Linux-libre 4.19.314-gnu1
[releases.git] / drivers / net / geneve.c
1 /*
2  * GENEVE: Generic Network Virtualization Encapsulation
3  *
4  * Copyright (c) 2015 Red Hat, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/etherdevice.h>
16 #include <linux/hash.h>
17 #include <net/dst_metadata.h>
18 #include <net/gro_cells.h>
19 #include <net/rtnetlink.h>
20 #include <net/geneve.h>
21 #include <net/protocol.h>
22
23 #define GENEVE_NETDEV_VER       "0.6"
24
25 #define GENEVE_UDP_PORT         6081
26
27 #define GENEVE_N_VID            (1u << 24)
28 #define GENEVE_VID_MASK         (GENEVE_N_VID - 1)
29
30 #define VNI_HASH_BITS           10
31 #define VNI_HASH_SIZE           (1<<VNI_HASH_BITS)
32
33 static bool log_ecn_error = true;
34 module_param(log_ecn_error, bool, 0644);
35 MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
36
37 #define GENEVE_VER 0
38 #define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr))
39 #define GENEVE_IPV4_HLEN (ETH_HLEN + sizeof(struct iphdr) + GENEVE_BASE_HLEN)
40 #define GENEVE_IPV6_HLEN (ETH_HLEN + sizeof(struct ipv6hdr) + GENEVE_BASE_HLEN)
41
42 /* per-network namespace private data for this module */
43 struct geneve_net {
44         struct list_head        geneve_list;
45         struct list_head        sock_list;
46 };
47
48 static unsigned int geneve_net_id;
49
50 struct geneve_dev_node {
51         struct hlist_node hlist;
52         struct geneve_dev *geneve;
53 };
54
55 /* Pseudo network device */
56 struct geneve_dev {
57         struct geneve_dev_node hlist4;  /* vni hash table for IPv4 socket */
58 #if IS_ENABLED(CONFIG_IPV6)
59         struct geneve_dev_node hlist6;  /* vni hash table for IPv6 socket */
60 #endif
61         struct net         *net;        /* netns for packet i/o */
62         struct net_device  *dev;        /* netdev for geneve tunnel */
63         struct ip_tunnel_info info;
64         struct geneve_sock __rcu *sock4;        /* IPv4 socket used for geneve tunnel */
65 #if IS_ENABLED(CONFIG_IPV6)
66         struct geneve_sock __rcu *sock6;        /* IPv6 socket used for geneve tunnel */
67 #endif
68         struct list_head   next;        /* geneve's per namespace list */
69         struct gro_cells   gro_cells;
70         bool               collect_md;
71         bool               use_udp6_rx_checksums;
72 };
73
74 struct geneve_sock {
75         bool                    collect_md;
76         struct list_head        list;
77         struct socket           *sock;
78         struct rcu_head         rcu;
79         int                     refcnt;
80         struct hlist_head       vni_list[VNI_HASH_SIZE];
81 };
82
83 static inline __u32 geneve_net_vni_hash(u8 vni[3])
84 {
85         __u32 vnid;
86
87         vnid = (vni[0] << 16) | (vni[1] << 8) | vni[2];
88         return hash_32(vnid, VNI_HASH_BITS);
89 }
90
91 static __be64 vni_to_tunnel_id(const __u8 *vni)
92 {
93 #ifdef __BIG_ENDIAN
94         return (vni[0] << 16) | (vni[1] << 8) | vni[2];
95 #else
96         return (__force __be64)(((__force u64)vni[0] << 40) |
97                                 ((__force u64)vni[1] << 48) |
98                                 ((__force u64)vni[2] << 56));
99 #endif
100 }
101
102 /* Convert 64 bit tunnel ID to 24 bit VNI. */
103 static void tunnel_id_to_vni(__be64 tun_id, __u8 *vni)
104 {
105 #ifdef __BIG_ENDIAN
106         vni[0] = (__force __u8)(tun_id >> 16);
107         vni[1] = (__force __u8)(tun_id >> 8);
108         vni[2] = (__force __u8)tun_id;
109 #else
110         vni[0] = (__force __u8)((__force u64)tun_id >> 40);
111         vni[1] = (__force __u8)((__force u64)tun_id >> 48);
112         vni[2] = (__force __u8)((__force u64)tun_id >> 56);
113 #endif
114 }
115
116 static bool eq_tun_id_and_vni(u8 *tun_id, u8 *vni)
117 {
118         return !memcmp(vni, &tun_id[5], 3);
119 }
120
121 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs)
122 {
123         return gs->sock->sk->sk_family;
124 }
125
126 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs,
127                                         __be32 addr, u8 vni[])
128 {
129         struct hlist_head *vni_list_head;
130         struct geneve_dev_node *node;
131         __u32 hash;
132
133         /* Find the device for this VNI */
134         hash = geneve_net_vni_hash(vni);
135         vni_list_head = &gs->vni_list[hash];
136         hlist_for_each_entry_rcu(node, vni_list_head, hlist) {
137                 if (eq_tun_id_and_vni((u8 *)&node->geneve->info.key.tun_id, vni) &&
138                     addr == node->geneve->info.key.u.ipv4.dst)
139                         return node->geneve;
140         }
141         return NULL;
142 }
143
144 #if IS_ENABLED(CONFIG_IPV6)
145 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs,
146                                          struct in6_addr addr6, u8 vni[])
147 {
148         struct hlist_head *vni_list_head;
149         struct geneve_dev_node *node;
150         __u32 hash;
151
152         /* Find the device for this VNI */
153         hash = geneve_net_vni_hash(vni);
154         vni_list_head = &gs->vni_list[hash];
155         hlist_for_each_entry_rcu(node, vni_list_head, hlist) {
156                 if (eq_tun_id_and_vni((u8 *)&node->geneve->info.key.tun_id, vni) &&
157                     ipv6_addr_equal(&addr6, &node->geneve->info.key.u.ipv6.dst))
158                         return node->geneve;
159         }
160         return NULL;
161 }
162 #endif
163
164 static inline struct genevehdr *geneve_hdr(const struct sk_buff *skb)
165 {
166         return (struct genevehdr *)(udp_hdr(skb) + 1);
167 }
168
169 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs,
170                                             struct sk_buff *skb)
171 {
172         static u8 zero_vni[3];
173         u8 *vni;
174
175         if (geneve_get_sk_family(gs) == AF_INET) {
176                 struct iphdr *iph;
177                 __be32 addr;
178
179                 iph = ip_hdr(skb); /* outer IP header... */
180
181                 if (gs->collect_md) {
182                         vni = zero_vni;
183                         addr = 0;
184                 } else {
185                         vni = geneve_hdr(skb)->vni;
186                         addr = iph->saddr;
187                 }
188
189                 return geneve_lookup(gs, addr, vni);
190 #if IS_ENABLED(CONFIG_IPV6)
191         } else if (geneve_get_sk_family(gs) == AF_INET6) {
192                 static struct in6_addr zero_addr6;
193                 struct ipv6hdr *ip6h;
194                 struct in6_addr addr6;
195
196                 ip6h = ipv6_hdr(skb); /* outer IPv6 header... */
197
198                 if (gs->collect_md) {
199                         vni = zero_vni;
200                         addr6 = zero_addr6;
201                 } else {
202                         vni = geneve_hdr(skb)->vni;
203                         addr6 = ip6h->saddr;
204                 }
205
206                 return geneve6_lookup(gs, addr6, vni);
207 #endif
208         }
209         return NULL;
210 }
211
212 /* geneve receive/decap routine */
213 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
214                       struct sk_buff *skb)
215 {
216         struct genevehdr *gnvh = geneve_hdr(skb);
217         struct metadata_dst *tun_dst = NULL;
218         struct pcpu_sw_netstats *stats;
219         unsigned int len;
220         int nh, err = 0;
221         void *oiph;
222
223         if (ip_tunnel_collect_metadata() || gs->collect_md) {
224                 __be16 flags;
225
226                 flags = TUNNEL_KEY | (gnvh->oam ? TUNNEL_OAM : 0) |
227                         (gnvh->critical ? TUNNEL_CRIT_OPT : 0);
228
229                 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags,
230                                          vni_to_tunnel_id(gnvh->vni),
231                                          gnvh->opt_len * 4);
232                 if (!tun_dst) {
233                         geneve->dev->stats.rx_dropped++;
234                         goto drop;
235                 }
236                 /* Update tunnel dst according to Geneve options. */
237                 ip_tunnel_info_opts_set(&tun_dst->u.tun_info,
238                                         gnvh->options, gnvh->opt_len * 4,
239                                         TUNNEL_GENEVE_OPT);
240         } else {
241                 /* Drop packets w/ critical options,
242                  * since we don't support any...
243                  */
244                 if (gnvh->critical) {
245                         geneve->dev->stats.rx_frame_errors++;
246                         geneve->dev->stats.rx_errors++;
247                         goto drop;
248                 }
249         }
250
251         skb_reset_mac_header(skb);
252         skb->protocol = eth_type_trans(skb, geneve->dev);
253         skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
254
255         if (tun_dst)
256                 skb_dst_set(skb, &tun_dst->dst);
257
258         /* Ignore packet loops (and multicast echo) */
259         if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
260                 geneve->dev->stats.rx_errors++;
261                 goto drop;
262         }
263
264         /* Save offset of outer header relative to skb->head,
265          * because we are going to reset the network header to the inner header
266          * and might change skb->head.
267          */
268         nh = skb_network_header(skb) - skb->head;
269
270         skb_reset_network_header(skb);
271
272         if (!pskb_inet_may_pull(skb)) {
273                 DEV_STATS_INC(geneve->dev, rx_length_errors);
274                 DEV_STATS_INC(geneve->dev, rx_errors);
275                 goto drop;
276         }
277
278         /* Get the outer header. */
279         oiph = skb->head + nh;
280
281         if (geneve_get_sk_family(gs) == AF_INET)
282                 err = IP_ECN_decapsulate(oiph, skb);
283 #if IS_ENABLED(CONFIG_IPV6)
284         else
285                 err = IP6_ECN_decapsulate(oiph, skb);
286 #endif
287
288         if (unlikely(err)) {
289                 if (log_ecn_error) {
290                         if (geneve_get_sk_family(gs) == AF_INET)
291                                 net_info_ratelimited("non-ECT from %pI4 "
292                                                      "with TOS=%#x\n",
293                                                      &((struct iphdr *)oiph)->saddr,
294                                                      ((struct iphdr *)oiph)->tos);
295 #if IS_ENABLED(CONFIG_IPV6)
296                         else
297                                 net_info_ratelimited("non-ECT from %pI6\n",
298                                                      &((struct ipv6hdr *)oiph)->saddr);
299 #endif
300                 }
301                 if (err > 1) {
302                         ++geneve->dev->stats.rx_frame_errors;
303                         ++geneve->dev->stats.rx_errors;
304                         goto drop;
305                 }
306         }
307
308         len = skb->len;
309         err = gro_cells_receive(&geneve->gro_cells, skb);
310         if (likely(err == NET_RX_SUCCESS)) {
311                 stats = this_cpu_ptr(geneve->dev->tstats);
312                 u64_stats_update_begin(&stats->syncp);
313                 stats->rx_packets++;
314                 stats->rx_bytes += len;
315                 u64_stats_update_end(&stats->syncp);
316         }
317         return;
318 drop:
319         /* Consume bad packet */
320         kfree_skb(skb);
321 }
322
323 /* Setup stats when device is created */
324 static int geneve_init(struct net_device *dev)
325 {
326         struct geneve_dev *geneve = netdev_priv(dev);
327         int err;
328
329         dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
330         if (!dev->tstats)
331                 return -ENOMEM;
332
333         err = gro_cells_init(&geneve->gro_cells, dev);
334         if (err) {
335                 free_percpu(dev->tstats);
336                 return err;
337         }
338
339         err = dst_cache_init(&geneve->info.dst_cache, GFP_KERNEL);
340         if (err) {
341                 free_percpu(dev->tstats);
342                 gro_cells_destroy(&geneve->gro_cells);
343                 return err;
344         }
345         return 0;
346 }
347
348 static void geneve_uninit(struct net_device *dev)
349 {
350         struct geneve_dev *geneve = netdev_priv(dev);
351
352         dst_cache_destroy(&geneve->info.dst_cache);
353         gro_cells_destroy(&geneve->gro_cells);
354         free_percpu(dev->tstats);
355 }
356
357 /* Callback from net/ipv4/udp.c to receive packets */
358 static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
359 {
360         struct genevehdr *geneveh;
361         struct geneve_dev *geneve;
362         struct geneve_sock *gs;
363         int opts_len;
364
365         /* Need UDP and Geneve header to be present */
366         if (unlikely(!pskb_may_pull(skb, GENEVE_BASE_HLEN)))
367                 goto drop;
368
369         /* Return packets with reserved bits set */
370         geneveh = geneve_hdr(skb);
371         if (unlikely(geneveh->ver != GENEVE_VER))
372                 goto drop;
373
374         if (unlikely(geneveh->proto_type != htons(ETH_P_TEB)))
375                 goto drop;
376
377         gs = rcu_dereference_sk_user_data(sk);
378         if (!gs)
379                 goto drop;
380
381         geneve = geneve_lookup_skb(gs, skb);
382         if (!geneve)
383                 goto drop;
384
385         opts_len = geneveh->opt_len * 4;
386         if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len,
387                                  htons(ETH_P_TEB),
388                                  !net_eq(geneve->net, dev_net(geneve->dev)))) {
389                 geneve->dev->stats.rx_dropped++;
390                 goto drop;
391         }
392
393         geneve_rx(geneve, gs, skb);
394         return 0;
395
396 drop:
397         /* Consume bad packet */
398         kfree_skb(skb);
399         return 0;
400 }
401
402 static struct socket *geneve_create_sock(struct net *net, bool ipv6,
403                                          __be16 port, bool ipv6_rx_csum)
404 {
405         struct socket *sock;
406         struct udp_port_cfg udp_conf;
407         int err;
408
409         memset(&udp_conf, 0, sizeof(udp_conf));
410
411         if (ipv6) {
412                 udp_conf.family = AF_INET6;
413                 udp_conf.ipv6_v6only = 1;
414                 udp_conf.use_udp6_rx_checksums = ipv6_rx_csum;
415         } else {
416                 udp_conf.family = AF_INET;
417                 udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
418         }
419
420         udp_conf.local_udp_port = port;
421
422         /* Open UDP socket */
423         err = udp_sock_create(net, &udp_conf, &sock);
424         if (err < 0)
425                 return ERR_PTR(err);
426
427         return sock;
428 }
429
430 static int geneve_hlen(struct genevehdr *gh)
431 {
432         return sizeof(*gh) + gh->opt_len * 4;
433 }
434
435 static struct sk_buff *geneve_gro_receive(struct sock *sk,
436                                           struct list_head *head,
437                                           struct sk_buff *skb)
438 {
439         struct sk_buff *pp = NULL;
440         struct sk_buff *p;
441         struct genevehdr *gh, *gh2;
442         unsigned int hlen, gh_len, off_gnv;
443         const struct packet_offload *ptype;
444         __be16 type;
445         int flush = 1;
446
447         off_gnv = skb_gro_offset(skb);
448         hlen = off_gnv + sizeof(*gh);
449         gh = skb_gro_header_fast(skb, off_gnv);
450         if (skb_gro_header_hard(skb, hlen)) {
451                 gh = skb_gro_header_slow(skb, hlen, off_gnv);
452                 if (unlikely(!gh))
453                         goto out;
454         }
455
456         if (gh->ver != GENEVE_VER || gh->oam)
457                 goto out;
458         gh_len = geneve_hlen(gh);
459
460         hlen = off_gnv + gh_len;
461         if (skb_gro_header_hard(skb, hlen)) {
462                 gh = skb_gro_header_slow(skb, hlen, off_gnv);
463                 if (unlikely(!gh))
464                         goto out;
465         }
466
467         list_for_each_entry(p, head, list) {
468                 if (!NAPI_GRO_CB(p)->same_flow)
469                         continue;
470
471                 gh2 = (struct genevehdr *)(p->data + off_gnv);
472                 if (gh->opt_len != gh2->opt_len ||
473                     memcmp(gh, gh2, gh_len)) {
474                         NAPI_GRO_CB(p)->same_flow = 0;
475                         continue;
476                 }
477         }
478
479         type = gh->proto_type;
480
481         rcu_read_lock();
482         ptype = gro_find_receive_by_type(type);
483         if (!ptype)
484                 goto out_unlock;
485
486         skb_gro_pull(skb, gh_len);
487         skb_gro_postpull_rcsum(skb, gh, gh_len);
488         pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
489         flush = 0;
490
491 out_unlock:
492         rcu_read_unlock();
493 out:
494         skb_gro_flush_final(skb, pp, flush);
495
496         return pp;
497 }
498
499 static int geneve_gro_complete(struct sock *sk, struct sk_buff *skb,
500                                int nhoff)
501 {
502         struct genevehdr *gh;
503         struct packet_offload *ptype;
504         __be16 type;
505         int gh_len;
506         int err = -ENOSYS;
507
508         gh = (struct genevehdr *)(skb->data + nhoff);
509         gh_len = geneve_hlen(gh);
510         type = gh->proto_type;
511
512         rcu_read_lock();
513         ptype = gro_find_complete_by_type(type);
514         if (ptype)
515                 err = ptype->callbacks.gro_complete(skb, nhoff + gh_len);
516
517         rcu_read_unlock();
518
519         skb_set_inner_mac_header(skb, nhoff + gh_len);
520
521         return err;
522 }
523
524 /* Create new listen socket if needed */
525 static struct geneve_sock *geneve_socket_create(struct net *net, __be16 port,
526                                                 bool ipv6, bool ipv6_rx_csum)
527 {
528         struct geneve_net *gn = net_generic(net, geneve_net_id);
529         struct geneve_sock *gs;
530         struct socket *sock;
531         struct udp_tunnel_sock_cfg tunnel_cfg;
532         int h;
533
534         gs = kzalloc(sizeof(*gs), GFP_KERNEL);
535         if (!gs)
536                 return ERR_PTR(-ENOMEM);
537
538         sock = geneve_create_sock(net, ipv6, port, ipv6_rx_csum);
539         if (IS_ERR(sock)) {
540                 kfree(gs);
541                 return ERR_CAST(sock);
542         }
543
544         gs->sock = sock;
545         gs->refcnt = 1;
546         for (h = 0; h < VNI_HASH_SIZE; ++h)
547                 INIT_HLIST_HEAD(&gs->vni_list[h]);
548
549         /* Initialize the geneve udp offloads structure */
550         udp_tunnel_notify_add_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
551
552         /* Mark socket as an encapsulation socket */
553         memset(&tunnel_cfg, 0, sizeof(tunnel_cfg));
554         tunnel_cfg.sk_user_data = gs;
555         tunnel_cfg.encap_type = 1;
556         tunnel_cfg.gro_receive = geneve_gro_receive;
557         tunnel_cfg.gro_complete = geneve_gro_complete;
558         tunnel_cfg.encap_rcv = geneve_udp_encap_recv;
559         tunnel_cfg.encap_destroy = NULL;
560         setup_udp_tunnel_sock(net, sock, &tunnel_cfg);
561         list_add(&gs->list, &gn->sock_list);
562         return gs;
563 }
564
565 static void __geneve_sock_release(struct geneve_sock *gs)
566 {
567         if (!gs || --gs->refcnt)
568                 return;
569
570         list_del(&gs->list);
571         udp_tunnel_notify_del_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
572         udp_tunnel_sock_release(gs->sock);
573         kfree_rcu(gs, rcu);
574 }
575
576 static void geneve_sock_release(struct geneve_dev *geneve)
577 {
578         struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4);
579 #if IS_ENABLED(CONFIG_IPV6)
580         struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6);
581
582         rcu_assign_pointer(geneve->sock6, NULL);
583 #endif
584
585         rcu_assign_pointer(geneve->sock4, NULL);
586         synchronize_net();
587
588         __geneve_sock_release(gs4);
589 #if IS_ENABLED(CONFIG_IPV6)
590         __geneve_sock_release(gs6);
591 #endif
592 }
593
594 static struct geneve_sock *geneve_find_sock(struct geneve_net *gn,
595                                             sa_family_t family,
596                                             __be16 dst_port)
597 {
598         struct geneve_sock *gs;
599
600         list_for_each_entry(gs, &gn->sock_list, list) {
601                 if (inet_sk(gs->sock->sk)->inet_sport == dst_port &&
602                     geneve_get_sk_family(gs) == family) {
603                         return gs;
604                 }
605         }
606         return NULL;
607 }
608
609 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
610 {
611         struct net *net = geneve->net;
612         struct geneve_net *gn = net_generic(net, geneve_net_id);
613         struct geneve_dev_node *node;
614         struct geneve_sock *gs;
615         __u8 vni[3];
616         __u32 hash;
617
618         gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->info.key.tp_dst);
619         if (gs) {
620                 gs->refcnt++;
621                 goto out;
622         }
623
624         gs = geneve_socket_create(net, geneve->info.key.tp_dst, ipv6,
625                                   geneve->use_udp6_rx_checksums);
626         if (IS_ERR(gs))
627                 return PTR_ERR(gs);
628
629 out:
630         gs->collect_md = geneve->collect_md;
631 #if IS_ENABLED(CONFIG_IPV6)
632         if (ipv6) {
633                 rcu_assign_pointer(geneve->sock6, gs);
634                 node = &geneve->hlist6;
635         } else
636 #endif
637         {
638                 rcu_assign_pointer(geneve->sock4, gs);
639                 node = &geneve->hlist4;
640         }
641         node->geneve = geneve;
642
643         tunnel_id_to_vni(geneve->info.key.tun_id, vni);
644         hash = geneve_net_vni_hash(vni);
645         hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]);
646         return 0;
647 }
648
649 static int geneve_open(struct net_device *dev)
650 {
651         struct geneve_dev *geneve = netdev_priv(dev);
652         bool metadata = geneve->collect_md;
653         bool ipv4, ipv6;
654         int ret = 0;
655
656         ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
657         ipv4 = !ipv6 || metadata;
658 #if IS_ENABLED(CONFIG_IPV6)
659         if (ipv6) {
660                 ret = geneve_sock_add(geneve, true);
661                 if (ret < 0 && ret != -EAFNOSUPPORT)
662                         ipv4 = false;
663         }
664 #endif
665         if (ipv4)
666                 ret = geneve_sock_add(geneve, false);
667         if (ret < 0)
668                 geneve_sock_release(geneve);
669
670         return ret;
671 }
672
673 static int geneve_stop(struct net_device *dev)
674 {
675         struct geneve_dev *geneve = netdev_priv(dev);
676
677         hlist_del_init_rcu(&geneve->hlist4.hlist);
678 #if IS_ENABLED(CONFIG_IPV6)
679         hlist_del_init_rcu(&geneve->hlist6.hlist);
680 #endif
681         geneve_sock_release(geneve);
682         return 0;
683 }
684
685 static void geneve_build_header(struct genevehdr *geneveh,
686                                 const struct ip_tunnel_info *info)
687 {
688         geneveh->ver = GENEVE_VER;
689         geneveh->opt_len = info->options_len / 4;
690         geneveh->oam = !!(info->key.tun_flags & TUNNEL_OAM);
691         geneveh->critical = !!(info->key.tun_flags & TUNNEL_CRIT_OPT);
692         geneveh->rsvd1 = 0;
693         tunnel_id_to_vni(info->key.tun_id, geneveh->vni);
694         geneveh->proto_type = htons(ETH_P_TEB);
695         geneveh->rsvd2 = 0;
696
697         if (info->key.tun_flags & TUNNEL_GENEVE_OPT)
698                 ip_tunnel_info_opts_get(geneveh->options, info);
699 }
700
701 static int geneve_build_skb(struct dst_entry *dst, struct sk_buff *skb,
702                             const struct ip_tunnel_info *info,
703                             bool xnet, int ip_hdr_len)
704 {
705         bool udp_sum = !!(info->key.tun_flags & TUNNEL_CSUM);
706         struct genevehdr *gnvh;
707         int min_headroom;
708         int err;
709
710         skb_reset_mac_header(skb);
711         skb_scrub_packet(skb, xnet);
712
713         min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len +
714                        GENEVE_BASE_HLEN + info->options_len + ip_hdr_len;
715         err = skb_cow_head(skb, min_headroom);
716         if (unlikely(err))
717                 goto free_dst;
718
719         err = udp_tunnel_handle_offloads(skb, udp_sum);
720         if (err)
721                 goto free_dst;
722
723         gnvh = __skb_push(skb, sizeof(*gnvh) + info->options_len);
724         geneve_build_header(gnvh, info);
725         skb_set_inner_protocol(skb, htons(ETH_P_TEB));
726         return 0;
727
728 free_dst:
729         dst_release(dst);
730         return err;
731 }
732
733 static struct rtable *geneve_get_v4_rt(struct sk_buff *skb,
734                                        struct net_device *dev,
735                                        struct geneve_sock *gs4,
736                                        struct flowi4 *fl4,
737                                        const struct ip_tunnel_info *info,
738                                        __be16 dport, __be16 sport)
739 {
740         bool use_cache = ip_tunnel_dst_cache_usable(skb, info);
741         struct geneve_dev *geneve = netdev_priv(dev);
742         struct dst_cache *dst_cache;
743         struct rtable *rt = NULL;
744         __u8 tos;
745
746         if (!gs4)
747                 return ERR_PTR(-EIO);
748
749         memset(fl4, 0, sizeof(*fl4));
750         fl4->flowi4_mark = skb->mark;
751         fl4->flowi4_proto = IPPROTO_UDP;
752         fl4->daddr = info->key.u.ipv4.dst;
753         fl4->saddr = info->key.u.ipv4.src;
754         fl4->fl4_dport = dport;
755         fl4->fl4_sport = sport;
756
757         tos = info->key.tos;
758         if ((tos == 1) && !geneve->collect_md) {
759                 tos = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
760                 use_cache = false;
761         }
762         fl4->flowi4_tos = RT_TOS(tos);
763
764         dst_cache = (struct dst_cache *)&info->dst_cache;
765         if (use_cache) {
766                 rt = dst_cache_get_ip4(dst_cache, &fl4->saddr);
767                 if (rt)
768                         return rt;
769         }
770         rt = ip_route_output_key(geneve->net, fl4);
771         if (IS_ERR(rt)) {
772                 netdev_dbg(dev, "no route to %pI4\n", &fl4->daddr);
773                 return ERR_PTR(-ENETUNREACH);
774         }
775         if (rt->dst.dev == dev) { /* is this necessary? */
776                 netdev_dbg(dev, "circular route to %pI4\n", &fl4->daddr);
777                 ip_rt_put(rt);
778                 return ERR_PTR(-ELOOP);
779         }
780         if (use_cache)
781                 dst_cache_set_ip4(dst_cache, &rt->dst, fl4->saddr);
782         return rt;
783 }
784
785 #if IS_ENABLED(CONFIG_IPV6)
786 static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb,
787                                            struct net_device *dev,
788                                            struct geneve_sock *gs6,
789                                            struct flowi6 *fl6,
790                                            const struct ip_tunnel_info *info,
791                                            __be16 dport, __be16 sport)
792 {
793         bool use_cache = ip_tunnel_dst_cache_usable(skb, info);
794         struct geneve_dev *geneve = netdev_priv(dev);
795         struct dst_entry *dst = NULL;
796         struct dst_cache *dst_cache;
797         __u8 prio;
798
799         if (!gs6)
800                 return ERR_PTR(-EIO);
801
802         memset(fl6, 0, sizeof(*fl6));
803         fl6->flowi6_mark = skb->mark;
804         fl6->flowi6_proto = IPPROTO_UDP;
805         fl6->daddr = info->key.u.ipv6.dst;
806         fl6->saddr = info->key.u.ipv6.src;
807         fl6->fl6_dport = dport;
808         fl6->fl6_sport = sport;
809
810         prio = info->key.tos;
811         if ((prio == 1) && !geneve->collect_md) {
812                 prio = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
813                 use_cache = false;
814         }
815
816         fl6->flowlabel = ip6_make_flowinfo(prio, info->key.label);
817         dst_cache = (struct dst_cache *)&info->dst_cache;
818         if (use_cache) {
819                 dst = dst_cache_get_ip6(dst_cache, &fl6->saddr);
820                 if (dst)
821                         return dst;
822         }
823         dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6,
824                                               NULL);
825         if (IS_ERR(dst)) {
826                 netdev_dbg(dev, "no route to %pI6\n", &fl6->daddr);
827                 return ERR_PTR(-ENETUNREACH);
828         }
829         if (dst->dev == dev) { /* is this necessary? */
830                 netdev_dbg(dev, "circular route to %pI6\n", &fl6->daddr);
831                 dst_release(dst);
832                 return ERR_PTR(-ELOOP);
833         }
834
835         if (use_cache)
836                 dst_cache_set_ip6(dst_cache, dst, &fl6->saddr);
837         return dst;
838 }
839 #endif
840
841 static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,
842                            struct geneve_dev *geneve,
843                            const struct ip_tunnel_info *info)
844 {
845         bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
846         struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
847         const struct ip_tunnel_key *key = &info->key;
848         struct rtable *rt;
849         struct flowi4 fl4;
850         __u8 tos, ttl;
851         __be16 sport;
852         __be16 df;
853         int err;
854
855         if (!skb_vlan_inet_prepare(skb))
856                 return -EINVAL;
857
858         sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
859         rt = geneve_get_v4_rt(skb, dev, gs4, &fl4, info,
860                               geneve->info.key.tp_dst, sport);
861         if (IS_ERR(rt))
862                 return PTR_ERR(rt);
863
864         skb_tunnel_check_pmtu(skb, &rt->dst,
865                               GENEVE_IPV4_HLEN + info->options_len);
866
867         if (geneve->collect_md) {
868                 tos = ip_tunnel_ecn_encap(key->tos, ip_hdr(skb), skb);
869                 ttl = key->ttl;
870         } else {
871                 tos = ip_tunnel_ecn_encap(fl4.flowi4_tos, ip_hdr(skb), skb);
872                 ttl = key->ttl ? : ip4_dst_hoplimit(&rt->dst);
873         }
874         df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
875
876         err = geneve_build_skb(&rt->dst, skb, info, xnet, sizeof(struct iphdr));
877         if (unlikely(err))
878                 return err;
879
880         udp_tunnel_xmit_skb(rt, gs4->sock->sk, skb, fl4.saddr, fl4.daddr,
881                             tos, ttl, df, sport, geneve->info.key.tp_dst,
882                             !net_eq(geneve->net, dev_net(geneve->dev)),
883                             !(info->key.tun_flags & TUNNEL_CSUM));
884         return 0;
885 }
886
887 #if IS_ENABLED(CONFIG_IPV6)
888 static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
889                             struct geneve_dev *geneve,
890                             const struct ip_tunnel_info *info)
891 {
892         bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
893         struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
894         const struct ip_tunnel_key *key = &info->key;
895         struct dst_entry *dst = NULL;
896         struct flowi6 fl6;
897         __u8 prio, ttl;
898         __be16 sport;
899         int err;
900
901         if (!skb_vlan_inet_prepare(skb))
902                 return -EINVAL;
903
904         sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
905         dst = geneve_get_v6_dst(skb, dev, gs6, &fl6, info,
906                                 geneve->info.key.tp_dst, sport);
907         if (IS_ERR(dst))
908                 return PTR_ERR(dst);
909
910         skb_tunnel_check_pmtu(skb, dst, GENEVE_IPV6_HLEN + info->options_len);
911
912         if (geneve->collect_md) {
913                 prio = ip_tunnel_ecn_encap(key->tos, ip_hdr(skb), skb);
914                 ttl = key->ttl;
915         } else {
916                 prio = ip_tunnel_ecn_encap(ip6_tclass(fl6.flowlabel),
917                                            ip_hdr(skb), skb);
918                 ttl = key->ttl ? : ip6_dst_hoplimit(dst);
919         }
920         err = geneve_build_skb(dst, skb, info, xnet, sizeof(struct ipv6hdr));
921         if (unlikely(err))
922                 return err;
923
924         udp_tunnel6_xmit_skb(dst, gs6->sock->sk, skb, dev,
925                              &fl6.saddr, &fl6.daddr, prio, ttl,
926                              info->key.label, sport, geneve->info.key.tp_dst,
927                              !(info->key.tun_flags & TUNNEL_CSUM));
928         return 0;
929 }
930 #endif
931
932 static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
933 {
934         struct geneve_dev *geneve = netdev_priv(dev);
935         struct ip_tunnel_info *info = NULL;
936         int err;
937
938         if (geneve->collect_md) {
939                 info = skb_tunnel_info(skb);
940                 if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) {
941                         netdev_dbg(dev, "no tunnel metadata\n");
942                         dev_kfree_skb(skb);
943                         dev->stats.tx_dropped++;
944                         return NETDEV_TX_OK;
945                 }
946         } else {
947                 info = &geneve->info;
948         }
949
950         rcu_read_lock();
951 #if IS_ENABLED(CONFIG_IPV6)
952         if (info->mode & IP_TUNNEL_INFO_IPV6)
953                 err = geneve6_xmit_skb(skb, dev, geneve, info);
954         else
955 #endif
956                 err = geneve_xmit_skb(skb, dev, geneve, info);
957         rcu_read_unlock();
958
959         if (likely(!err))
960                 return NETDEV_TX_OK;
961
962         dev_kfree_skb(skb);
963
964         if (err == -ELOOP)
965                 dev->stats.collisions++;
966         else if (err == -ENETUNREACH)
967                 dev->stats.tx_carrier_errors++;
968
969         dev->stats.tx_errors++;
970         return NETDEV_TX_OK;
971 }
972
973 static int geneve_change_mtu(struct net_device *dev, int new_mtu)
974 {
975         if (new_mtu > dev->max_mtu)
976                 new_mtu = dev->max_mtu;
977         else if (new_mtu < dev->min_mtu)
978                 new_mtu = dev->min_mtu;
979
980         dev->mtu = new_mtu;
981         return 0;
982 }
983
984 static int geneve_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
985 {
986         struct ip_tunnel_info *info = skb_tunnel_info(skb);
987         struct geneve_dev *geneve = netdev_priv(dev);
988         __be16 sport;
989
990         if (ip_tunnel_info_af(info) == AF_INET) {
991                 struct rtable *rt;
992                 struct flowi4 fl4;
993
994                 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
995                 sport = udp_flow_src_port(geneve->net, skb,
996                                           1, USHRT_MAX, true);
997
998                 rt = geneve_get_v4_rt(skb, dev, gs4, &fl4, info,
999                                       geneve->info.key.tp_dst, sport);
1000                 if (IS_ERR(rt))
1001                         return PTR_ERR(rt);
1002
1003                 ip_rt_put(rt);
1004                 info->key.u.ipv4.src = fl4.saddr;
1005 #if IS_ENABLED(CONFIG_IPV6)
1006         } else if (ip_tunnel_info_af(info) == AF_INET6) {
1007                 struct dst_entry *dst;
1008                 struct flowi6 fl6;
1009
1010                 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
1011                 sport = udp_flow_src_port(geneve->net, skb,
1012                                           1, USHRT_MAX, true);
1013
1014                 dst = geneve_get_v6_dst(skb, dev, gs6, &fl6, info,
1015                                         geneve->info.key.tp_dst, sport);
1016                 if (IS_ERR(dst))
1017                         return PTR_ERR(dst);
1018
1019                 dst_release(dst);
1020                 info->key.u.ipv6.src = fl6.saddr;
1021 #endif
1022         } else {
1023                 return -EINVAL;
1024         }
1025
1026         info->key.tp_src = sport;
1027         info->key.tp_dst = geneve->info.key.tp_dst;
1028         return 0;
1029 }
1030
1031 static const struct net_device_ops geneve_netdev_ops = {
1032         .ndo_init               = geneve_init,
1033         .ndo_uninit             = geneve_uninit,
1034         .ndo_open               = geneve_open,
1035         .ndo_stop               = geneve_stop,
1036         .ndo_start_xmit         = geneve_xmit,
1037         .ndo_get_stats64        = ip_tunnel_get_stats64,
1038         .ndo_change_mtu         = geneve_change_mtu,
1039         .ndo_validate_addr      = eth_validate_addr,
1040         .ndo_set_mac_address    = eth_mac_addr,
1041         .ndo_fill_metadata_dst  = geneve_fill_metadata_dst,
1042 };
1043
1044 static void geneve_get_drvinfo(struct net_device *dev,
1045                                struct ethtool_drvinfo *drvinfo)
1046 {
1047         strlcpy(drvinfo->version, GENEVE_NETDEV_VER, sizeof(drvinfo->version));
1048         strlcpy(drvinfo->driver, "geneve", sizeof(drvinfo->driver));
1049 }
1050
1051 static const struct ethtool_ops geneve_ethtool_ops = {
1052         .get_drvinfo    = geneve_get_drvinfo,
1053         .get_link       = ethtool_op_get_link,
1054 };
1055
1056 /* Info for udev, that this is a virtual tunnel endpoint */
1057 static struct device_type geneve_type = {
1058         .name = "geneve",
1059 };
1060
1061 /* Calls the ndo_udp_tunnel_add of the caller in order to
1062  * supply the listening GENEVE udp ports. Callers are expected
1063  * to implement the ndo_udp_tunnel_add.
1064  */
1065 static void geneve_offload_rx_ports(struct net_device *dev, bool push)
1066 {
1067         struct net *net = dev_net(dev);
1068         struct geneve_net *gn = net_generic(net, geneve_net_id);
1069         struct geneve_sock *gs;
1070
1071         rcu_read_lock();
1072         list_for_each_entry_rcu(gs, &gn->sock_list, list) {
1073                 if (push) {
1074                         udp_tunnel_push_rx_port(dev, gs->sock,
1075                                                 UDP_TUNNEL_TYPE_GENEVE);
1076                 } else {
1077                         udp_tunnel_drop_rx_port(dev, gs->sock,
1078                                                 UDP_TUNNEL_TYPE_GENEVE);
1079                 }
1080         }
1081         rcu_read_unlock();
1082 }
1083
1084 /* Initialize the device structure. */
1085 static void geneve_setup(struct net_device *dev)
1086 {
1087         ether_setup(dev);
1088
1089         dev->netdev_ops = &geneve_netdev_ops;
1090         dev->ethtool_ops = &geneve_ethtool_ops;
1091         dev->needs_free_netdev = true;
1092
1093         SET_NETDEV_DEVTYPE(dev, &geneve_type);
1094
1095         dev->features    |= NETIF_F_LLTX;
1096         dev->features    |= NETIF_F_SG | NETIF_F_HW_CSUM;
1097         dev->features    |= NETIF_F_RXCSUM;
1098         dev->features    |= NETIF_F_GSO_SOFTWARE;
1099
1100         dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
1101         dev->hw_features |= NETIF_F_GSO_SOFTWARE;
1102
1103         /* MTU range: 68 - (something less than 65535) */
1104         dev->min_mtu = ETH_MIN_MTU;
1105         /* The max_mtu calculation does not take account of GENEVE
1106          * options, to avoid excluding potentially valid
1107          * configurations. This will be further reduced by IPvX hdr size.
1108          */
1109         dev->max_mtu = IP_MAX_MTU - GENEVE_BASE_HLEN - dev->hard_header_len;
1110
1111         netif_keep_dst(dev);
1112         dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1113         dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE;
1114         eth_hw_addr_random(dev);
1115 }
1116
1117 static const struct nla_policy geneve_policy[IFLA_GENEVE_MAX + 1] = {
1118         [IFLA_GENEVE_ID]                = { .type = NLA_U32 },
1119         [IFLA_GENEVE_REMOTE]            = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
1120         [IFLA_GENEVE_REMOTE6]           = { .len = sizeof(struct in6_addr) },
1121         [IFLA_GENEVE_TTL]               = { .type = NLA_U8 },
1122         [IFLA_GENEVE_TOS]               = { .type = NLA_U8 },
1123         [IFLA_GENEVE_LABEL]             = { .type = NLA_U32 },
1124         [IFLA_GENEVE_PORT]              = { .type = NLA_U16 },
1125         [IFLA_GENEVE_COLLECT_METADATA]  = { .type = NLA_FLAG },
1126         [IFLA_GENEVE_UDP_CSUM]          = { .type = NLA_U8 },
1127         [IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = { .type = NLA_U8 },
1128         [IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = { .type = NLA_U8 },
1129 };
1130
1131 static int geneve_validate(struct nlattr *tb[], struct nlattr *data[],
1132                            struct netlink_ext_ack *extack)
1133 {
1134         if (tb[IFLA_ADDRESS]) {
1135                 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
1136                         NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
1137                                             "Provided link layer address is not Ethernet");
1138                         return -EINVAL;
1139                 }
1140
1141                 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
1142                         NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
1143                                             "Provided Ethernet address is not unicast");
1144                         return -EADDRNOTAVAIL;
1145                 }
1146         }
1147
1148         if (!data) {
1149                 NL_SET_ERR_MSG(extack,
1150                                "Not enough attributes provided to perform the operation");
1151                 return -EINVAL;
1152         }
1153
1154         if (data[IFLA_GENEVE_ID]) {
1155                 __u32 vni =  nla_get_u32(data[IFLA_GENEVE_ID]);
1156
1157                 if (vni >= GENEVE_N_VID) {
1158                         NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_ID],
1159                                             "Geneve ID must be lower than 16777216");
1160                         return -ERANGE;
1161                 }
1162         }
1163
1164         return 0;
1165 }
1166
1167 static struct geneve_dev *geneve_find_dev(struct geneve_net *gn,
1168                                           const struct ip_tunnel_info *info,
1169                                           bool *tun_on_same_port,
1170                                           bool *tun_collect_md)
1171 {
1172         struct geneve_dev *geneve, *t = NULL;
1173
1174         *tun_on_same_port = false;
1175         *tun_collect_md = false;
1176         list_for_each_entry(geneve, &gn->geneve_list, next) {
1177                 if (info->key.tp_dst == geneve->info.key.tp_dst) {
1178                         *tun_collect_md = geneve->collect_md;
1179                         *tun_on_same_port = true;
1180                 }
1181                 if (info->key.tun_id == geneve->info.key.tun_id &&
1182                     info->key.tp_dst == geneve->info.key.tp_dst &&
1183                     !memcmp(&info->key.u, &geneve->info.key.u, sizeof(info->key.u)))
1184                         t = geneve;
1185         }
1186         return t;
1187 }
1188
1189 static bool is_tnl_info_zero(const struct ip_tunnel_info *info)
1190 {
1191         return !(info->key.tun_id || info->key.tun_flags || info->key.tos ||
1192                  info->key.ttl || info->key.label || info->key.tp_src ||
1193                  memchr_inv(&info->key.u, 0, sizeof(info->key.u)));
1194 }
1195
1196 static bool geneve_dst_addr_equal(struct ip_tunnel_info *a,
1197                                   struct ip_tunnel_info *b)
1198 {
1199         if (ip_tunnel_info_af(a) == AF_INET)
1200                 return a->key.u.ipv4.dst == b->key.u.ipv4.dst;
1201         else
1202                 return ipv6_addr_equal(&a->key.u.ipv6.dst, &b->key.u.ipv6.dst);
1203 }
1204
1205 static int geneve_configure(struct net *net, struct net_device *dev,
1206                             struct netlink_ext_ack *extack,
1207                             const struct ip_tunnel_info *info,
1208                             bool metadata, bool ipv6_rx_csum)
1209 {
1210         struct geneve_net *gn = net_generic(net, geneve_net_id);
1211         struct geneve_dev *t, *geneve = netdev_priv(dev);
1212         bool tun_collect_md, tun_on_same_port;
1213         int err, encap_len;
1214
1215         if (metadata && !is_tnl_info_zero(info)) {
1216                 NL_SET_ERR_MSG(extack,
1217                                "Device is externally controlled, so attributes (VNI, Port, and so on) must not be specified");
1218                 return -EINVAL;
1219         }
1220
1221         geneve->net = net;
1222         geneve->dev = dev;
1223
1224         t = geneve_find_dev(gn, info, &tun_on_same_port, &tun_collect_md);
1225         if (t)
1226                 return -EBUSY;
1227
1228         /* make enough headroom for basic scenario */
1229         encap_len = GENEVE_BASE_HLEN + ETH_HLEN;
1230         if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
1231                 encap_len += sizeof(struct iphdr);
1232                 dev->max_mtu -= sizeof(struct iphdr);
1233         } else {
1234                 encap_len += sizeof(struct ipv6hdr);
1235                 dev->max_mtu -= sizeof(struct ipv6hdr);
1236         }
1237         dev->needed_headroom = encap_len + ETH_HLEN;
1238
1239         if (metadata) {
1240                 if (tun_on_same_port) {
1241                         NL_SET_ERR_MSG(extack,
1242                                        "There can be only one externally controlled device on a destination port");
1243                         return -EPERM;
1244                 }
1245         } else {
1246                 if (tun_collect_md) {
1247                         NL_SET_ERR_MSG(extack,
1248                                        "There already exists an externally controlled device on this destination port");
1249                         return -EPERM;
1250                 }
1251         }
1252
1253         dst_cache_reset(&geneve->info.dst_cache);
1254         geneve->info = *info;
1255         geneve->collect_md = metadata;
1256         geneve->use_udp6_rx_checksums = ipv6_rx_csum;
1257
1258         err = register_netdevice(dev);
1259         if (err)
1260                 return err;
1261
1262         list_add(&geneve->next, &gn->geneve_list);
1263         return 0;
1264 }
1265
1266 static void init_tnl_info(struct ip_tunnel_info *info, __u16 dst_port)
1267 {
1268         memset(info, 0, sizeof(*info));
1269         info->key.tp_dst = htons(dst_port);
1270 }
1271
1272 static int geneve_nl2info(struct nlattr *tb[], struct nlattr *data[],
1273                           struct netlink_ext_ack *extack,
1274                           struct ip_tunnel_info *info, bool *metadata,
1275                           bool *use_udp6_rx_checksums, bool changelink)
1276 {
1277         int attrtype;
1278
1279         if (data[IFLA_GENEVE_REMOTE] && data[IFLA_GENEVE_REMOTE6]) {
1280                 NL_SET_ERR_MSG(extack,
1281                                "Cannot specify both IPv4 and IPv6 Remote addresses");
1282                 return -EINVAL;
1283         }
1284
1285         if (data[IFLA_GENEVE_REMOTE]) {
1286                 if (changelink && (ip_tunnel_info_af(info) == AF_INET6)) {
1287                         attrtype = IFLA_GENEVE_REMOTE;
1288                         goto change_notsup;
1289                 }
1290
1291                 info->key.u.ipv4.dst =
1292                         nla_get_in_addr(data[IFLA_GENEVE_REMOTE]);
1293
1294                 if (IN_MULTICAST(ntohl(info->key.u.ipv4.dst))) {
1295                         NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE],
1296                                             "Remote IPv4 address cannot be Multicast");
1297                         return -EINVAL;
1298                 }
1299         }
1300
1301         if (data[IFLA_GENEVE_REMOTE6]) {
1302 #if IS_ENABLED(CONFIG_IPV6)
1303                 if (changelink && (ip_tunnel_info_af(info) == AF_INET)) {
1304                         attrtype = IFLA_GENEVE_REMOTE6;
1305                         goto change_notsup;
1306                 }
1307
1308                 info->mode = IP_TUNNEL_INFO_IPV6;
1309                 info->key.u.ipv6.dst =
1310                         nla_get_in6_addr(data[IFLA_GENEVE_REMOTE6]);
1311
1312                 if (ipv6_addr_type(&info->key.u.ipv6.dst) &
1313                     IPV6_ADDR_LINKLOCAL) {
1314                         NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
1315                                             "Remote IPv6 address cannot be link-local");
1316                         return -EINVAL;
1317                 }
1318                 if (ipv6_addr_is_multicast(&info->key.u.ipv6.dst)) {
1319                         NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
1320                                             "Remote IPv6 address cannot be Multicast");
1321                         return -EINVAL;
1322                 }
1323                 info->key.tun_flags |= TUNNEL_CSUM;
1324                 *use_udp6_rx_checksums = true;
1325 #else
1326                 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
1327                                     "IPv6 support not enabled in the kernel");
1328                 return -EPFNOSUPPORT;
1329 #endif
1330         }
1331
1332         if (data[IFLA_GENEVE_ID]) {
1333                 __u32 vni;
1334                 __u8 tvni[3];
1335                 __be64 tunid;
1336
1337                 vni = nla_get_u32(data[IFLA_GENEVE_ID]);
1338                 tvni[0] = (vni & 0x00ff0000) >> 16;
1339                 tvni[1] = (vni & 0x0000ff00) >> 8;
1340                 tvni[2] =  vni & 0x000000ff;
1341
1342                 tunid = vni_to_tunnel_id(tvni);
1343                 if (changelink && (tunid != info->key.tun_id)) {
1344                         attrtype = IFLA_GENEVE_ID;
1345                         goto change_notsup;
1346                 }
1347                 info->key.tun_id = tunid;
1348         }
1349
1350         if (data[IFLA_GENEVE_TTL])
1351                 info->key.ttl = nla_get_u8(data[IFLA_GENEVE_TTL]);
1352
1353         if (data[IFLA_GENEVE_TOS])
1354                 info->key.tos = nla_get_u8(data[IFLA_GENEVE_TOS]);
1355
1356         if (data[IFLA_GENEVE_LABEL]) {
1357                 info->key.label = nla_get_be32(data[IFLA_GENEVE_LABEL]) &
1358                                   IPV6_FLOWLABEL_MASK;
1359                 if (info->key.label && (!(info->mode & IP_TUNNEL_INFO_IPV6))) {
1360                         NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LABEL],
1361                                             "Label attribute only applies for IPv6 Geneve devices");
1362                         return -EINVAL;
1363                 }
1364         }
1365
1366         if (data[IFLA_GENEVE_PORT]) {
1367                 if (changelink) {
1368                         attrtype = IFLA_GENEVE_PORT;
1369                         goto change_notsup;
1370                 }
1371                 info->key.tp_dst = nla_get_be16(data[IFLA_GENEVE_PORT]);
1372         }
1373
1374         if (data[IFLA_GENEVE_COLLECT_METADATA]) {
1375                 if (changelink) {
1376                         attrtype = IFLA_GENEVE_COLLECT_METADATA;
1377                         goto change_notsup;
1378                 }
1379                 *metadata = true;
1380         }
1381
1382         if (data[IFLA_GENEVE_UDP_CSUM]) {
1383                 if (changelink) {
1384                         attrtype = IFLA_GENEVE_UDP_CSUM;
1385                         goto change_notsup;
1386                 }
1387                 if (nla_get_u8(data[IFLA_GENEVE_UDP_CSUM]))
1388                         info->key.tun_flags |= TUNNEL_CSUM;
1389         }
1390
1391         if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]) {
1392 #if IS_ENABLED(CONFIG_IPV6)
1393                 if (changelink) {
1394                         attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_TX;
1395                         goto change_notsup;
1396                 }
1397                 if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]))
1398                         info->key.tun_flags &= ~TUNNEL_CSUM;
1399 #else
1400                 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX],
1401                                     "IPv6 support not enabled in the kernel");
1402                 return -EPFNOSUPPORT;
1403 #endif
1404         }
1405
1406         if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]) {
1407 #if IS_ENABLED(CONFIG_IPV6)
1408                 if (changelink) {
1409                         attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_RX;
1410                         goto change_notsup;
1411                 }
1412                 if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]))
1413                         *use_udp6_rx_checksums = false;
1414 #else
1415                 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX],
1416                                     "IPv6 support not enabled in the kernel");
1417                 return -EPFNOSUPPORT;
1418 #endif
1419         }
1420
1421         return 0;
1422 change_notsup:
1423         NL_SET_ERR_MSG_ATTR(extack, data[attrtype],
1424                             "Changing VNI, Port, endpoint IP address family, external, and UDP checksum attributes are not supported");
1425         return -EOPNOTSUPP;
1426 }
1427
1428 static void geneve_link_config(struct net_device *dev,
1429                                struct ip_tunnel_info *info, struct nlattr *tb[])
1430 {
1431         struct geneve_dev *geneve = netdev_priv(dev);
1432         int ldev_mtu = 0;
1433
1434         if (tb[IFLA_MTU]) {
1435                 geneve_change_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
1436                 return;
1437         }
1438
1439         switch (ip_tunnel_info_af(info)) {
1440         case AF_INET: {
1441                 struct flowi4 fl4 = { .daddr = info->key.u.ipv4.dst };
1442                 struct rtable *rt = ip_route_output_key(geneve->net, &fl4);
1443
1444                 if (!IS_ERR(rt) && rt->dst.dev) {
1445                         ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV4_HLEN;
1446                         ip_rt_put(rt);
1447                 }
1448                 break;
1449         }
1450 #if IS_ENABLED(CONFIG_IPV6)
1451         case AF_INET6: {
1452                 struct rt6_info *rt;
1453
1454                 if (!__in6_dev_get(dev))
1455                         break;
1456
1457                 rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
1458                                 NULL, 0);
1459
1460                 if (rt && rt->dst.dev)
1461                         ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN;
1462                 ip6_rt_put(rt);
1463                 break;
1464         }
1465 #endif
1466         }
1467
1468         if (ldev_mtu <= 0)
1469                 return;
1470
1471         geneve_change_mtu(dev, ldev_mtu - info->options_len);
1472 }
1473
1474 static int geneve_newlink(struct net *net, struct net_device *dev,
1475                           struct nlattr *tb[], struct nlattr *data[],
1476                           struct netlink_ext_ack *extack)
1477 {
1478         bool use_udp6_rx_checksums = false;
1479         struct ip_tunnel_info info;
1480         bool metadata = false;
1481         int err;
1482
1483         init_tnl_info(&info, GENEVE_UDP_PORT);
1484         err = geneve_nl2info(tb, data, extack, &info, &metadata,
1485                              &use_udp6_rx_checksums, false);
1486         if (err)
1487                 return err;
1488
1489         err = geneve_configure(net, dev, extack, &info, metadata,
1490                                use_udp6_rx_checksums);
1491         if (err)
1492                 return err;
1493
1494         geneve_link_config(dev, &info, tb);
1495
1496         return 0;
1497 }
1498
1499 /* Quiesces the geneve device data path for both TX and RX.
1500  *
1501  * On transmit geneve checks for non-NULL geneve_sock before it proceeds.
1502  * So, if we set that socket to NULL under RCU and wait for synchronize_net()
1503  * to complete for the existing set of in-flight packets to be transmitted,
1504  * then we would have quiesced the transmit data path. All the future packets
1505  * will get dropped until we unquiesce the data path.
1506  *
1507  * On receive geneve dereference the geneve_sock stashed in the socket. So,
1508  * if we set that to NULL under RCU and wait for synchronize_net() to
1509  * complete, then we would have quiesced the receive data path.
1510  */
1511 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4,
1512                            struct geneve_sock **gs6)
1513 {
1514         *gs4 = rtnl_dereference(geneve->sock4);
1515         rcu_assign_pointer(geneve->sock4, NULL);
1516         if (*gs4)
1517                 rcu_assign_sk_user_data((*gs4)->sock->sk, NULL);
1518 #if IS_ENABLED(CONFIG_IPV6)
1519         *gs6 = rtnl_dereference(geneve->sock6);
1520         rcu_assign_pointer(geneve->sock6, NULL);
1521         if (*gs6)
1522                 rcu_assign_sk_user_data((*gs6)->sock->sk, NULL);
1523 #else
1524         *gs6 = NULL;
1525 #endif
1526         synchronize_net();
1527 }
1528
1529 /* Resumes the geneve device data path for both TX and RX. */
1530 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4,
1531                              struct geneve_sock __maybe_unused *gs6)
1532 {
1533         rcu_assign_pointer(geneve->sock4, gs4);
1534         if (gs4)
1535                 rcu_assign_sk_user_data(gs4->sock->sk, gs4);
1536 #if IS_ENABLED(CONFIG_IPV6)
1537         rcu_assign_pointer(geneve->sock6, gs6);
1538         if (gs6)
1539                 rcu_assign_sk_user_data(gs6->sock->sk, gs6);
1540 #endif
1541         synchronize_net();
1542 }
1543
1544 static int geneve_changelink(struct net_device *dev, struct nlattr *tb[],
1545                              struct nlattr *data[],
1546                              struct netlink_ext_ack *extack)
1547 {
1548         struct geneve_dev *geneve = netdev_priv(dev);
1549         struct geneve_sock *gs4, *gs6;
1550         struct ip_tunnel_info info;
1551         bool metadata;
1552         bool use_udp6_rx_checksums;
1553         int err;
1554
1555         /* If the geneve device is configured for metadata (or externally
1556          * controlled, for example, OVS), then nothing can be changed.
1557          */
1558         if (geneve->collect_md)
1559                 return -EOPNOTSUPP;
1560
1561         /* Start with the existing info. */
1562         memcpy(&info, &geneve->info, sizeof(info));
1563         metadata = geneve->collect_md;
1564         use_udp6_rx_checksums = geneve->use_udp6_rx_checksums;
1565         err = geneve_nl2info(tb, data, extack, &info, &metadata,
1566                              &use_udp6_rx_checksums, true);
1567         if (err)
1568                 return err;
1569
1570         if (!geneve_dst_addr_equal(&geneve->info, &info)) {
1571                 dst_cache_reset(&info.dst_cache);
1572                 geneve_link_config(dev, &info, tb);
1573         }
1574
1575         geneve_quiesce(geneve, &gs4, &gs6);
1576         geneve->info = info;
1577         geneve->collect_md = metadata;
1578         geneve->use_udp6_rx_checksums = use_udp6_rx_checksums;
1579         geneve_unquiesce(geneve, gs4, gs6);
1580
1581         return 0;
1582 }
1583
1584 static void geneve_dellink(struct net_device *dev, struct list_head *head)
1585 {
1586         struct geneve_dev *geneve = netdev_priv(dev);
1587
1588         list_del(&geneve->next);
1589         unregister_netdevice_queue(dev, head);
1590 }
1591
1592 static size_t geneve_get_size(const struct net_device *dev)
1593 {
1594         return nla_total_size(sizeof(__u32)) +  /* IFLA_GENEVE_ID */
1595                 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_GENEVE_REMOTE{6} */
1596                 nla_total_size(sizeof(__u8)) +  /* IFLA_GENEVE_TTL */
1597                 nla_total_size(sizeof(__u8)) +  /* IFLA_GENEVE_TOS */
1598                 nla_total_size(sizeof(__be32)) +  /* IFLA_GENEVE_LABEL */
1599                 nla_total_size(sizeof(__be16)) +  /* IFLA_GENEVE_PORT */
1600                 nla_total_size(0) +      /* IFLA_GENEVE_COLLECT_METADATA */
1601                 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_CSUM */
1602                 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_TX */
1603                 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_RX */
1604                 0;
1605 }
1606
1607 static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1608 {
1609         struct geneve_dev *geneve = netdev_priv(dev);
1610         struct ip_tunnel_info *info = &geneve->info;
1611         bool metadata = geneve->collect_md;
1612         __u8 tmp_vni[3];
1613         __u32 vni;
1614
1615         tunnel_id_to_vni(info->key.tun_id, tmp_vni);
1616         vni = (tmp_vni[0] << 16) | (tmp_vni[1] << 8) | tmp_vni[2];
1617         if (nla_put_u32(skb, IFLA_GENEVE_ID, vni))
1618                 goto nla_put_failure;
1619
1620         if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
1621                 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE,
1622                                     info->key.u.ipv4.dst))
1623                         goto nla_put_failure;
1624                 if (nla_put_u8(skb, IFLA_GENEVE_UDP_CSUM,
1625                                !!(info->key.tun_flags & TUNNEL_CSUM)))
1626                         goto nla_put_failure;
1627
1628 #if IS_ENABLED(CONFIG_IPV6)
1629         } else if (!metadata) {
1630                 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6,
1631                                      &info->key.u.ipv6.dst))
1632                         goto nla_put_failure;
1633                 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
1634                                !(info->key.tun_flags & TUNNEL_CSUM)))
1635                         goto nla_put_failure;
1636 #endif
1637         }
1638
1639         if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
1640             nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
1641             nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label))
1642                 goto nla_put_failure;
1643
1644         if (nla_put_be16(skb, IFLA_GENEVE_PORT, info->key.tp_dst))
1645                 goto nla_put_failure;
1646
1647         if (metadata && nla_put_flag(skb, IFLA_GENEVE_COLLECT_METADATA))
1648                 goto nla_put_failure;
1649
1650 #if IS_ENABLED(CONFIG_IPV6)
1651         if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
1652                        !geneve->use_udp6_rx_checksums))
1653                 goto nla_put_failure;
1654 #endif
1655
1656         return 0;
1657
1658 nla_put_failure:
1659         return -EMSGSIZE;
1660 }
1661
1662 static struct rtnl_link_ops geneve_link_ops __read_mostly = {
1663         .kind           = "geneve",
1664         .maxtype        = IFLA_GENEVE_MAX,
1665         .policy         = geneve_policy,
1666         .priv_size      = sizeof(struct geneve_dev),
1667         .setup          = geneve_setup,
1668         .validate       = geneve_validate,
1669         .newlink        = geneve_newlink,
1670         .changelink     = geneve_changelink,
1671         .dellink        = geneve_dellink,
1672         .get_size       = geneve_get_size,
1673         .fill_info      = geneve_fill_info,
1674 };
1675
1676 struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
1677                                         u8 name_assign_type, u16 dst_port)
1678 {
1679         struct nlattr *tb[IFLA_MAX + 1];
1680         struct ip_tunnel_info info;
1681         struct net_device *dev;
1682         LIST_HEAD(list_kill);
1683         int err;
1684
1685         memset(tb, 0, sizeof(tb));
1686         dev = rtnl_create_link(net, name, name_assign_type,
1687                                &geneve_link_ops, tb);
1688         if (IS_ERR(dev))
1689                 return dev;
1690
1691         init_tnl_info(&info, dst_port);
1692         err = geneve_configure(net, dev, NULL, &info, true, true);
1693         if (err) {
1694                 free_netdev(dev);
1695                 return ERR_PTR(err);
1696         }
1697
1698         /* openvswitch users expect packet sizes to be unrestricted,
1699          * so set the largest MTU we can.
1700          */
1701         err = geneve_change_mtu(dev, IP_MAX_MTU);
1702         if (err)
1703                 goto err;
1704
1705         err = rtnl_configure_link(dev, NULL);
1706         if (err < 0)
1707                 goto err;
1708
1709         return dev;
1710 err:
1711         geneve_dellink(dev, &list_kill);
1712         unregister_netdevice_many(&list_kill);
1713         return ERR_PTR(err);
1714 }
1715 EXPORT_SYMBOL_GPL(geneve_dev_create_fb);
1716
1717 static int geneve_netdevice_event(struct notifier_block *unused,
1718                                   unsigned long event, void *ptr)
1719 {
1720         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1721
1722         if (event == NETDEV_UDP_TUNNEL_PUSH_INFO ||
1723             event == NETDEV_UDP_TUNNEL_DROP_INFO) {
1724                 geneve_offload_rx_ports(dev, event == NETDEV_UDP_TUNNEL_PUSH_INFO);
1725         } else if (event == NETDEV_UNREGISTER) {
1726                 geneve_offload_rx_ports(dev, false);
1727         } else if (event == NETDEV_REGISTER) {
1728                 geneve_offload_rx_ports(dev, true);
1729         }
1730
1731         return NOTIFY_DONE;
1732 }
1733
1734 static struct notifier_block geneve_notifier_block __read_mostly = {
1735         .notifier_call = geneve_netdevice_event,
1736 };
1737
1738 static __net_init int geneve_init_net(struct net *net)
1739 {
1740         struct geneve_net *gn = net_generic(net, geneve_net_id);
1741
1742         INIT_LIST_HEAD(&gn->geneve_list);
1743         INIT_LIST_HEAD(&gn->sock_list);
1744         return 0;
1745 }
1746
1747 static void geneve_destroy_tunnels(struct net *net, struct list_head *head)
1748 {
1749         struct geneve_net *gn = net_generic(net, geneve_net_id);
1750         struct geneve_dev *geneve, *next;
1751         struct net_device *dev, *aux;
1752
1753         /* gather any geneve devices that were moved into this ns */
1754         for_each_netdev_safe(net, dev, aux)
1755                 if (dev->rtnl_link_ops == &geneve_link_ops)
1756                         unregister_netdevice_queue(dev, head);
1757
1758         /* now gather any other geneve devices that were created in this ns */
1759         list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) {
1760                 /* If geneve->dev is in the same netns, it was already added
1761                  * to the list by the previous loop.
1762                  */
1763                 if (!net_eq(dev_net(geneve->dev), net))
1764                         unregister_netdevice_queue(geneve->dev, head);
1765         }
1766 }
1767
1768 static void __net_exit geneve_exit_batch_net(struct list_head *net_list)
1769 {
1770         struct net *net;
1771         LIST_HEAD(list);
1772
1773         rtnl_lock();
1774         list_for_each_entry(net, net_list, exit_list)
1775                 geneve_destroy_tunnels(net, &list);
1776
1777         /* unregister the devices gathered above */
1778         unregister_netdevice_many(&list);
1779         rtnl_unlock();
1780
1781         list_for_each_entry(net, net_list, exit_list) {
1782                 const struct geneve_net *gn = net_generic(net, geneve_net_id);
1783
1784                 WARN_ON_ONCE(!list_empty(&gn->sock_list));
1785         }
1786 }
1787
1788 static struct pernet_operations geneve_net_ops = {
1789         .init = geneve_init_net,
1790         .exit_batch = geneve_exit_batch_net,
1791         .id   = &geneve_net_id,
1792         .size = sizeof(struct geneve_net),
1793 };
1794
1795 static int __init geneve_init_module(void)
1796 {
1797         int rc;
1798
1799         rc = register_pernet_subsys(&geneve_net_ops);
1800         if (rc)
1801                 goto out1;
1802
1803         rc = register_netdevice_notifier(&geneve_notifier_block);
1804         if (rc)
1805                 goto out2;
1806
1807         rc = rtnl_link_register(&geneve_link_ops);
1808         if (rc)
1809                 goto out3;
1810
1811         return 0;
1812 out3:
1813         unregister_netdevice_notifier(&geneve_notifier_block);
1814 out2:
1815         unregister_pernet_subsys(&geneve_net_ops);
1816 out1:
1817         return rc;
1818 }
1819 late_initcall(geneve_init_module);
1820
1821 static void __exit geneve_cleanup_module(void)
1822 {
1823         rtnl_link_unregister(&geneve_link_ops);
1824         unregister_netdevice_notifier(&geneve_notifier_block);
1825         unregister_pernet_subsys(&geneve_net_ops);
1826 }
1827 module_exit(geneve_cleanup_module);
1828
1829 MODULE_LICENSE("GPL");
1830 MODULE_VERSION(GENEVE_NETDEV_VER);
1831 MODULE_AUTHOR("John W. Linville <linville@tuxdriver.com>");
1832 MODULE_DESCRIPTION("Interface driver for GENEVE encapsulated traffic");
1833 MODULE_ALIAS_RTNL_LINK("geneve");