Lines Matching refs:vxlan

61 static int vxlan_sock_add(struct vxlan_dev *vxlan);
63 static void vxlan_vs_del_dev(struct vxlan_dev *vxlan);
240 if (node->vxlan->default_dst.remote_vni != vni) in vxlan_vs_find_vni()
244 const struct vxlan_config *cfg = &node->vxlan->cfg; in vxlan_vs_find_vni()
251 return node->vxlan; in vxlan_vs_find_vni()
272 static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan, in vxlan_fdb_info() argument
299 ndm->ndm_ifindex = vxlan->dev->ifindex; in vxlan_fdb_info()
303 if (!net_eq(dev_net(vxlan->dev), vxlan->net) && in vxlan_fdb_info()
305 peernet2id(dev_net(vxlan->dev), vxlan->net))) in vxlan_fdb_info()
314 if (rdst->remote_port && rdst->remote_port != vxlan->cfg.dst_port && in vxlan_fdb_info()
317 if (rdst->remote_vni != vxlan->default_dst.remote_vni && in vxlan_fdb_info()
320 if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) && fdb->vni && in vxlan_fdb_info()
356 static void vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, in vxlan_fdb_notify() argument
359 struct net *net = dev_net(vxlan->dev); in vxlan_fdb_notify()
367 err = vxlan_fdb_info(skb, vxlan, fdb, 0, 0, type, 0, rd); in vxlan_fdb_notify()
384 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_ip_miss() local
393 vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH); in vxlan_ip_miss()
396 static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN]) in vxlan_fdb_miss() argument
405 vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH); in vxlan_fdb_miss()
431 static inline struct hlist_head *vxlan_fdb_head(struct vxlan_dev *vxlan, in vxlan_fdb_head() argument
434 if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) in vxlan_fdb_head()
435 return &vxlan->fdb_head[eth_vni_hash(mac, vni)]; in vxlan_fdb_head()
437 return &vxlan->fdb_head[eth_hash(mac)]; in vxlan_fdb_head()
441 static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan, in __vxlan_find_mac() argument
444 struct hlist_head *head = vxlan_fdb_head(vxlan, mac, vni); in __vxlan_find_mac()
449 if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) { in __vxlan_find_mac()
461 static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan, in vxlan_find_mac() argument
466 f = __vxlan_find_mac(vxlan, mac, vni); in vxlan_find_mac()
640 static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan, in vxlan_fdb_alloc() argument
659 static int vxlan_fdb_create(struct vxlan_dev *vxlan, in vxlan_fdb_create() argument
669 if (vxlan->cfg.addrmax && in vxlan_fdb_create()
670 vxlan->addrcnt >= vxlan->cfg.addrmax) in vxlan_fdb_create()
673 netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip); in vxlan_fdb_create()
674 f = vxlan_fdb_alloc(vxlan, mac, state, src_vni, ndm_flags); in vxlan_fdb_create()
684 ++vxlan->addrcnt; in vxlan_fdb_create()
686 vxlan_fdb_head(vxlan, mac, src_vni)); in vxlan_fdb_create()
694 static int vxlan_fdb_update(struct vxlan_dev *vxlan, in vxlan_fdb_update() argument
705 f = __vxlan_find_mac(vxlan, mac, src_vni); in vxlan_fdb_update()
708 netdev_dbg(vxlan->dev, in vxlan_fdb_update()
749 netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip); in vxlan_fdb_update()
750 rc = vxlan_fdb_create(vxlan, mac, ip, state, port, src_vni, in vxlan_fdb_update()
760 vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH); in vxlan_fdb_update()
778 static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, in vxlan_fdb_destroy() argument
781 netdev_dbg(vxlan->dev, in vxlan_fdb_destroy()
784 --vxlan->addrcnt; in vxlan_fdb_destroy()
786 vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_DELNEIGH); in vxlan_fdb_destroy()
800 static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, in vxlan_fdb_dst_destroy() argument
804 vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH); in vxlan_fdb_dst_destroy()
808 static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan, in vxlan_fdb_parse() argument
812 struct net *net = dev_net(vxlan->dev); in vxlan_fdb_parse()
820 union vxlan_addr *remote = &vxlan->default_dst.remote_ip; in vxlan_fdb_parse()
837 *port = vxlan->cfg.dst_port; in vxlan_fdb_parse()
845 *vni = vxlan->default_dst.remote_vni; in vxlan_fdb_parse()
853 *src_vni = vxlan->default_dst.remote_vni; in vxlan_fdb_parse()
877 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_fdb_add() local
894 err = vxlan_fdb_parse(tb, vxlan, &ip, &port, &src_vni, &vni, &ifindex); in vxlan_fdb_add()
898 if (vxlan->default_dst.remote_ip.sa.sa_family != ip.sa.sa_family) in vxlan_fdb_add()
901 spin_lock_bh(&vxlan->hash_lock); in vxlan_fdb_add()
902 err = vxlan_fdb_update(vxlan, addr, &ip, ndm->ndm_state, flags, in vxlan_fdb_add()
904 spin_unlock_bh(&vxlan->hash_lock); in vxlan_fdb_add()
909 static int __vxlan_fdb_delete(struct vxlan_dev *vxlan, in __vxlan_fdb_delete() argument
918 f = vxlan_find_mac(vxlan, addr, src_vni); in __vxlan_fdb_delete()
932 vxlan_fdb_dst_destroy(vxlan, f, rd); in __vxlan_fdb_delete()
936 vxlan_fdb_destroy(vxlan, f, true); in __vxlan_fdb_delete()
947 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_fdb_delete() local
954 err = vxlan_fdb_parse(tb, vxlan, &ip, &port, &src_vni, &vni, &ifindex); in vxlan_fdb_delete()
958 spin_lock_bh(&vxlan->hash_lock); in vxlan_fdb_delete()
959 err = __vxlan_fdb_delete(vxlan, addr, ip, port, src_vni, vni, ifindex, in vxlan_fdb_delete()
961 spin_unlock_bh(&vxlan->hash_lock); in vxlan_fdb_delete()
971 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_fdb_dump() local
978 hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) { in vxlan_fdb_dump()
985 err = vxlan_fdb_info(skb, vxlan, f, in vxlan_fdb_dump()
1009 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_snoop() local
1019 f = vxlan_find_mac(vxlan, src_mac, vni); in vxlan_snoop()
1038 vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH); in vxlan_snoop()
1041 spin_lock(&vxlan->hash_lock); in vxlan_snoop()
1045 vxlan_fdb_update(vxlan, src_mac, src_ip, in vxlan_snoop()
1048 vxlan->cfg.dst_port, in vxlan_snoop()
1050 vxlan->default_dst.remote_vni, in vxlan_snoop()
1052 spin_unlock(&vxlan->hash_lock); in vxlan_snoop()
1061 struct vxlan_dev *vxlan; in vxlan_group_used() local
1081 list_for_each_entry(vxlan, &vn->vxlan_list, next) { in vxlan_group_used()
1082 if (!netif_running(vxlan->dev) || vxlan == dev) in vxlan_group_used()
1086 rtnl_dereference(vxlan->vn4_sock) != sock4) in vxlan_group_used()
1090 rtnl_dereference(vxlan->vn6_sock) != sock6) in vxlan_group_used()
1094 if (!vxlan_addr_equal(&vxlan->default_dst.remote_ip, in vxlan_group_used()
1098 if (vxlan->default_dst.remote_ifindex != in vxlan_group_used()
1129 static void vxlan_sock_release(struct vxlan_dev *vxlan) in vxlan_sock_release() argument
1131 struct vxlan_sock *sock4 = rtnl_dereference(vxlan->vn4_sock); in vxlan_sock_release()
1133 struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock); in vxlan_sock_release()
1135 RCU_INIT_POINTER(vxlan->vn6_sock, NULL); in vxlan_sock_release()
1138 RCU_INIT_POINTER(vxlan->vn4_sock, NULL); in vxlan_sock_release()
1141 vxlan_vs_del_dev(vxlan); in vxlan_sock_release()
1159 static int vxlan_igmp_join(struct vxlan_dev *vxlan) in vxlan_igmp_join() argument
1162 union vxlan_addr *ip = &vxlan->default_dst.remote_ip; in vxlan_igmp_join()
1163 int ifindex = vxlan->default_dst.remote_ifindex; in vxlan_igmp_join()
1167 struct vxlan_sock *sock4 = rtnl_dereference(vxlan->vn4_sock); in vxlan_igmp_join()
1179 struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock); in vxlan_igmp_join()
1193 static int vxlan_igmp_leave(struct vxlan_dev *vxlan) in vxlan_igmp_leave() argument
1196 union vxlan_addr *ip = &vxlan->default_dst.remote_ip; in vxlan_igmp_leave()
1197 int ifindex = vxlan->default_dst.remote_ifindex; in vxlan_igmp_leave()
1201 struct vxlan_sock *sock4 = rtnl_dereference(vxlan->vn4_sock); in vxlan_igmp_leave()
1213 struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock); in vxlan_igmp_leave()
1307 static bool vxlan_set_mac(struct vxlan_dev *vxlan, in vxlan_set_mac() argument
1315 skb->protocol = eth_type_trans(skb, vxlan->dev); in vxlan_set_mac()
1319 if (ether_addr_equal(eth_hdr(skb)->h_source, vxlan->dev->dev_addr)) in vxlan_set_mac()
1333 if ((vxlan->cfg.flags & VXLAN_F_LEARN) && in vxlan_set_mac()
1368 struct vxlan_dev *vxlan; in vxlan_rcv() local
1400 vxlan = vxlan_vs_find_vni(vs, skb->dev->ifindex, vni); in vxlan_rcv()
1401 if (!vxlan) in vxlan_rcv()
1414 !net_eq(vxlan->net, dev_net(vxlan->dev)))) in vxlan_rcv()
1455 if (!vxlan_set_mac(vxlan, vs, skb, vni)) in vxlan_rcv()
1459 skb->dev = vxlan->dev; in vxlan_rcv()
1467 ++vxlan->dev->stats.rx_frame_errors; in vxlan_rcv()
1468 ++vxlan->dev->stats.rx_errors; in vxlan_rcv()
1472 stats = this_cpu_ptr(vxlan->dev->tstats); in vxlan_rcv()
1478 gro_cells_receive(&vxlan->gro_cells, skb); in vxlan_rcv()
1489 struct vxlan_dev *vxlan = netdev_priv(dev); in arp_reduce() local
1534 f = vxlan_find_mac(vxlan, n->ha, vni); in arp_reduce()
1556 } else if (vxlan->cfg.flags & VXLAN_F_L3MISS) { in arp_reduce()
1659 struct vxlan_dev *vxlan = netdev_priv(dev); in neigh_reduce() local
1689 f = vxlan_find_mac(vxlan, n->ha, vni); in neigh_reduce()
1707 } else if (vxlan->cfg.flags & VXLAN_F_L3MISS) { in neigh_reduce()
1724 struct vxlan_dev *vxlan = netdev_priv(dev); in route_shortcircuit() local
1740 if (!n && (vxlan->cfg.flags & VXLAN_F_L3MISS)) { in route_shortcircuit()
1761 if (!n && (vxlan->cfg.flags & VXLAN_F_L3MISS)) { in route_shortcircuit()
1890 static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan, struct net_device *dev, in vxlan_get_route() argument
1922 rt = ip_route_output_key(vxlan->net, &fl4); in vxlan_get_route()
1941 static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan, in vxlan6_get_route() argument
1978 err = ipv6_stub->ipv6_dst_lookup(vxlan->net, in vxlan6_get_route()
2046 struct vxlan_dev *vxlan, in encap_bypass_if_local() argument
2065 dst_vxlan = vxlan_find_vni(vxlan->net, dst_ifindex, vni, in encap_bypass_if_local()
2067 vxlan->cfg.flags); in encap_bypass_if_local()
2074 vxlan_encap_bypass(skb, vxlan, dst_vxlan, vni); in encap_bypass_if_local()
2087 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_xmit_one() local
2099 u32 flags = vxlan->cfg.flags; in vxlan_xmit_one()
2101 bool xnet = !net_eq(vxlan->net, dev_net(vxlan->dev)); in vxlan_xmit_one()
2110 vxlan_encap_bypass(skb, vxlan, vxlan, default_vni); in vxlan_xmit_one()
2116 dst_port = rdst->remote_port ? rdst->remote_port : vxlan->cfg.dst_port; in vxlan_xmit_one()
2119 local_ip = vxlan->cfg.saddr; in vxlan_xmit_one()
2125 ttl = vxlan->cfg.ttl; in vxlan_xmit_one()
2130 tos = vxlan->cfg.tos; in vxlan_xmit_one()
2138 label = vxlan->cfg.label; in vxlan_xmit_one()
2154 dst_port = info->key.tp_dst ? : vxlan->cfg.dst_port; in vxlan_xmit_one()
2166 src_port = udp_flow_src_port(dev_net(dev), skb, vxlan->cfg.port_min, in vxlan_xmit_one()
2167 vxlan->cfg.port_max, true); in vxlan_xmit_one()
2171 struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock); in vxlan_xmit_one()
2175 rt = vxlan_get_route(vxlan, dev, sock4, skb, ifindex, tos, in vxlan_xmit_one()
2187 err = encap_bypass_if_local(skb, dev, vxlan, dst, in vxlan_xmit_one()
2211 struct vxlan_sock *sock6 = rcu_dereference(vxlan->vn6_sock); in vxlan_xmit_one()
2213 ndst = vxlan6_get_route(vxlan, dev, sock6, skb, ifindex, tos, in vxlan_xmit_one()
2227 err = encap_bypass_if_local(skb, dev, vxlan, dst, in vxlan_xmit_one()
2278 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_xmit() local
2290 if (vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) { in vxlan_xmit()
2303 if (vxlan->cfg.flags & VXLAN_F_PROXY) { in vxlan_xmit()
2322 f = vxlan_find_mac(vxlan, eth->h_dest, vni); in vxlan_xmit()
2325 if (f && (f->flags & NTF_ROUTER) && (vxlan->cfg.flags & VXLAN_F_RSC) && in vxlan_xmit()
2330 f = vxlan_find_mac(vxlan, eth->h_dest, vni); in vxlan_xmit()
2334 f = vxlan_find_mac(vxlan, all_zeros_mac, vni); in vxlan_xmit()
2336 if ((vxlan->cfg.flags & VXLAN_F_L2MISS) && in vxlan_xmit()
2338 vxlan_fdb_miss(vxlan, eth->h_dest); in vxlan_xmit()
2368 struct vxlan_dev *vxlan = from_timer(vxlan, t, age_timer); in vxlan_cleanup() local
2372 if (!netif_running(vxlan->dev)) in vxlan_cleanup()
2378 spin_lock_bh(&vxlan->hash_lock); in vxlan_cleanup()
2379 hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { in vxlan_cleanup()
2390 timeout = f->used + vxlan->cfg.age_interval * HZ; in vxlan_cleanup()
2392 netdev_dbg(vxlan->dev, in vxlan_cleanup()
2396 vxlan_fdb_destroy(vxlan, f, true); in vxlan_cleanup()
2400 spin_unlock_bh(&vxlan->hash_lock); in vxlan_cleanup()
2403 mod_timer(&vxlan->age_timer, next_timer); in vxlan_cleanup()
2406 static void vxlan_vs_del_dev(struct vxlan_dev *vxlan) in vxlan_vs_del_dev() argument
2408 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id); in vxlan_vs_del_dev()
2411 hlist_del_init_rcu(&vxlan->hlist4.hlist); in vxlan_vs_del_dev()
2413 hlist_del_init_rcu(&vxlan->hlist6.hlist); in vxlan_vs_del_dev()
2418 static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan, in vxlan_vs_add_dev() argument
2421 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id); in vxlan_vs_add_dev()
2422 __be32 vni = vxlan->default_dst.remote_vni; in vxlan_vs_add_dev()
2424 node->vxlan = vxlan; in vxlan_vs_add_dev()
2440 static void vxlan_fdb_delete_default(struct vxlan_dev *vxlan, __be32 vni) in vxlan_fdb_delete_default() argument
2444 spin_lock_bh(&vxlan->hash_lock); in vxlan_fdb_delete_default()
2445 f = __vxlan_find_mac(vxlan, all_zeros_mac, vni); in vxlan_fdb_delete_default()
2447 vxlan_fdb_destroy(vxlan, f, true); in vxlan_fdb_delete_default()
2448 spin_unlock_bh(&vxlan->hash_lock); in vxlan_fdb_delete_default()
2453 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_uninit() local
2455 vxlan_fdb_delete_default(vxlan, vxlan->cfg.vni); in vxlan_uninit()
2463 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_open() local
2466 ret = vxlan_sock_add(vxlan); in vxlan_open()
2470 if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip)) { in vxlan_open()
2471 ret = vxlan_igmp_join(vxlan); in vxlan_open()
2475 vxlan_sock_release(vxlan); in vxlan_open()
2480 if (vxlan->cfg.age_interval) in vxlan_open()
2481 mod_timer(&vxlan->age_timer, jiffies + FDB_AGE_INTERVAL); in vxlan_open()
2487 static void vxlan_flush(struct vxlan_dev *vxlan, bool do_all) in vxlan_flush() argument
2491 spin_lock_bh(&vxlan->hash_lock); in vxlan_flush()
2494 hlist_for_each_safe(p, n, &vxlan->fdb_head[h]) { in vxlan_flush()
2501 vxlan_fdb_destroy(vxlan, f, true); in vxlan_flush()
2504 spin_unlock_bh(&vxlan->hash_lock); in vxlan_flush()
2510 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_stop() local
2511 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id); in vxlan_stop()
2514 if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip) && in vxlan_stop()
2515 !vxlan_group_used(vn, vxlan)) in vxlan_stop()
2516 ret = vxlan_igmp_leave(vxlan); in vxlan_stop()
2518 del_timer_sync(&vxlan->age_timer); in vxlan_stop()
2520 vxlan_flush(vxlan, false); in vxlan_stop()
2521 vxlan_sock_release(vxlan); in vxlan_stop()
2533 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_change_mtu() local
2534 struct vxlan_rdst *dst = &vxlan->default_dst; in vxlan_change_mtu()
2535 struct net_device *lowerdev = __dev_get_by_index(vxlan->net, in vxlan_change_mtu()
2537 bool use_ipv6 = !!(vxlan->cfg.flags & VXLAN_F_IPV6); in vxlan_change_mtu()
2555 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_fill_metadata_dst() local
2559 sport = udp_flow_src_port(dev_net(dev), skb, vxlan->cfg.port_min, in vxlan_fill_metadata_dst()
2560 vxlan->cfg.port_max, true); in vxlan_fill_metadata_dst()
2561 dport = info->key.tp_dst ? : vxlan->cfg.dst_port; in vxlan_fill_metadata_dst()
2564 struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock); in vxlan_fill_metadata_dst()
2567 rt = vxlan_get_route(vxlan, dev, sock4, skb, 0, info->key.tos, in vxlan_fill_metadata_dst()
2576 struct vxlan_sock *sock6 = rcu_dereference(vxlan->vn6_sock); in vxlan_fill_metadata_dst()
2579 ndst = vxlan6_get_route(vxlan, dev, sock6, skb, 0, info->key.tos, in vxlan_fill_metadata_dst()
2661 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_setup() local
2685 INIT_LIST_HEAD(&vxlan->next); in vxlan_setup()
2686 spin_lock_init(&vxlan->hash_lock); in vxlan_setup()
2688 timer_setup(&vxlan->age_timer, vxlan_cleanup, TIMER_DEFERRABLE); in vxlan_setup()
2690 vxlan->dev = dev; in vxlan_setup()
2692 gro_cells_init(&vxlan->gro_cells, dev); in vxlan_setup()
2695 INIT_HLIST_HEAD(&vxlan->fdb_head[h]); in vxlan_setup()
2892 static int __vxlan_sock_add(struct vxlan_dev *vxlan, bool ipv6) in __vxlan_sock_add() argument
2894 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id); in __vxlan_sock_add()
2898 if (!vxlan->cfg.no_share) { in __vxlan_sock_add()
2900 vs = vxlan_find_sock(vxlan->net, ipv6 ? AF_INET6 : AF_INET, in __vxlan_sock_add()
2901 vxlan->cfg.dst_port, vxlan->cfg.flags); in __vxlan_sock_add()
2909 vs = vxlan_socket_create(vxlan->net, ipv6, in __vxlan_sock_add()
2910 vxlan->cfg.dst_port, vxlan->cfg.flags); in __vxlan_sock_add()
2915 rcu_assign_pointer(vxlan->vn6_sock, vs); in __vxlan_sock_add()
2916 node = &vxlan->hlist6; in __vxlan_sock_add()
2920 rcu_assign_pointer(vxlan->vn4_sock, vs); in __vxlan_sock_add()
2921 node = &vxlan->hlist4; in __vxlan_sock_add()
2923 vxlan_vs_add_dev(vs, vxlan, node); in __vxlan_sock_add()
2927 static int vxlan_sock_add(struct vxlan_dev *vxlan) in vxlan_sock_add() argument
2929 bool metadata = vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA; in vxlan_sock_add()
2930 bool ipv6 = vxlan->cfg.flags & VXLAN_F_IPV6 || metadata; in vxlan_sock_add()
2934 RCU_INIT_POINTER(vxlan->vn4_sock, NULL); in vxlan_sock_add()
2936 RCU_INIT_POINTER(vxlan->vn6_sock, NULL); in vxlan_sock_add()
2938 ret = __vxlan_sock_add(vxlan, true); in vxlan_sock_add()
2944 ret = __vxlan_sock_add(vxlan, false); in vxlan_sock_add()
2946 vxlan_sock_release(vxlan); in vxlan_sock_add()
3118 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_config_apply() local
3119 struct vxlan_rdst *dst = &vxlan->default_dst; in vxlan_config_apply()
3133 vxlan->net = src_net; in vxlan_config_apply()
3166 memcpy(&vxlan->cfg, conf, sizeof(*conf)); in vxlan_config_apply()
3173 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_dev_configure() local
3177 ret = vxlan_config_validate(src_net, conf, &lowerdev, vxlan, extack); in vxlan_dev_configure()
3191 struct vxlan_dev *vxlan = netdev_priv(dev); in __vxlan_dev_create() local
3202 if (!vxlan_addr_any(&vxlan->default_dst.remote_ip)) { in __vxlan_dev_create()
3203 err = vxlan_fdb_create(vxlan, all_zeros_mac, in __vxlan_dev_create()
3204 &vxlan->default_dst.remote_ip, in __vxlan_dev_create()
3206 vxlan->cfg.dst_port, in __vxlan_dev_create()
3207 vxlan->default_dst.remote_vni, in __vxlan_dev_create()
3208 vxlan->default_dst.remote_vni, in __vxlan_dev_create()
3209 vxlan->default_dst.remote_ifindex, in __vxlan_dev_create()
3227 vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH); in __vxlan_dev_create()
3229 list_add(&vxlan->next, &vn->vxlan_list); in __vxlan_dev_create()
3233 vxlan_fdb_destroy(vxlan, f, false); in __vxlan_dev_create()
3241 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_nl2conf() local
3247 memcpy(conf, &vxlan->cfg, sizeof(*conf)); in vxlan_nl2conf()
3465 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_changelink() local
3466 struct vxlan_rdst *dst = &vxlan->default_dst; in vxlan_changelink()
3479 err = vxlan_dev_configure(vxlan->net, dev, &conf, true, extack); in vxlan_changelink()
3485 spin_lock_bh(&vxlan->hash_lock); in vxlan_changelink()
3487 __vxlan_fdb_delete(vxlan, all_zeros_mac, in vxlan_changelink()
3489 vxlan->cfg.dst_port, in vxlan_changelink()
3495 err = vxlan_fdb_create(vxlan, all_zeros_mac, in vxlan_changelink()
3498 vxlan->cfg.dst_port, in vxlan_changelink()
3504 spin_unlock_bh(&vxlan->hash_lock); in vxlan_changelink()
3507 vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH); in vxlan_changelink()
3509 spin_unlock_bh(&vxlan->hash_lock); in vxlan_changelink()
3517 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_dellink() local
3519 vxlan_flush(vxlan, true); in vxlan_dellink()
3521 gro_cells_destroy(&vxlan->gro_cells); in vxlan_dellink()
3522 list_del(&vxlan->next); in vxlan_dellink()
3557 const struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_fill_info() local
3558 const struct vxlan_rdst *dst = &vxlan->default_dst; in vxlan_fill_info()
3560 .low = htons(vxlan->cfg.port_min), in vxlan_fill_info()
3561 .high = htons(vxlan->cfg.port_max), in vxlan_fill_info()
3584 if (!vxlan_addr_any(&vxlan->cfg.saddr)) { in vxlan_fill_info()
3585 if (vxlan->cfg.saddr.sa.sa_family == AF_INET) { in vxlan_fill_info()
3587 vxlan->cfg.saddr.sin.sin_addr.s_addr)) in vxlan_fill_info()
3592 &vxlan->cfg.saddr.sin6.sin6_addr)) in vxlan_fill_info()
3598 if (nla_put_u8(skb, IFLA_VXLAN_TTL, vxlan->cfg.ttl) || in vxlan_fill_info()
3600 !!(vxlan->cfg.flags & VXLAN_F_TTL_INHERIT)) || in vxlan_fill_info()
3601 nla_put_u8(skb, IFLA_VXLAN_TOS, vxlan->cfg.tos) || in vxlan_fill_info()
3602 nla_put_be32(skb, IFLA_VXLAN_LABEL, vxlan->cfg.label) || in vxlan_fill_info()
3604 !!(vxlan->cfg.flags & VXLAN_F_LEARN)) || in vxlan_fill_info()
3606 !!(vxlan->cfg.flags & VXLAN_F_PROXY)) || in vxlan_fill_info()
3608 !!(vxlan->cfg.flags & VXLAN_F_RSC)) || in vxlan_fill_info()
3610 !!(vxlan->cfg.flags & VXLAN_F_L2MISS)) || in vxlan_fill_info()
3612 !!(vxlan->cfg.flags & VXLAN_F_L3MISS)) || in vxlan_fill_info()
3614 !!(vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA)) || in vxlan_fill_info()
3615 nla_put_u32(skb, IFLA_VXLAN_AGEING, vxlan->cfg.age_interval) || in vxlan_fill_info()
3616 nla_put_u32(skb, IFLA_VXLAN_LIMIT, vxlan->cfg.addrmax) || in vxlan_fill_info()
3617 nla_put_be16(skb, IFLA_VXLAN_PORT, vxlan->cfg.dst_port) || in vxlan_fill_info()
3619 !(vxlan->cfg.flags & VXLAN_F_UDP_ZERO_CSUM_TX)) || in vxlan_fill_info()
3621 !!(vxlan->cfg.flags & VXLAN_F_UDP_ZERO_CSUM6_TX)) || in vxlan_fill_info()
3623 !!(vxlan->cfg.flags & VXLAN_F_UDP_ZERO_CSUM6_RX)) || in vxlan_fill_info()
3625 !!(vxlan->cfg.flags & VXLAN_F_REMCSUM_TX)) || in vxlan_fill_info()
3627 !!(vxlan->cfg.flags & VXLAN_F_REMCSUM_RX))) in vxlan_fill_info()
3633 if (vxlan->cfg.flags & VXLAN_F_GBP && in vxlan_fill_info()
3637 if (vxlan->cfg.flags & VXLAN_F_GPE && in vxlan_fill_info()
3641 if (vxlan->cfg.flags & VXLAN_F_REMCSUM_NOPARTIAL && in vxlan_fill_info()
3653 struct vxlan_dev *vxlan = netdev_priv(dev); in vxlan_get_link_net() local
3655 return vxlan->net; in vxlan_get_link_net()
3710 struct vxlan_dev *vxlan, *next; in vxlan_handle_lowerdev_unregister() local
3713 list_for_each_entry_safe(vxlan, next, &vn->vxlan_list, next) { in vxlan_handle_lowerdev_unregister()
3714 struct vxlan_rdst *dst = &vxlan->default_dst; in vxlan_handle_lowerdev_unregister()
3723 vxlan_dellink(vxlan->dev, &list_kill); in vxlan_handle_lowerdev_unregister()
3769 struct vxlan_dev *vxlan, *next; in vxlan_destroy_tunnels() local
3777 list_for_each_entry_safe(vxlan, next, &vn->vxlan_list, next) { in vxlan_destroy_tunnels()
3781 if (!net_eq(dev_net(vxlan->dev), net)) { in vxlan_destroy_tunnels()
3782 gro_cells_destroy(&vxlan->gro_cells); in vxlan_destroy_tunnels()
3783 unregister_netdevice_queue(vxlan->dev, head); in vxlan_destroy_tunnels()