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