rtlwifi: Remove redundant if clause
[deliverable/linux.git] / drivers / net / vxlan.c
CommitLineData
d342894c 1/*
eb5ce439 2 * VXLAN: Virtual eXtensible Local Area Network
d342894c 3 *
3b8df3c6 4 * Copyright (c) 2012-2013 Vyatta Inc.
d342894c 5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
d342894c 9 */
10
11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13#include <linux/kernel.h>
14#include <linux/types.h>
15#include <linux/module.h>
16#include <linux/errno.h>
17#include <linux/slab.h>
18#include <linux/skbuff.h>
19#include <linux/rculist.h>
20#include <linux/netdevice.h>
21#include <linux/in.h>
22#include <linux/ip.h>
23#include <linux/udp.h>
24#include <linux/igmp.h>
25#include <linux/etherdevice.h>
26#include <linux/if_ether.h>
1eaa8178 27#include <linux/if_vlan.h>
d342894c 28#include <linux/hash.h>
1b13c97f 29#include <linux/ethtool.h>
e4f67add
DS
30#include <net/arp.h>
31#include <net/ndisc.h>
d342894c 32#include <net/ip.h>
c5441932 33#include <net/ip_tunnels.h>
d342894c 34#include <net/icmp.h>
35#include <net/udp.h>
36#include <net/rtnetlink.h>
37#include <net/route.h>
38#include <net/dsfield.h>
39#include <net/inet_ecn.h>
40#include <net/net_namespace.h>
41#include <net/netns/generic.h>
012a5729 42#include <net/vxlan.h>
dc01e7d3 43#include <net/protocol.h>
e4c7ed41
CW
44#if IS_ENABLED(CONFIG_IPV6)
45#include <net/ipv6.h>
46#include <net/addrconf.h>
47#include <net/ip6_tunnel.h>
660d98ca 48#include <net/ip6_checksum.h>
e4c7ed41 49#endif
d342894c 50
51#define VXLAN_VERSION "0.1"
52
553675fb 53#define PORT_HASH_BITS 8
54#define PORT_HASH_SIZE (1<<PORT_HASH_BITS)
d342894c 55#define VNI_HASH_BITS 10
56#define VNI_HASH_SIZE (1<<VNI_HASH_BITS)
57#define FDB_HASH_BITS 8
58#define FDB_HASH_SIZE (1<<FDB_HASH_BITS)
59#define FDB_AGE_DEFAULT 300 /* 5 min */
60#define FDB_AGE_INTERVAL (10 * HZ) /* rescan interval */
61
62#define VXLAN_N_VID (1u << 24)
63#define VXLAN_VID_MASK (VXLAN_N_VID - 1)
7ce04758 64#define VXLAN_HLEN (sizeof(struct udphdr) + sizeof(struct vxlanhdr))
d342894c 65
66#define VXLAN_FLAGS 0x08000000 /* struct vxlanhdr.vx_flags required value. */
67
68/* VXLAN protocol header */
69struct vxlanhdr {
70 __be32 vx_flags;
71 __be32 vx_vni;
72};
73
23c578bf 74/* UDP port for VXLAN traffic.
75 * The IANA assigned port is 4789, but the Linux default is 8472
234f5b73 76 * for compatibility with early adopters.
23c578bf 77 */
9daaa397
SH
78static unsigned short vxlan_port __read_mostly = 8472;
79module_param_named(udp_port, vxlan_port, ushort, 0444);
d342894c 80MODULE_PARM_DESC(udp_port, "Destination UDP port");
81
82static bool log_ecn_error = true;
83module_param(log_ecn_error, bool, 0644);
84MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
85
60d9d4c6 86static int vxlan_net_id;
553675fb 87
afbd8bae
MR
88static const u8 all_zeros_mac[ETH_ALEN];
89
553675fb 90/* per-network namespace private data for this module */
91struct vxlan_net {
92 struct list_head vxlan_list;
93 struct hlist_head sock_list[PORT_HASH_SIZE];
1c51a915 94 spinlock_t sock_lock;
553675fb 95};
96
e4c7ed41
CW
97union vxlan_addr {
98 struct sockaddr_in sin;
99 struct sockaddr_in6 sin6;
100 struct sockaddr sa;
101};
102
6681712d 103struct vxlan_rdst {
e4c7ed41 104 union vxlan_addr remote_ip;
6681712d
DS
105 __be16 remote_port;
106 u32 remote_vni;
107 u32 remote_ifindex;
3e61aa8f 108 struct list_head list;
bc7892ba 109 struct rcu_head rcu;
6681712d
DS
110};
111
d342894c 112/* Forwarding table entry */
113struct vxlan_fdb {
114 struct hlist_node hlist; /* linked list of entries */
115 struct rcu_head rcu;
116 unsigned long updated; /* jiffies */
117 unsigned long used;
3e61aa8f 118 struct list_head remotes;
d342894c 119 u16 state; /* see ndm_state */
ae884082 120 u8 flags; /* see ndm_flags */
d342894c 121 u8 eth_addr[ETH_ALEN];
122};
123
d342894c 124/* Pseudo network device */
125struct vxlan_dev {
553675fb 126 struct hlist_node hlist; /* vni hash table */
127 struct list_head next; /* vxlan's per namespace list */
128 struct vxlan_sock *vn_sock; /* listening socket */
d342894c 129 struct net_device *dev;
c7995c43 130 struct vxlan_rdst default_dst; /* default destination */
e4c7ed41 131 union vxlan_addr saddr; /* source address */
823aa873 132 __be16 dst_port;
05f47d69 133 __u16 port_min; /* source port range */
134 __u16 port_max;
d342894c 135 __u8 tos; /* TOS override */
136 __u8 ttl;
e4f67add 137 u32 flags; /* VXLAN_F_* below */
d342894c 138
1c51a915 139 struct work_struct sock_work;
3fc2de2f 140 struct work_struct igmp_join;
141 struct work_struct igmp_leave;
1c51a915 142
d342894c 143 unsigned long age_interval;
144 struct timer_list age_timer;
145 spinlock_t hash_lock;
146 unsigned int addrcnt;
147 unsigned int addrmax;
d342894c 148
149 struct hlist_head fdb_head[FDB_HASH_SIZE];
150};
151
e4f67add
DS
152#define VXLAN_F_LEARN 0x01
153#define VXLAN_F_PROXY 0x02
154#define VXLAN_F_RSC 0x04
155#define VXLAN_F_L2MISS 0x08
156#define VXLAN_F_L3MISS 0x10
e4c7ed41 157#define VXLAN_F_IPV6 0x20 /* internal flag */
e4f67add 158
d342894c 159/* salt for hash table */
160static u32 vxlan_salt __read_mostly;
758c57d1 161static struct workqueue_struct *vxlan_wq;
d342894c 162
1c51a915
SH
163static void vxlan_sock_work(struct work_struct *work);
164
e4c7ed41
CW
165#if IS_ENABLED(CONFIG_IPV6)
166static inline
167bool vxlan_addr_equal(const union vxlan_addr *a, const union vxlan_addr *b)
168{
169 if (a->sa.sa_family != b->sa.sa_family)
170 return false;
171 if (a->sa.sa_family == AF_INET6)
172 return ipv6_addr_equal(&a->sin6.sin6_addr, &b->sin6.sin6_addr);
173 else
174 return a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr;
175}
176
177static inline bool vxlan_addr_any(const union vxlan_addr *ipa)
178{
179 if (ipa->sa.sa_family == AF_INET6)
180 return ipv6_addr_any(&ipa->sin6.sin6_addr);
181 else
182 return ipa->sin.sin_addr.s_addr == htonl(INADDR_ANY);
183}
184
185static inline bool vxlan_addr_multicast(const union vxlan_addr *ipa)
186{
187 if (ipa->sa.sa_family == AF_INET6)
188 return ipv6_addr_is_multicast(&ipa->sin6.sin6_addr);
189 else
190 return IN_MULTICAST(ntohl(ipa->sin.sin_addr.s_addr));
191}
192
193static int vxlan_nla_get_addr(union vxlan_addr *ip, struct nlattr *nla)
194{
195 if (nla_len(nla) >= sizeof(struct in6_addr)) {
196 nla_memcpy(&ip->sin6.sin6_addr, nla, sizeof(struct in6_addr));
197 ip->sa.sa_family = AF_INET6;
198 return 0;
199 } else if (nla_len(nla) >= sizeof(__be32)) {
200 ip->sin.sin_addr.s_addr = nla_get_be32(nla);
201 ip->sa.sa_family = AF_INET;
202 return 0;
203 } else {
204 return -EAFNOSUPPORT;
205 }
206}
207
208static int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
209 const union vxlan_addr *ip)
210{
211 if (ip->sa.sa_family == AF_INET6)
212 return nla_put(skb, attr, sizeof(struct in6_addr), &ip->sin6.sin6_addr);
213 else
214 return nla_put_be32(skb, attr, ip->sin.sin_addr.s_addr);
215}
216
217#else /* !CONFIG_IPV6 */
218
219static inline
220bool vxlan_addr_equal(const union vxlan_addr *a, const union vxlan_addr *b)
221{
222 return a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr;
223}
224
225static inline bool vxlan_addr_any(const union vxlan_addr *ipa)
226{
227 return ipa->sin.sin_addr.s_addr == htonl(INADDR_ANY);
228}
229
230static inline bool vxlan_addr_multicast(const union vxlan_addr *ipa)
231{
232 return IN_MULTICAST(ntohl(ipa->sin.sin_addr.s_addr));
233}
234
235static int vxlan_nla_get_addr(union vxlan_addr *ip, struct nlattr *nla)
236{
237 if (nla_len(nla) >= sizeof(struct in6_addr)) {
238 return -EAFNOSUPPORT;
239 } else if (nla_len(nla) >= sizeof(__be32)) {
240 ip->sin.sin_addr.s_addr = nla_get_be32(nla);
241 ip->sa.sa_family = AF_INET;
242 return 0;
243 } else {
244 return -EAFNOSUPPORT;
245 }
246}
247
248static int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
249 const union vxlan_addr *ip)
250{
251 return nla_put_be32(skb, attr, ip->sin.sin_addr.s_addr);
252}
253#endif
254
553675fb 255/* Virtual Network hash table head */
256static inline struct hlist_head *vni_head(struct vxlan_sock *vs, u32 id)
257{
258 return &vs->vni_list[hash_32(id, VNI_HASH_BITS)];
259}
260
261/* Socket hash table head */
262static inline struct hlist_head *vs_head(struct net *net, __be16 port)
d342894c 263{
264 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
265
553675fb 266 return &vn->sock_list[hash_32(ntohs(port), PORT_HASH_BITS)];
267}
268
3e61aa8f
SH
269/* First remote destination for a forwarding entry.
270 * Guaranteed to be non-NULL because remotes are never deleted.
271 */
5ca5461c 272static inline struct vxlan_rdst *first_remote_rcu(struct vxlan_fdb *fdb)
3e61aa8f 273{
5ca5461c 274 return list_entry_rcu(fdb->remotes.next, struct vxlan_rdst, list);
275}
276
277static inline struct vxlan_rdst *first_remote_rtnl(struct vxlan_fdb *fdb)
278{
279 return list_first_entry(&fdb->remotes, struct vxlan_rdst, list);
3e61aa8f
SH
280}
281
553675fb 282/* Find VXLAN socket based on network namespace and UDP port */
9c2e24e1 283static struct vxlan_sock *vxlan_find_sock(struct net *net, __be16 port)
553675fb 284{
285 struct vxlan_sock *vs;
286
287 hlist_for_each_entry_rcu(vs, vs_head(net, port), hlist) {
288 if (inet_sk(vs->sock->sk)->inet_sport == port)
289 return vs;
290 }
291 return NULL;
d342894c 292}
293
5cfccc5a 294static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, u32 id)
d342894c 295{
296 struct vxlan_dev *vxlan;
d342894c 297
553675fb 298 hlist_for_each_entry_rcu(vxlan, vni_head(vs, id), hlist) {
c7995c43 299 if (vxlan->default_dst.remote_vni == id)
d342894c 300 return vxlan;
301 }
302
303 return NULL;
304}
305
5cfccc5a
PS
306/* Look up VNI in a per net namespace table */
307static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id, __be16 port)
308{
309 struct vxlan_sock *vs;
310
311 vs = vxlan_find_sock(net, port);
312 if (!vs)
313 return NULL;
314
315 return vxlan_vs_find_vni(vs, id);
316}
317
d342894c 318/* Fill in neighbour message in skbuff. */
319static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan,
234f5b73
SH
320 const struct vxlan_fdb *fdb,
321 u32 portid, u32 seq, int type, unsigned int flags,
322 const struct vxlan_rdst *rdst)
d342894c 323{
324 unsigned long now = jiffies;
325 struct nda_cacheinfo ci;
326 struct nlmsghdr *nlh;
327 struct ndmsg *ndm;
e4f67add 328 bool send_ip, send_eth;
d342894c 329
330 nlh = nlmsg_put(skb, portid, seq, type, sizeof(*ndm), flags);
331 if (nlh == NULL)
332 return -EMSGSIZE;
333
334 ndm = nlmsg_data(nlh);
335 memset(ndm, 0, sizeof(*ndm));
e4f67add
DS
336
337 send_eth = send_ip = true;
338
339 if (type == RTM_GETNEIGH) {
340 ndm->ndm_family = AF_INET;
e4c7ed41 341 send_ip = !vxlan_addr_any(&rdst->remote_ip);
e4f67add
DS
342 send_eth = !is_zero_ether_addr(fdb->eth_addr);
343 } else
344 ndm->ndm_family = AF_BRIDGE;
d342894c 345 ndm->ndm_state = fdb->state;
346 ndm->ndm_ifindex = vxlan->dev->ifindex;
ae884082 347 ndm->ndm_flags = fdb->flags;
d342894c 348 ndm->ndm_type = NDA_DST;
349
e4f67add 350 if (send_eth && nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->eth_addr))
d342894c 351 goto nla_put_failure;
352
e4c7ed41 353 if (send_ip && vxlan_nla_put_addr(skb, NDA_DST, &rdst->remote_ip))
6681712d
DS
354 goto nla_put_failure;
355
823aa873 356 if (rdst->remote_port && rdst->remote_port != vxlan->dst_port &&
6681712d
DS
357 nla_put_be16(skb, NDA_PORT, rdst->remote_port))
358 goto nla_put_failure;
c7995c43 359 if (rdst->remote_vni != vxlan->default_dst.remote_vni &&
60d9d4c6 360 nla_put_u32(skb, NDA_VNI, rdst->remote_vni))
6681712d
DS
361 goto nla_put_failure;
362 if (rdst->remote_ifindex &&
363 nla_put_u32(skb, NDA_IFINDEX, rdst->remote_ifindex))
d342894c 364 goto nla_put_failure;
365
366 ci.ndm_used = jiffies_to_clock_t(now - fdb->used);
367 ci.ndm_confirmed = 0;
368 ci.ndm_updated = jiffies_to_clock_t(now - fdb->updated);
369 ci.ndm_refcnt = 0;
370
371 if (nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
372 goto nla_put_failure;
373
374 return nlmsg_end(skb, nlh);
375
376nla_put_failure:
377 nlmsg_cancel(skb, nlh);
378 return -EMSGSIZE;
379}
380
381static inline size_t vxlan_nlmsg_size(void)
382{
383 return NLMSG_ALIGN(sizeof(struct ndmsg))
384 + nla_total_size(ETH_ALEN) /* NDA_LLADDR */
e4c7ed41 385 + nla_total_size(sizeof(struct in6_addr)) /* NDA_DST */
73cf3317 386 + nla_total_size(sizeof(__be16)) /* NDA_PORT */
6681712d
DS
387 + nla_total_size(sizeof(__be32)) /* NDA_VNI */
388 + nla_total_size(sizeof(__u32)) /* NDA_IFINDEX */
d342894c 389 + nla_total_size(sizeof(struct nda_cacheinfo));
390}
391
392static void vxlan_fdb_notify(struct vxlan_dev *vxlan,
3e61aa8f 393 struct vxlan_fdb *fdb, int type)
d342894c 394{
395 struct net *net = dev_net(vxlan->dev);
396 struct sk_buff *skb;
397 int err = -ENOBUFS;
398
399 skb = nlmsg_new(vxlan_nlmsg_size(), GFP_ATOMIC);
400 if (skb == NULL)
401 goto errout;
402
5ca5461c 403 err = vxlan_fdb_info(skb, vxlan, fdb, 0, 0, type, 0,
404 first_remote_rtnl(fdb));
d342894c 405 if (err < 0) {
406 /* -EMSGSIZE implies BUG in vxlan_nlmsg_size() */
407 WARN_ON(err == -EMSGSIZE);
408 kfree_skb(skb);
409 goto errout;
410 }
411
412 rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
413 return;
414errout:
415 if (err < 0)
416 rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
417}
418
e4c7ed41 419static void vxlan_ip_miss(struct net_device *dev, union vxlan_addr *ipa)
e4f67add
DS
420{
421 struct vxlan_dev *vxlan = netdev_priv(dev);
bb3fd687
SH
422 struct vxlan_fdb f = {
423 .state = NUD_STALE,
424 };
425 struct vxlan_rdst remote = {
e4c7ed41 426 .remote_ip = *ipa, /* goes to NDA_DST */
bb3fd687
SH
427 .remote_vni = VXLAN_N_VID,
428 };
3e61aa8f
SH
429
430 INIT_LIST_HEAD(&f.remotes);
431 list_add_rcu(&remote.list, &f.remotes);
e4f67add
DS
432
433 vxlan_fdb_notify(vxlan, &f, RTM_GETNEIGH);
434}
435
436static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN])
437{
bb3fd687
SH
438 struct vxlan_fdb f = {
439 .state = NUD_STALE,
440 };
e4f67add 441
3e61aa8f 442 INIT_LIST_HEAD(&f.remotes);
e4f67add
DS
443 memcpy(f.eth_addr, eth_addr, ETH_ALEN);
444
445 vxlan_fdb_notify(vxlan, &f, RTM_GETNEIGH);
446}
447
d342894c 448/* Hash Ethernet address */
449static u32 eth_hash(const unsigned char *addr)
450{
451 u64 value = get_unaligned((u64 *)addr);
452
453 /* only want 6 bytes */
454#ifdef __BIG_ENDIAN
d342894c 455 value >>= 16;
321fb991 456#else
457 value <<= 16;
d342894c 458#endif
459 return hash_64(value, FDB_HASH_BITS);
460}
461
462/* Hash chain to use given mac address */
463static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan,
464 const u8 *mac)
465{
466 return &vxlan->fdb_head[eth_hash(mac)];
467}
468
469/* Look up Ethernet address in forwarding table */
014be2c8 470static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan,
d342894c 471 const u8 *mac)
472
473{
474 struct hlist_head *head = vxlan_fdb_head(vxlan, mac);
475 struct vxlan_fdb *f;
d342894c 476
b67bfe0d 477 hlist_for_each_entry_rcu(f, head, hlist) {
7367d0b5 478 if (ether_addr_equal(mac, f->eth_addr))
d342894c 479 return f;
480 }
481
482 return NULL;
483}
484
014be2c8
SS
485static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
486 const u8 *mac)
487{
488 struct vxlan_fdb *f;
489
490 f = __vxlan_find_mac(vxlan, mac);
491 if (f)
492 f->used = jiffies;
493
494 return f;
495}
496
a5e7c10a
MR
497/* caller should hold vxlan->hash_lock */
498static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f,
e4c7ed41 499 union vxlan_addr *ip, __be16 port,
a5e7c10a 500 __u32 vni, __u32 ifindex)
6681712d 501{
3e61aa8f 502 struct vxlan_rdst *rd;
6681712d 503
3e61aa8f 504 list_for_each_entry(rd, &f->remotes, list) {
e4c7ed41 505 if (vxlan_addr_equal(&rd->remote_ip, ip) &&
6681712d
DS
506 rd->remote_port == port &&
507 rd->remote_vni == vni &&
508 rd->remote_ifindex == ifindex)
a5e7c10a 509 return rd;
6681712d 510 }
3e61aa8f 511
a5e7c10a
MR
512 return NULL;
513}
514
906dc186
TR
515/* Replace destination of unicast mac */
516static int vxlan_fdb_replace(struct vxlan_fdb *f,
e4c7ed41 517 union vxlan_addr *ip, __be16 port, __u32 vni, __u32 ifindex)
906dc186
TR
518{
519 struct vxlan_rdst *rd;
520
521 rd = vxlan_fdb_find_rdst(f, ip, port, vni, ifindex);
522 if (rd)
523 return 0;
524
525 rd = list_first_entry_or_null(&f->remotes, struct vxlan_rdst, list);
526 if (!rd)
527 return 0;
e4c7ed41 528 rd->remote_ip = *ip;
906dc186
TR
529 rd->remote_port = port;
530 rd->remote_vni = vni;
531 rd->remote_ifindex = ifindex;
532 return 1;
533}
534
a5e7c10a
MR
535/* Add/update destinations for multicast */
536static int vxlan_fdb_append(struct vxlan_fdb *f,
e4c7ed41 537 union vxlan_addr *ip, __be16 port, __u32 vni, __u32 ifindex)
a5e7c10a
MR
538{
539 struct vxlan_rdst *rd;
540
541 rd = vxlan_fdb_find_rdst(f, ip, port, vni, ifindex);
542 if (rd)
543 return 0;
544
6681712d
DS
545 rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
546 if (rd == NULL)
547 return -ENOBUFS;
e4c7ed41 548 rd->remote_ip = *ip;
6681712d
DS
549 rd->remote_port = port;
550 rd->remote_vni = vni;
551 rd->remote_ifindex = ifindex;
3e61aa8f
SH
552
553 list_add_tail_rcu(&rd->list, &f->remotes);
554
6681712d
DS
555 return 1;
556}
557
dc01e7d3
OG
558static struct sk_buff **vxlan_gro_receive(struct sk_buff **head, struct sk_buff *skb)
559{
560 struct sk_buff *p, **pp = NULL;
561 struct vxlanhdr *vh, *vh2;
562 struct ethhdr *eh, *eh2;
563 unsigned int hlen, off_vx, off_eth;
564 const struct packet_offload *ptype;
565 __be16 type;
566 int flush = 1;
567
568 off_vx = skb_gro_offset(skb);
569 hlen = off_vx + sizeof(*vh);
570 vh = skb_gro_header_fast(skb, off_vx);
571 if (skb_gro_header_hard(skb, hlen)) {
572 vh = skb_gro_header_slow(skb, hlen, off_vx);
573 if (unlikely(!vh))
574 goto out;
575 }
576 skb_gro_pull(skb, sizeof(struct vxlanhdr)); /* pull vxlan header */
577
578 off_eth = skb_gro_offset(skb);
579 hlen = off_eth + sizeof(*eh);
580 eh = skb_gro_header_fast(skb, off_eth);
581 if (skb_gro_header_hard(skb, hlen)) {
582 eh = skb_gro_header_slow(skb, hlen, off_eth);
583 if (unlikely(!eh))
584 goto out;
585 }
586
587 flush = 0;
588
589 for (p = *head; p; p = p->next) {
590 if (!NAPI_GRO_CB(p)->same_flow)
591 continue;
592
593 vh2 = (struct vxlanhdr *)(p->data + off_vx);
594 eh2 = (struct ethhdr *)(p->data + off_eth);
595 if (vh->vx_vni != vh2->vx_vni || compare_ether_header(eh, eh2)) {
596 NAPI_GRO_CB(p)->same_flow = 0;
597 continue;
598 }
599 goto found;
600 }
601
602found:
603 type = eh->h_proto;
604
605 rcu_read_lock();
606 ptype = gro_find_receive_by_type(type);
607 if (ptype == NULL) {
608 flush = 1;
609 goto out_unlock;
610 }
611
612 skb_gro_pull(skb, sizeof(*eh)); /* pull inner eth header */
613 pp = ptype->callbacks.gro_receive(head, skb);
614
615out_unlock:
616 rcu_read_unlock();
617out:
618 NAPI_GRO_CB(skb)->flush |= flush;
619
620 return pp;
621}
622
623static int vxlan_gro_complete(struct sk_buff *skb, int nhoff)
624{
625 struct ethhdr *eh;
626 struct packet_offload *ptype;
627 __be16 type;
628 int vxlan_len = sizeof(struct vxlanhdr) + sizeof(struct ethhdr);
629 int err = -ENOSYS;
630
631 eh = (struct ethhdr *)(skb->data + nhoff + sizeof(struct vxlanhdr));
632 type = eh->h_proto;
633
634 rcu_read_lock();
635 ptype = gro_find_complete_by_type(type);
636 if (ptype != NULL)
637 err = ptype->callbacks.gro_complete(skb, nhoff + vxlan_len);
638
639 rcu_read_unlock();
640 return err;
641}
642
53cf5275 643/* Notify netdevs that UDP port started listening */
dc01e7d3 644static void vxlan_notify_add_rx_port(struct vxlan_sock *vs)
53cf5275
JG
645{
646 struct net_device *dev;
dc01e7d3 647 struct sock *sk = vs->sock->sk;
53cf5275
JG
648 struct net *net = sock_net(sk);
649 sa_family_t sa_family = sk->sk_family;
35e42379 650 __be16 port = inet_sk(sk)->inet_sport;
dc01e7d3
OG
651 int err;
652
653 if (sa_family == AF_INET) {
654 err = udp_add_offload(&vs->udp_offloads);
655 if (err)
656 pr_warn("vxlan: udp_add_offload failed with status %d\n", err);
657 }
53cf5275
JG
658
659 rcu_read_lock();
660 for_each_netdev_rcu(net, dev) {
661 if (dev->netdev_ops->ndo_add_vxlan_port)
662 dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family,
663 port);
664 }
665 rcu_read_unlock();
666}
667
668/* Notify netdevs that UDP port is no more listening */
dc01e7d3 669static void vxlan_notify_del_rx_port(struct vxlan_sock *vs)
53cf5275
JG
670{
671 struct net_device *dev;
dc01e7d3 672 struct sock *sk = vs->sock->sk;
53cf5275
JG
673 struct net *net = sock_net(sk);
674 sa_family_t sa_family = sk->sk_family;
35e42379 675 __be16 port = inet_sk(sk)->inet_sport;
53cf5275
JG
676
677 rcu_read_lock();
678 for_each_netdev_rcu(net, dev) {
679 if (dev->netdev_ops->ndo_del_vxlan_port)
680 dev->netdev_ops->ndo_del_vxlan_port(dev, sa_family,
681 port);
682 }
683 rcu_read_unlock();
dc01e7d3
OG
684
685 if (sa_family == AF_INET)
686 udp_del_offload(&vs->udp_offloads);
53cf5275
JG
687}
688
d342894c 689/* Add new entry to forwarding table -- assumes lock held */
690static int vxlan_fdb_create(struct vxlan_dev *vxlan,
e4c7ed41 691 const u8 *mac, union vxlan_addr *ip,
6681712d 692 __u16 state, __u16 flags,
73cf3317 693 __be16 port, __u32 vni, __u32 ifindex,
ae884082 694 __u8 ndm_flags)
d342894c 695{
696 struct vxlan_fdb *f;
697 int notify = 0;
698
014be2c8 699 f = __vxlan_find_mac(vxlan, mac);
d342894c 700 if (f) {
701 if (flags & NLM_F_EXCL) {
702 netdev_dbg(vxlan->dev,
703 "lost race to create %pM\n", mac);
704 return -EEXIST;
705 }
706 if (f->state != state) {
707 f->state = state;
708 f->updated = jiffies;
709 notify = 1;
710 }
ae884082
DS
711 if (f->flags != ndm_flags) {
712 f->flags = ndm_flags;
713 f->updated = jiffies;
714 notify = 1;
715 }
906dc186
TR
716 if ((flags & NLM_F_REPLACE)) {
717 /* Only change unicasts */
718 if (!(is_multicast_ether_addr(f->eth_addr) ||
719 is_zero_ether_addr(f->eth_addr))) {
720 int rc = vxlan_fdb_replace(f, ip, port, vni,
721 ifindex);
722
723 if (rc < 0)
724 return rc;
725 notify |= rc;
726 } else
727 return -EOPNOTSUPP;
728 }
6681712d 729 if ((flags & NLM_F_APPEND) &&
58e4c767
MR
730 (is_multicast_ether_addr(f->eth_addr) ||
731 is_zero_ether_addr(f->eth_addr))) {
6681712d
DS
732 int rc = vxlan_fdb_append(f, ip, port, vni, ifindex);
733
734 if (rc < 0)
735 return rc;
736 notify |= rc;
737 }
d342894c 738 } else {
739 if (!(flags & NLM_F_CREATE))
740 return -ENOENT;
741
742 if (vxlan->addrmax && vxlan->addrcnt >= vxlan->addrmax)
743 return -ENOSPC;
744
906dc186
TR
745 /* Disallow replace to add a multicast entry */
746 if ((flags & NLM_F_REPLACE) &&
747 (is_multicast_ether_addr(mac) || is_zero_ether_addr(mac)))
748 return -EOPNOTSUPP;
749
e4c7ed41 750 netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip);
d342894c 751 f = kmalloc(sizeof(*f), GFP_ATOMIC);
752 if (!f)
753 return -ENOMEM;
754
755 notify = 1;
d342894c 756 f->state = state;
ae884082 757 f->flags = ndm_flags;
d342894c 758 f->updated = f->used = jiffies;
3e61aa8f 759 INIT_LIST_HEAD(&f->remotes);
d342894c 760 memcpy(f->eth_addr, mac, ETH_ALEN);
761
3e61aa8f
SH
762 vxlan_fdb_append(f, ip, port, vni, ifindex);
763
d342894c 764 ++vxlan->addrcnt;
765 hlist_add_head_rcu(&f->hlist,
766 vxlan_fdb_head(vxlan, mac));
767 }
768
769 if (notify)
770 vxlan_fdb_notify(vxlan, f, RTM_NEWNEIGH);
771
772 return 0;
773}
774
6706c82e 775static void vxlan_fdb_free(struct rcu_head *head)
6681712d
DS
776{
777 struct vxlan_fdb *f = container_of(head, struct vxlan_fdb, rcu);
3e61aa8f 778 struct vxlan_rdst *rd, *nd;
6681712d 779
3e61aa8f 780 list_for_each_entry_safe(rd, nd, &f->remotes, list)
6681712d 781 kfree(rd);
6681712d
DS
782 kfree(f);
783}
784
d342894c 785static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f)
786{
787 netdev_dbg(vxlan->dev,
788 "delete %pM\n", f->eth_addr);
789
790 --vxlan->addrcnt;
791 vxlan_fdb_notify(vxlan, f, RTM_DELNEIGH);
792
793 hlist_del_rcu(&f->hlist);
6681712d 794 call_rcu(&f->rcu, vxlan_fdb_free);
d342894c 795}
796
f0b074be 797static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan,
e4c7ed41 798 union vxlan_addr *ip, __be16 *port, u32 *vni, u32 *ifindex)
d342894c 799{
6681712d 800 struct net *net = dev_net(vxlan->dev);
e4c7ed41 801 int err;
d342894c 802
f0b074be 803 if (tb[NDA_DST]) {
e4c7ed41
CW
804 err = vxlan_nla_get_addr(ip, tb[NDA_DST]);
805 if (err)
806 return err;
f0b074be 807 } else {
e4c7ed41
CW
808 union vxlan_addr *remote = &vxlan->default_dst.remote_ip;
809 if (remote->sa.sa_family == AF_INET) {
810 ip->sin.sin_addr.s_addr = htonl(INADDR_ANY);
811 ip->sa.sa_family = AF_INET;
812#if IS_ENABLED(CONFIG_IPV6)
813 } else {
814 ip->sin6.sin6_addr = in6addr_any;
815 ip->sa.sa_family = AF_INET6;
816#endif
817 }
f0b074be 818 }
d342894c 819
6681712d 820 if (tb[NDA_PORT]) {
73cf3317 821 if (nla_len(tb[NDA_PORT]) != sizeof(__be16))
6681712d 822 return -EINVAL;
f0b074be
MR
823 *port = nla_get_be16(tb[NDA_PORT]);
824 } else {
825 *port = vxlan->dst_port;
826 }
6681712d
DS
827
828 if (tb[NDA_VNI]) {
829 if (nla_len(tb[NDA_VNI]) != sizeof(u32))
830 return -EINVAL;
f0b074be
MR
831 *vni = nla_get_u32(tb[NDA_VNI]);
832 } else {
833 *vni = vxlan->default_dst.remote_vni;
834 }
6681712d
DS
835
836 if (tb[NDA_IFINDEX]) {
5abb0029 837 struct net_device *tdev;
6681712d
DS
838
839 if (nla_len(tb[NDA_IFINDEX]) != sizeof(u32))
840 return -EINVAL;
f0b074be 841 *ifindex = nla_get_u32(tb[NDA_IFINDEX]);
73763949 842 tdev = __dev_get_by_index(net, *ifindex);
5abb0029 843 if (!tdev)
6681712d 844 return -EADDRNOTAVAIL;
f0b074be
MR
845 } else {
846 *ifindex = 0;
847 }
848
849 return 0;
850}
851
852/* Add static entry (via netlink) */
853static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
854 struct net_device *dev,
855 const unsigned char *addr, u16 flags)
856{
857 struct vxlan_dev *vxlan = netdev_priv(dev);
858 /* struct net *net = dev_net(vxlan->dev); */
e4c7ed41 859 union vxlan_addr ip;
f0b074be
MR
860 __be16 port;
861 u32 vni, ifindex;
862 int err;
863
864 if (!(ndm->ndm_state & (NUD_PERMANENT|NUD_REACHABLE))) {
865 pr_info("RTM_NEWNEIGH with invalid state %#x\n",
866 ndm->ndm_state);
867 return -EINVAL;
868 }
869
870 if (tb[NDA_DST] == NULL)
871 return -EINVAL;
872
873 err = vxlan_fdb_parse(tb, vxlan, &ip, &port, &vni, &ifindex);
874 if (err)
875 return err;
6681712d 876
d342894c 877 spin_lock_bh(&vxlan->hash_lock);
e4c7ed41 878 err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags,
73cf3317 879 port, vni, ifindex, ndm->ndm_flags);
d342894c 880 spin_unlock_bh(&vxlan->hash_lock);
881
882 return err;
883}
884
885/* Delete entry (via netlink) */
1690be63
VY
886static int vxlan_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
887 struct net_device *dev,
d342894c 888 const unsigned char *addr)
889{
890 struct vxlan_dev *vxlan = netdev_priv(dev);
891 struct vxlan_fdb *f;
bc7892ba 892 struct vxlan_rdst *rd = NULL;
e4c7ed41 893 union vxlan_addr ip;
bc7892ba
MR
894 __be16 port;
895 u32 vni, ifindex;
896 int err;
897
898 err = vxlan_fdb_parse(tb, vxlan, &ip, &port, &vni, &ifindex);
899 if (err)
900 return err;
901
902 err = -ENOENT;
d342894c 903
904 spin_lock_bh(&vxlan->hash_lock);
905 f = vxlan_find_mac(vxlan, addr);
bc7892ba
MR
906 if (!f)
907 goto out;
908
e4c7ed41
CW
909 if (!vxlan_addr_any(&ip)) {
910 rd = vxlan_fdb_find_rdst(f, &ip, port, vni, ifindex);
bc7892ba
MR
911 if (!rd)
912 goto out;
913 }
914
915 err = 0;
916
917 /* remove a destination if it's not the only one on the list,
918 * otherwise destroy the fdb entry
919 */
920 if (rd && !list_is_singular(&f->remotes)) {
921 list_del_rcu(&rd->list);
dcdc7a59 922 kfree_rcu(rd, rcu);
bc7892ba 923 goto out;
d342894c 924 }
bc7892ba
MR
925
926 vxlan_fdb_destroy(vxlan, f);
927
928out:
d342894c 929 spin_unlock_bh(&vxlan->hash_lock);
930
931 return err;
932}
933
934/* Dump forwarding table */
935static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
936 struct net_device *dev, int idx)
937{
938 struct vxlan_dev *vxlan = netdev_priv(dev);
939 unsigned int h;
940
941 for (h = 0; h < FDB_HASH_SIZE; ++h) {
942 struct vxlan_fdb *f;
d342894c 943 int err;
944
b67bfe0d 945 hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) {
6681712d 946 struct vxlan_rdst *rd;
6681712d 947
3e61aa8f
SH
948 if (idx < cb->args[0])
949 goto skip;
950
951 list_for_each_entry_rcu(rd, &f->remotes, list) {
6681712d
DS
952 err = vxlan_fdb_info(skb, vxlan, f,
953 NETLINK_CB(cb->skb).portid,
954 cb->nlh->nlmsg_seq,
955 RTM_NEWNEIGH,
956 NLM_F_MULTI, rd);
957 if (err < 0)
3e61aa8f 958 goto out;
6681712d 959 }
3e61aa8f
SH
960skip:
961 ++idx;
d342894c 962 }
963 }
3e61aa8f 964out:
d342894c 965 return idx;
966}
967
968/* Watch incoming packets to learn mapping between Ethernet address
969 * and Tunnel endpoint.
26a41ae6 970 * Return true if packet is bogus and should be droppped.
d342894c 971 */
26a41ae6 972static bool vxlan_snoop(struct net_device *dev,
e4c7ed41 973 union vxlan_addr *src_ip, const u8 *src_mac)
d342894c 974{
975 struct vxlan_dev *vxlan = netdev_priv(dev);
976 struct vxlan_fdb *f;
d342894c 977
978 f = vxlan_find_mac(vxlan, src_mac);
979 if (likely(f)) {
5ca5461c 980 struct vxlan_rdst *rdst = first_remote_rcu(f);
3e61aa8f 981
e4c7ed41 982 if (likely(vxlan_addr_equal(&rdst->remote_ip, src_ip)))
26a41ae6 983 return false;
984
985 /* Don't migrate static entries, drop packets */
eb064c3b 986 if (f->state & NUD_NOARP)
26a41ae6 987 return true;
d342894c 988
989 if (net_ratelimit())
990 netdev_info(dev,
e4c7ed41 991 "%pM migrated from %pIS to %pIS\n",
3e61aa8f 992 src_mac, &rdst->remote_ip, &src_ip);
d342894c 993
e4c7ed41 994 rdst->remote_ip = *src_ip;
d342894c 995 f->updated = jiffies;
8385f50a 996 vxlan_fdb_notify(vxlan, f, RTM_NEWNEIGH);
d342894c 997 } else {
998 /* learned new entry */
999 spin_lock(&vxlan->hash_lock);
3bf74b1a 1000
1001 /* close off race between vxlan_flush and incoming packets */
1002 if (netif_running(dev))
1003 vxlan_fdb_create(vxlan, src_mac, src_ip,
1004 NUD_REACHABLE,
1005 NLM_F_EXCL|NLM_F_CREATE,
1006 vxlan->dst_port,
1007 vxlan->default_dst.remote_vni,
1008 0, NTF_SELF);
d342894c 1009 spin_unlock(&vxlan->hash_lock);
1010 }
26a41ae6 1011
1012 return false;
d342894c 1013}
1014
d342894c 1015/* See if multicast group is already in use by other ID */
95ab0991 1016static bool vxlan_group_used(struct vxlan_net *vn, struct vxlan_dev *dev)
d342894c 1017{
553675fb 1018 struct vxlan_dev *vxlan;
d342894c 1019
95ab0991
G
1020 /* The vxlan_sock is only used by dev, leaving group has
1021 * no effect on other vxlan devices.
1022 */
1023 if (atomic_read(&dev->vn_sock->refcnt) == 1)
1024 return false;
1025
553675fb 1026 list_for_each_entry(vxlan, &vn->vxlan_list, next) {
95ab0991 1027 if (!netif_running(vxlan->dev) || vxlan == dev)
553675fb 1028 continue;
d342894c 1029
95ab0991
G
1030 if (vxlan->vn_sock != dev->vn_sock)
1031 continue;
1032
1033 if (!vxlan_addr_equal(&vxlan->default_dst.remote_ip,
1034 &dev->default_dst.remote_ip))
1035 continue;
1036
1037 if (vxlan->default_dst.remote_ifindex !=
1038 dev->default_dst.remote_ifindex)
1039 continue;
1040
1041 return true;
553675fb 1042 }
d342894c 1043
1044 return false;
1045}
1046
7c47cedf 1047static void vxlan_sock_hold(struct vxlan_sock *vs)
d342894c 1048{
7c47cedf
SH
1049 atomic_inc(&vs->refcnt);
1050}
d342894c 1051
012a5729 1052void vxlan_sock_release(struct vxlan_sock *vs)
7c47cedf 1053{
53cf5275
JG
1054 struct sock *sk = vs->sock->sk;
1055 struct net *net = sock_net(sk);
1056 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
012a5729 1057
7c47cedf
SH
1058 if (!atomic_dec_and_test(&vs->refcnt))
1059 return;
d342894c 1060
1c51a915 1061 spin_lock(&vn->sock_lock);
7c47cedf 1062 hlist_del_rcu(&vs->hlist);
559835ea 1063 rcu_assign_sk_user_data(vs->sock->sk, NULL);
dc01e7d3 1064 vxlan_notify_del_rx_port(vs);
1c51a915
SH
1065 spin_unlock(&vn->sock_lock);
1066
7c47cedf 1067 queue_work(vxlan_wq, &vs->del_work);
d342894c 1068}
012a5729 1069EXPORT_SYMBOL_GPL(vxlan_sock_release);
d342894c 1070
3fc2de2f 1071/* Callback to update multicast group membership when first VNI on
1072 * multicast asddress is brought up
1073 * Done as workqueue because ip_mc_join_group acquires RTNL.
7c47cedf 1074 */
3fc2de2f 1075static void vxlan_igmp_join(struct work_struct *work)
d342894c 1076{
3fc2de2f 1077 struct vxlan_dev *vxlan = container_of(work, struct vxlan_dev, igmp_join);
7c47cedf
SH
1078 struct vxlan_sock *vs = vxlan->vn_sock;
1079 struct sock *sk = vs->sock->sk;
e4c7ed41
CW
1080 union vxlan_addr *ip = &vxlan->default_dst.remote_ip;
1081 int ifindex = vxlan->default_dst.remote_ifindex;
d342894c 1082
d342894c 1083 lock_sock(sk);
e4c7ed41
CW
1084 if (ip->sa.sa_family == AF_INET) {
1085 struct ip_mreqn mreq = {
1086 .imr_multiaddr.s_addr = ip->sin.sin_addr.s_addr,
1087 .imr_ifindex = ifindex,
1088 };
1089
1090 ip_mc_join_group(sk, &mreq);
1091#if IS_ENABLED(CONFIG_IPV6)
1092 } else {
1093 ipv6_stub->ipv6_sock_mc_join(sk, ifindex,
1094 &ip->sin6.sin6_addr);
1095#endif
1096 }
3fc2de2f 1097 release_sock(sk);
1098
012a5729 1099 vxlan_sock_release(vs);
3fc2de2f 1100 dev_put(vxlan->dev);
1101}
1102
1103/* Inverse of vxlan_igmp_join when last VNI is brought down */
1104static void vxlan_igmp_leave(struct work_struct *work)
1105{
1106 struct vxlan_dev *vxlan = container_of(work, struct vxlan_dev, igmp_leave);
3fc2de2f 1107 struct vxlan_sock *vs = vxlan->vn_sock;
1108 struct sock *sk = vs->sock->sk;
e4c7ed41
CW
1109 union vxlan_addr *ip = &vxlan->default_dst.remote_ip;
1110 int ifindex = vxlan->default_dst.remote_ifindex;
3fc2de2f 1111
1112 lock_sock(sk);
e4c7ed41
CW
1113 if (ip->sa.sa_family == AF_INET) {
1114 struct ip_mreqn mreq = {
1115 .imr_multiaddr.s_addr = ip->sin.sin_addr.s_addr,
1116 .imr_ifindex = ifindex,
1117 };
1118
1119 ip_mc_leave_group(sk, &mreq);
1120#if IS_ENABLED(CONFIG_IPV6)
1121 } else {
1122 ipv6_stub->ipv6_sock_mc_drop(sk, ifindex,
1123 &ip->sin6.sin6_addr);
1124#endif
1125 }
1126
d342894c 1127 release_sock(sk);
d342894c 1128
012a5729 1129 vxlan_sock_release(vs);
7c47cedf 1130 dev_put(vxlan->dev);
d342894c 1131}
1132
1133/* Callback from net/ipv4/udp.c to receive packets */
1134static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
1135{
5cfccc5a 1136 struct vxlan_sock *vs;
d342894c 1137 struct vxlanhdr *vxh;
553675fb 1138 __be16 port;
d342894c 1139
d342894c 1140 /* Need Vxlan and inner Ethernet header to be present */
7ce04758 1141 if (!pskb_may_pull(skb, VXLAN_HLEN))
d342894c 1142 goto error;
1143
7ce04758
PS
1144 /* Return packets with reserved bits set */
1145 vxh = (struct vxlanhdr *)(udp_hdr(skb) + 1);
d342894c 1146 if (vxh->vx_flags != htonl(VXLAN_FLAGS) ||
1147 (vxh->vx_vni & htonl(0xff))) {
1148 netdev_dbg(skb->dev, "invalid vxlan flags=%#x vni=%#x\n",
1149 ntohl(vxh->vx_flags), ntohl(vxh->vx_vni));
1150 goto error;
1151 }
1152
5cfccc5a
PS
1153 if (iptunnel_pull_header(skb, VXLAN_HLEN, htons(ETH_P_TEB)))
1154 goto drop;
1155
553675fb 1156 port = inet_sk(sk)->inet_sport;
5cfccc5a 1157
559835ea 1158 vs = rcu_dereference_sk_user_data(sk);
5cfccc5a 1159 if (!vs)
d342894c 1160 goto drop;
d342894c 1161
d0bc6555
OG
1162 /* If the NIC driver gave us an encapsulated packet
1163 * with the encapsulation mark, the device checksummed it
1164 * for us. Otherwise force the upper layers to verify it.
1165 */
1166 if ((skb->ip_summed != CHECKSUM_UNNECESSARY && skb->ip_summed != CHECKSUM_PARTIAL) ||
1167 !skb->encapsulation)
1168 skb->ip_summed = CHECKSUM_NONE;
1169
1170 skb->encapsulation = 0;
1171
5cfccc5a
PS
1172 vs->rcv(vs, skb, vxh->vx_vni);
1173 return 0;
1174
1175drop:
1176 /* Consume bad packet */
1177 kfree_skb(skb);
1178 return 0;
1179
1180error:
1181 /* Return non vxlan pkt */
1182 return 1;
1183}
1184
1185static void vxlan_rcv(struct vxlan_sock *vs,
1186 struct sk_buff *skb, __be32 vx_vni)
1187{
e4c7ed41
CW
1188 struct iphdr *oip = NULL;
1189 struct ipv6hdr *oip6 = NULL;
5cfccc5a 1190 struct vxlan_dev *vxlan;
8f84985f 1191 struct pcpu_sw_netstats *stats;
e4c7ed41 1192 union vxlan_addr saddr;
5cfccc5a 1193 __u32 vni;
e4c7ed41
CW
1194 int err = 0;
1195 union vxlan_addr *remote_ip;
5cfccc5a
PS
1196
1197 vni = ntohl(vx_vni) >> 8;
1198 /* Is this VNI defined? */
1199 vxlan = vxlan_vs_find_vni(vs, vni);
1200 if (!vxlan)
d342894c 1201 goto drop;
d342894c 1202
e4c7ed41 1203 remote_ip = &vxlan->default_dst.remote_ip;
e4f67add 1204 skb_reset_mac_header(skb);
d342894c 1205 skb->protocol = eth_type_trans(skb, vxlan->dev);
d342894c 1206
1207 /* Ignore packet loops (and multicast echo) */
7367d0b5 1208 if (ether_addr_equal(eth_hdr(skb)->h_source, vxlan->dev->dev_addr))
d342894c 1209 goto drop;
1210
7ce04758 1211 /* Re-examine inner Ethernet packet */
e4c7ed41
CW
1212 if (remote_ip->sa.sa_family == AF_INET) {
1213 oip = ip_hdr(skb);
1214 saddr.sin.sin_addr.s_addr = oip->saddr;
1215 saddr.sa.sa_family = AF_INET;
1216#if IS_ENABLED(CONFIG_IPV6)
1217 } else {
1218 oip6 = ipv6_hdr(skb);
1219 saddr.sin6.sin6_addr = oip6->saddr;
1220 saddr.sa.sa_family = AF_INET6;
1221#endif
1222 }
1223
26a41ae6 1224 if ((vxlan->flags & VXLAN_F_LEARN) &&
e4c7ed41 1225 vxlan_snoop(skb->dev, &saddr, eth_hdr(skb)->h_source))
26a41ae6 1226 goto drop;
d342894c 1227
d342894c 1228 skb_reset_network_header(skb);
0afb1666 1229
e4c7ed41
CW
1230 if (oip6)
1231 err = IP6_ECN_decapsulate(oip6, skb);
1232 if (oip)
1233 err = IP_ECN_decapsulate(oip, skb);
1234
d342894c 1235 if (unlikely(err)) {
e4c7ed41
CW
1236 if (log_ecn_error) {
1237 if (oip6)
1238 net_info_ratelimited("non-ECT from %pI6\n",
1239 &oip6->saddr);
1240 if (oip)
1241 net_info_ratelimited("non-ECT from %pI4 with TOS=%#x\n",
1242 &oip->saddr, oip->tos);
1243 }
d342894c 1244 if (err > 1) {
1245 ++vxlan->dev->stats.rx_frame_errors;
1246 ++vxlan->dev->stats.rx_errors;
1247 goto drop;
1248 }
1249 }
1250
e8171045 1251 stats = this_cpu_ptr(vxlan->dev->tstats);
d342894c 1252 u64_stats_update_begin(&stats->syncp);
1253 stats->rx_packets++;
1254 stats->rx_bytes += skb->len;
1255 u64_stats_update_end(&stats->syncp);
1256
1257 netif_rx(skb);
1258
5cfccc5a 1259 return;
d342894c 1260drop:
1261 /* Consume bad packet */
1262 kfree_skb(skb);
d342894c 1263}
1264
e4f67add
DS
1265static int arp_reduce(struct net_device *dev, struct sk_buff *skb)
1266{
1267 struct vxlan_dev *vxlan = netdev_priv(dev);
1268 struct arphdr *parp;
1269 u8 *arpptr, *sha;
1270 __be32 sip, tip;
1271 struct neighbour *n;
1272
1273 if (dev->flags & IFF_NOARP)
1274 goto out;
1275
1276 if (!pskb_may_pull(skb, arp_hdr_len(dev))) {
1277 dev->stats.tx_dropped++;
1278 goto out;
1279 }
1280 parp = arp_hdr(skb);
1281
1282 if ((parp->ar_hrd != htons(ARPHRD_ETHER) &&
1283 parp->ar_hrd != htons(ARPHRD_IEEE802)) ||
1284 parp->ar_pro != htons(ETH_P_IP) ||
1285 parp->ar_op != htons(ARPOP_REQUEST) ||
1286 parp->ar_hln != dev->addr_len ||
1287 parp->ar_pln != 4)
1288 goto out;
1289 arpptr = (u8 *)parp + sizeof(struct arphdr);
1290 sha = arpptr;
1291 arpptr += dev->addr_len; /* sha */
1292 memcpy(&sip, arpptr, sizeof(sip));
1293 arpptr += sizeof(sip);
1294 arpptr += dev->addr_len; /* tha */
1295 memcpy(&tip, arpptr, sizeof(tip));
1296
1297 if (ipv4_is_loopback(tip) ||
1298 ipv4_is_multicast(tip))
1299 goto out;
1300
1301 n = neigh_lookup(&arp_tbl, &tip, dev);
1302
1303 if (n) {
e4f67add
DS
1304 struct vxlan_fdb *f;
1305 struct sk_buff *reply;
1306
1307 if (!(n->nud_state & NUD_CONNECTED)) {
1308 neigh_release(n);
1309 goto out;
1310 }
1311
1312 f = vxlan_find_mac(vxlan, n->ha);
e4c7ed41 1313 if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) {
e4f67add
DS
1314 /* bridge-local neighbor */
1315 neigh_release(n);
1316 goto out;
1317 }
1318
1319 reply = arp_create(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
1320 n->ha, sha);
1321
1322 neigh_release(n);
1323
1324 skb_reset_mac_header(reply);
1325 __skb_pull(reply, skb_network_offset(reply));
1326 reply->ip_summed = CHECKSUM_UNNECESSARY;
1327 reply->pkt_type = PACKET_HOST;
1328
1329 if (netif_rx_ni(reply) == NET_RX_DROP)
1330 dev->stats.rx_dropped++;
e4c7ed41
CW
1331 } else if (vxlan->flags & VXLAN_F_L3MISS) {
1332 union vxlan_addr ipa = {
1333 .sin.sin_addr.s_addr = tip,
1334 .sa.sa_family = AF_INET,
1335 };
1336
1337 vxlan_ip_miss(dev, &ipa);
1338 }
e4f67add
DS
1339out:
1340 consume_skb(skb);
1341 return NETDEV_TX_OK;
1342}
1343
f564f45c
CW
1344#if IS_ENABLED(CONFIG_IPV6)
1345static int neigh_reduce(struct net_device *dev, struct sk_buff *skb)
1346{
1347 struct vxlan_dev *vxlan = netdev_priv(dev);
1348 struct neighbour *n;
1349 union vxlan_addr ipa;
1350 const struct ipv6hdr *iphdr;
1351 const struct in6_addr *saddr, *daddr;
1352 struct nd_msg *msg;
1353 struct inet6_dev *in6_dev = NULL;
1354
1355 in6_dev = __in6_dev_get(dev);
1356 if (!in6_dev)
1357 goto out;
1358
1359 if (!pskb_may_pull(skb, skb->len))
1360 goto out;
1361
1362 iphdr = ipv6_hdr(skb);
1363 saddr = &iphdr->saddr;
1364 daddr = &iphdr->daddr;
1365
1366 if (ipv6_addr_loopback(daddr) ||
1367 ipv6_addr_is_multicast(daddr))
1368 goto out;
1369
1370 msg = (struct nd_msg *)skb_transport_header(skb);
1371 if (msg->icmph.icmp6_code != 0 ||
1372 msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION)
1373 goto out;
1374
1375 n = neigh_lookup(ipv6_stub->nd_tbl, daddr, dev);
1376
1377 if (n) {
1378 struct vxlan_fdb *f;
1379
1380 if (!(n->nud_state & NUD_CONNECTED)) {
1381 neigh_release(n);
1382 goto out;
1383 }
1384
1385 f = vxlan_find_mac(vxlan, n->ha);
1386 if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) {
1387 /* bridge-local neighbor */
1388 neigh_release(n);
1389 goto out;
1390 }
1391
1392 ipv6_stub->ndisc_send_na(dev, n, saddr, &msg->target,
1393 !!in6_dev->cnf.forwarding,
1394 true, false, false);
1395 neigh_release(n);
1396 } else if (vxlan->flags & VXLAN_F_L3MISS) {
1397 ipa.sin6.sin6_addr = *daddr;
1398 ipa.sa.sa_family = AF_INET6;
1399 vxlan_ip_miss(dev, &ipa);
1400 }
1401
1402out:
1403 consume_skb(skb);
1404 return NETDEV_TX_OK;
1405}
1406#endif
1407
e4f67add
DS
1408static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
1409{
1410 struct vxlan_dev *vxlan = netdev_priv(dev);
1411 struct neighbour *n;
e4f67add
DS
1412
1413 if (is_multicast_ether_addr(eth_hdr(skb)->h_dest))
1414 return false;
1415
1416 n = NULL;
1417 switch (ntohs(eth_hdr(skb)->h_proto)) {
1418 case ETH_P_IP:
e15a00aa
CW
1419 {
1420 struct iphdr *pip;
1421
e4f67add
DS
1422 if (!pskb_may_pull(skb, sizeof(struct iphdr)))
1423 return false;
1424 pip = ip_hdr(skb);
1425 n = neigh_lookup(&arp_tbl, &pip->daddr, dev);
e4c7ed41
CW
1426 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
1427 union vxlan_addr ipa = {
1428 .sin.sin_addr.s_addr = pip->daddr,
1429 .sa.sa_family = AF_INET,
1430 };
1431
1432 vxlan_ip_miss(dev, &ipa);
1433 return false;
1434 }
1435
e4f67add 1436 break;
e15a00aa
CW
1437 }
1438#if IS_ENABLED(CONFIG_IPV6)
1439 case ETH_P_IPV6:
1440 {
1441 struct ipv6hdr *pip6;
1442
1443 if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
1444 return false;
1445 pip6 = ipv6_hdr(skb);
1446 n = neigh_lookup(ipv6_stub->nd_tbl, &pip6->daddr, dev);
1447 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
1448 union vxlan_addr ipa = {
1449 .sin6.sin6_addr = pip6->daddr,
1450 .sa.sa_family = AF_INET6,
1451 };
1452
1453 vxlan_ip_miss(dev, &ipa);
1454 return false;
1455 }
1456
1457 break;
1458 }
1459#endif
e4f67add
DS
1460 default:
1461 return false;
1462 }
1463
1464 if (n) {
1465 bool diff;
1466
7367d0b5 1467 diff = !ether_addr_equal(eth_hdr(skb)->h_dest, n->ha);
e4f67add
DS
1468 if (diff) {
1469 memcpy(eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest,
1470 dev->addr_len);
1471 memcpy(eth_hdr(skb)->h_dest, n->ha, dev->addr_len);
1472 }
1473 neigh_release(n);
1474 return diff;
e4c7ed41
CW
1475 }
1476
e4f67add
DS
1477 return false;
1478}
1479
05f47d69 1480/* Compute source port for outgoing packet
1481 * first choice to use L4 flow hash since it will spread
1482 * better and maybe available from hardware
1483 * secondary choice is to use jhash on the Ethernet header
1484 */
49560532 1485__be16 vxlan_src_port(__u16 port_min, __u16 port_max, struct sk_buff *skb)
05f47d69 1486{
49560532 1487 unsigned int range = (port_max - port_min) + 1;
05f47d69 1488 u32 hash;
1489
3958afa1 1490 hash = skb_get_hash(skb);
05f47d69 1491 if (!hash)
1492 hash = jhash(skb->data, 2 * ETH_ALEN,
1493 (__force u32) skb->protocol);
1494
49560532 1495 return htons((((u64) hash * range) >> 32) + port_min);
05f47d69 1496}
49560532 1497EXPORT_SYMBOL_GPL(vxlan_src_port);
05f47d69 1498
05c0db08
PS
1499static int handle_offloads(struct sk_buff *skb)
1500{
1501 if (skb_is_gso(skb)) {
1502 int err = skb_unclone(skb, GFP_ATOMIC);
1503 if (unlikely(err))
1504 return err;
1505
f6ace502 1506 skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
05c0db08
PS
1507 } else if (skb->ip_summed != CHECKSUM_PARTIAL)
1508 skb->ip_summed = CHECKSUM_NONE;
1509
1510 return 0;
1511}
1512
e4c7ed41 1513#if IS_ENABLED(CONFIG_IPV6)
11796187 1514static int vxlan6_xmit_skb(struct vxlan_sock *vs,
e4c7ed41
CW
1515 struct dst_entry *dst, struct sk_buff *skb,
1516 struct net_device *dev, struct in6_addr *saddr,
1517 struct in6_addr *daddr, __u8 prio, __u8 ttl,
1518 __be16 src_port, __be16 dst_port, __be32 vni)
1519{
1520 struct ipv6hdr *ip6h;
1521 struct vxlanhdr *vxh;
1522 struct udphdr *uh;
1523 int min_headroom;
1524 int err;
1525
1526 if (!skb->encapsulation) {
1527 skb_reset_inner_headers(skb);
1528 skb->encapsulation = 1;
1529 }
1530
963a88b3
ND
1531 skb_scrub_packet(skb, false);
1532
e4c7ed41
CW
1533 min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len
1534 + VXLAN_HLEN + sizeof(struct ipv6hdr)
1535 + (vlan_tx_tag_present(skb) ? VLAN_HLEN : 0);
1536
1537 /* Need space for new headers (invalidates iph ptr) */
1538 err = skb_cow_head(skb, min_headroom);
1539 if (unlikely(err))
1540 return err;
1541
1542 if (vlan_tx_tag_present(skb)) {
1543 if (WARN_ON(!__vlan_put_tag(skb,
1544 skb->vlan_proto,
1545 vlan_tx_tag_get(skb))))
1546 return -ENOMEM;
1547
1548 skb->vlan_tci = 0;
1549 }
1550
1551 vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh));
1552 vxh->vx_flags = htonl(VXLAN_FLAGS);
1553 vxh->vx_vni = vni;
1554
1555 __skb_push(skb, sizeof(*uh));
1556 skb_reset_transport_header(skb);
1557 uh = udp_hdr(skb);
1558
1559 uh->dest = dst_port;
1560 uh->source = src_port;
1561
1562 uh->len = htons(skb->len);
1563 uh->check = 0;
1564
1565 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1566 IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED |
1567 IPSKB_REROUTED);
e4c7ed41
CW
1568 skb_dst_set(skb, dst);
1569
1570 if (!skb_is_gso(skb) && !(dst->dev->features & NETIF_F_IPV6_CSUM)) {
1571 __wsum csum = skb_checksum(skb, 0, skb->len, 0);
1572 skb->ip_summed = CHECKSUM_UNNECESSARY;
1573 uh->check = csum_ipv6_magic(saddr, daddr, skb->len,
1574 IPPROTO_UDP, csum);
1575 if (uh->check == 0)
1576 uh->check = CSUM_MANGLED_0;
1577 } else {
1578 skb->ip_summed = CHECKSUM_PARTIAL;
1579 skb->csum_start = skb_transport_header(skb) - skb->head;
1580 skb->csum_offset = offsetof(struct udphdr, check);
1581 uh->check = ~csum_ipv6_magic(saddr, daddr,
1582 skb->len, IPPROTO_UDP, 0);
1583 }
1584
1585 __skb_push(skb, sizeof(*ip6h));
1586 skb_reset_network_header(skb);
1587 ip6h = ipv6_hdr(skb);
1588 ip6h->version = 6;
1589 ip6h->priority = prio;
1590 ip6h->flow_lbl[0] = 0;
1591 ip6h->flow_lbl[1] = 0;
1592 ip6h->flow_lbl[2] = 0;
1593 ip6h->payload_len = htons(skb->len);
1594 ip6h->nexthdr = IPPROTO_UDP;
1595 ip6h->hop_limit = ttl;
1596 ip6h->daddr = *daddr;
1597 ip6h->saddr = *saddr;
1598
e4c7ed41
CW
1599 err = handle_offloads(skb);
1600 if (err)
1601 return err;
1602
1603 ip6tunnel_xmit(skb, dev);
1604 return 0;
1605}
1606#endif
1607
11796187 1608int vxlan_xmit_skb(struct vxlan_sock *vs,
49560532
PS
1609 struct rtable *rt, struct sk_buff *skb,
1610 __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
1611 __be16 src_port, __be16 dst_port, __be32 vni)
1612{
1613 struct vxlanhdr *vxh;
1614 struct udphdr *uh;
649c5b8b 1615 int min_headroom;
49560532
PS
1616 int err;
1617
1618 if (!skb->encapsulation) {
1619 skb_reset_inner_headers(skb);
1620 skb->encapsulation = 1;
1621 }
1622
649c5b8b 1623 min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len
1eaa8178
PS
1624 + VXLAN_HLEN + sizeof(struct iphdr)
1625 + (vlan_tx_tag_present(skb) ? VLAN_HLEN : 0);
649c5b8b
PS
1626
1627 /* Need space for new headers (invalidates iph ptr) */
1628 err = skb_cow_head(skb, min_headroom);
1629 if (unlikely(err))
1630 return err;
1631
1eaa8178
PS
1632 if (vlan_tx_tag_present(skb)) {
1633 if (WARN_ON(!__vlan_put_tag(skb,
1634 skb->vlan_proto,
1635 vlan_tx_tag_get(skb))))
1636 return -ENOMEM;
1637
1638 skb->vlan_tci = 0;
1639 }
1640
49560532
PS
1641 vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh));
1642 vxh->vx_flags = htonl(VXLAN_FLAGS);
1643 vxh->vx_vni = vni;
1644
1645 __skb_push(skb, sizeof(*uh));
1646 skb_reset_transport_header(skb);
1647 uh = udp_hdr(skb);
1648
1649 uh->dest = dst_port;
1650 uh->source = src_port;
1651
1652 uh->len = htons(skb->len);
1653 uh->check = 0;
1654
49560532
PS
1655 err = handle_offloads(skb);
1656 if (err)
1657 return err;
1658
963a88b3
ND
1659 return iptunnel_xmit(rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df,
1660 false);
49560532
PS
1661}
1662EXPORT_SYMBOL_GPL(vxlan_xmit_skb);
1663
9dcc71e1
SS
1664/* Bypass encapsulation if the destination is local */
1665static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan,
1666 struct vxlan_dev *dst_vxlan)
1667{
8f84985f 1668 struct pcpu_sw_netstats *tx_stats, *rx_stats;
e4c7ed41
CW
1669 union vxlan_addr loopback;
1670 union vxlan_addr *remote_ip = &dst_vxlan->default_dst.remote_ip;
9dcc71e1 1671
8f84985f
LR
1672 tx_stats = this_cpu_ptr(src_vxlan->dev->tstats);
1673 rx_stats = this_cpu_ptr(dst_vxlan->dev->tstats);
9dcc71e1
SS
1674 skb->pkt_type = PACKET_HOST;
1675 skb->encapsulation = 0;
1676 skb->dev = dst_vxlan->dev;
1677 __skb_pull(skb, skb_network_offset(skb));
1678
e4c7ed41
CW
1679 if (remote_ip->sa.sa_family == AF_INET) {
1680 loopback.sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
1681 loopback.sa.sa_family = AF_INET;
1682#if IS_ENABLED(CONFIG_IPV6)
1683 } else {
1684 loopback.sin6.sin6_addr = in6addr_loopback;
1685 loopback.sa.sa_family = AF_INET6;
1686#endif
1687 }
1688
9dcc71e1 1689 if (dst_vxlan->flags & VXLAN_F_LEARN)
e4c7ed41 1690 vxlan_snoop(skb->dev, &loopback, eth_hdr(skb)->h_source);
9dcc71e1
SS
1691
1692 u64_stats_update_begin(&tx_stats->syncp);
1693 tx_stats->tx_packets++;
1694 tx_stats->tx_bytes += skb->len;
1695 u64_stats_update_end(&tx_stats->syncp);
1696
1697 if (netif_rx(skb) == NET_RX_SUCCESS) {
1698 u64_stats_update_begin(&rx_stats->syncp);
1699 rx_stats->rx_packets++;
1700 rx_stats->rx_bytes += skb->len;
1701 u64_stats_update_end(&rx_stats->syncp);
1702 } else {
1703 skb->dev->stats.rx_dropped++;
1704 }
1705}
1706
4ad16930
SH
1707static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
1708 struct vxlan_rdst *rdst, bool did_rsc)
d342894c 1709{
1710 struct vxlan_dev *vxlan = netdev_priv(dev);
e4c7ed41 1711 struct rtable *rt = NULL;
d342894c 1712 const struct iphdr *old_iph;
d342894c 1713 struct flowi4 fl4;
e4c7ed41
CW
1714 union vxlan_addr *dst;
1715 __be16 src_port = 0, dst_port;
234f5b73 1716 u32 vni;
d342894c 1717 __be16 df = 0;
1718 __u8 tos, ttl;
0e6fbc5b 1719 int err;
d342894c 1720
823aa873 1721 dst_port = rdst->remote_port ? rdst->remote_port : vxlan->dst_port;
6681712d 1722 vni = rdst->remote_vni;
e4c7ed41 1723 dst = &rdst->remote_ip;
e4f67add 1724
e4c7ed41 1725 if (vxlan_addr_any(dst)) {
e4f67add 1726 if (did_rsc) {
e4f67add 1727 /* short-circuited back to local bridge */
9dcc71e1 1728 vxlan_encap_bypass(skb, vxlan, vxlan);
4ad16930 1729 return;
e4f67add 1730 }
ef59febe 1731 goto drop;
e4f67add 1732 }
ef59febe 1733
d342894c 1734 old_iph = ip_hdr(skb);
1735
d342894c 1736 ttl = vxlan->ttl;
e4c7ed41 1737 if (!ttl && vxlan_addr_multicast(dst))
d342894c 1738 ttl = 1;
1739
1740 tos = vxlan->tos;
1741 if (tos == 1)
206aaafc 1742 tos = ip_tunnel_get_dsfield(old_iph, skb);
d342894c 1743
49560532 1744 src_port = vxlan_src_port(vxlan->port_min, vxlan->port_max, skb);
d342894c 1745
e4c7ed41
CW
1746 if (dst->sa.sa_family == AF_INET) {
1747 memset(&fl4, 0, sizeof(fl4));
1748 fl4.flowi4_oif = rdst->remote_ifindex;
1749 fl4.flowi4_tos = RT_TOS(tos);
1750 fl4.daddr = dst->sin.sin_addr.s_addr;
1751 fl4.saddr = vxlan->saddr.sin.sin_addr.s_addr;
1752
1753 rt = ip_route_output_key(dev_net(dev), &fl4);
1754 if (IS_ERR(rt)) {
1755 netdev_dbg(dev, "no route to %pI4\n",
1756 &dst->sin.sin_addr.s_addr);
1757 dev->stats.tx_carrier_errors++;
1758 goto tx_error;
1759 }
d342894c 1760
e4c7ed41
CW
1761 if (rt->dst.dev == dev) {
1762 netdev_dbg(dev, "circular route to %pI4\n",
1763 &dst->sin.sin_addr.s_addr);
1764 dev->stats.collisions++;
fffc15a5 1765 goto rt_tx_error;
e4c7ed41
CW
1766 }
1767
1768 /* Bypass encapsulation if the destination is local */
1769 if (rt->rt_flags & RTCF_LOCAL &&
1770 !(rt->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))) {
1771 struct vxlan_dev *dst_vxlan;
1772
1773 ip_rt_put(rt);
1774 dst_vxlan = vxlan_find_vni(dev_net(dev), vni, dst_port);
1775 if (!dst_vxlan)
1776 goto tx_error;
1777 vxlan_encap_bypass(skb, vxlan, dst_vxlan);
1778 return;
1779 }
1780
1781 tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
1782 ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
d342894c 1783
11796187 1784 err = vxlan_xmit_skb(vxlan->vn_sock, rt, skb,
e4c7ed41
CW
1785 fl4.saddr, dst->sin.sin_addr.s_addr,
1786 tos, ttl, df, src_port, dst_port,
1787 htonl(vni << 8));
9dcc71e1 1788
e4c7ed41
CW
1789 if (err < 0)
1790 goto rt_tx_error;
1791 iptunnel_xmit_stats(err, &dev->stats, dev->tstats);
1792#if IS_ENABLED(CONFIG_IPV6)
1793 } else {
1794 struct sock *sk = vxlan->vn_sock->sock->sk;
1795 struct dst_entry *ndst;
1796 struct flowi6 fl6;
1797 u32 flags;
1798
1799 memset(&fl6, 0, sizeof(fl6));
1800 fl6.flowi6_oif = rdst->remote_ifindex;
1801 fl6.daddr = dst->sin6.sin6_addr;
1802 fl6.saddr = vxlan->saddr.sin6.sin6_addr;
8c1bb79f 1803 fl6.flowi6_proto = IPPROTO_UDP;
e4c7ed41
CW
1804
1805 if (ipv6_stub->ipv6_dst_lookup(sk, &ndst, &fl6)) {
1806 netdev_dbg(dev, "no route to %pI6\n",
1807 &dst->sin6.sin6_addr);
1808 dev->stats.tx_carrier_errors++;
9dcc71e1 1809 goto tx_error;
e4c7ed41 1810 }
d342894c 1811
e4c7ed41
CW
1812 if (ndst->dev == dev) {
1813 netdev_dbg(dev, "circular route to %pI6\n",
1814 &dst->sin6.sin6_addr);
1815 dst_release(ndst);
1816 dev->stats.collisions++;
1817 goto tx_error;
1818 }
0e6fbc5b 1819
e4c7ed41
CW
1820 /* Bypass encapsulation if the destination is local */
1821 flags = ((struct rt6_info *)ndst)->rt6i_flags;
1822 if (flags & RTF_LOCAL &&
1823 !(flags & (RTCF_BROADCAST | RTCF_MULTICAST))) {
1824 struct vxlan_dev *dst_vxlan;
1825
1826 dst_release(ndst);
1827 dst_vxlan = vxlan_find_vni(dev_net(dev), vni, dst_port);
1828 if (!dst_vxlan)
1829 goto tx_error;
1830 vxlan_encap_bypass(skb, vxlan, dst_vxlan);
1831 return;
1832 }
49560532 1833
e4c7ed41
CW
1834 ttl = ttl ? : ip6_dst_hoplimit(ndst);
1835
11796187 1836 err = vxlan6_xmit_skb(vxlan->vn_sock, ndst, skb,
e4c7ed41
CW
1837 dev, &fl6.saddr, &fl6.daddr, 0, ttl,
1838 src_port, dst_port, htonl(vni << 8));
1839#endif
1840 }
0e6fbc5b 1841
4ad16930 1842 return;
d342894c 1843
1844drop:
1845 dev->stats.tx_dropped++;
1846 goto tx_free;
1847
49560532
PS
1848rt_tx_error:
1849 ip_rt_put(rt);
d342894c 1850tx_error:
1851 dev->stats.tx_errors++;
1852tx_free:
1853 dev_kfree_skb(skb);
d342894c 1854}
1855
6681712d
DS
1856/* Transmit local packets over Vxlan
1857 *
1858 * Outer IP header inherits ECN and DF from inner header.
1859 * Outer UDP destination is the VXLAN assigned port.
1860 * source port is based on hash of flow
1861 */
1862static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
1863{
1864 struct vxlan_dev *vxlan = netdev_priv(dev);
1865 struct ethhdr *eth;
1866 bool did_rsc = false;
8f646c92 1867 struct vxlan_rdst *rdst, *fdst = NULL;
6681712d 1868 struct vxlan_fdb *f;
6681712d
DS
1869
1870 skb_reset_mac_header(skb);
1871 eth = eth_hdr(skb);
1872
f564f45c
CW
1873 if ((vxlan->flags & VXLAN_F_PROXY)) {
1874 if (ntohs(eth->h_proto) == ETH_P_ARP)
1875 return arp_reduce(dev, skb);
1876#if IS_ENABLED(CONFIG_IPV6)
1877 else if (ntohs(eth->h_proto) == ETH_P_IPV6 &&
1878 skb->len >= sizeof(struct ipv6hdr) + sizeof(struct nd_msg) &&
1879 ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) {
1880 struct nd_msg *msg;
1881
1882 msg = (struct nd_msg *)skb_transport_header(skb);
1883 if (msg->icmph.icmp6_code == 0 &&
1884 msg->icmph.icmp6_type == NDISC_NEIGHBOUR_SOLICITATION)
1885 return neigh_reduce(dev, skb);
1886 }
1887#endif
1888 }
6681712d
DS
1889
1890 f = vxlan_find_mac(vxlan, eth->h_dest);
ae884082
DS
1891 did_rsc = false;
1892
1893 if (f && (f->flags & NTF_ROUTER) && (vxlan->flags & VXLAN_F_RSC) &&
e15a00aa
CW
1894 (ntohs(eth->h_proto) == ETH_P_IP ||
1895 ntohs(eth->h_proto) == ETH_P_IPV6)) {
ae884082
DS
1896 did_rsc = route_shortcircuit(dev, skb);
1897 if (did_rsc)
1898 f = vxlan_find_mac(vxlan, eth->h_dest);
1899 }
1900
6681712d 1901 if (f == NULL) {
afbd8bae
MR
1902 f = vxlan_find_mac(vxlan, all_zeros_mac);
1903 if (f == NULL) {
1904 if ((vxlan->flags & VXLAN_F_L2MISS) &&
1905 !is_multicast_ether_addr(eth->h_dest))
1906 vxlan_fdb_miss(vxlan, eth->h_dest);
1907
1908 dev->stats.tx_dropped++;
8f646c92 1909 kfree_skb(skb);
afbd8bae
MR
1910 return NETDEV_TX_OK;
1911 }
1912 }
6681712d 1913
afbd8bae
MR
1914 list_for_each_entry_rcu(rdst, &f->remotes, list) {
1915 struct sk_buff *skb1;
6681712d 1916
8f646c92
ED
1917 if (!fdst) {
1918 fdst = rdst;
1919 continue;
1920 }
afbd8bae
MR
1921 skb1 = skb_clone(skb, GFP_ATOMIC);
1922 if (skb1)
1923 vxlan_xmit_one(skb1, dev, rdst, did_rsc);
6681712d
DS
1924 }
1925
8f646c92
ED
1926 if (fdst)
1927 vxlan_xmit_one(skb, dev, fdst, did_rsc);
1928 else
1929 kfree_skb(skb);
4ad16930 1930 return NETDEV_TX_OK;
6681712d
DS
1931}
1932
d342894c 1933/* Walk the forwarding table and purge stale entries */
1934static void vxlan_cleanup(unsigned long arg)
1935{
1936 struct vxlan_dev *vxlan = (struct vxlan_dev *) arg;
1937 unsigned long next_timer = jiffies + FDB_AGE_INTERVAL;
1938 unsigned int h;
1939
1940 if (!netif_running(vxlan->dev))
1941 return;
1942
1943 spin_lock_bh(&vxlan->hash_lock);
1944 for (h = 0; h < FDB_HASH_SIZE; ++h) {
1945 struct hlist_node *p, *n;
1946 hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) {
1947 struct vxlan_fdb *f
1948 = container_of(p, struct vxlan_fdb, hlist);
1949 unsigned long timeout;
1950
3c172868 1951 if (f->state & NUD_PERMANENT)
d342894c 1952 continue;
1953
1954 timeout = f->used + vxlan->age_interval * HZ;
1955 if (time_before_eq(timeout, jiffies)) {
1956 netdev_dbg(vxlan->dev,
1957 "garbage collect %pM\n",
1958 f->eth_addr);
1959 f->state = NUD_STALE;
1960 vxlan_fdb_destroy(vxlan, f);
1961 } else if (time_before(timeout, next_timer))
1962 next_timer = timeout;
1963 }
1964 }
1965 spin_unlock_bh(&vxlan->hash_lock);
1966
1967 mod_timer(&vxlan->age_timer, next_timer);
1968}
1969
9c2e24e1
PS
1970static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan)
1971{
1972 __u32 vni = vxlan->default_dst.remote_vni;
1973
1974 vxlan->vn_sock = vs;
1975 hlist_add_head_rcu(&vxlan->hlist, vni_head(vs, vni));
1976}
1977
d342894c 1978/* Setup stats when device is created */
1979static int vxlan_init(struct net_device *dev)
1980{
1c51a915
SH
1981 struct vxlan_dev *vxlan = netdev_priv(dev);
1982 struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id);
1983 struct vxlan_sock *vs;
827da44c 1984 int i;
1c51a915 1985
8f84985f 1986 dev->tstats = alloc_percpu(struct pcpu_sw_netstats);
e8171045 1987 if (!dev->tstats)
d342894c 1988 return -ENOMEM;
1989
827da44c 1990 for_each_possible_cpu(i) {
8f84985f 1991 struct pcpu_sw_netstats *vxlan_stats;
827da44c
JS
1992 vxlan_stats = per_cpu_ptr(dev->tstats, i);
1993 u64_stats_init(&vxlan_stats->syncp);
1994 }
1995
1996
1c51a915 1997 spin_lock(&vn->sock_lock);
9c2e24e1 1998 vs = vxlan_find_sock(dev_net(dev), vxlan->dst_port);
1c51a915
SH
1999 if (vs) {
2000 /* If we have a socket with same port already, reuse it */
2001 atomic_inc(&vs->refcnt);
9c2e24e1 2002 vxlan_vs_add_dev(vs, vxlan);
1c51a915
SH
2003 } else {
2004 /* otherwise make new socket outside of RTNL */
2005 dev_hold(dev);
2006 queue_work(vxlan_wq, &vxlan->sock_work);
2007 }
2008 spin_unlock(&vn->sock_lock);
2009
d342894c 2010 return 0;
2011}
2012
ba609e9b 2013static void vxlan_fdb_delete_default(struct vxlan_dev *vxlan)
afbd8bae
MR
2014{
2015 struct vxlan_fdb *f;
2016
2017 spin_lock_bh(&vxlan->hash_lock);
2018 f = __vxlan_find_mac(vxlan, all_zeros_mac);
2019 if (f)
2020 vxlan_fdb_destroy(vxlan, f);
2021 spin_unlock_bh(&vxlan->hash_lock);
2022}
2023
ebf4063e
SH
2024static void vxlan_uninit(struct net_device *dev)
2025{
2026 struct vxlan_dev *vxlan = netdev_priv(dev);
ebf4063e
SH
2027 struct vxlan_sock *vs = vxlan->vn_sock;
2028
ba609e9b 2029 vxlan_fdb_delete_default(vxlan);
afbd8bae 2030
ebf4063e 2031 if (vs)
012a5729 2032 vxlan_sock_release(vs);
ebf4063e
SH
2033 free_percpu(dev->tstats);
2034}
2035
d342894c 2036/* Start ageing timer and join group when device is brought up */
2037static int vxlan_open(struct net_device *dev)
2038{
2039 struct vxlan_dev *vxlan = netdev_priv(dev);
1c51a915
SH
2040 struct vxlan_sock *vs = vxlan->vn_sock;
2041
2042 /* socket hasn't been created */
2043 if (!vs)
2044 return -ENOTCONN;
d342894c 2045
79d4a94f 2046 if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip)) {
1c51a915 2047 vxlan_sock_hold(vs);
7c47cedf 2048 dev_hold(dev);
3fc2de2f 2049 queue_work(vxlan_wq, &vxlan->igmp_join);
d342894c 2050 }
2051
2052 if (vxlan->age_interval)
2053 mod_timer(&vxlan->age_timer, jiffies + FDB_AGE_INTERVAL);
2054
2055 return 0;
2056}
2057
2058/* Purge the forwarding table */
2059static void vxlan_flush(struct vxlan_dev *vxlan)
2060{
31fec5aa 2061 unsigned int h;
d342894c 2062
2063 spin_lock_bh(&vxlan->hash_lock);
2064 for (h = 0; h < FDB_HASH_SIZE; ++h) {
2065 struct hlist_node *p, *n;
2066 hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) {
2067 struct vxlan_fdb *f
2068 = container_of(p, struct vxlan_fdb, hlist);
afbd8bae
MR
2069 /* the all_zeros_mac entry is deleted at vxlan_uninit */
2070 if (!is_zero_ether_addr(f->eth_addr))
2071 vxlan_fdb_destroy(vxlan, f);
d342894c 2072 }
2073 }
2074 spin_unlock_bh(&vxlan->hash_lock);
2075}
2076
2077/* Cleanup timer and forwarding table on shutdown */
2078static int vxlan_stop(struct net_device *dev)
2079{
3fc2de2f 2080 struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id);
d342894c 2081 struct vxlan_dev *vxlan = netdev_priv(dev);
1c51a915 2082 struct vxlan_sock *vs = vxlan->vn_sock;
d342894c 2083
e4c7ed41 2084 if (vs && vxlan_addr_multicast(&vxlan->default_dst.remote_ip) &&
95ab0991 2085 !vxlan_group_used(vn, vxlan)) {
1c51a915 2086 vxlan_sock_hold(vs);
7c47cedf 2087 dev_hold(dev);
3fc2de2f 2088 queue_work(vxlan_wq, &vxlan->igmp_leave);
7c47cedf 2089 }
d342894c 2090
2091 del_timer_sync(&vxlan->age_timer);
2092
2093 vxlan_flush(vxlan);
2094
2095 return 0;
2096}
2097
d342894c 2098/* Stub, nothing needs to be done. */
2099static void vxlan_set_multicast_list(struct net_device *dev)
2100{
2101}
2102
345010b5
DB
2103static int vxlan_change_mtu(struct net_device *dev, int new_mtu)
2104{
2105 struct vxlan_dev *vxlan = netdev_priv(dev);
2106 struct vxlan_rdst *dst = &vxlan->default_dst;
2107 struct net_device *lowerdev;
2108 int max_mtu;
2109
2110 lowerdev = __dev_get_by_index(dev_net(dev), dst->remote_ifindex);
2111 if (lowerdev == NULL)
2112 return eth_change_mtu(dev, new_mtu);
2113
2114 if (dst->remote_ip.sa.sa_family == AF_INET6)
2115 max_mtu = lowerdev->mtu - VXLAN6_HEADROOM;
2116 else
2117 max_mtu = lowerdev->mtu - VXLAN_HEADROOM;
2118
2119 if (new_mtu < 68 || new_mtu > max_mtu)
2120 return -EINVAL;
2121
2122 dev->mtu = new_mtu;
2123 return 0;
2124}
2125
d342894c 2126static const struct net_device_ops vxlan_netdev_ops = {
2127 .ndo_init = vxlan_init,
ebf4063e 2128 .ndo_uninit = vxlan_uninit,
d342894c 2129 .ndo_open = vxlan_open,
2130 .ndo_stop = vxlan_stop,
2131 .ndo_start_xmit = vxlan_xmit,
e8171045 2132 .ndo_get_stats64 = ip_tunnel_get_stats64,
d342894c 2133 .ndo_set_rx_mode = vxlan_set_multicast_list,
345010b5 2134 .ndo_change_mtu = vxlan_change_mtu,
d342894c 2135 .ndo_validate_addr = eth_validate_addr,
2136 .ndo_set_mac_address = eth_mac_addr,
2137 .ndo_fdb_add = vxlan_fdb_add,
2138 .ndo_fdb_del = vxlan_fdb_delete,
2139 .ndo_fdb_dump = vxlan_fdb_dump,
2140};
2141
2142/* Info for udev, that this is a virtual tunnel endpoint */
2143static struct device_type vxlan_type = {
2144 .name = "vxlan",
2145};
2146
53cf5275 2147/* Calls the ndo_add_vxlan_port of the caller in order to
35e42379
JG
2148 * supply the listening VXLAN udp ports. Callers are expected
2149 * to implement the ndo_add_vxlan_port.
53cf5275
JG
2150 */
2151void vxlan_get_rx_port(struct net_device *dev)
2152{
2153 struct vxlan_sock *vs;
2154 struct net *net = dev_net(dev);
2155 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
2156 sa_family_t sa_family;
35e42379
JG
2157 __be16 port;
2158 unsigned int i;
53cf5275
JG
2159
2160 spin_lock(&vn->sock_lock);
2161 for (i = 0; i < PORT_HASH_SIZE; ++i) {
35e42379
JG
2162 hlist_for_each_entry_rcu(vs, &vn->sock_list[i], hlist) {
2163 port = inet_sk(vs->sock->sk)->inet_sport;
53cf5275
JG
2164 sa_family = vs->sock->sk->sk_family;
2165 dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family,
2166 port);
2167 }
2168 }
2169 spin_unlock(&vn->sock_lock);
2170}
2171EXPORT_SYMBOL_GPL(vxlan_get_rx_port);
2172
d342894c 2173/* Initialize the device structure. */
2174static void vxlan_setup(struct net_device *dev)
2175{
2176 struct vxlan_dev *vxlan = netdev_priv(dev);
31fec5aa 2177 unsigned int h;
05f47d69 2178 int low, high;
d342894c 2179
2180 eth_hw_addr_random(dev);
2181 ether_setup(dev);
e4c7ed41
CW
2182 if (vxlan->default_dst.remote_ip.sa.sa_family == AF_INET6)
2183 dev->hard_header_len = ETH_HLEN + VXLAN6_HEADROOM;
2184 else
2185 dev->hard_header_len = ETH_HLEN + VXLAN_HEADROOM;
d342894c 2186
2187 dev->netdev_ops = &vxlan_netdev_ops;
ebf4063e 2188 dev->destructor = free_netdev;
d342894c 2189 SET_NETDEV_DEVTYPE(dev, &vxlan_type);
2190
2191 dev->tx_queue_len = 0;
2192 dev->features |= NETIF_F_LLTX;
2193 dev->features |= NETIF_F_NETNS_LOCAL;
d6727fe3 2194 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
0afb1666 2195 dev->features |= NETIF_F_RXCSUM;
05c0db08 2196 dev->features |= NETIF_F_GSO_SOFTWARE;
0afb1666 2197
1eaa8178
PS
2198 dev->vlan_features = dev->features;
2199 dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
0afb1666 2200 dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
05c0db08 2201 dev->hw_features |= NETIF_F_GSO_SOFTWARE;
1eaa8178 2202 dev->hw_features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
d342894c 2203 dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
6602d007 2204 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
d342894c 2205
553675fb 2206 INIT_LIST_HEAD(&vxlan->next);
d342894c 2207 spin_lock_init(&vxlan->hash_lock);
3fc2de2f 2208 INIT_WORK(&vxlan->igmp_join, vxlan_igmp_join);
2209 INIT_WORK(&vxlan->igmp_leave, vxlan_igmp_leave);
1c51a915 2210 INIT_WORK(&vxlan->sock_work, vxlan_sock_work);
d342894c 2211
2212 init_timer_deferrable(&vxlan->age_timer);
2213 vxlan->age_timer.function = vxlan_cleanup;
2214 vxlan->age_timer.data = (unsigned long) vxlan;
2215
0bbf87d8 2216 inet_get_local_port_range(dev_net(dev), &low, &high);
05f47d69 2217 vxlan->port_min = low;
2218 vxlan->port_max = high;
823aa873 2219 vxlan->dst_port = htons(vxlan_port);
05f47d69 2220
d342894c 2221 vxlan->dev = dev;
2222
2223 for (h = 0; h < FDB_HASH_SIZE; ++h)
2224 INIT_HLIST_HEAD(&vxlan->fdb_head[h]);
2225}
2226
2227static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
2228 [IFLA_VXLAN_ID] = { .type = NLA_U32 },
5d174dd8 2229 [IFLA_VXLAN_GROUP] = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
e4c7ed41 2230 [IFLA_VXLAN_GROUP6] = { .len = sizeof(struct in6_addr) },
d342894c 2231 [IFLA_VXLAN_LINK] = { .type = NLA_U32 },
2232 [IFLA_VXLAN_LOCAL] = { .len = FIELD_SIZEOF(struct iphdr, saddr) },
e4c7ed41 2233 [IFLA_VXLAN_LOCAL6] = { .len = sizeof(struct in6_addr) },
d342894c 2234 [IFLA_VXLAN_TOS] = { .type = NLA_U8 },
2235 [IFLA_VXLAN_TTL] = { .type = NLA_U8 },
2236 [IFLA_VXLAN_LEARNING] = { .type = NLA_U8 },
2237 [IFLA_VXLAN_AGEING] = { .type = NLA_U32 },
2238 [IFLA_VXLAN_LIMIT] = { .type = NLA_U32 },
05f47d69 2239 [IFLA_VXLAN_PORT_RANGE] = { .len = sizeof(struct ifla_vxlan_port_range) },
e4f67add
DS
2240 [IFLA_VXLAN_PROXY] = { .type = NLA_U8 },
2241 [IFLA_VXLAN_RSC] = { .type = NLA_U8 },
2242 [IFLA_VXLAN_L2MISS] = { .type = NLA_U8 },
2243 [IFLA_VXLAN_L3MISS] = { .type = NLA_U8 },
823aa873 2244 [IFLA_VXLAN_PORT] = { .type = NLA_U16 },
d342894c 2245};
2246
2247static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[])
2248{
2249 if (tb[IFLA_ADDRESS]) {
2250 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
2251 pr_debug("invalid link address (not ethernet)\n");
2252 return -EINVAL;
2253 }
2254
2255 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
2256 pr_debug("invalid all zero ethernet address\n");
2257 return -EADDRNOTAVAIL;
2258 }
2259 }
2260
2261 if (!data)
2262 return -EINVAL;
2263
2264 if (data[IFLA_VXLAN_ID]) {
2265 __u32 id = nla_get_u32(data[IFLA_VXLAN_ID]);
2266 if (id >= VXLAN_VID_MASK)
2267 return -ERANGE;
2268 }
2269
05f47d69 2270 if (data[IFLA_VXLAN_PORT_RANGE]) {
2271 const struct ifla_vxlan_port_range *p
2272 = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
2273
2274 if (ntohs(p->high) < ntohs(p->low)) {
2275 pr_debug("port range %u .. %u not valid\n",
2276 ntohs(p->low), ntohs(p->high));
2277 return -EINVAL;
2278 }
2279 }
2280
d342894c 2281 return 0;
2282}
2283
1b13c97f
YB
2284static void vxlan_get_drvinfo(struct net_device *netdev,
2285 struct ethtool_drvinfo *drvinfo)
2286{
2287 strlcpy(drvinfo->version, VXLAN_VERSION, sizeof(drvinfo->version));
2288 strlcpy(drvinfo->driver, "vxlan", sizeof(drvinfo->driver));
2289}
2290
2291static const struct ethtool_ops vxlan_ethtool_ops = {
2292 .get_drvinfo = vxlan_get_drvinfo,
2293 .get_link = ethtool_op_get_link,
2294};
2295
553675fb 2296static void vxlan_del_work(struct work_struct *work)
2297{
2298 struct vxlan_sock *vs = container_of(work, struct vxlan_sock, del_work);
2299
2300 sk_release_kernel(vs->sock->sk);
2301 kfree_rcu(vs, rcu);
2302}
2303
e4c7ed41
CW
2304#if IS_ENABLED(CONFIG_IPV6)
2305/* Create UDP socket for encapsulation receive. AF_INET6 socket
2306 * could be used for both IPv4 and IPv6 communications, but
2307 * users may set bindv6only=1.
2308 */
39deb2c7 2309static struct socket *create_v6_sock(struct net *net, __be16 port)
553675fb 2310{
553675fb 2311 struct sock *sk;
e4c7ed41
CW
2312 struct socket *sock;
2313 struct sockaddr_in6 vxlan_addr = {
2314 .sin6_family = AF_INET6,
2315 .sin6_port = port,
2316 };
2317 int rc, val = 1;
2318
2319 rc = sock_create_kern(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, &sock);
2320 if (rc < 0) {
2321 pr_debug("UDPv6 socket create failed\n");
39deb2c7 2322 return ERR_PTR(rc);
e4c7ed41
CW
2323 }
2324
2325 /* Put in proper namespace */
2326 sk = sock->sk;
2327 sk_change_net(sk, net);
2328
2329 kernel_setsockopt(sock, SOL_IPV6, IPV6_V6ONLY,
2330 (char *)&val, sizeof(val));
2331 rc = kernel_bind(sock, (struct sockaddr *)&vxlan_addr,
2332 sizeof(struct sockaddr_in6));
2333 if (rc < 0) {
2334 pr_debug("bind for UDPv6 socket %pI6:%u (%d)\n",
2335 &vxlan_addr.sin6_addr, ntohs(vxlan_addr.sin6_port), rc);
2336 sk_release_kernel(sk);
39deb2c7 2337 return ERR_PTR(rc);
e4c7ed41
CW
2338 }
2339 /* At this point, IPv6 module should have been loaded in
2340 * sock_create_kern().
2341 */
2342 BUG_ON(!ipv6_stub);
2343
e4c7ed41
CW
2344 /* Disable multicast loopback */
2345 inet_sk(sk)->mc_loop = 0;
39deb2c7 2346 return sock;
e4c7ed41
CW
2347}
2348
2349#else
2350
39deb2c7 2351static struct socket *create_v6_sock(struct net *net, __be16 port)
e4c7ed41 2352{
39deb2c7 2353 return ERR_PTR(-EPFNOSUPPORT);
e4c7ed41
CW
2354}
2355#endif
2356
39deb2c7 2357static struct socket *create_v4_sock(struct net *net, __be16 port)
e4c7ed41
CW
2358{
2359 struct sock *sk;
2360 struct socket *sock;
553675fb 2361 struct sockaddr_in vxlan_addr = {
2362 .sin_family = AF_INET,
2363 .sin_addr.s_addr = htonl(INADDR_ANY),
bb3fd687 2364 .sin_port = port,
553675fb 2365 };
2366 int rc;
553675fb 2367
2368 /* Create UDP socket for encapsulation receive. */
e4c7ed41 2369 rc = sock_create_kern(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
553675fb 2370 if (rc < 0) {
2371 pr_debug("UDP socket create failed\n");
39deb2c7 2372 return ERR_PTR(rc);
553675fb 2373 }
2374
2375 /* Put in proper namespace */
e4c7ed41 2376 sk = sock->sk;
553675fb 2377 sk_change_net(sk, net);
2378
e4c7ed41 2379 rc = kernel_bind(sock, (struct sockaddr *) &vxlan_addr,
553675fb 2380 sizeof(vxlan_addr));
2381 if (rc < 0) {
2382 pr_debug("bind for UDP socket %pI4:%u (%d)\n",
2383 &vxlan_addr.sin_addr, ntohs(vxlan_addr.sin_port), rc);
2384 sk_release_kernel(sk);
39deb2c7 2385 return ERR_PTR(rc);
e4c7ed41
CW
2386 }
2387
e4c7ed41
CW
2388 /* Disable multicast loopback */
2389 inet_sk(sk)->mc_loop = 0;
39deb2c7 2390 return sock;
e4c7ed41
CW
2391}
2392
2393/* Create new listen socket if needed */
2394static struct vxlan_sock *vxlan_socket_create(struct net *net, __be16 port,
2395 vxlan_rcv_t *rcv, void *data, bool ipv6)
2396{
2397 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
2398 struct vxlan_sock *vs;
2399 struct socket *sock;
2400 struct sock *sk;
e4c7ed41
CW
2401 unsigned int h;
2402
dc01e7d3 2403 vs = kzalloc(sizeof(*vs), GFP_KERNEL);
e4c7ed41
CW
2404 if (!vs)
2405 return ERR_PTR(-ENOMEM);
2406
2407 for (h = 0; h < VNI_HASH_SIZE; ++h)
2408 INIT_HLIST_HEAD(&vs->vni_list[h]);
2409
2410 INIT_WORK(&vs->del_work, vxlan_del_work);
2411
2412 if (ipv6)
39deb2c7 2413 sock = create_v6_sock(net, port);
e4c7ed41 2414 else
39deb2c7
ZYW
2415 sock = create_v4_sock(net, port);
2416 if (IS_ERR(sock)) {
553675fb 2417 kfree(vs);
e50fddc8 2418 return ERR_CAST(sock);
553675fb 2419 }
e4c7ed41
CW
2420
2421 vs->sock = sock;
2422 sk = sock->sk;
9c2e24e1 2423 atomic_set(&vs->refcnt, 1);
5cfccc5a 2424 vs->rcv = rcv;
012a5729 2425 vs->data = data;
559835ea 2426 rcu_assign_sk_user_data(vs->sock->sk, vs);
553675fb 2427
dc01e7d3
OG
2428 /* Initialize the vxlan udp offloads structure */
2429 vs->udp_offloads.port = port;
2430 vs->udp_offloads.callbacks.gro_receive = vxlan_gro_receive;
2431 vs->udp_offloads.callbacks.gro_complete = vxlan_gro_complete;
2432
9c2e24e1
PS
2433 spin_lock(&vn->sock_lock);
2434 hlist_add_head_rcu(&vs->hlist, vs_head(net, port));
dc01e7d3 2435 vxlan_notify_add_rx_port(vs);
9c2e24e1 2436 spin_unlock(&vn->sock_lock);
553675fb 2437
2438 /* Mark socket as an encapsulation socket. */
2439 udp_sk(sk)->encap_type = 1;
2440 udp_sk(sk)->encap_rcv = vxlan_udp_encap_recv;
e4c7ed41
CW
2441#if IS_ENABLED(CONFIG_IPV6)
2442 if (ipv6)
2443 ipv6_stub->udpv6_encap_enable();
2444 else
2445#endif
2446 udp_encap_enable();
2447
9c2e24e1
PS
2448 return vs;
2449}
2450
012a5729
PS
2451struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
2452 vxlan_rcv_t *rcv, void *data,
e4c7ed41 2453 bool no_share, bool ipv6)
9c2e24e1
PS
2454{
2455 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
2456 struct vxlan_sock *vs;
2457
e4c7ed41 2458 vs = vxlan_socket_create(net, port, rcv, data, ipv6);
9c2e24e1
PS
2459 if (!IS_ERR(vs))
2460 return vs;
553675fb 2461
012a5729
PS
2462 if (no_share) /* Return error if sharing is not allowed. */
2463 return vs;
2464
9c2e24e1
PS
2465 spin_lock(&vn->sock_lock);
2466 vs = vxlan_find_sock(net, port);
5cfccc5a
PS
2467 if (vs) {
2468 if (vs->rcv == rcv)
2469 atomic_inc(&vs->refcnt);
2470 else
2471 vs = ERR_PTR(-EBUSY);
2472 }
2473 spin_unlock(&vn->sock_lock);
2474
2475 if (!vs)
9c2e24e1
PS
2476 vs = ERR_PTR(-EINVAL);
2477
553675fb 2478 return vs;
2479}
012a5729 2480EXPORT_SYMBOL_GPL(vxlan_sock_add);
553675fb 2481
1c51a915
SH
2482/* Scheduled at device creation to bind to a socket */
2483static void vxlan_sock_work(struct work_struct *work)
2484{
9c2e24e1
PS
2485 struct vxlan_dev *vxlan = container_of(work, struct vxlan_dev, sock_work);
2486 struct net *net = dev_net(vxlan->dev);
1c51a915 2487 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
9c2e24e1
PS
2488 __be16 port = vxlan->dst_port;
2489 struct vxlan_sock *nvs;
1c51a915 2490
e4c7ed41 2491 nvs = vxlan_sock_add(net, port, vxlan_rcv, NULL, false, vxlan->flags & VXLAN_F_IPV6);
1c51a915 2492 spin_lock(&vn->sock_lock);
9c2e24e1
PS
2493 if (!IS_ERR(nvs))
2494 vxlan_vs_add_dev(nvs, vxlan);
2495 spin_unlock(&vn->sock_lock);
2496
2497 dev_put(vxlan->dev);
1c51a915
SH
2498}
2499
d342894c 2500static int vxlan_newlink(struct net *net, struct net_device *dev,
2501 struct nlattr *tb[], struct nlattr *data[])
2502{
553675fb 2503 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
d342894c 2504 struct vxlan_dev *vxlan = netdev_priv(dev);
c7995c43 2505 struct vxlan_rdst *dst = &vxlan->default_dst;
d342894c 2506 __u32 vni;
2507 int err;
e4c7ed41 2508 bool use_ipv6 = false;
d342894c 2509
2510 if (!data[IFLA_VXLAN_ID])
2511 return -EINVAL;
2512
2513 vni = nla_get_u32(data[IFLA_VXLAN_ID]);
c7995c43 2514 dst->remote_vni = vni;
d342894c 2515
e4c7ed41
CW
2516 if (data[IFLA_VXLAN_GROUP]) {
2517 dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]);
2518 dst->remote_ip.sa.sa_family = AF_INET;
2519 } else if (data[IFLA_VXLAN_GROUP6]) {
2520 if (!IS_ENABLED(CONFIG_IPV6))
2521 return -EPFNOSUPPORT;
2522
2523 nla_memcpy(&dst->remote_ip.sin6.sin6_addr, data[IFLA_VXLAN_GROUP6],
2524 sizeof(struct in6_addr));
2525 dst->remote_ip.sa.sa_family = AF_INET6;
2526 use_ipv6 = true;
2527 }
d342894c 2528
e4c7ed41
CW
2529 if (data[IFLA_VXLAN_LOCAL]) {
2530 vxlan->saddr.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_LOCAL]);
2531 vxlan->saddr.sa.sa_family = AF_INET;
2532 } else if (data[IFLA_VXLAN_LOCAL6]) {
2533 if (!IS_ENABLED(CONFIG_IPV6))
2534 return -EPFNOSUPPORT;
2535
2536 /* TODO: respect scope id */
2537 nla_memcpy(&vxlan->saddr.sin6.sin6_addr, data[IFLA_VXLAN_LOCAL6],
2538 sizeof(struct in6_addr));
2539 vxlan->saddr.sa.sa_family = AF_INET6;
2540 use_ipv6 = true;
2541 }
d342894c 2542
34e02aa1 2543 if (data[IFLA_VXLAN_LINK] &&
c7995c43 2544 (dst->remote_ifindex = nla_get_u32(data[IFLA_VXLAN_LINK]))) {
34e02aa1 2545 struct net_device *lowerdev
c7995c43 2546 = __dev_get_by_index(net, dst->remote_ifindex);
34e02aa1 2547
2548 if (!lowerdev) {
c7995c43 2549 pr_info("ifindex %d does not exist\n", dst->remote_ifindex);
34e02aa1 2550 return -ENODEV;
2551 }
d342894c 2552
e4c7ed41
CW
2553#if IS_ENABLED(CONFIG_IPV6)
2554 if (use_ipv6) {
2555 struct inet6_dev *idev = __in6_dev_get(lowerdev);
2556 if (idev && idev->cnf.disable_ipv6) {
2557 pr_info("IPv6 is disabled via sysctl\n");
2558 return -EPERM;
2559 }
2560 vxlan->flags |= VXLAN_F_IPV6;
2561 }
2562#endif
2563
34e02aa1 2564 if (!tb[IFLA_MTU])
e4c7ed41 2565 dev->mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);
1ba56fb4
AD
2566
2567 /* update header length based on lower device */
2568 dev->hard_header_len = lowerdev->hard_header_len +
e4c7ed41 2569 (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);
7bda701e 2570 } else if (use_ipv6)
2571 vxlan->flags |= VXLAN_F_IPV6;
d342894c 2572
2573 if (data[IFLA_VXLAN_TOS])
2574 vxlan->tos = nla_get_u8(data[IFLA_VXLAN_TOS]);
2575
afb97186
VB
2576 if (data[IFLA_VXLAN_TTL])
2577 vxlan->ttl = nla_get_u8(data[IFLA_VXLAN_TTL]);
2578
d342894c 2579 if (!data[IFLA_VXLAN_LEARNING] || nla_get_u8(data[IFLA_VXLAN_LEARNING]))
e4f67add 2580 vxlan->flags |= VXLAN_F_LEARN;
d342894c 2581
2582 if (data[IFLA_VXLAN_AGEING])
2583 vxlan->age_interval = nla_get_u32(data[IFLA_VXLAN_AGEING]);
2584 else
2585 vxlan->age_interval = FDB_AGE_DEFAULT;
2586
e4f67add
DS
2587 if (data[IFLA_VXLAN_PROXY] && nla_get_u8(data[IFLA_VXLAN_PROXY]))
2588 vxlan->flags |= VXLAN_F_PROXY;
2589
2590 if (data[IFLA_VXLAN_RSC] && nla_get_u8(data[IFLA_VXLAN_RSC]))
2591 vxlan->flags |= VXLAN_F_RSC;
2592
2593 if (data[IFLA_VXLAN_L2MISS] && nla_get_u8(data[IFLA_VXLAN_L2MISS]))
2594 vxlan->flags |= VXLAN_F_L2MISS;
2595
2596 if (data[IFLA_VXLAN_L3MISS] && nla_get_u8(data[IFLA_VXLAN_L3MISS]))
2597 vxlan->flags |= VXLAN_F_L3MISS;
2598
d342894c 2599 if (data[IFLA_VXLAN_LIMIT])
2600 vxlan->addrmax = nla_get_u32(data[IFLA_VXLAN_LIMIT]);
2601
05f47d69 2602 if (data[IFLA_VXLAN_PORT_RANGE]) {
2603 const struct ifla_vxlan_port_range *p
2604 = nla_data(data[IFLA_VXLAN_PORT_RANGE]);
2605 vxlan->port_min = ntohs(p->low);
2606 vxlan->port_max = ntohs(p->high);
2607 }
2608
823aa873 2609 if (data[IFLA_VXLAN_PORT])
2610 vxlan->dst_port = nla_get_be16(data[IFLA_VXLAN_PORT]);
2611
553675fb 2612 if (vxlan_find_vni(net, vni, vxlan->dst_port)) {
2613 pr_info("duplicate VNI %u\n", vni);
2614 return -EEXIST;
2615 }
2616
1b13c97f
YB
2617 SET_ETHTOOL_OPS(dev, &vxlan_ethtool_ops);
2618
2936b6ab
SS
2619 /* create an fdb entry for a valid default destination */
2620 if (!vxlan_addr_any(&vxlan->default_dst.remote_ip)) {
2621 err = vxlan_fdb_create(vxlan, all_zeros_mac,
2622 &vxlan->default_dst.remote_ip,
2623 NUD_REACHABLE|NUD_PERMANENT,
2624 NLM_F_EXCL|NLM_F_CREATE,
2625 vxlan->dst_port,
2626 vxlan->default_dst.remote_vni,
2627 vxlan->default_dst.remote_ifindex,
2628 NTF_SELF);
2629 if (err)
2630 return err;
2631 }
d342894c 2632
afbd8bae
MR
2633 err = register_netdevice(dev);
2634 if (err) {
ba609e9b 2635 vxlan_fdb_delete_default(vxlan);
afbd8bae
MR
2636 return err;
2637 }
2638
553675fb 2639 list_add(&vxlan->next, &vn->vxlan_list);
553675fb 2640
2641 return 0;
d342894c 2642}
2643
2644static void vxlan_dellink(struct net_device *dev, struct list_head *head)
2645{
fe5c3561 2646 struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id);
d342894c 2647 struct vxlan_dev *vxlan = netdev_priv(dev);
2648
fe5c3561 2649 spin_lock(&vn->sock_lock);
9c2e24e1
PS
2650 if (!hlist_unhashed(&vxlan->hlist))
2651 hlist_del_rcu(&vxlan->hlist);
fe5c3561 2652 spin_unlock(&vn->sock_lock);
2653
553675fb 2654 list_del(&vxlan->next);
d342894c 2655 unregister_netdevice_queue(dev, head);
2656}
2657
2658static size_t vxlan_get_size(const struct net_device *dev)
2659{
2660
2661 return nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_ID */
e4c7ed41 2662 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_VXLAN_GROUP{6} */
d342894c 2663 nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_LINK */
e4c7ed41 2664 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_VXLAN_LOCAL{6} */
d342894c 2665 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TTL */
2666 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_TOS */
2667 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_LEARNING */
e4f67add
DS
2668 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_PROXY */
2669 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_RSC */
2670 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_L2MISS */
2671 nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_L3MISS */
d342894c 2672 nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_AGEING */
2673 nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_LIMIT */
05f47d69 2674 nla_total_size(sizeof(struct ifla_vxlan_port_range)) +
823aa873 2675 nla_total_size(sizeof(__be16))+ /* IFLA_VXLAN_PORT */
d342894c 2676 0;
2677}
2678
2679static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
2680{
2681 const struct vxlan_dev *vxlan = netdev_priv(dev);
c7995c43 2682 const struct vxlan_rdst *dst = &vxlan->default_dst;
05f47d69 2683 struct ifla_vxlan_port_range ports = {
2684 .low = htons(vxlan->port_min),
2685 .high = htons(vxlan->port_max),
2686 };
d342894c 2687
c7995c43 2688 if (nla_put_u32(skb, IFLA_VXLAN_ID, dst->remote_vni))
d342894c 2689 goto nla_put_failure;
2690
e4c7ed41
CW
2691 if (!vxlan_addr_any(&dst->remote_ip)) {
2692 if (dst->remote_ip.sa.sa_family == AF_INET) {
2693 if (nla_put_be32(skb, IFLA_VXLAN_GROUP,
2694 dst->remote_ip.sin.sin_addr.s_addr))
2695 goto nla_put_failure;
2696#if IS_ENABLED(CONFIG_IPV6)
2697 } else {
2698 if (nla_put(skb, IFLA_VXLAN_GROUP6, sizeof(struct in6_addr),
2699 &dst->remote_ip.sin6.sin6_addr))
2700 goto nla_put_failure;
2701#endif
2702 }
2703 }
d342894c 2704
c7995c43 2705 if (dst->remote_ifindex && nla_put_u32(skb, IFLA_VXLAN_LINK, dst->remote_ifindex))
d342894c 2706 goto nla_put_failure;
2707
e4c7ed41
CW
2708 if (!vxlan_addr_any(&vxlan->saddr)) {
2709 if (vxlan->saddr.sa.sa_family == AF_INET) {
2710 if (nla_put_be32(skb, IFLA_VXLAN_LOCAL,
2711 vxlan->saddr.sin.sin_addr.s_addr))
2712 goto nla_put_failure;
2713#if IS_ENABLED(CONFIG_IPV6)
2714 } else {
2715 if (nla_put(skb, IFLA_VXLAN_LOCAL6, sizeof(struct in6_addr),
2716 &vxlan->saddr.sin6.sin6_addr))
2717 goto nla_put_failure;
2718#endif
2719 }
2720 }
d342894c 2721
2722 if (nla_put_u8(skb, IFLA_VXLAN_TTL, vxlan->ttl) ||
2723 nla_put_u8(skb, IFLA_VXLAN_TOS, vxlan->tos) ||
e4f67add
DS
2724 nla_put_u8(skb, IFLA_VXLAN_LEARNING,
2725 !!(vxlan->flags & VXLAN_F_LEARN)) ||
2726 nla_put_u8(skb, IFLA_VXLAN_PROXY,
2727 !!(vxlan->flags & VXLAN_F_PROXY)) ||
2728 nla_put_u8(skb, IFLA_VXLAN_RSC, !!(vxlan->flags & VXLAN_F_RSC)) ||
2729 nla_put_u8(skb, IFLA_VXLAN_L2MISS,
2730 !!(vxlan->flags & VXLAN_F_L2MISS)) ||
2731 nla_put_u8(skb, IFLA_VXLAN_L3MISS,
2732 !!(vxlan->flags & VXLAN_F_L3MISS)) ||
d342894c 2733 nla_put_u32(skb, IFLA_VXLAN_AGEING, vxlan->age_interval) ||
823aa873 2734 nla_put_u32(skb, IFLA_VXLAN_LIMIT, vxlan->addrmax) ||
2735 nla_put_be16(skb, IFLA_VXLAN_PORT, vxlan->dst_port))
d342894c 2736 goto nla_put_failure;
2737
05f47d69 2738 if (nla_put(skb, IFLA_VXLAN_PORT_RANGE, sizeof(ports), &ports))
2739 goto nla_put_failure;
2740
d342894c 2741 return 0;
2742
2743nla_put_failure:
2744 return -EMSGSIZE;
2745}
2746
2747static struct rtnl_link_ops vxlan_link_ops __read_mostly = {
2748 .kind = "vxlan",
2749 .maxtype = IFLA_VXLAN_MAX,
2750 .policy = vxlan_policy,
2751 .priv_size = sizeof(struct vxlan_dev),
2752 .setup = vxlan_setup,
2753 .validate = vxlan_validate,
2754 .newlink = vxlan_newlink,
2755 .dellink = vxlan_dellink,
2756 .get_size = vxlan_get_size,
2757 .fill_info = vxlan_fill_info,
2758};
2759
acaf4e70
DB
2760static void vxlan_handle_lowerdev_unregister(struct vxlan_net *vn,
2761 struct net_device *dev)
2762{
2763 struct vxlan_dev *vxlan, *next;
2764 LIST_HEAD(list_kill);
2765
2766 list_for_each_entry_safe(vxlan, next, &vn->vxlan_list, next) {
2767 struct vxlan_rdst *dst = &vxlan->default_dst;
2768
2769 /* In case we created vxlan device with carrier
2770 * and we loose the carrier due to module unload
2771 * we also need to remove vxlan device. In other
2772 * cases, it's not necessary and remote_ifindex
2773 * is 0 here, so no matches.
2774 */
2775 if (dst->remote_ifindex == dev->ifindex)
2776 vxlan_dellink(vxlan->dev, &list_kill);
2777 }
2778
2779 unregister_netdevice_many(&list_kill);
2780}
2781
2782static int vxlan_lowerdev_event(struct notifier_block *unused,
2783 unsigned long event, void *ptr)
2784{
2785 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
783c1463 2786 struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id);
acaf4e70 2787
783c1463 2788 if (event == NETDEV_UNREGISTER)
acaf4e70
DB
2789 vxlan_handle_lowerdev_unregister(vn, dev);
2790
2791 return NOTIFY_DONE;
2792}
2793
2794static struct notifier_block vxlan_notifier_block __read_mostly = {
2795 .notifier_call = vxlan_lowerdev_event,
2796};
2797
d342894c 2798static __net_init int vxlan_init_net(struct net *net)
2799{
2800 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
31fec5aa 2801 unsigned int h;
d342894c 2802
553675fb 2803 INIT_LIST_HEAD(&vn->vxlan_list);
1c51a915 2804 spin_lock_init(&vn->sock_lock);
d342894c 2805
553675fb 2806 for (h = 0; h < PORT_HASH_SIZE; ++h)
2807 INIT_HLIST_HEAD(&vn->sock_list[h]);
d342894c 2808
2809 return 0;
2810}
2811
d342894c 2812static struct pernet_operations vxlan_net_ops = {
2813 .init = vxlan_init_net,
d342894c 2814 .id = &vxlan_net_id,
2815 .size = sizeof(struct vxlan_net),
2816};
2817
2818static int __init vxlan_init_module(void)
2819{
2820 int rc;
2821
758c57d1
SH
2822 vxlan_wq = alloc_workqueue("vxlan", 0, 0);
2823 if (!vxlan_wq)
2824 return -ENOMEM;
2825
d342894c 2826 get_random_bytes(&vxlan_salt, sizeof(vxlan_salt));
2827
783c1463 2828 rc = register_pernet_subsys(&vxlan_net_ops);
d342894c 2829 if (rc)
2830 goto out1;
2831
acaf4e70 2832 rc = register_netdevice_notifier(&vxlan_notifier_block);
d342894c 2833 if (rc)
2834 goto out2;
2835
acaf4e70
DB
2836 rc = rtnl_link_register(&vxlan_link_ops);
2837 if (rc)
2838 goto out3;
d342894c 2839
acaf4e70
DB
2840 return 0;
2841out3:
2842 unregister_netdevice_notifier(&vxlan_notifier_block);
d342894c 2843out2:
783c1463 2844 unregister_pernet_subsys(&vxlan_net_ops);
d342894c 2845out1:
758c57d1 2846 destroy_workqueue(vxlan_wq);
d342894c 2847 return rc;
2848}
7332a13b 2849late_initcall(vxlan_init_module);
d342894c 2850
2851static void __exit vxlan_cleanup_module(void)
2852{
b7153984 2853 rtnl_link_unregister(&vxlan_link_ops);
acaf4e70 2854 unregister_netdevice_notifier(&vxlan_notifier_block);
758c57d1 2855 destroy_workqueue(vxlan_wq);
783c1463
DB
2856 unregister_pernet_subsys(&vxlan_net_ops);
2857 /* rcu_barrier() is called by netns */
d342894c 2858}
2859module_exit(vxlan_cleanup_module);
2860
2861MODULE_LICENSE("GPL");
2862MODULE_VERSION(VXLAN_VERSION);
3b8df3c6 2863MODULE_AUTHOR("Stephen Hemminger <stephen@networkplumber.org>");
ead5139a 2864MODULE_DESCRIPTION("Driver for VXLAN encapsulated traffic");
d342894c 2865MODULE_ALIAS_RTNL_LINK("vxlan");
This page took 0.324925 seconds and 5 git commands to generate.