xref: /linux/drivers/net/geneve.c (revision 9d19ca5d0e8b4a3f4b2eaa14e86a25f1c93ff35b)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * GENEVE: Generic Network Virtualization Encapsulation
4  *
5  * Copyright (c) 2015 Red Hat, Inc.
6  */
7 
8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9 
10 #include <linux/ethtool.h>
11 #include <linux/kernel.h>
12 #include <linux/module.h>
13 #include <linux/etherdevice.h>
14 #include <linux/hash.h>
15 #include <net/dst_metadata.h>
16 #include <net/gro_cells.h>
17 #include <net/rtnetlink.h>
18 #include <net/geneve.h>
19 #include <net/gro.h>
20 #include <net/netdev_lock.h>
21 #include <net/protocol.h>
22 
23 #define GENEVE_NETDEV_VER	"0.6"
24 
25 #define GENEVE_N_VID		(1u << 24)
26 #define GENEVE_VID_MASK		(GENEVE_N_VID - 1)
27 
28 #define VNI_HASH_BITS		10
29 #define VNI_HASH_SIZE		(1<<VNI_HASH_BITS)
30 
31 static bool log_ecn_error = true;
32 module_param(log_ecn_error, bool, 0644);
33 MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
34 
35 #define GENEVE_VER 0
36 #define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr))
37 #define GENEVE_IPV4_HLEN (ETH_HLEN + sizeof(struct iphdr) + GENEVE_BASE_HLEN)
38 #define GENEVE_IPV6_HLEN (ETH_HLEN + sizeof(struct ipv6hdr) + GENEVE_BASE_HLEN)
39 
40 #define GENEVE_OPT_NETDEV_CLASS		0x100
41 #define GENEVE_OPT_GRO_HINT_SIZE	8
42 #define GENEVE_OPT_GRO_HINT_TYPE	1
43 #define GENEVE_OPT_GRO_HINT_LEN		1
44 
45 struct geneve_opt_gro_hint {
46 #if defined(__LITTLE_ENDIAN_BITFIELD)
47 	u8	inner_proto_id:2,
48 		nested_is_v6:1,
49 		rsvd:5;
50 #elif defined(__BIG_ENDIAN_BITFIELD)
51 	u8	rsvd:5,
52 		nested_is_v6:1,
53 		inner_proto_id:2;
54 #else
55 #error "Please fix <asm/byteorder.h>"
56 #endif
57 	u8	nested_nh_offset;
58 	u8	nested_tp_offset;
59 	u8	nested_hdr_len;
60 };
61 
62 struct geneve_skb_cb {
63 	unsigned int	gro_hint_len;
64 	struct geneve_opt_gro_hint gro_hint;
65 };
66 
67 #define GENEVE_SKB_CB(__skb)	((struct geneve_skb_cb *)&((__skb)->cb[0]))
68 
69 /* per-network namespace private data for this module */
70 struct geneve_net {
71 	struct list_head	geneve_list;
72 	/* sock_list is protected by rtnl lock */
73 	struct list_head	sock_list;
74 };
75 
76 static unsigned int geneve_net_id;
77 
78 struct geneve_dev_node {
79 	struct hlist_node hlist;
80 	struct geneve_dev *geneve;
81 };
82 
83 struct geneve_config {
84 	bool			collect_md;
85 	bool			dualstack;
86 	bool			use_udp6_rx_checksums;
87 	bool			ttl_inherit;
88 	bool			gro_hint;
89 	enum ifla_geneve_df	df;
90 	bool			inner_proto_inherit;
91 	u16			port_min;
92 	u16			port_max;
93 
94 	/* Must be last --ends in a flexible-array member. */
95 	struct ip_tunnel_info	info;
96 };
97 
98 /* Pseudo network device */
99 struct geneve_dev {
100 	struct geneve_dev_node hlist4;	/* vni hash table for IPv4 socket */
101 #if IS_ENABLED(CONFIG_IPV6)
102 	struct geneve_dev_node hlist6;	/* vni hash table for IPv6 socket */
103 #endif
104 	struct net	   *net;	/* netns for packet i/o */
105 	struct net_device  *dev;	/* netdev for geneve tunnel */
106 	struct geneve_sock __rcu *sock4;	/* IPv4 socket used for geneve tunnel */
107 #if IS_ENABLED(CONFIG_IPV6)
108 	struct geneve_sock __rcu *sock6;	/* IPv6 socket used for geneve tunnel */
109 #endif
110 	struct list_head   next;	/* geneve's per namespace list */
111 	struct gro_cells   gro_cells;
112 	struct geneve_config cfg;
113 };
114 
115 struct geneve_sock {
116 	bool			collect_md;
117 	bool			gro_hint;
118 	struct list_head	list;
119 	struct sock		*sk;
120 	struct rcu_head		rcu;
121 	int			refcnt;
122 	struct hlist_head	vni_list[VNI_HASH_SIZE];
123 };
124 
125 static const __be16 proto_id_map[] = { htons(ETH_P_TEB),
126 				       htons(ETH_P_IPV6),
127 				       htons(ETH_P_IP) };
128 
129 static int proto_to_id(__be16 proto)
130 {
131 	int i;
132 
133 	for (i = 0; i < ARRAY_SIZE(proto_id_map); i++)
134 		if (proto_id_map[i] == proto)
135 			return i;
136 
137 	return -1;
138 }
139 
140 static inline __u32 geneve_net_vni_hash(u8 vni[3])
141 {
142 	__u32 vnid;
143 
144 	vnid = (vni[0] << 16) | (vni[1] << 8) | vni[2];
145 	return hash_32(vnid, VNI_HASH_BITS);
146 }
147 
148 static __be64 vni_to_tunnel_id(const __u8 *vni)
149 {
150 #ifdef __BIG_ENDIAN
151 	return (vni[0] << 16) | (vni[1] << 8) | vni[2];
152 #else
153 	return (__force __be64)(((__force u64)vni[0] << 40) |
154 				((__force u64)vni[1] << 48) |
155 				((__force u64)vni[2] << 56));
156 #endif
157 }
158 
159 /* Convert 64 bit tunnel ID to 24 bit VNI. */
160 static void tunnel_id_to_vni(__be64 tun_id, __u8 *vni)
161 {
162 #ifdef __BIG_ENDIAN
163 	vni[0] = (__force __u8)(tun_id >> 16);
164 	vni[1] = (__force __u8)(tun_id >> 8);
165 	vni[2] = (__force __u8)tun_id;
166 #else
167 	vni[0] = (__force __u8)((__force u64)tun_id >> 40);
168 	vni[1] = (__force __u8)((__force u64)tun_id >> 48);
169 	vni[2] = (__force __u8)((__force u64)tun_id >> 56);
170 #endif
171 }
172 
173 static bool eq_tun_id_and_vni(u8 *tun_id, u8 *vni)
174 {
175 	return !memcmp(vni, &tun_id[5], 3);
176 }
177 
178 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs)
179 {
180 	return gs->sk->sk_family;
181 }
182 
183 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs,
184 					__be32 addr, u8 vni[])
185 {
186 	struct hlist_head *vni_list_head;
187 	struct geneve_dev_node *node;
188 	__u32 hash;
189 
190 	/* Find the device for this VNI */
191 	hash = geneve_net_vni_hash(vni);
192 	vni_list_head = &gs->vni_list[hash];
193 	hlist_for_each_entry_rcu(node, vni_list_head, hlist) {
194 		if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) &&
195 		    addr == node->geneve->cfg.info.key.u.ipv4.dst)
196 			return node->geneve;
197 	}
198 	return NULL;
199 }
200 
201 #if IS_ENABLED(CONFIG_IPV6)
202 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs,
203 					 struct in6_addr addr6, u8 vni[])
204 {
205 	struct hlist_head *vni_list_head;
206 	struct geneve_dev_node *node;
207 	__u32 hash;
208 
209 	/* Find the device for this VNI */
210 	hash = geneve_net_vni_hash(vni);
211 	vni_list_head = &gs->vni_list[hash];
212 	hlist_for_each_entry_rcu(node, vni_list_head, hlist) {
213 		if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) &&
214 		    ipv6_addr_equal(&addr6, &node->geneve->cfg.info.key.u.ipv6.dst))
215 			return node->geneve;
216 	}
217 	return NULL;
218 }
219 #endif
220 
221 static inline struct genevehdr *geneve_hdr(const struct sk_buff *skb)
222 {
223 	return (struct genevehdr *)(udp_hdr(skb) + 1);
224 }
225 
226 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs,
227 					    struct sk_buff *skb)
228 {
229 	static u8 zero_vni[3];
230 	u8 *vni;
231 
232 	if (geneve_get_sk_family(gs) == AF_INET) {
233 		struct iphdr *iph;
234 		__be32 addr;
235 
236 		iph = ip_hdr(skb); /* outer IP header... */
237 
238 		if (gs->collect_md) {
239 			vni = zero_vni;
240 			addr = 0;
241 		} else {
242 			vni = geneve_hdr(skb)->vni;
243 			addr = iph->saddr;
244 		}
245 
246 		return geneve_lookup(gs, addr, vni);
247 #if IS_ENABLED(CONFIG_IPV6)
248 	} else if (geneve_get_sk_family(gs) == AF_INET6) {
249 		static struct in6_addr zero_addr6;
250 		struct ipv6hdr *ip6h;
251 		struct in6_addr addr6;
252 
253 		ip6h = ipv6_hdr(skb); /* outer IPv6 header... */
254 
255 		if (gs->collect_md) {
256 			vni = zero_vni;
257 			addr6 = zero_addr6;
258 		} else {
259 			vni = geneve_hdr(skb)->vni;
260 			addr6 = ip6h->saddr;
261 		}
262 
263 		return geneve6_lookup(gs, addr6, vni);
264 #endif
265 	}
266 	return NULL;
267 }
268 
269 /* geneve receive/decap routine */
270 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
271 		      struct sk_buff *skb, const struct genevehdr *gnvh)
272 {
273 	struct metadata_dst *tun_dst = NULL;
274 	unsigned int len;
275 	int nh, err = 0;
276 	void *oiph;
277 
278 	if (ip_tunnel_collect_metadata() || gs->collect_md) {
279 		IP_TUNNEL_DECLARE_FLAGS(flags) = { };
280 
281 		__set_bit(IP_TUNNEL_KEY_BIT, flags);
282 		__assign_bit(IP_TUNNEL_OAM_BIT, flags, gnvh->oam);
283 		__assign_bit(IP_TUNNEL_CRIT_OPT_BIT, flags, gnvh->critical);
284 
285 		tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags,
286 					 vni_to_tunnel_id(gnvh->vni),
287 					 gnvh->opt_len * 4);
288 		if (!tun_dst) {
289 			dev_dstats_rx_dropped(geneve->dev);
290 			goto drop;
291 		}
292 		/* Update tunnel dst according to Geneve options. */
293 		ip_tunnel_flags_zero(flags);
294 		__set_bit(IP_TUNNEL_GENEVE_OPT_BIT, flags);
295 		ip_tunnel_info_opts_set(&tun_dst->u.tun_info,
296 					gnvh->options, gnvh->opt_len * 4,
297 					flags);
298 	} else {
299 		/* Drop packets w/ critical options,
300 		 * since we don't support any...
301 		 */
302 		if (gnvh->critical) {
303 			DEV_STATS_INC(geneve->dev, rx_frame_errors);
304 			DEV_STATS_INC(geneve->dev, rx_errors);
305 			goto drop;
306 		}
307 	}
308 
309 	if (tun_dst)
310 		skb_dst_set(skb, &tun_dst->dst);
311 
312 	if (gnvh->proto_type == htons(ETH_P_TEB)) {
313 		skb_reset_mac_header(skb);
314 		skb->protocol = eth_type_trans(skb, geneve->dev);
315 		skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
316 
317 		/* Ignore packet loops (and multicast echo) */
318 		if (ether_addr_equal(eth_hdr(skb)->h_source,
319 				     geneve->dev->dev_addr)) {
320 			DEV_STATS_INC(geneve->dev, rx_errors);
321 			goto drop;
322 		}
323 	} else {
324 		skb_reset_mac_header(skb);
325 		skb->dev = geneve->dev;
326 		skb->pkt_type = PACKET_HOST;
327 	}
328 
329 	/* Save offset of outer header relative to skb->head,
330 	 * because we are going to reset the network header to the inner header
331 	 * and might change skb->head.
332 	 */
333 	nh = skb_network_header(skb) - skb->head;
334 
335 	skb_reset_network_header(skb);
336 
337 	if (!pskb_inet_may_pull(skb)) {
338 		DEV_STATS_INC(geneve->dev, rx_length_errors);
339 		DEV_STATS_INC(geneve->dev, rx_errors);
340 		goto drop;
341 	}
342 
343 	/* Get the outer header. */
344 	oiph = skb->head + nh;
345 
346 	if (geneve_get_sk_family(gs) == AF_INET)
347 		err = IP_ECN_decapsulate(oiph, skb);
348 #if IS_ENABLED(CONFIG_IPV6)
349 	else
350 		err = IP6_ECN_decapsulate(oiph, skb);
351 #endif
352 
353 	if (unlikely(err)) {
354 		if (log_ecn_error) {
355 			if (geneve_get_sk_family(gs) == AF_INET)
356 				net_info_ratelimited("non-ECT from %pI4 "
357 						     "with TOS=%#x\n",
358 						     &((struct iphdr *)oiph)->saddr,
359 						     ((struct iphdr *)oiph)->tos);
360 #if IS_ENABLED(CONFIG_IPV6)
361 			else
362 				net_info_ratelimited("non-ECT from %pI6\n",
363 						     &((struct ipv6hdr *)oiph)->saddr);
364 #endif
365 		}
366 		if (err > 1) {
367 			DEV_STATS_INC(geneve->dev, rx_frame_errors);
368 			DEV_STATS_INC(geneve->dev, rx_errors);
369 			goto drop;
370 		}
371 	}
372 
373 	/* Skip the additional GRO stage when hints are in use. */
374 	len = skb->len;
375 	if (skb->encapsulation)
376 		err = netif_rx(skb);
377 	else
378 		err = gro_cells_receive(&geneve->gro_cells, skb);
379 	if (likely(err == NET_RX_SUCCESS))
380 		dev_dstats_rx_add(geneve->dev, len);
381 
382 	return;
383 drop:
384 	/* Consume bad packet */
385 	kfree_skb(skb);
386 }
387 
388 /* Setup stats when device is created */
389 static int geneve_init(struct net_device *dev)
390 {
391 	struct geneve_dev *geneve = netdev_priv(dev);
392 	int err;
393 
394 	err = gro_cells_init(&geneve->gro_cells, dev);
395 	if (err)
396 		return err;
397 
398 	err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL);
399 	if (err) {
400 		gro_cells_destroy(&geneve->gro_cells);
401 		return err;
402 	}
403 	netdev_lockdep_set_classes(dev);
404 	return 0;
405 }
406 
407 static void geneve_uninit(struct net_device *dev)
408 {
409 	struct geneve_dev *geneve = netdev_priv(dev);
410 
411 	dst_cache_destroy(&geneve->cfg.info.dst_cache);
412 	gro_cells_destroy(&geneve->gro_cells);
413 }
414 
415 static int geneve_hlen(const struct genevehdr *gh)
416 {
417 	return sizeof(*gh) + gh->opt_len * 4;
418 }
419 
420 /*
421  * Look for GRO hint in the genenve options; if not found or does not pass basic
422  * sanitization return 0, otherwise the offset WRT the geneve hdr start.
423  */
424 static unsigned int
425 geneve_opt_gro_hint_off(const struct genevehdr *gh, __be16 *type,
426 			unsigned int *gh_len)
427 {
428 	struct geneve_opt *opt = (void *)(gh + 1);
429 	unsigned int id, opt_len = gh->opt_len;
430 	struct geneve_opt_gro_hint *gro_hint;
431 
432 	while (opt_len >= (GENEVE_OPT_GRO_HINT_SIZE >> 2)) {
433 		if (opt->opt_class == htons(GENEVE_OPT_NETDEV_CLASS) &&
434 		    opt->type == GENEVE_OPT_GRO_HINT_TYPE &&
435 		    opt->length == GENEVE_OPT_GRO_HINT_LEN)
436 			goto found;
437 
438 		/* check for bad opt len */
439 		if (opt->length + 1 >= opt_len)
440 			return 0;
441 
442 		/* next opt */
443 		opt_len -= opt->length + 1;
444 		opt = ((void *)opt) + ((opt->length + 1) << 2);
445 	}
446 	return 0;
447 
448 found:
449 	gro_hint = (struct geneve_opt_gro_hint *)opt->opt_data;
450 
451 	/*
452 	 * Sanitize the hinted hdrs: the nested transport is UDP and must fit
453 	 * the overall hinted hdr size.
454 	 */
455 	if (gro_hint->nested_tp_offset + sizeof(struct udphdr) >
456 	    gro_hint->nested_hdr_len)
457 		return 0;
458 
459 	if (gro_hint->nested_nh_offset +
460 	    (gro_hint->nested_is_v6 ? sizeof(struct ipv6hdr) :
461 				      sizeof(struct iphdr)) >
462 	    gro_hint->nested_tp_offset)
463 		return 0;
464 
465 	/* Allow only supported L2. */
466 	id = gro_hint->inner_proto_id;
467 	if (id >= ARRAY_SIZE(proto_id_map))
468 		return 0;
469 
470 	*type = proto_id_map[id];
471 	*gh_len += gro_hint->nested_hdr_len;
472 
473 	return (void *)gro_hint - (void *)gh;
474 }
475 
476 static const struct geneve_opt_gro_hint *
477 geneve_opt_gro_hint(const struct genevehdr *gh, unsigned int hint_off)
478 {
479 	return (const struct geneve_opt_gro_hint *)((void *)gh + hint_off);
480 }
481 
482 static unsigned int
483 geneve_sk_gro_hint_off(const struct sock *sk, const struct genevehdr *gh,
484 		       __be16 *type, unsigned int *gh_len)
485 {
486 	const struct geneve_sock *gs = rcu_dereference_sk_user_data(sk);
487 
488 	if (!gs || !gs->gro_hint)
489 		return 0;
490 	return geneve_opt_gro_hint_off(gh, type, gh_len);
491 }
492 
493 /* Validate the packet headers pointed by data WRT the provided hint */
494 static bool
495 geneve_opt_gro_hint_validate(void *data,
496 			     const struct geneve_opt_gro_hint *gro_hint)
497 {
498 	void *nested_nh = data + gro_hint->nested_nh_offset;
499 	struct iphdr *iph;
500 
501 	if (gro_hint->nested_is_v6) {
502 		struct ipv6hdr *ipv6h = nested_nh;
503 		struct ipv6_opt_hdr *opth;
504 		int offset, len;
505 
506 		if (ipv6h->nexthdr == IPPROTO_UDP)
507 			return true;
508 
509 		offset = sizeof(*ipv6h) + gro_hint->nested_nh_offset;
510 		while (offset + sizeof(*opth) <= gro_hint->nested_tp_offset) {
511 			opth = data + offset;
512 
513 			len = ipv6_optlen(opth);
514 			if (len + offset > gro_hint->nested_tp_offset)
515 				return false;
516 			if (opth->nexthdr == IPPROTO_UDP)
517 				return true;
518 
519 			offset += len;
520 		}
521 		return false;
522 	}
523 
524 	iph = nested_nh;
525 	if (*(u8 *)iph != 0x45 || ip_is_fragment(iph) ||
526 	    iph->protocol != IPPROTO_UDP || ip_fast_csum((u8 *)iph, 5))
527 		return false;
528 
529 	return true;
530 }
531 
532 /*
533  * Validate the skb headers following the specified geneve hdr vs the
534  * provided hint, including nested L4 checksum.
535  * The caller already ensured that the relevant amount of data is available
536  * in the linear part.
537  */
538 static bool
539 geneve_opt_gro_hint_validate_csum(const struct sk_buff *skb,
540 				  const struct genevehdr *gh,
541 				  const struct geneve_opt_gro_hint *gro_hint)
542 {
543 	unsigned int plen, gh_len = geneve_hlen(gh);
544 	void *nested = (void *)gh + gh_len;
545 	struct udphdr *nested_uh;
546 	unsigned int nested_len;
547 	struct ipv6hdr *ipv6h;
548 	struct iphdr *iph;
549 	__wsum csum, psum;
550 
551 	if (!geneve_opt_gro_hint_validate(nested, gro_hint))
552 		return false;
553 
554 	/* Use GRO hints with nested csum only if the outer header has csum. */
555 	nested_uh = nested + gro_hint->nested_tp_offset;
556 	if (!nested_uh->check || skb->ip_summed == CHECKSUM_PARTIAL)
557 		return true;
558 
559 	if (!NAPI_GRO_CB(skb)->csum_valid)
560 		return false;
561 
562 	/* Compute the complete checksum up to the nested transport. */
563 	plen = gh_len + gro_hint->nested_tp_offset;
564 	csum = csum_sub(NAPI_GRO_CB(skb)->csum, csum_partial(gh, plen, 0));
565 	nested_len = skb_gro_len(skb) - plen;
566 
567 	/* Compute the nested pseudo header csum. */
568 	ipv6h = nested + gro_hint->nested_nh_offset;
569 	iph = (struct iphdr *)ipv6h;
570 	psum = gro_hint->nested_is_v6 ?
571 	       ~csum_unfold(csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr,
572 					    nested_len, IPPROTO_UDP, 0)) :
573 	       csum_tcpudp_nofold(iph->saddr, iph->daddr,
574 				  nested_len, IPPROTO_UDP, 0);
575 
576 	return !csum_fold(csum_add(psum, csum));
577 }
578 
579 static int geneve_post_decap_hint(const struct sock *sk, struct sk_buff *skb,
580 				  unsigned int gh_len,
581 				  struct genevehdr **geneveh)
582 {
583 	const struct geneve_opt_gro_hint *gro_hint;
584 	unsigned int len, total_len, hint_off;
585 	struct ipv6hdr *ipv6h;
586 	struct iphdr *iph;
587 	struct udphdr *uh;
588 	__be16 p;
589 	int err;
590 
591 	hint_off = geneve_sk_gro_hint_off(sk, *geneveh, &p, &len);
592 	if (!hint_off)
593 		return 0;
594 
595 	if (!skb_is_gso(skb))
596 		return 0;
597 
598 	gro_hint = geneve_opt_gro_hint(*geneveh, hint_off);
599 	if (unlikely(!pskb_may_pull(skb, gro_hint->nested_hdr_len)))
600 		return -ENOMEM;
601 
602 	*geneveh = geneve_hdr(skb);
603 	gro_hint = geneve_opt_gro_hint(*geneveh, hint_off);
604 
605 	/*
606 	 * Validate hints from untrusted source before accessing
607 	 * the headers; csum will be checked later by the nested
608 	 * protocol rx path.
609 	 */
610 	if (unlikely(skb_shinfo(skb)->gso_type & SKB_GSO_DODGY &&
611 		     !geneve_opt_gro_hint_validate(skb->data, gro_hint)))
612 		return -EINVAL;
613 
614 	total_len = skb->len - gro_hint->nested_nh_offset;
615 	if (total_len >= GRO_LEGACY_MAX_SIZE)
616 		return -E2BIG;
617 
618 	err = skb_ensure_writable(skb, gro_hint->nested_tp_offset + sizeof(*uh));
619 	if (unlikely(err))
620 		return err;
621 
622 	*geneveh = geneve_hdr(skb);
623 	gro_hint = geneve_opt_gro_hint(*geneveh, hint_off);
624 
625 	ipv6h = (void *)skb->data + gro_hint->nested_nh_offset;
626 	iph = (struct iphdr *)ipv6h;
627 
628 	/*
629 	 * After stripping the outer encap, the packet still carries a
630 	 * tunnel encapsulation: the nested one.
631 	 */
632 	skb->encapsulation = 1;
633 
634 	/* GSO expect a valid transpor header, move it to the current one. */
635 	skb_set_transport_header(skb, gro_hint->nested_tp_offset);
636 
637 	/* Adjust the nested IP{6} hdr to actual GSO len. */
638 	if (gro_hint->nested_is_v6) {
639 		ipv6h->payload_len = htons(total_len - sizeof(*ipv6h));
640 	} else {
641 		__be16 old_len = iph->tot_len;
642 
643 		iph->tot_len = htons(total_len);
644 
645 		/* For IPv4 additionally adjust the nested csum. */
646 		csum_replace2(&iph->check, old_len, iph->tot_len);
647 		ip_send_check(iph);
648 	}
649 
650 	/* Adjust the nested UDP header len and checksum. */
651 	uh = udp_hdr(skb);
652 	uh->len = htons(skb->len - gro_hint->nested_tp_offset);
653 	if (uh->check) {
654 		len = skb->len - gro_hint->nested_tp_offset;
655 		skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM;
656 		if (gro_hint->nested_is_v6)
657 			uh->check = ~udp_v6_check(len, &ipv6h->saddr,
658 						  &ipv6h->daddr, 0);
659 		else
660 			uh->check = ~udp_v4_check(len, iph->saddr,
661 						  iph->daddr, 0);
662 	} else {
663 		skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
664 	}
665 	return 0;
666 }
667 
668 /* Callback from net/ipv4/udp.c to receive packets */
669 static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
670 {
671 	struct genevehdr *geneveh;
672 	struct geneve_dev *geneve;
673 	struct geneve_sock *gs;
674 	__be16 inner_proto;
675 	int opts_len;
676 
677 	/* Need UDP and Geneve header to be present */
678 	if (unlikely(!pskb_may_pull(skb, GENEVE_BASE_HLEN)))
679 		goto drop;
680 
681 	/* Return packets with reserved bits set */
682 	geneveh = geneve_hdr(skb);
683 	if (unlikely(geneveh->ver != GENEVE_VER))
684 		goto drop;
685 
686 	gs = rcu_dereference_sk_user_data(sk);
687 	if (!gs)
688 		goto drop;
689 
690 	geneve = geneve_lookup_skb(gs, skb);
691 	if (!geneve)
692 		goto drop;
693 
694 	inner_proto = geneveh->proto_type;
695 
696 	if (unlikely((!geneve->cfg.inner_proto_inherit &&
697 		      inner_proto != htons(ETH_P_TEB)))) {
698 		dev_dstats_rx_dropped(geneve->dev);
699 		goto drop;
700 	}
701 
702 	opts_len = geneveh->opt_len * 4;
703 	if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len, inner_proto,
704 				 !net_eq(geneve->net, dev_net(geneve->dev)))) {
705 		dev_dstats_rx_dropped(geneve->dev);
706 		goto drop;
707 	}
708 
709 	/*
710 	 * After hint processing, the transport header points to the inner one
711 	 * and we can't use anymore on geneve_hdr().
712 	 */
713 	geneveh = geneve_hdr(skb);
714 	if (geneve_post_decap_hint(sk, skb, sizeof(struct genevehdr) +
715 				   opts_len, &geneveh)) {
716 		DEV_STATS_INC(geneve->dev, rx_errors);
717 		goto drop;
718 	}
719 
720 	geneve_rx(geneve, gs, skb, geneveh);
721 	return 0;
722 
723 drop:
724 	/* Consume bad packet */
725 	kfree_skb(skb);
726 	return 0;
727 }
728 
729 /* Callback from net/ipv{4,6}/udp.c to check that we have a tunnel for errors */
730 static int geneve_udp_encap_err_lookup(struct sock *sk, struct sk_buff *skb)
731 {
732 	struct genevehdr *geneveh;
733 	struct geneve_sock *gs;
734 	u8 zero_vni[3] = { 0 };
735 	u8 *vni = zero_vni;
736 
737 	if (!pskb_may_pull(skb, skb_transport_offset(skb) + GENEVE_BASE_HLEN))
738 		return -EINVAL;
739 
740 	geneveh = geneve_hdr(skb);
741 	if (geneveh->ver != GENEVE_VER)
742 		return -EINVAL;
743 
744 	if (geneveh->proto_type != htons(ETH_P_TEB))
745 		return -EINVAL;
746 
747 	gs = rcu_dereference_sk_user_data(sk);
748 	if (!gs)
749 		return -ENOENT;
750 
751 	if (geneve_get_sk_family(gs) == AF_INET) {
752 		struct iphdr *iph = ip_hdr(skb);
753 		__be32 addr4 = 0;
754 
755 		if (!gs->collect_md) {
756 			vni = geneve_hdr(skb)->vni;
757 			addr4 = iph->daddr;
758 		}
759 
760 		return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT;
761 	}
762 
763 #if IS_ENABLED(CONFIG_IPV6)
764 	if (geneve_get_sk_family(gs) == AF_INET6) {
765 		struct ipv6hdr *ip6h = ipv6_hdr(skb);
766 		struct in6_addr addr6;
767 
768 		memset(&addr6, 0, sizeof(struct in6_addr));
769 
770 		if (!gs->collect_md) {
771 			vni = geneve_hdr(skb)->vni;
772 			addr6 = ip6h->daddr;
773 		}
774 
775 		return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT;
776 	}
777 #endif
778 
779 	return -EPFNOSUPPORT;
780 }
781 
782 static struct sock *geneve_create_sock(struct net *net,
783 				       struct geneve_dev *geneve, bool ipv6)
784 {
785 	struct ip_tunnel_info *info = &geneve->cfg.info;
786 	struct udp_port_cfg udp_conf;
787 	struct socket *sock;
788 	int err;
789 
790 	memset(&udp_conf, 0, sizeof(udp_conf));
791 
792 #if IS_ENABLED(CONFIG_IPV6)
793 	if (ipv6) {
794 		udp_conf.family = AF_INET6;
795 		udp_conf.ipv6_v6only = 1;
796 		udp_conf.use_udp6_rx_checksums = geneve->cfg.use_udp6_rx_checksums;
797 		udp_conf.local_ip6 = info->key.u.ipv6.src;
798 	} else
799 #endif
800 	{
801 		udp_conf.family = AF_INET;
802 		udp_conf.local_ip.s_addr = info->key.u.ipv4.src;
803 	}
804 
805 	udp_conf.local_udp_port = info->key.tp_dst;
806 
807 	/* Open UDP socket */
808 	err = udp_sock_create(net, &udp_conf, &sock);
809 	if (err < 0)
810 		return ERR_PTR(err);
811 
812 	udp_allow_gso(sock->sk);
813 	return sock->sk;
814 }
815 
816 static bool geneve_hdr_match(struct sk_buff *skb,
817 			     const struct genevehdr *gh,
818 			     const struct genevehdr *gh2,
819 			     unsigned int hint_off)
820 {
821 	const struct geneve_opt_gro_hint *gro_hint;
822 	void *nested, *nested2, *nh, *nh2;
823 	struct udphdr *udp, *udp2;
824 	unsigned int gh_len;
825 
826 	/* Match the geneve hdr and options */
827 	if (gh->opt_len != gh2->opt_len)
828 		return false;
829 
830 	gh_len = geneve_hlen(gh);
831 	if (memcmp(gh, gh2, gh_len))
832 		return false;
833 
834 	if (!hint_off)
835 		return true;
836 
837 	/*
838 	 * When gro is present consider the nested headers as part
839 	 * of the geneve options
840 	 */
841 	nested = (void *)gh + gh_len;
842 	nested2 = (void *)gh2 + gh_len;
843 	gro_hint = geneve_opt_gro_hint(gh, hint_off);
844 	if (!memcmp(nested, nested2, gro_hint->nested_hdr_len))
845 		return true;
846 
847 	/*
848 	 * The nested headers differ; the packets can still belong to
849 	 * the same flow when IPs/proto/ports match; if so flushing is
850 	 * required.
851 	 */
852 	nh = nested + gro_hint->nested_nh_offset;
853 	nh2 = nested2 + gro_hint->nested_nh_offset;
854 	if (gro_hint->nested_is_v6) {
855 		struct ipv6hdr *iph = nh, *iph2 = nh2;
856 		unsigned int nested_nlen;
857 		__be32 first_word;
858 
859 		first_word = *(__be32 *)iph ^ *(__be32 *)iph2;
860 		if ((first_word & htonl(0xF00FFFFF)) ||
861 		    !ipv6_addr_equal(&iph->saddr, &iph2->saddr) ||
862 		    !ipv6_addr_equal(&iph->daddr, &iph2->daddr) ||
863 		    iph->nexthdr != iph2->nexthdr)
864 			return false;
865 
866 		nested_nlen = gro_hint->nested_tp_offset -
867 			      gro_hint->nested_nh_offset;
868 		if (nested_nlen > sizeof(struct ipv6hdr) &&
869 		    (memcmp(iph + 1, iph2 + 1,
870 			    nested_nlen - sizeof(struct ipv6hdr))))
871 			return false;
872 	} else {
873 		struct iphdr *iph = nh, *iph2 = nh2;
874 
875 		if ((iph->protocol ^ iph2->protocol) |
876 		    ((__force u32)iph->saddr ^ (__force u32)iph2->saddr) |
877 		    ((__force u32)iph->daddr ^ (__force u32)iph2->daddr))
878 			return false;
879 	}
880 
881 	udp = nested + gro_hint->nested_tp_offset;
882 	udp2 = nested2 + gro_hint->nested_tp_offset;
883 	if (udp->source != udp2->source || udp->dest != udp2->dest ||
884 	    udp->check != udp2->check)
885 		return false;
886 
887 	NAPI_GRO_CB(skb)->flush = 1;
888 	return true;
889 }
890 
891 static struct sk_buff *geneve_gro_receive(struct sock *sk,
892 					  struct list_head *head,
893 					  struct sk_buff *skb)
894 {
895 	unsigned int hlen, gh_len, off_gnv, hint_off;
896 	const struct geneve_opt_gro_hint *gro_hint;
897 	const struct packet_offload *ptype;
898 	struct genevehdr *gh, *gh2;
899 	struct sk_buff *pp = NULL;
900 	struct sk_buff *p;
901 	int flush = 1;
902 	__be16 type;
903 
904 	off_gnv = skb_gro_offset(skb);
905 	hlen = off_gnv + sizeof(*gh);
906 	gh = skb_gro_header(skb, hlen, off_gnv);
907 	if (unlikely(!gh))
908 		goto out;
909 
910 	if (gh->ver != GENEVE_VER || gh->oam)
911 		goto out;
912 	gh_len = geneve_hlen(gh);
913 	type = gh->proto_type;
914 
915 	hlen = off_gnv + gh_len;
916 	if (!skb_gro_may_pull(skb, hlen)) {
917 		gh = skb_gro_header_slow(skb, hlen, off_gnv);
918 		if (unlikely(!gh))
919 			goto out;
920 	}
921 
922 	/* The GRO hint/nested hdr could use a different ethernet type. */
923 	hint_off = geneve_sk_gro_hint_off(sk, gh, &type, &gh_len);
924 	if (hint_off) {
925 
926 		/*
927 		 * If the hint is present, and nested hdr validation fails, do
928 		 * not attempt plain GRO: it will ignore inner hdrs and cause
929 		 * OoO.
930 		 */
931 		gh = skb_gro_header(skb, off_gnv + gh_len, off_gnv);
932 		if (unlikely(!gh))
933 			goto out;
934 
935 		gro_hint = geneve_opt_gro_hint(gh, hint_off);
936 		if (!geneve_opt_gro_hint_validate_csum(skb, gh, gro_hint))
937 			goto out;
938 	}
939 
940 	list_for_each_entry(p, head, list) {
941 		if (!NAPI_GRO_CB(p)->same_flow)
942 			continue;
943 
944 		gh2 = (struct genevehdr *)(p->data + off_gnv);
945 		if (!geneve_hdr_match(skb, gh, gh2, hint_off)) {
946 			NAPI_GRO_CB(p)->same_flow = 0;
947 			continue;
948 		}
949 	}
950 
951 	skb_gro_pull(skb, gh_len);
952 	skb_gro_postpull_rcsum(skb, gh, gh_len);
953 	if (likely(type == htons(ETH_P_TEB)))
954 		return call_gro_receive(eth_gro_receive, head, skb);
955 
956 	ptype = gro_find_receive_by_type(type);
957 	if (!ptype)
958 		goto out;
959 
960 	pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
961 	flush = 0;
962 
963 out:
964 	skb_gro_flush_final(skb, pp, flush);
965 
966 	return pp;
967 }
968 
969 static int geneve_gro_complete(struct sock *sk, struct sk_buff *skb,
970 			       int nhoff)
971 {
972 	struct genevehdr *gh;
973 	struct packet_offload *ptype;
974 	__be16 type;
975 	unsigned int gh_len;
976 	int err = -ENOSYS;
977 
978 	gh = (struct genevehdr *)(skb->data + nhoff);
979 	gh_len = geneve_hlen(gh);
980 	type = gh->proto_type;
981 	geneve_sk_gro_hint_off(sk, gh, &type, &gh_len);
982 
983 	/* Bail out if we are about to dispatch past the inner network header
984 	 * gro_receive() validated. An inner VLAN tag only pushes
985 	 * inner_network_offset out, so use a lower bound.
986 	 */
987 	if (skb->encapsulation) {
988 		unsigned int inner_nh = nhoff + gh_len;
989 
990 		if (type == htons(ETH_P_TEB))
991 			inner_nh += ETH_HLEN;
992 
993 		if (unlikely(inner_nh > NAPI_GRO_CB(skb)->inner_network_offset))
994 			return -EINVAL;
995 	}
996 
997 	/* since skb->encapsulation is set, eth_gro_complete() sets the inner mac header */
998 	if (likely(type == htons(ETH_P_TEB)))
999 		return eth_gro_complete(skb, nhoff + gh_len);
1000 
1001 	ptype = gro_find_complete_by_type(type);
1002 	if (ptype)
1003 		err = ptype->callbacks.gro_complete(skb, nhoff + gh_len);
1004 
1005 	skb_set_inner_mac_header(skb, nhoff + gh_len);
1006 
1007 	return err;
1008 }
1009 
1010 /* Create new listen socket if needed */
1011 static struct geneve_sock *geneve_socket_create(struct net *net,
1012 						struct geneve_dev *geneve, bool ipv6)
1013 {
1014 	struct geneve_net *gn = net_generic(net, geneve_net_id);
1015 	struct udp_tunnel_sock_cfg tunnel_cfg;
1016 	struct geneve_sock *gs;
1017 	struct sock *sk;
1018 	int h;
1019 
1020 	gs = kzalloc_obj(*gs);
1021 	if (!gs)
1022 		return ERR_PTR(-ENOMEM);
1023 
1024 	sk = geneve_create_sock(net, geneve, ipv6);
1025 	if (IS_ERR(sk)) {
1026 		kfree(gs);
1027 		return ERR_CAST(sk);
1028 	}
1029 
1030 	gs->sk = sk;
1031 	gs->refcnt = 1;
1032 	for (h = 0; h < VNI_HASH_SIZE; ++h)
1033 		INIT_HLIST_HEAD(&gs->vni_list[h]);
1034 
1035 	/* Initialize the geneve udp offloads structure */
1036 	udp_tunnel_notify_add_rx_port(sk, UDP_TUNNEL_TYPE_GENEVE);
1037 
1038 	/* Mark socket as an encapsulation socket */
1039 	memset(&tunnel_cfg, 0, sizeof(tunnel_cfg));
1040 	tunnel_cfg.sk_user_data = gs;
1041 	tunnel_cfg.encap_type = 1;
1042 	tunnel_cfg.gro_receive = geneve_gro_receive;
1043 	tunnel_cfg.gro_complete = geneve_gro_complete;
1044 	tunnel_cfg.encap_rcv = geneve_udp_encap_recv;
1045 	tunnel_cfg.encap_err_lookup = geneve_udp_encap_err_lookup;
1046 	tunnel_cfg.encap_destroy = NULL;
1047 	setup_udp_tunnel_sock(net, sk, &tunnel_cfg);
1048 	list_add(&gs->list, &gn->sock_list);
1049 	return gs;
1050 }
1051 
1052 static void __geneve_sock_release(struct geneve_sock *gs)
1053 {
1054 	if (!gs || --gs->refcnt)
1055 		return;
1056 
1057 	list_del(&gs->list);
1058 	udp_tunnel_notify_del_rx_port(gs->sk, UDP_TUNNEL_TYPE_GENEVE);
1059 	udp_tunnel_sock_release(gs->sk);
1060 	kfree_rcu(gs, rcu);
1061 }
1062 
1063 static void geneve_sock_release(struct geneve_dev *geneve)
1064 {
1065 	struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4);
1066 #if IS_ENABLED(CONFIG_IPV6)
1067 	struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6);
1068 
1069 	rcu_assign_pointer(geneve->sock6, NULL);
1070 #endif
1071 
1072 	rcu_assign_pointer(geneve->sock4, NULL);
1073 
1074 	__geneve_sock_release(gs4);
1075 #if IS_ENABLED(CONFIG_IPV6)
1076 	__geneve_sock_release(gs6);
1077 #endif
1078 }
1079 
1080 static struct geneve_sock *geneve_find_sock(struct net *net,
1081 					    struct geneve_dev *geneve, bool ipv6)
1082 {
1083 	struct geneve_net *gn = net_generic(net, geneve_net_id);
1084 	struct ip_tunnel_info *info = &geneve->cfg.info;
1085 	sa_family_t family = ipv6 ? AF_INET6 : AF_INET;
1086 	bool gro_hint = geneve->cfg.gro_hint;
1087 	__be16 dst_port = info->key.tp_dst;
1088 	struct geneve_sock *gs;
1089 
1090 	list_for_each_entry(gs, &gn->sock_list, list) {
1091 		if (inet_sk(gs->sk)->inet_sport != dst_port)
1092 			continue;
1093 
1094 		if (geneve_get_sk_family(gs) != family)
1095 			continue;
1096 
1097 		if (gs->gro_hint != gro_hint)
1098 			continue;
1099 
1100 		if (family == AF_INET &&
1101 		    inet_sk(gs->sk)->inet_saddr != info->key.u.ipv4.src)
1102 			continue;
1103 
1104 #if IS_ENABLED(CONFIG_IPV6)
1105 		if (family == AF_INET6 &&
1106 		    !ipv6_addr_equal(&gs->sk->sk_v6_rcv_saddr, &info->key.u.ipv6.src))
1107 			continue;
1108 #endif
1109 
1110 		return gs;
1111 	}
1112 
1113 	return NULL;
1114 }
1115 
1116 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
1117 {
1118 	struct net *net = geneve->net;
1119 	struct geneve_dev_node *node;
1120 	struct geneve_sock *gs;
1121 	__u8 vni[3];
1122 	__u32 hash;
1123 
1124 	gs = geneve_find_sock(net, geneve, ipv6);
1125 	if (gs) {
1126 		gs->refcnt++;
1127 		goto out;
1128 	}
1129 
1130 	gs = geneve_socket_create(net, geneve, ipv6);
1131 	if (IS_ERR(gs))
1132 		return PTR_ERR(gs);
1133 
1134 out:
1135 	gs->collect_md = geneve->cfg.collect_md;
1136 	gs->gro_hint = geneve->cfg.gro_hint;
1137 #if IS_ENABLED(CONFIG_IPV6)
1138 	if (ipv6) {
1139 		rcu_assign_pointer(geneve->sock6, gs);
1140 		node = &geneve->hlist6;
1141 	} else
1142 #endif
1143 	{
1144 		rcu_assign_pointer(geneve->sock4, gs);
1145 		node = &geneve->hlist4;
1146 	}
1147 	node->geneve = geneve;
1148 
1149 	tunnel_id_to_vni(geneve->cfg.info.key.tun_id, vni);
1150 	hash = geneve_net_vni_hash(vni);
1151 	hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]);
1152 	return 0;
1153 }
1154 
1155 static int geneve_open(struct net_device *dev)
1156 {
1157 	struct geneve_dev *geneve = netdev_priv(dev);
1158 	bool dualstack = geneve->cfg.dualstack;
1159 	bool ipv4, ipv6;
1160 	int ret = 0;
1161 
1162 	ipv6 = geneve->cfg.info.mode & IP_TUNNEL_INFO_IPV6 || dualstack;
1163 	ipv4 = !ipv6 || dualstack;
1164 #if IS_ENABLED(CONFIG_IPV6)
1165 	if (ipv6) {
1166 		ret = geneve_sock_add(geneve, true);
1167 		if (ret < 0 && ret != -EAFNOSUPPORT)
1168 			ipv4 = false;
1169 	}
1170 #endif
1171 	if (ipv4)
1172 		ret = geneve_sock_add(geneve, false);
1173 	if (ret < 0)
1174 		geneve_sock_release(geneve);
1175 
1176 	return ret;
1177 }
1178 
1179 static int geneve_stop(struct net_device *dev)
1180 {
1181 	struct geneve_dev *geneve = netdev_priv(dev);
1182 
1183 	hlist_del_init_rcu(&geneve->hlist4.hlist);
1184 #if IS_ENABLED(CONFIG_IPV6)
1185 	hlist_del_init_rcu(&geneve->hlist6.hlist);
1186 #endif
1187 	geneve_sock_release(geneve);
1188 	return 0;
1189 }
1190 
1191 static void geneve_build_header(struct genevehdr *geneveh,
1192 				const struct ip_tunnel_info *info,
1193 				__be16 inner_proto)
1194 {
1195 	geneveh->ver = GENEVE_VER;
1196 	geneveh->opt_len = info->options_len / 4;
1197 	geneveh->oam = test_bit(IP_TUNNEL_OAM_BIT, info->key.tun_flags);
1198 	geneveh->critical = test_bit(IP_TUNNEL_CRIT_OPT_BIT,
1199 				     info->key.tun_flags);
1200 	geneveh->rsvd1 = 0;
1201 	tunnel_id_to_vni(info->key.tun_id, geneveh->vni);
1202 	geneveh->proto_type = inner_proto;
1203 	geneveh->rsvd2 = 0;
1204 
1205 	if (test_bit(IP_TUNNEL_GENEVE_OPT_BIT, info->key.tun_flags))
1206 		ip_tunnel_info_opts_get(geneveh->options, info);
1207 }
1208 
1209 static int geneve_build_gro_hint_opt(const struct geneve_dev *geneve,
1210 				     struct sk_buff *skb)
1211 {
1212 	struct geneve_skb_cb *cb = GENEVE_SKB_CB(skb);
1213 	struct geneve_opt_gro_hint *hint;
1214 	unsigned int nhlen;
1215 	bool nested_is_v6;
1216 	int id;
1217 
1218 	BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct geneve_skb_cb));
1219 	cb->gro_hint_len = 0;
1220 
1221 	/* Try to add the GRO hint only in case of double encap. */
1222 	if (!geneve->cfg.gro_hint || !skb->encapsulation)
1223 		return 0;
1224 
1225 	/*
1226 	 * The nested headers must fit the geneve opt len fields and the
1227 	 * nested encap must carry a nested transport (UDP) header.
1228 	 */
1229 	nhlen = skb_inner_mac_header(skb) - skb->data;
1230 	if (nhlen > 255 || !skb_transport_header_was_set(skb) ||
1231 	    skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
1232 	    (skb_transport_offset(skb) + sizeof(struct udphdr) > nhlen))
1233 		return 0;
1234 
1235 	id = proto_to_id(skb->inner_protocol);
1236 	if (id < 0)
1237 		return 0;
1238 
1239 	nested_is_v6 = skb->protocol == htons(ETH_P_IPV6);
1240 	if (nested_is_v6) {
1241 		int start = skb_network_offset(skb) + sizeof(struct ipv6hdr);
1242 		u8 proto = ipv6_hdr(skb)->nexthdr;
1243 		__be16 foff;
1244 
1245 		if (ipv6_skip_exthdr(skb, start, &proto, &foff) < 0 ||
1246 		    proto != IPPROTO_UDP)
1247 			return 0;
1248 	} else {
1249 		if (ip_hdr(skb)->protocol != IPPROTO_UDP)
1250 			return 0;
1251 	}
1252 
1253 	hint = &cb->gro_hint;
1254 	memset(hint, 0, sizeof(*hint));
1255 	hint->inner_proto_id = id;
1256 	hint->nested_is_v6 = skb->protocol == htons(ETH_P_IPV6);
1257 	hint->nested_nh_offset = skb_network_offset(skb);
1258 	hint->nested_tp_offset = skb_transport_offset(skb);
1259 	hint->nested_hdr_len = nhlen;
1260 	cb->gro_hint_len = GENEVE_OPT_GRO_HINT_SIZE;
1261 	return GENEVE_OPT_GRO_HINT_SIZE;
1262 }
1263 
1264 static void geneve_put_gro_hint_opt(struct genevehdr *gnvh, int opt_size,
1265 				    const struct geneve_opt_gro_hint *hint)
1266 {
1267 	struct geneve_opt *gro_opt;
1268 
1269 	/* geneve_build_header() did not took in account the GRO hint. */
1270 	gnvh->opt_len = (opt_size + GENEVE_OPT_GRO_HINT_SIZE) >> 2;
1271 
1272 	gro_opt = (void *)(gnvh + 1) + opt_size;
1273 	memset(gro_opt, 0, sizeof(*gro_opt));
1274 
1275 	gro_opt->opt_class = htons(GENEVE_OPT_NETDEV_CLASS);
1276 	gro_opt->type = GENEVE_OPT_GRO_HINT_TYPE;
1277 	gro_opt->length = GENEVE_OPT_GRO_HINT_LEN;
1278 	memcpy(gro_opt + 1, hint, sizeof(*hint));
1279 }
1280 
1281 static int geneve_build_skb(struct dst_entry *dst, struct sk_buff *skb,
1282 			    const struct ip_tunnel_info *info,
1283 			    const struct geneve_dev *geneve, int ip_hdr_len)
1284 {
1285 	bool udp_sum = test_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags);
1286 	bool inner_proto_inherit = geneve->cfg.inner_proto_inherit;
1287 	bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
1288 	struct geneve_skb_cb *cb = GENEVE_SKB_CB(skb);
1289 	struct genevehdr *gnvh;
1290 	__be16 inner_proto;
1291 	bool double_encap;
1292 	int min_headroom;
1293 	int opt_size;
1294 	int err;
1295 
1296 	skb_reset_mac_header(skb);
1297 	skb_scrub_packet(skb, xnet);
1298 
1299 	opt_size =  info->options_len + cb->gro_hint_len;
1300 	min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len +
1301 		       GENEVE_BASE_HLEN + opt_size + ip_hdr_len;
1302 	err = skb_cow_head(skb, min_headroom);
1303 	if (unlikely(err))
1304 		goto free_dst;
1305 
1306 	double_encap = udp_tunnel_handle_partial(skb);
1307 	err = udp_tunnel_handle_offloads(skb, udp_sum);
1308 	if (err)
1309 		goto free_dst;
1310 
1311 	gnvh = __skb_push(skb, sizeof(*gnvh) + opt_size);
1312 	inner_proto = inner_proto_inherit ? skb->protocol : htons(ETH_P_TEB);
1313 	geneve_build_header(gnvh, info, inner_proto);
1314 
1315 	if (cb->gro_hint_len)
1316 		geneve_put_gro_hint_opt(gnvh, info->options_len, &cb->gro_hint);
1317 
1318 	udp_tunnel_set_inner_protocol(skb, double_encap, inner_proto);
1319 	return 0;
1320 
1321 free_dst:
1322 	dst_release(dst);
1323 	return err;
1324 }
1325 
1326 static u8 geneve_get_dsfield(struct sk_buff *skb, struct net_device *dev,
1327 			     const struct ip_tunnel_info *info,
1328 			     bool *use_cache)
1329 {
1330 	struct geneve_dev *geneve = netdev_priv(dev);
1331 	u8 dsfield;
1332 
1333 	dsfield = info->key.tos;
1334 	if (dsfield == 1 && !geneve->cfg.collect_md) {
1335 		dsfield = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
1336 		*use_cache = false;
1337 	}
1338 
1339 	return dsfield;
1340 }
1341 
1342 static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,
1343 			   struct geneve_dev *geneve,
1344 			   const struct ip_tunnel_info *info)
1345 {
1346 	struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
1347 	const struct ip_tunnel_key *key = &info->key;
1348 	struct rtable *rt;
1349 	bool use_cache;
1350 	__u8 tos, ttl;
1351 	__be16 df = 0;
1352 	__be32 saddr;
1353 	__be16 sport;
1354 	int err;
1355 
1356 	if (skb_vlan_inet_prepare(skb, geneve->cfg.inner_proto_inherit))
1357 		return -EINVAL;
1358 
1359 	if (!gs4)
1360 		return -EIO;
1361 
1362 	use_cache = ip_tunnel_dst_cache_usable(skb, info);
1363 	tos = geneve_get_dsfield(skb, dev, info, &use_cache);
1364 	sport = udp_flow_src_port(geneve->net, skb,
1365 				  geneve->cfg.port_min,
1366 				  geneve->cfg.port_max, true);
1367 
1368 	rt = udp_tunnel_dst_lookup(skb, dev, geneve->net, 0, &saddr,
1369 				   &info->key,
1370 				   sport, geneve->cfg.info.key.tp_dst, tos,
1371 				   use_cache ?
1372 				   (struct dst_cache *)&info->dst_cache : NULL);
1373 	if (IS_ERR(rt))
1374 		return PTR_ERR(rt);
1375 
1376 	if (geneve->cfg.info.key.u.ipv4.src &&
1377 	    saddr != geneve->cfg.info.key.u.ipv4.src) {
1378 		dst_release(&rt->dst);
1379 		return -EADDRNOTAVAIL;
1380 	}
1381 
1382 	err = skb_tunnel_check_pmtu(skb, &rt->dst,
1383 				    GENEVE_IPV4_HLEN + info->options_len +
1384 				    geneve_build_gro_hint_opt(geneve, skb),
1385 				    netif_is_any_bridge_port(dev));
1386 	if (err < 0) {
1387 		dst_release(&rt->dst);
1388 		return err;
1389 	} else if (err) {
1390 		struct ip_tunnel_info *info;
1391 
1392 		info = skb_tunnel_info(skb);
1393 		if (info) {
1394 			struct ip_tunnel_info *unclone;
1395 
1396 			unclone = skb_tunnel_info_unclone(skb);
1397 			if (unlikely(!unclone)) {
1398 				dst_release(&rt->dst);
1399 				return -ENOMEM;
1400 			}
1401 
1402 			unclone->key.u.ipv4.dst = saddr;
1403 			unclone->key.u.ipv4.src = info->key.u.ipv4.dst;
1404 		}
1405 
1406 		if (!pskb_may_pull(skb, ETH_HLEN)) {
1407 			dst_release(&rt->dst);
1408 			return -EINVAL;
1409 		}
1410 
1411 		skb->protocol = eth_type_trans(skb, geneve->dev);
1412 		__netif_rx(skb);
1413 		dst_release(&rt->dst);
1414 		return -EMSGSIZE;
1415 	}
1416 
1417 	tos = ip_tunnel_ecn_encap(tos, ip_hdr(skb), skb);
1418 	if (geneve->cfg.collect_md) {
1419 		ttl = key->ttl;
1420 
1421 		df = test_bit(IP_TUNNEL_DONT_FRAGMENT_BIT, key->tun_flags) ?
1422 		     htons(IP_DF) : 0;
1423 	} else {
1424 		if (geneve->cfg.ttl_inherit)
1425 			ttl = ip_tunnel_get_ttl(ip_hdr(skb), skb);
1426 		else
1427 			ttl = key->ttl;
1428 		ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
1429 
1430 		if (geneve->cfg.df == GENEVE_DF_SET) {
1431 			df = htons(IP_DF);
1432 		} else if (geneve->cfg.df == GENEVE_DF_INHERIT) {
1433 			struct ethhdr *eth = skb_eth_hdr(skb);
1434 
1435 			if (ntohs(eth->h_proto) == ETH_P_IPV6) {
1436 				df = htons(IP_DF);
1437 			} else if (ntohs(eth->h_proto) == ETH_P_IP) {
1438 				struct iphdr *iph = ip_hdr(skb);
1439 
1440 				if (iph->frag_off & htons(IP_DF))
1441 					df = htons(IP_DF);
1442 			}
1443 		}
1444 	}
1445 
1446 	err = geneve_build_skb(&rt->dst, skb, info, geneve,
1447 			       sizeof(struct iphdr));
1448 	if (unlikely(err))
1449 		return err;
1450 
1451 	udp_tunnel_xmit_skb(rt, gs4->sk, skb, saddr, info->key.u.ipv4.dst,
1452 			    tos, ttl, df, sport, geneve->cfg.info.key.tp_dst,
1453 			    !net_eq(geneve->net, dev_net(geneve->dev)),
1454 			    !test_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags),
1455 			    0);
1456 	return 0;
1457 }
1458 
1459 #if IS_ENABLED(CONFIG_IPV6)
1460 static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
1461 			    struct geneve_dev *geneve,
1462 			    const struct ip_tunnel_info *info)
1463 {
1464 	struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
1465 	const struct ip_tunnel_key *key = &info->key;
1466 	struct dst_entry *dst = NULL;
1467 	struct in6_addr saddr;
1468 	bool use_cache;
1469 	__u8 prio, ttl;
1470 	__be16 sport;
1471 	int err;
1472 
1473 	if (skb_vlan_inet_prepare(skb, geneve->cfg.inner_proto_inherit))
1474 		return -EINVAL;
1475 
1476 	if (!gs6)
1477 		return -EIO;
1478 
1479 	use_cache = ip_tunnel_dst_cache_usable(skb, info);
1480 	prio = geneve_get_dsfield(skb, dev, info, &use_cache);
1481 	sport = udp_flow_src_port(geneve->net, skb,
1482 				  geneve->cfg.port_min,
1483 				  geneve->cfg.port_max, true);
1484 
1485 	dst = udp_tunnel6_dst_lookup(skb, dev, geneve->net, gs6->sk, 0,
1486 				     &saddr, key, sport,
1487 				     geneve->cfg.info.key.tp_dst, prio,
1488 				     use_cache ?
1489 				     (struct dst_cache *)&info->dst_cache : NULL);
1490 	if (IS_ERR(dst))
1491 		return PTR_ERR(dst);
1492 
1493 	if (!ipv6_addr_any(&geneve->cfg.info.key.u.ipv6.src) &&
1494 	    !ipv6_addr_equal(&saddr, &geneve->cfg.info.key.u.ipv6.src)) {
1495 		dst_release(dst);
1496 		return -EADDRNOTAVAIL;
1497 	}
1498 
1499 	err = skb_tunnel_check_pmtu(skb, dst,
1500 				    GENEVE_IPV6_HLEN + info->options_len +
1501 				    geneve_build_gro_hint_opt(geneve, skb),
1502 				    netif_is_any_bridge_port(dev));
1503 	if (err < 0) {
1504 		dst_release(dst);
1505 		return err;
1506 	} else if (err) {
1507 		struct ip_tunnel_info *info = skb_tunnel_info(skb);
1508 
1509 		if (info) {
1510 			struct ip_tunnel_info *unclone;
1511 
1512 			unclone = skb_tunnel_info_unclone(skb);
1513 			if (unlikely(!unclone)) {
1514 				dst_release(dst);
1515 				return -ENOMEM;
1516 			}
1517 
1518 			unclone->key.u.ipv6.dst = saddr;
1519 			unclone->key.u.ipv6.src = info->key.u.ipv6.dst;
1520 		}
1521 
1522 		if (!pskb_may_pull(skb, ETH_HLEN)) {
1523 			dst_release(dst);
1524 			return -EINVAL;
1525 		}
1526 
1527 		skb->protocol = eth_type_trans(skb, geneve->dev);
1528 		__netif_rx(skb);
1529 		dst_release(dst);
1530 		return -EMSGSIZE;
1531 	}
1532 
1533 	prio = ip_tunnel_ecn_encap(prio, ip_hdr(skb), skb);
1534 	if (geneve->cfg.collect_md) {
1535 		ttl = key->ttl;
1536 	} else {
1537 		if (geneve->cfg.ttl_inherit)
1538 			ttl = ip_tunnel_get_ttl(ip_hdr(skb), skb);
1539 		else
1540 			ttl = key->ttl;
1541 		ttl = ttl ? : ip6_dst_hoplimit(dst);
1542 	}
1543 	err = geneve_build_skb(dst, skb, info, geneve, sizeof(struct ipv6hdr));
1544 	if (unlikely(err))
1545 		return err;
1546 
1547 	udp_tunnel6_xmit_skb(dst, gs6->sk, skb, dev,
1548 			     &saddr, &key->u.ipv6.dst, prio, ttl,
1549 			     info->key.label, sport, geneve->cfg.info.key.tp_dst,
1550 			     !test_bit(IP_TUNNEL_CSUM_BIT,
1551 				       info->key.tun_flags),
1552 			     0);
1553 	return 0;
1554 }
1555 #endif
1556 
1557 static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
1558 {
1559 	struct geneve_dev *geneve = netdev_priv(dev);
1560 	struct ip_tunnel_info *info = NULL;
1561 	int err;
1562 
1563 	if (geneve->cfg.collect_md) {
1564 		info = skb_tunnel_info(skb);
1565 		if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) {
1566 			netdev_dbg(dev, "no tunnel metadata\n");
1567 			dev_kfree_skb(skb);
1568 			dev_dstats_tx_dropped(dev);
1569 			return NETDEV_TX_OK;
1570 		}
1571 	} else {
1572 		info = &geneve->cfg.info;
1573 	}
1574 
1575 	rcu_read_lock();
1576 #if IS_ENABLED(CONFIG_IPV6)
1577 	if (info->mode & IP_TUNNEL_INFO_IPV6)
1578 		err = geneve6_xmit_skb(skb, dev, geneve, info);
1579 	else
1580 #endif
1581 		err = geneve_xmit_skb(skb, dev, geneve, info);
1582 	rcu_read_unlock();
1583 
1584 	if (likely(!err))
1585 		return NETDEV_TX_OK;
1586 
1587 	if (err != -EMSGSIZE)
1588 		dev_kfree_skb(skb);
1589 
1590 	if (err == -ELOOP)
1591 		DEV_STATS_INC(dev, collisions);
1592 	else if (err == -ENETUNREACH)
1593 		DEV_STATS_INC(dev, tx_carrier_errors);
1594 
1595 	DEV_STATS_INC(dev, tx_errors);
1596 	return NETDEV_TX_OK;
1597 }
1598 
1599 static int geneve_change_mtu(struct net_device *dev, int new_mtu)
1600 {
1601 	if (new_mtu > dev->max_mtu)
1602 		new_mtu = dev->max_mtu;
1603 	else if (new_mtu < dev->min_mtu)
1604 		new_mtu = dev->min_mtu;
1605 
1606 	WRITE_ONCE(dev->mtu, new_mtu);
1607 	return 0;
1608 }
1609 
1610 static int geneve_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
1611 {
1612 	struct ip_tunnel_info *info = skb_tunnel_info(skb);
1613 	struct geneve_dev *geneve = netdev_priv(dev);
1614 	__be16 sport;
1615 
1616 	if (ip_tunnel_info_af(info) == AF_INET) {
1617 		struct rtable *rt;
1618 		struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
1619 		bool use_cache;
1620 		__be32 saddr;
1621 		u8 tos;
1622 
1623 		if (!gs4)
1624 			return -EIO;
1625 
1626 		use_cache = ip_tunnel_dst_cache_usable(skb, info);
1627 		tos = geneve_get_dsfield(skb, dev, info, &use_cache);
1628 		sport = udp_flow_src_port(geneve->net, skb,
1629 					  geneve->cfg.port_min,
1630 					  geneve->cfg.port_max, true);
1631 
1632 		rt = udp_tunnel_dst_lookup(skb, dev, geneve->net, 0, &saddr,
1633 					   &info->key,
1634 					   sport, geneve->cfg.info.key.tp_dst,
1635 					   tos,
1636 					   use_cache ? &info->dst_cache : NULL);
1637 		if (IS_ERR(rt))
1638 			return PTR_ERR(rt);
1639 
1640 		ip_rt_put(rt);
1641 		info->key.u.ipv4.src = saddr;
1642 #if IS_ENABLED(CONFIG_IPV6)
1643 	} else if (ip_tunnel_info_af(info) == AF_INET6) {
1644 		struct dst_entry *dst;
1645 		struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
1646 		struct in6_addr saddr;
1647 		bool use_cache;
1648 		u8 prio;
1649 
1650 		if (!gs6)
1651 			return -EIO;
1652 
1653 		use_cache = ip_tunnel_dst_cache_usable(skb, info);
1654 		prio = geneve_get_dsfield(skb, dev, info, &use_cache);
1655 		sport = udp_flow_src_port(geneve->net, skb,
1656 					  geneve->cfg.port_min,
1657 					  geneve->cfg.port_max, true);
1658 
1659 		dst = udp_tunnel6_dst_lookup(skb, dev, geneve->net, gs6->sk, 0,
1660 					     &saddr, &info->key, sport,
1661 					     geneve->cfg.info.key.tp_dst, prio,
1662 					     use_cache ? &info->dst_cache : NULL);
1663 		if (IS_ERR(dst))
1664 			return PTR_ERR(dst);
1665 
1666 		dst_release(dst);
1667 		info->key.u.ipv6.src = saddr;
1668 #endif
1669 	} else {
1670 		return -EINVAL;
1671 	}
1672 
1673 	info->key.tp_src = sport;
1674 	info->key.tp_dst = geneve->cfg.info.key.tp_dst;
1675 	return 0;
1676 }
1677 
1678 static const struct net_device_ops geneve_netdev_ops = {
1679 	.ndo_init		= geneve_init,
1680 	.ndo_uninit		= geneve_uninit,
1681 	.ndo_open		= geneve_open,
1682 	.ndo_stop		= geneve_stop,
1683 	.ndo_start_xmit		= geneve_xmit,
1684 	.ndo_change_mtu		= geneve_change_mtu,
1685 	.ndo_validate_addr	= eth_validate_addr,
1686 	.ndo_set_mac_address	= eth_mac_addr,
1687 	.ndo_fill_metadata_dst	= geneve_fill_metadata_dst,
1688 };
1689 
1690 static void geneve_get_drvinfo(struct net_device *dev,
1691 			       struct ethtool_drvinfo *drvinfo)
1692 {
1693 	strscpy(drvinfo->version, GENEVE_NETDEV_VER, sizeof(drvinfo->version));
1694 	strscpy(drvinfo->driver, "geneve", sizeof(drvinfo->driver));
1695 }
1696 
1697 static const struct ethtool_ops geneve_ethtool_ops = {
1698 	.get_drvinfo	= geneve_get_drvinfo,
1699 	.get_link	= ethtool_op_get_link,
1700 };
1701 
1702 /* Info for udev, that this is a virtual tunnel endpoint */
1703 static const struct device_type geneve_type = {
1704 	.name = "geneve",
1705 };
1706 
1707 /* Calls the ndo_udp_tunnel_add of the caller in order to
1708  * supply the listening GENEVE udp ports. Callers are expected
1709  * to implement the ndo_udp_tunnel_add.
1710  */
1711 static void geneve_offload_rx_ports(struct net_device *dev, bool push)
1712 {
1713 	struct net *net = dev_net(dev);
1714 	struct geneve_net *gn = net_generic(net, geneve_net_id);
1715 	struct geneve_sock *gs;
1716 
1717 	ASSERT_RTNL();
1718 
1719 	list_for_each_entry(gs, &gn->sock_list, list) {
1720 		if (push) {
1721 			udp_tunnel_push_rx_port(dev, gs->sk,
1722 						UDP_TUNNEL_TYPE_GENEVE);
1723 		} else {
1724 			udp_tunnel_drop_rx_port(dev, gs->sk,
1725 						UDP_TUNNEL_TYPE_GENEVE);
1726 		}
1727 	}
1728 }
1729 
1730 /* Initialize the device structure. */
1731 static void geneve_setup(struct net_device *dev)
1732 {
1733 	ether_setup(dev);
1734 
1735 	dev->netdev_ops = &geneve_netdev_ops;
1736 	dev->ethtool_ops = &geneve_ethtool_ops;
1737 	dev->needs_free_netdev = true;
1738 
1739 	SET_NETDEV_DEVTYPE(dev, &geneve_type);
1740 
1741 	dev->features    |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST;
1742 	dev->features    |= NETIF_F_RXCSUM;
1743 	dev->features    |= NETIF_F_GSO_SOFTWARE;
1744 
1745 	/* Partial features are disabled by default. */
1746 	dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST;
1747 	dev->hw_features |= NETIF_F_RXCSUM;
1748 	dev->hw_features |= NETIF_F_GSO_SOFTWARE;
1749 	dev->hw_features |= UDP_TUNNEL_PARTIAL_FEATURES;
1750 	dev->hw_features |= NETIF_F_GSO_PARTIAL;
1751 
1752 	dev->hw_enc_features = dev->hw_features;
1753 	dev->gso_partial_features = UDP_TUNNEL_PARTIAL_FEATURES;
1754 	dev->mangleid_features = NETIF_F_GSO_PARTIAL;
1755 
1756 	dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS;
1757 	/* MTU range: 68 - (something less than 65535) */
1758 	dev->min_mtu = ETH_MIN_MTU;
1759 	/* The max_mtu calculation does not take account of GENEVE
1760 	 * options, to avoid excluding potentially valid
1761 	 * configurations. This will be further reduced by IPvX hdr size.
1762 	 */
1763 	dev->max_mtu = IP_MAX_MTU - GENEVE_BASE_HLEN - dev->hard_header_len;
1764 
1765 	netif_keep_dst(dev);
1766 	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1767 	dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE;
1768 	dev->lltx = true;
1769 	eth_hw_addr_random(dev);
1770 }
1771 
1772 static const struct nla_policy geneve_policy[IFLA_GENEVE_MAX + 1] = {
1773 	[IFLA_GENEVE_UNSPEC]		= { .strict_start_type = IFLA_GENEVE_INNER_PROTO_INHERIT },
1774 	[IFLA_GENEVE_ID]		= { .type = NLA_U32 },
1775 	[IFLA_GENEVE_REMOTE]		= { .len = sizeof_field(struct iphdr, daddr) },
1776 	[IFLA_GENEVE_REMOTE6]		= { .len = sizeof(struct in6_addr) },
1777 	[IFLA_GENEVE_TTL]		= { .type = NLA_U8 },
1778 	[IFLA_GENEVE_TOS]		= { .type = NLA_U8 },
1779 	[IFLA_GENEVE_LABEL]		= { .type = NLA_U32 },
1780 	[IFLA_GENEVE_PORT]		= { .type = NLA_U16 },
1781 	[IFLA_GENEVE_COLLECT_METADATA]	= { .type = NLA_FLAG },
1782 	[IFLA_GENEVE_UDP_CSUM]		= { .type = NLA_U8 },
1783 	[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]	= { .type = NLA_U8 },
1784 	[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]	= { .type = NLA_U8 },
1785 	[IFLA_GENEVE_TTL_INHERIT]	= { .type = NLA_U8 },
1786 	[IFLA_GENEVE_DF]		= { .type = NLA_U8 },
1787 	[IFLA_GENEVE_INNER_PROTO_INHERIT]	= { .type = NLA_FLAG },
1788 	[IFLA_GENEVE_PORT_RANGE]	= NLA_POLICY_EXACT_LEN(sizeof(struct ifla_geneve_port_range)),
1789 	[IFLA_GENEVE_GRO_HINT]		= { .type = NLA_FLAG },
1790 	[IFLA_GENEVE_LOCAL]		= { .type = NLA_BE32 },
1791 	[IFLA_GENEVE_LOCAL6]		= NLA_POLICY_EXACT_LEN(sizeof(struct in6_addr)),
1792 };
1793 
1794 static int geneve_validate(struct nlattr *tb[], struct nlattr *data[],
1795 			   struct netlink_ext_ack *extack)
1796 {
1797 	if (tb[IFLA_ADDRESS]) {
1798 		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
1799 			NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
1800 					    "Provided link layer address is not Ethernet");
1801 			return -EINVAL;
1802 		}
1803 
1804 		if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
1805 			NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS],
1806 					    "Provided Ethernet address is not unicast");
1807 			return -EADDRNOTAVAIL;
1808 		}
1809 	}
1810 
1811 	if (!data) {
1812 		NL_SET_ERR_MSG(extack,
1813 			       "Not enough attributes provided to perform the operation");
1814 		return -EINVAL;
1815 	}
1816 
1817 	if (data[IFLA_GENEVE_ID]) {
1818 		__u32 vni =  nla_get_u32(data[IFLA_GENEVE_ID]);
1819 
1820 		if (vni >= GENEVE_N_VID) {
1821 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_ID],
1822 					    "Geneve ID must be lower than 16777216");
1823 			return -ERANGE;
1824 		}
1825 	}
1826 
1827 	if (data[IFLA_GENEVE_DF]) {
1828 		enum ifla_geneve_df df = nla_get_u8(data[IFLA_GENEVE_DF]);
1829 
1830 		if (df < 0 || df > GENEVE_DF_MAX) {
1831 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_DF],
1832 					    "Invalid DF attribute");
1833 			return -EINVAL;
1834 		}
1835 	}
1836 
1837 	if (data[IFLA_GENEVE_PORT_RANGE]) {
1838 		const struct ifla_geneve_port_range *p;
1839 
1840 		p = nla_data(data[IFLA_GENEVE_PORT_RANGE]);
1841 		if (ntohs(p->high) < ntohs(p->low)) {
1842 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_PORT_RANGE],
1843 					    "Invalid source port range");
1844 			return -EINVAL;
1845 		}
1846 	}
1847 
1848 	return 0;
1849 }
1850 
1851 static bool geneve_saddr_wildcard(const struct ip_tunnel_info *info)
1852 {
1853 	if (ip_tunnel_info_af(info) == AF_INET) {
1854 		if (!info->key.u.ipv4.src)
1855 			return true;
1856 #if IS_ENABLED(CONFIG_IPV6)
1857 	} else {
1858 		if (ipv6_addr_any(&info->key.u.ipv6.src))
1859 			return true;
1860 #endif
1861 	}
1862 
1863 	return false;
1864 }
1865 
1866 static bool geneve_saddr_conflict(const struct ip_tunnel_info *a,
1867 				  const struct ip_tunnel_info *b)
1868 {
1869 	if (ip_tunnel_info_af(a) != ip_tunnel_info_af(b))
1870 		return false;
1871 
1872 	if (geneve_saddr_wildcard(a) || geneve_saddr_wildcard(b))
1873 		return true;
1874 
1875 	if (ip_tunnel_info_af(a) == AF_INET) {
1876 		if (a->key.u.ipv4.src == b->key.u.ipv4.src)
1877 			return true;
1878 #if IS_ENABLED(CONFIG_IPV6)
1879 	} else {
1880 		if (ipv6_addr_equal(&a->key.u.ipv6.src, &b->key.u.ipv6.src))
1881 			return true;
1882 #endif
1883 	}
1884 
1885 	return false;
1886 }
1887 
1888 static struct geneve_dev *geneve_find_dev(struct geneve_net *gn,
1889 					  const struct geneve_config *cfg,
1890 					  const struct ip_tunnel_info *info,
1891 					  bool *tun_on_same_port,
1892 					  bool *tun_collect_md)
1893 {
1894 	struct geneve_dev *geneve, *t = NULL;
1895 
1896 	*tun_on_same_port = false;
1897 	*tun_collect_md = false;
1898 	list_for_each_entry(geneve, &gn->geneve_list, next) {
1899 		if (info->key.tp_dst == geneve->cfg.info.key.tp_dst &&
1900 		    (cfg->dualstack || geneve->cfg.dualstack ||
1901 		     geneve_saddr_conflict(info, &geneve->cfg.info))) {
1902 			*tun_collect_md |= geneve->cfg.collect_md;
1903 			*tun_on_same_port = true;
1904 		}
1905 		if (info->key.tun_id == geneve->cfg.info.key.tun_id &&
1906 		    info->key.tp_dst == geneve->cfg.info.key.tp_dst &&
1907 		    !memcmp(&info->key.u, &geneve->cfg.info.key.u, sizeof(info->key.u)))
1908 			t = geneve;
1909 	}
1910 	return t;
1911 }
1912 
1913 static bool is_tnl_info_zero(const struct ip_tunnel_info *info)
1914 {
1915 	return !(info->key.tun_id || info->key.tos ||
1916 		 !ip_tunnel_flags_empty(info->key.tun_flags) ||
1917 		 info->key.ttl || info->key.label || info->key.tp_src ||
1918 #if IS_ENABLED(CONFIG_IPV6)
1919 		 (ip_tunnel_info_af(info) == AF_INET6 &&
1920 		  !ipv6_addr_any(&info->key.u.ipv6.dst)) ||
1921 #endif
1922 		 (ip_tunnel_info_af(info) == AF_INET &&
1923 		  info->key.u.ipv4.dst));
1924 }
1925 
1926 static bool geneve_dst_addr_equal(struct ip_tunnel_info *a,
1927 				  struct ip_tunnel_info *b)
1928 {
1929 	if (ip_tunnel_info_af(a) == AF_INET)
1930 		return a->key.u.ipv4.dst == b->key.u.ipv4.dst;
1931 	else
1932 		return ipv6_addr_equal(&a->key.u.ipv6.dst, &b->key.u.ipv6.dst);
1933 }
1934 
1935 static int geneve_configure(struct net *net, struct net_device *dev,
1936 			    struct netlink_ext_ack *extack,
1937 			    const struct geneve_config *cfg)
1938 {
1939 	struct geneve_net *gn = net_generic(net, geneve_net_id);
1940 	struct geneve_dev *t, *geneve = netdev_priv(dev);
1941 	const struct ip_tunnel_info *info = &cfg->info;
1942 	bool tun_collect_md, tun_on_same_port;
1943 	int err, encap_len;
1944 
1945 	if (cfg->collect_md && !is_tnl_info_zero(info)) {
1946 		NL_SET_ERR_MSG(extack,
1947 			       "Device is externally controlled, so attributes (VNI, Port, and so on) must not be specified");
1948 		return -EINVAL;
1949 	}
1950 
1951 	geneve->net = net;
1952 	geneve->dev = dev;
1953 
1954 	t = geneve_find_dev(gn, cfg, info, &tun_on_same_port, &tun_collect_md);
1955 	if (t)
1956 		return -EBUSY;
1957 
1958 	/* make enough headroom for basic scenario */
1959 	encap_len = GENEVE_BASE_HLEN + ETH_HLEN;
1960 	if (!cfg->collect_md && ip_tunnel_info_af(info) == AF_INET) {
1961 		encap_len += sizeof(struct iphdr);
1962 		dev->max_mtu -= sizeof(struct iphdr);
1963 	} else {
1964 		encap_len += sizeof(struct ipv6hdr);
1965 		dev->max_mtu -= sizeof(struct ipv6hdr);
1966 	}
1967 	dev->needed_headroom = encap_len + ETH_HLEN;
1968 
1969 	if (cfg->collect_md) {
1970 		if (tun_on_same_port) {
1971 			NL_SET_ERR_MSG(extack,
1972 				       "There can be only one externally controlled device on a destination port and a source address");
1973 			return -EPERM;
1974 		}
1975 	} else {
1976 		if (tun_collect_md) {
1977 			NL_SET_ERR_MSG(extack,
1978 				       "There already exists an externally controlled device on this destination port and the source address");
1979 			return -EPERM;
1980 		}
1981 	}
1982 
1983 	dst_cache_reset(&geneve->cfg.info.dst_cache);
1984 	memcpy(&geneve->cfg, cfg, sizeof(*cfg));
1985 
1986 	if (geneve->cfg.inner_proto_inherit) {
1987 		dev->header_ops = NULL;
1988 		dev->type = ARPHRD_NONE;
1989 		dev->hard_header_len = 0;
1990 		dev->addr_len = 0;
1991 		dev->flags = IFF_POINTOPOINT | IFF_NOARP;
1992 	}
1993 
1994 	err = register_netdevice(dev);
1995 	if (err)
1996 		return err;
1997 
1998 	list_add(&geneve->next, &gn->geneve_list);
1999 	return 0;
2000 }
2001 
2002 static void init_tnl_info(struct ip_tunnel_info *info, __u16 dst_port)
2003 {
2004 	memset(info, 0, sizeof(*info));
2005 	info->key.tp_dst = htons(dst_port);
2006 }
2007 
2008 static int geneve_nl2info(struct nlattr *tb[], struct nlattr *data[],
2009 			  struct netlink_ext_ack *extack,
2010 			  struct geneve_config *cfg, bool changelink)
2011 {
2012 	struct ip_tunnel_info *info = &cfg->info;
2013 	int attrtype;
2014 
2015 	if (data[IFLA_GENEVE_COLLECT_METADATA]) {
2016 		if (changelink) {
2017 			attrtype = IFLA_GENEVE_COLLECT_METADATA;
2018 			goto change_notsup;
2019 		}
2020 
2021 		cfg->collect_md = true;
2022 		cfg->dualstack = true;
2023 	}
2024 
2025 	if ((data[IFLA_GENEVE_LOCAL] || data[IFLA_GENEVE_REMOTE]) &&
2026 	    (data[IFLA_GENEVE_LOCAL6] || data[IFLA_GENEVE_REMOTE6])) {
2027 		NL_SET_ERR_MSG(extack,
2028 			       "Cannot specify both IPv4/IPv6 Remote/Local addresses");
2029 		return -EINVAL;
2030 	}
2031 
2032 	if (data[IFLA_GENEVE_REMOTE]) {
2033 		if (changelink && (ip_tunnel_info_af(info) == AF_INET6)) {
2034 			attrtype = IFLA_GENEVE_REMOTE;
2035 			goto change_notsup;
2036 		}
2037 
2038 		info->key.u.ipv4.dst =
2039 			nla_get_in_addr(data[IFLA_GENEVE_REMOTE]);
2040 
2041 		if (ipv4_is_multicast(info->key.u.ipv4.dst)) {
2042 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE],
2043 					    "Remote IPv4 address cannot be Multicast");
2044 			return -EINVAL;
2045 		}
2046 	}
2047 
2048 	if (data[IFLA_GENEVE_REMOTE6]) {
2049 #if IS_ENABLED(CONFIG_IPV6)
2050 		int addr_type;
2051 
2052 		if (changelink && (ip_tunnel_info_af(info) == AF_INET)) {
2053 			attrtype = IFLA_GENEVE_REMOTE6;
2054 			goto change_notsup;
2055 		}
2056 
2057 		info->mode = IP_TUNNEL_INFO_IPV6;
2058 		info->key.u.ipv6.dst =
2059 			nla_get_in6_addr(data[IFLA_GENEVE_REMOTE6]);
2060 
2061 		addr_type = ipv6_addr_type(&info->key.u.ipv6.dst);
2062 		if (addr_type & IPV6_ADDR_LINKLOCAL) {
2063 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
2064 					    "Remote IPv6 address cannot be link-local");
2065 			return -EINVAL;
2066 		}
2067 		if (addr_type & IPV6_ADDR_MULTICAST) {
2068 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
2069 					    "Remote IPv6 address cannot be Multicast");
2070 			return -EINVAL;
2071 		}
2072 		__set_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags);
2073 		cfg->use_udp6_rx_checksums = true;
2074 #else
2075 		NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6],
2076 				    "IPv6 support not enabled in the kernel");
2077 		return -EPFNOSUPPORT;
2078 #endif
2079 	}
2080 
2081 	if (data[IFLA_GENEVE_LOCAL]) {
2082 		if (changelink) {
2083 			__be32 src = nla_get_in_addr(data[IFLA_GENEVE_LOCAL]);
2084 
2085 			if (ip_tunnel_info_af(info) == AF_INET6 ||
2086 			    src != info->key.u.ipv4.src) {
2087 				attrtype = IFLA_GENEVE_LOCAL;
2088 				goto change_notsup;
2089 			}
2090 		} else {
2091 			info->key.u.ipv4.src = nla_get_in_addr(data[IFLA_GENEVE_LOCAL]);
2092 
2093 			if (ipv4_is_multicast(info->key.u.ipv4.src)) {
2094 				NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL],
2095 						    "Local IPv4 address cannot be Multicast");
2096 				return -EINVAL;
2097 			}
2098 
2099 			cfg->dualstack = false;
2100 		}
2101 	}
2102 
2103 	if (data[IFLA_GENEVE_LOCAL6]) {
2104 #if IS_ENABLED(CONFIG_IPV6)
2105 		if (changelink) {
2106 			struct in6_addr src = nla_get_in6_addr(data[IFLA_GENEVE_LOCAL6]);
2107 
2108 			if (ip_tunnel_info_af(info) == AF_INET ||
2109 			    !ipv6_addr_equal(&src, &info->key.u.ipv6.src)) {
2110 				attrtype = IFLA_GENEVE_LOCAL6;
2111 				goto change_notsup;
2112 			}
2113 		} else {
2114 			int addr_type;
2115 
2116 			info->mode = IP_TUNNEL_INFO_IPV6;
2117 			info->key.u.ipv6.src = nla_get_in6_addr(data[IFLA_GENEVE_LOCAL6]);
2118 
2119 			addr_type = ipv6_addr_type(&info->key.u.ipv6.src);
2120 			if (addr_type & IPV6_ADDR_LINKLOCAL) {
2121 				NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6],
2122 						    "Local IPv6 address cannot be link-local");
2123 				return -EINVAL;
2124 			}
2125 			if (addr_type & IPV6_ADDR_MULTICAST) {
2126 				NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6],
2127 						    "Local IPv6 address cannot be Multicast");
2128 				return -EINVAL;
2129 			}
2130 
2131 			cfg->dualstack = false;
2132 		}
2133 #else
2134 		NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6],
2135 				    "IPv6 support not enabled in the kernel");
2136 		return -EPFNOSUPPORT;
2137 #endif
2138 	}
2139 
2140 	if (data[IFLA_GENEVE_ID]) {
2141 		__u32 vni;
2142 		__u8 tvni[3];
2143 		__be64 tunid;
2144 
2145 		vni = nla_get_u32(data[IFLA_GENEVE_ID]);
2146 		tvni[0] = (vni & 0x00ff0000) >> 16;
2147 		tvni[1] = (vni & 0x0000ff00) >> 8;
2148 		tvni[2] =  vni & 0x000000ff;
2149 
2150 		tunid = vni_to_tunnel_id(tvni);
2151 		if (changelink && (tunid != info->key.tun_id)) {
2152 			attrtype = IFLA_GENEVE_ID;
2153 			goto change_notsup;
2154 		}
2155 		info->key.tun_id = tunid;
2156 	}
2157 
2158 	if (data[IFLA_GENEVE_TTL_INHERIT]) {
2159 		if (nla_get_u8(data[IFLA_GENEVE_TTL_INHERIT]))
2160 			cfg->ttl_inherit = true;
2161 		else
2162 			cfg->ttl_inherit = false;
2163 	} else if (data[IFLA_GENEVE_TTL]) {
2164 		info->key.ttl = nla_get_u8(data[IFLA_GENEVE_TTL]);
2165 		cfg->ttl_inherit = false;
2166 	}
2167 
2168 	if (data[IFLA_GENEVE_TOS])
2169 		info->key.tos = nla_get_u8(data[IFLA_GENEVE_TOS]);
2170 
2171 	if (data[IFLA_GENEVE_DF])
2172 		cfg->df = nla_get_u8(data[IFLA_GENEVE_DF]);
2173 
2174 	if (data[IFLA_GENEVE_LABEL]) {
2175 		info->key.label = nla_get_be32(data[IFLA_GENEVE_LABEL]) &
2176 				  IPV6_FLOWLABEL_MASK;
2177 		if (info->key.label && (!(info->mode & IP_TUNNEL_INFO_IPV6))) {
2178 			NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LABEL],
2179 					    "Label attribute only applies for IPv6 Geneve devices");
2180 			return -EINVAL;
2181 		}
2182 	}
2183 
2184 	if (data[IFLA_GENEVE_PORT]) {
2185 		if (changelink) {
2186 			attrtype = IFLA_GENEVE_PORT;
2187 			goto change_notsup;
2188 		}
2189 		info->key.tp_dst = nla_get_be16(data[IFLA_GENEVE_PORT]);
2190 	}
2191 
2192 	if (data[IFLA_GENEVE_PORT_RANGE]) {
2193 		const struct ifla_geneve_port_range *p;
2194 
2195 		if (changelink) {
2196 			attrtype = IFLA_GENEVE_PORT_RANGE;
2197 			goto change_notsup;
2198 		}
2199 		p = nla_data(data[IFLA_GENEVE_PORT_RANGE]);
2200 		cfg->port_min = ntohs(p->low);
2201 		cfg->port_max = ntohs(p->high);
2202 	}
2203 
2204 	if (data[IFLA_GENEVE_UDP_CSUM]) {
2205 		if (changelink) {
2206 			attrtype = IFLA_GENEVE_UDP_CSUM;
2207 			goto change_notsup;
2208 		}
2209 		if (nla_get_u8(data[IFLA_GENEVE_UDP_CSUM]))
2210 			__set_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags);
2211 	}
2212 
2213 	if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]) {
2214 #if IS_ENABLED(CONFIG_IPV6)
2215 		if (changelink) {
2216 			attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_TX;
2217 			goto change_notsup;
2218 		}
2219 		if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]))
2220 			__clear_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags);
2221 #else
2222 		NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX],
2223 				    "IPv6 support not enabled in the kernel");
2224 		return -EPFNOSUPPORT;
2225 #endif
2226 	}
2227 
2228 	if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]) {
2229 #if IS_ENABLED(CONFIG_IPV6)
2230 		if (changelink) {
2231 			attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_RX;
2232 			goto change_notsup;
2233 		}
2234 		if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]))
2235 			cfg->use_udp6_rx_checksums = false;
2236 #else
2237 		NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX],
2238 				    "IPv6 support not enabled in the kernel");
2239 		return -EPFNOSUPPORT;
2240 #endif
2241 	}
2242 
2243 	if (data[IFLA_GENEVE_INNER_PROTO_INHERIT]) {
2244 		if (changelink) {
2245 			attrtype = IFLA_GENEVE_INNER_PROTO_INHERIT;
2246 			goto change_notsup;
2247 		}
2248 		cfg->inner_proto_inherit = true;
2249 	}
2250 
2251 	if (data[IFLA_GENEVE_GRO_HINT]) {
2252 		if (changelink) {
2253 			attrtype = IFLA_GENEVE_GRO_HINT;
2254 			goto change_notsup;
2255 		}
2256 		cfg->gro_hint = true;
2257 	}
2258 
2259 	return 0;
2260 change_notsup:
2261 	NL_SET_ERR_MSG_ATTR(extack, data[attrtype],
2262 			    "Changing VNI, Port, endpoint IP address family, external, inner_proto_inherit, gro_hint and UDP checksum attributes are not supported");
2263 	return -EOPNOTSUPP;
2264 }
2265 
2266 static void geneve_link_config(struct net_device *dev,
2267 			       struct ip_tunnel_info *info, struct nlattr *tb[])
2268 {
2269 	struct geneve_dev *geneve = netdev_priv(dev);
2270 	int ldev_mtu = 0;
2271 
2272 	if (tb[IFLA_MTU]) {
2273 		geneve_change_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
2274 		return;
2275 	}
2276 
2277 	switch (ip_tunnel_info_af(info)) {
2278 	case AF_INET: {
2279 		struct flowi4 fl4 = { .daddr = info->key.u.ipv4.dst };
2280 		struct rtable *rt = ip_route_output_key(geneve->net, &fl4);
2281 
2282 		if (!IS_ERR(rt) && rt->dst.dev) {
2283 			ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV4_HLEN;
2284 			ip_rt_put(rt);
2285 		}
2286 		break;
2287 	}
2288 #if IS_ENABLED(CONFIG_IPV6)
2289 	case AF_INET6: {
2290 		struct rt6_info *rt;
2291 
2292 		if (!__in6_dev_get(dev))
2293 			break;
2294 
2295 		rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
2296 				NULL, 0);
2297 
2298 		if (rt && rt->dst.dev)
2299 			ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN;
2300 		ip6_rt_put(rt);
2301 		break;
2302 	}
2303 #endif
2304 	}
2305 
2306 	if (ldev_mtu <= 0)
2307 		return;
2308 
2309 	geneve_change_mtu(dev, ldev_mtu - info->options_len);
2310 }
2311 
2312 static int geneve_newlink(struct net_device *dev,
2313 			  struct rtnl_newlink_params *params,
2314 			  struct netlink_ext_ack *extack)
2315 {
2316 	struct net *link_net = rtnl_newlink_link_net(params);
2317 	struct nlattr **data = params->data;
2318 	struct nlattr **tb = params->tb;
2319 	struct geneve_config cfg = {
2320 		.df = GENEVE_DF_UNSET,
2321 		.use_udp6_rx_checksums = false,
2322 		.ttl_inherit = false,
2323 		.collect_md = false,
2324 		.dualstack = false,
2325 		.port_min = 1,
2326 		.port_max = USHRT_MAX,
2327 	};
2328 	int err;
2329 
2330 	init_tnl_info(&cfg.info, GENEVE_UDP_PORT);
2331 	err = geneve_nl2info(tb, data, extack, &cfg, false);
2332 	if (err)
2333 		return err;
2334 
2335 	err = geneve_configure(link_net, dev, extack, &cfg);
2336 	if (err)
2337 		return err;
2338 
2339 	geneve_link_config(dev, &cfg.info, tb);
2340 
2341 	return 0;
2342 }
2343 
2344 /* Quiesces the geneve device data path for both TX and RX.
2345  *
2346  * On transmit geneve checks for non-NULL geneve_sock before it proceeds.
2347  * So, if we set that socket to NULL under RCU and wait for synchronize_net()
2348  * to complete for the existing set of in-flight packets to be transmitted,
2349  * then we would have quiesced the transmit data path. All the future packets
2350  * will get dropped until we unquiesce the data path.
2351  *
2352  * On receive geneve dereference the geneve_sock stashed in the socket. So,
2353  * if we set that to NULL under RCU and wait for synchronize_net() to
2354  * complete, then we would have quiesced the receive data path.
2355  */
2356 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4,
2357 			   struct geneve_sock **gs6)
2358 {
2359 	*gs4 = rtnl_dereference(geneve->sock4);
2360 	rcu_assign_pointer(geneve->sock4, NULL);
2361 	if (*gs4)
2362 		rcu_assign_sk_user_data((*gs4)->sk, NULL);
2363 #if IS_ENABLED(CONFIG_IPV6)
2364 	*gs6 = rtnl_dereference(geneve->sock6);
2365 	rcu_assign_pointer(geneve->sock6, NULL);
2366 	if (*gs6)
2367 		rcu_assign_sk_user_data((*gs6)->sk, NULL);
2368 #else
2369 	*gs6 = NULL;
2370 #endif
2371 	synchronize_net();
2372 }
2373 
2374 /* Resumes the geneve device data path for both TX and RX. */
2375 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4,
2376 			     struct geneve_sock __maybe_unused *gs6)
2377 {
2378 	rcu_assign_pointer(geneve->sock4, gs4);
2379 	if (gs4)
2380 		rcu_assign_sk_user_data(gs4->sk, gs4);
2381 #if IS_ENABLED(CONFIG_IPV6)
2382 	rcu_assign_pointer(geneve->sock6, gs6);
2383 	if (gs6)
2384 		rcu_assign_sk_user_data(gs6->sk, gs6);
2385 #endif
2386 }
2387 
2388 static int geneve_changelink(struct net_device *dev, struct nlattr *tb[],
2389 			     struct nlattr *data[],
2390 			     struct netlink_ext_ack *extack)
2391 {
2392 	struct geneve_dev *geneve = netdev_priv(dev);
2393 	struct geneve_sock *gs4, *gs6;
2394 	struct geneve_config cfg;
2395 	int err;
2396 
2397 	if (!rtnl_dev_link_net_capable(dev, geneve->net))
2398 		return -EPERM;
2399 
2400 	/* If the geneve device is configured for metadata (or externally
2401 	 * controlled, for example, OVS), then nothing can be changed.
2402 	 */
2403 	if (geneve->cfg.collect_md)
2404 		return -EOPNOTSUPP;
2405 
2406 	/* Start with the existing info. */
2407 	memcpy(&cfg, &geneve->cfg, sizeof(cfg));
2408 	err = geneve_nl2info(tb, data, extack, &cfg, true);
2409 	if (err)
2410 		return err;
2411 
2412 	if (!geneve_dst_addr_equal(&geneve->cfg.info, &cfg.info)) {
2413 		dst_cache_reset(&cfg.info.dst_cache);
2414 		geneve_link_config(dev, &cfg.info, tb);
2415 	}
2416 
2417 	geneve_quiesce(geneve, &gs4, &gs6);
2418 	memcpy(&geneve->cfg, &cfg, sizeof(cfg));
2419 	geneve_unquiesce(geneve, gs4, gs6);
2420 
2421 	return 0;
2422 }
2423 
2424 static void geneve_dellink(struct net_device *dev, struct list_head *head)
2425 {
2426 	struct geneve_dev *geneve = netdev_priv(dev);
2427 
2428 	list_del(&geneve->next);
2429 	unregister_netdevice_queue(dev, head);
2430 }
2431 
2432 static size_t geneve_get_size(const struct net_device *dev)
2433 {
2434 	return nla_total_size(sizeof(__u32)) +	/* IFLA_GENEVE_ID */
2435 		nla_total_size(sizeof(struct in6_addr)) + /* IFLA_GENEVE_REMOTE{6} */
2436 		nla_total_size(sizeof(struct in6_addr)) + /* IFLA_GENEVE_LOCAL{6} */
2437 		nla_total_size(sizeof(__u8)) +  /* IFLA_GENEVE_TTL */
2438 		nla_total_size(sizeof(__u8)) +  /* IFLA_GENEVE_TOS */
2439 		nla_total_size(sizeof(__u8)) +	/* IFLA_GENEVE_DF */
2440 		nla_total_size(sizeof(__be32)) +  /* IFLA_GENEVE_LABEL */
2441 		nla_total_size(sizeof(__be16)) +  /* IFLA_GENEVE_PORT */
2442 		nla_total_size(0) +	 /* IFLA_GENEVE_COLLECT_METADATA */
2443 		nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_CSUM */
2444 		nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_TX */
2445 		nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_RX */
2446 		nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_TTL_INHERIT */
2447 		nla_total_size(0) +	 /* IFLA_GENEVE_INNER_PROTO_INHERIT */
2448 		nla_total_size(sizeof(struct ifla_geneve_port_range)) + /* IFLA_GENEVE_PORT_RANGE */
2449 		nla_total_size(0) +	 /* IFLA_GENEVE_GRO_HINT */
2450 		0;
2451 }
2452 
2453 static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
2454 {
2455 	struct geneve_dev *geneve = netdev_priv(dev);
2456 	struct ip_tunnel_info *info = &geneve->cfg.info;
2457 	bool ttl_inherit = geneve->cfg.ttl_inherit;
2458 	bool metadata = geneve->cfg.collect_md;
2459 	struct ifla_geneve_port_range ports = {
2460 		.low	= htons(geneve->cfg.port_min),
2461 		.high	= htons(geneve->cfg.port_max),
2462 	};
2463 	__u8 tmp_vni[3];
2464 	__u32 vni;
2465 
2466 	tunnel_id_to_vni(info->key.tun_id, tmp_vni);
2467 	vni = (tmp_vni[0] << 16) | (tmp_vni[1] << 8) | tmp_vni[2];
2468 	if (nla_put_u32(skb, IFLA_GENEVE_ID, vni))
2469 		goto nla_put_failure;
2470 
2471 	if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
2472 		if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE,
2473 				    info->key.u.ipv4.dst))
2474 			goto nla_put_failure;
2475 		if (nla_put_u8(skb, IFLA_GENEVE_UDP_CSUM,
2476 			       test_bit(IP_TUNNEL_CSUM_BIT,
2477 					info->key.tun_flags)))
2478 			goto nla_put_failure;
2479 
2480 #if IS_ENABLED(CONFIG_IPV6)
2481 	} else if (!metadata) {
2482 		if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6,
2483 				     &info->key.u.ipv6.dst))
2484 			goto nla_put_failure;
2485 		if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
2486 			       !test_bit(IP_TUNNEL_CSUM_BIT,
2487 					 info->key.tun_flags)))
2488 			goto nla_put_failure;
2489 #endif
2490 	}
2491 
2492 	if (!geneve->cfg.dualstack) {
2493 		if (ip_tunnel_info_af(info) == AF_INET) {
2494 			if ((info->key.u.ipv4.src ||
2495 			     geneve->cfg.collect_md) &&
2496 			    nla_put_in_addr(skb, IFLA_GENEVE_LOCAL,
2497 					    info->key.u.ipv4.src))
2498 				goto nla_put_failure;
2499 #if IS_ENABLED(CONFIG_IPV6)
2500 		} else {
2501 			if ((!ipv6_addr_any(&info->key.u.ipv6.src) ||
2502 			     geneve->cfg.collect_md) &&
2503 			    nla_put_in6_addr(skb, IFLA_GENEVE_LOCAL6,
2504 					     &info->key.u.ipv6.src))
2505 				goto nla_put_failure;
2506 #endif
2507 		}
2508 	}
2509 
2510 	if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
2511 	    nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
2512 	    nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label))
2513 		goto nla_put_failure;
2514 
2515 	if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->cfg.df))
2516 		goto nla_put_failure;
2517 
2518 	if (nla_put_be16(skb, IFLA_GENEVE_PORT, info->key.tp_dst))
2519 		goto nla_put_failure;
2520 
2521 	if (metadata && nla_put_flag(skb, IFLA_GENEVE_COLLECT_METADATA))
2522 		goto nla_put_failure;
2523 
2524 #if IS_ENABLED(CONFIG_IPV6)
2525 	if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
2526 		       !geneve->cfg.use_udp6_rx_checksums))
2527 		goto nla_put_failure;
2528 #endif
2529 
2530 	if (nla_put_u8(skb, IFLA_GENEVE_TTL_INHERIT, ttl_inherit))
2531 		goto nla_put_failure;
2532 
2533 	if (geneve->cfg.inner_proto_inherit &&
2534 	    nla_put_flag(skb, IFLA_GENEVE_INNER_PROTO_INHERIT))
2535 		goto nla_put_failure;
2536 
2537 	if (nla_put(skb, IFLA_GENEVE_PORT_RANGE, sizeof(ports), &ports))
2538 		goto nla_put_failure;
2539 
2540 	if (geneve->cfg.gro_hint &&
2541 	    nla_put_flag(skb, IFLA_GENEVE_GRO_HINT))
2542 		goto nla_put_failure;
2543 
2544 	return 0;
2545 
2546 nla_put_failure:
2547 	return -EMSGSIZE;
2548 }
2549 
2550 static struct rtnl_link_ops geneve_link_ops __read_mostly = {
2551 	.kind		= "geneve",
2552 	.maxtype	= IFLA_GENEVE_MAX,
2553 	.policy		= geneve_policy,
2554 	.priv_size	= sizeof(struct geneve_dev),
2555 	.setup		= geneve_setup,
2556 	.validate	= geneve_validate,
2557 	.newlink	= geneve_newlink,
2558 	.changelink	= geneve_changelink,
2559 	.dellink	= geneve_dellink,
2560 	.get_size	= geneve_get_size,
2561 	.fill_info	= geneve_fill_info,
2562 };
2563 
2564 struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
2565 					u8 name_assign_type, u16 dst_port)
2566 {
2567 	struct nlattr *tb[IFLA_MAX + 1];
2568 	struct net_device *dev;
2569 	LIST_HEAD(list_kill);
2570 	int err;
2571 	struct geneve_config cfg = {
2572 		.df = GENEVE_DF_UNSET,
2573 		.use_udp6_rx_checksums = true,
2574 		.ttl_inherit = false,
2575 		.collect_md = true,
2576 		.dualstack = true,
2577 		.port_min = 1,
2578 		.port_max = USHRT_MAX,
2579 	};
2580 
2581 	memset(tb, 0, sizeof(tb));
2582 	dev = rtnl_create_link(net, name, name_assign_type,
2583 			       &geneve_link_ops, tb, NULL);
2584 	if (IS_ERR(dev))
2585 		return dev;
2586 
2587 	init_tnl_info(&cfg.info, dst_port);
2588 	err = geneve_configure(net, dev, NULL, &cfg);
2589 	if (err) {
2590 		free_netdev(dev);
2591 		return ERR_PTR(err);
2592 	}
2593 
2594 	/* openvswitch users expect packet sizes to be unrestricted,
2595 	 * so set the largest MTU we can.
2596 	 */
2597 	err = geneve_change_mtu(dev, IP_MAX_MTU);
2598 	if (err)
2599 		goto err;
2600 
2601 	err = rtnl_configure_link(dev, NULL, 0, NULL);
2602 	if (err < 0)
2603 		goto err;
2604 
2605 	return dev;
2606 err:
2607 	geneve_dellink(dev, &list_kill);
2608 	unregister_netdevice_many(&list_kill);
2609 	return ERR_PTR(err);
2610 }
2611 EXPORT_SYMBOL_GPL(geneve_dev_create_fb);
2612 
2613 static int geneve_netdevice_event(struct notifier_block *unused,
2614 				  unsigned long event, void *ptr)
2615 {
2616 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2617 
2618 	if (event == NETDEV_UDP_TUNNEL_PUSH_INFO)
2619 		geneve_offload_rx_ports(dev, true);
2620 	else if (event == NETDEV_UDP_TUNNEL_DROP_INFO)
2621 		geneve_offload_rx_ports(dev, false);
2622 
2623 	return NOTIFY_DONE;
2624 }
2625 
2626 static struct notifier_block geneve_notifier_block __read_mostly = {
2627 	.notifier_call = geneve_netdevice_event,
2628 };
2629 
2630 static __net_init int geneve_init_net(struct net *net)
2631 {
2632 	struct geneve_net *gn = net_generic(net, geneve_net_id);
2633 
2634 	INIT_LIST_HEAD(&gn->geneve_list);
2635 	INIT_LIST_HEAD(&gn->sock_list);
2636 	return 0;
2637 }
2638 
2639 static void __net_exit geneve_exit_rtnl_net(struct net *net,
2640 					    struct list_head *dev_to_kill)
2641 {
2642 	struct geneve_net *gn = net_generic(net, geneve_net_id);
2643 	struct geneve_dev *geneve, *next;
2644 
2645 	list_for_each_entry_safe(geneve, next, &gn->geneve_list, next)
2646 		geneve_dellink(geneve->dev, dev_to_kill);
2647 }
2648 
2649 static void __net_exit geneve_exit_net(struct net *net)
2650 {
2651 	const struct geneve_net *gn = net_generic(net, geneve_net_id);
2652 
2653 	WARN_ON_ONCE(!list_empty(&gn->sock_list));
2654 }
2655 
2656 static struct pernet_operations geneve_net_ops = {
2657 	.init = geneve_init_net,
2658 	.exit_rtnl = geneve_exit_rtnl_net,
2659 	.exit = geneve_exit_net,
2660 	.id   = &geneve_net_id,
2661 	.size = sizeof(struct geneve_net),
2662 };
2663 
2664 static int __init geneve_init_module(void)
2665 {
2666 	int rc;
2667 
2668 	rc = register_pernet_subsys(&geneve_net_ops);
2669 	if (rc)
2670 		goto out1;
2671 
2672 	rc = register_netdevice_notifier(&geneve_notifier_block);
2673 	if (rc)
2674 		goto out2;
2675 
2676 	rc = rtnl_link_register(&geneve_link_ops);
2677 	if (rc)
2678 		goto out3;
2679 
2680 	return 0;
2681 out3:
2682 	unregister_netdevice_notifier(&geneve_notifier_block);
2683 out2:
2684 	unregister_pernet_subsys(&geneve_net_ops);
2685 out1:
2686 	return rc;
2687 }
2688 late_initcall(geneve_init_module);
2689 
2690 static void __exit geneve_cleanup_module(void)
2691 {
2692 	rtnl_link_unregister(&geneve_link_ops);
2693 	unregister_netdevice_notifier(&geneve_notifier_block);
2694 	unregister_pernet_subsys(&geneve_net_ops);
2695 }
2696 module_exit(geneve_cleanup_module);
2697 
2698 MODULE_LICENSE("GPL");
2699 MODULE_VERSION(GENEVE_NETDEV_VER);
2700 MODULE_AUTHOR("John W. Linville <linville@tuxdriver.com>");
2701 MODULE_DESCRIPTION("Interface driver for GENEVE encapsulated traffic");
2702 MODULE_ALIAS_RTNL_LINK("geneve");
2703