Lines Matching refs:vs
103 static inline bool vxlan_collect_metadata(struct vxlan_sock *vs) in vxlan_collect_metadata() argument
105 return vs->flags & VXLAN_F_COLLECT_METADATA || in vxlan_collect_metadata()
200 static inline struct hlist_head *vni_head(struct vxlan_sock *vs, u32 id) in vni_head() argument
202 return &vs->vni_list[hash_32(id, VNI_HASH_BITS)]; in vni_head()
232 struct vxlan_sock *vs; in vxlan_find_sock() local
236 hlist_for_each_entry_rcu(vs, vs_head(net, port), hlist) { in vxlan_find_sock()
237 if (inet_sk(vs->sock->sk)->inet_sport == port && in vxlan_find_sock()
238 vxlan_get_sk_family(vs) == family && in vxlan_find_sock()
239 vs->flags == flags) in vxlan_find_sock()
240 return vs; in vxlan_find_sock()
245 static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, u32 id) in vxlan_vs_find_vni() argument
249 hlist_for_each_entry_rcu(vxlan, vni_head(vs, id), hlist) { in vxlan_vs_find_vni()
262 struct vxlan_sock *vs; in vxlan_find_vni() local
264 vs = vxlan_find_sock(net, family, port, flags); in vxlan_find_vni()
265 if (!vs) in vxlan_find_vni()
268 return vxlan_vs_find_vni(vs, id); in vxlan_find_vni()
550 struct vxlan_sock *vs = container_of(uoff, struct vxlan_sock, in vxlan_gro_receive() local
570 if ((flags & VXLAN_HF_RCO) && (vs->flags & VXLAN_F_REMCSUM_RX)) { in vxlan_gro_receive()
573 !!(vs->flags & in vxlan_gro_receive()
614 static void vxlan_notify_add_rx_port(struct vxlan_sock *vs) in vxlan_notify_add_rx_port() argument
617 struct sock *sk = vs->sock->sk; in vxlan_notify_add_rx_port()
619 sa_family_t sa_family = vxlan_get_sk_family(vs); in vxlan_notify_add_rx_port()
624 err = udp_add_offload(&vs->udp_offloads); in vxlan_notify_add_rx_port()
639 static void vxlan_notify_del_rx_port(struct vxlan_sock *vs) in vxlan_notify_del_rx_port() argument
642 struct sock *sk = vs->sock->sk; in vxlan_notify_del_rx_port()
644 sa_family_t sa_family = vxlan_get_sk_family(vs); in vxlan_notify_del_rx_port()
656 udp_del_offload(&vs->udp_offloads); in vxlan_notify_del_rx_port()
1035 static void __vxlan_sock_release(struct vxlan_sock *vs) in __vxlan_sock_release() argument
1039 if (!vs) in __vxlan_sock_release()
1041 if (!atomic_dec_and_test(&vs->refcnt)) in __vxlan_sock_release()
1044 vn = net_generic(sock_net(vs->sock->sk), vxlan_net_id); in __vxlan_sock_release()
1046 hlist_del_rcu(&vs->hlist); in __vxlan_sock_release()
1047 vxlan_notify_del_rx_port(vs); in __vxlan_sock_release()
1050 queue_work(vxlan_wq, &vs->del_work); in __vxlan_sock_release()
1151 static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb, in vxlan_rcv() argument
1163 if (vs->flags & VXLAN_F_COLLECT_METADATA) in vxlan_rcv()
1167 vxlan = vxlan_vs_find_vni(vs, vni); in vxlan_rcv()
1181 if (vxlan_get_sk_family(vs) == AF_INET) { in vxlan_rcv()
1204 if (!(vs->flags & VXLAN_F_COLLECT_METADATA)) in vxlan_rcv()
1249 struct vxlan_sock *vs; in vxlan_udp_encap_recv() local
1274 vs = rcu_dereference_sk_user_data(sk); in vxlan_udp_encap_recv()
1275 if (!vs) in vxlan_udp_encap_recv()
1278 if ((flags & VXLAN_HF_RCO) && (vs->flags & VXLAN_F_REMCSUM_RX)) { in vxlan_udp_encap_recv()
1280 !!(vs->flags & VXLAN_F_REMCSUM_NOPARTIAL)); in vxlan_udp_encap_recv()
1288 if (vxlan_collect_metadata(vs)) { in vxlan_udp_encap_recv()
1289 tun_dst = udp_tun_rx_dst(skb, vxlan_get_sk_family(vs), TUNNEL_KEY, in vxlan_udp_encap_recv()
1303 if ((flags & VXLAN_HF_GBP) && (vs->flags & VXLAN_F_GBP)) { in vxlan_udp_encap_recv()
1336 vxlan_rcv(vs, skb, md, vni >> 8, tun_dst); in vxlan_udp_encap_recv()
2258 static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxlan) in vxlan_vs_add_dev() argument
2264 hlist_add_head_rcu(&vxlan->hlist, vni_head(vs, vni)); in vxlan_vs_add_dev()
2493 struct vxlan_sock *vs; in vxlan_get_rx_port() local
2502 hlist_for_each_entry_rcu(vs, &vn->sock_list[i], hlist) { in vxlan_get_rx_port()
2503 port = inet_sk(vs->sock->sk)->inet_sport; in vxlan_get_rx_port()
2504 sa_family = vxlan_get_sk_family(vs); in vxlan_get_rx_port()
2635 struct vxlan_sock *vs = container_of(work, struct vxlan_sock, del_work); in vxlan_del_work() local
2636 udp_tunnel_sock_release(vs->sock); in vxlan_del_work()
2637 kfree_rcu(vs, rcu); in vxlan_del_work()
2673 struct vxlan_sock *vs; in vxlan_socket_create() local
2678 vs = kzalloc(sizeof(*vs), GFP_KERNEL); in vxlan_socket_create()
2679 if (!vs) in vxlan_socket_create()
2683 INIT_HLIST_HEAD(&vs->vni_list[h]); in vxlan_socket_create()
2685 INIT_WORK(&vs->del_work, vxlan_del_work); in vxlan_socket_create()
2691 kfree(vs); in vxlan_socket_create()
2695 vs->sock = sock; in vxlan_socket_create()
2696 atomic_set(&vs->refcnt, 1); in vxlan_socket_create()
2697 vs->flags = (flags & VXLAN_F_RCV_FLAGS); in vxlan_socket_create()
2700 vs->udp_offloads.port = port; in vxlan_socket_create()
2701 vs->udp_offloads.callbacks.gro_receive = vxlan_gro_receive; in vxlan_socket_create()
2702 vs->udp_offloads.callbacks.gro_complete = vxlan_gro_complete; in vxlan_socket_create()
2705 hlist_add_head_rcu(&vs->hlist, vs_head(net, port)); in vxlan_socket_create()
2706 vxlan_notify_add_rx_port(vs); in vxlan_socket_create()
2710 tunnel_cfg.sk_user_data = vs; in vxlan_socket_create()
2717 return vs; in vxlan_socket_create()
2723 struct vxlan_sock *vs = NULL; in __vxlan_sock_add() local
2727 vs = vxlan_find_sock(vxlan->net, ipv6 ? AF_INET6 : AF_INET, in __vxlan_sock_add()
2729 if (vs && !atomic_add_unless(&vs->refcnt, 1, 0)) { in __vxlan_sock_add()
2735 if (!vs) in __vxlan_sock_add()
2736 vs = vxlan_socket_create(vxlan->net, ipv6, in __vxlan_sock_add()
2738 if (IS_ERR(vs)) in __vxlan_sock_add()
2739 return PTR_ERR(vs); in __vxlan_sock_add()
2742 vxlan->vn6_sock = vs; in __vxlan_sock_add()
2745 vxlan->vn4_sock = vs; in __vxlan_sock_add()
2746 vxlan_vs_add_dev(vs, vxlan); in __vxlan_sock_add()