Lines Matching refs:gs

126 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs)  in geneve_get_sk_family()  argument
128 return gs->sock->sk->sk_family; in geneve_get_sk_family()
131 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs, in geneve_lookup() argument
140 vni_list_head = &gs->vni_list[hash]; in geneve_lookup()
150 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs, in geneve6_lookup() argument
159 vni_list_head = &gs->vni_list[hash]; in geneve6_lookup()
174 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs, in geneve_lookup_skb() argument
180 if (geneve_get_sk_family(gs) == AF_INET) { in geneve_lookup_skb()
186 if (gs->collect_md) { in geneve_lookup_skb()
194 return geneve_lookup(gs, addr, vni); in geneve_lookup_skb()
196 } else if (geneve_get_sk_family(gs) == AF_INET6) { in geneve_lookup_skb()
203 if (gs->collect_md) { in geneve_lookup_skb()
211 return geneve6_lookup(gs, addr6, vni); in geneve_lookup_skb()
218 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs, in geneve_rx() argument
227 if (ip_tunnel_collect_metadata() || gs->collect_md) { in geneve_rx()
233 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags, in geneve_rx()
278 if (geneve_get_sk_family(gs) == AF_INET) in geneve_rx()
287 if (geneve_get_sk_family(gs) == AF_INET) in geneve_rx()
355 struct geneve_sock *gs; in geneve_udp_encap_recv() local
375 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_recv()
376 if (!gs) in geneve_udp_encap_recv()
379 geneve = geneve_lookup_skb(gs, skb); in geneve_udp_encap_recv()
396 geneve_rx(geneve, gs, skb); in geneve_udp_encap_recv()
409 struct geneve_sock *gs; in geneve_udp_encap_err_lookup() local
423 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_err_lookup()
424 if (!gs) in geneve_udp_encap_err_lookup()
427 if (geneve_get_sk_family(gs) == AF_INET) { in geneve_udp_encap_err_lookup()
431 if (!gs->collect_md) { in geneve_udp_encap_err_lookup()
436 return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT; in geneve_udp_encap_err_lookup()
440 if (geneve_get_sk_family(gs) == AF_INET6) { in geneve_udp_encap_err_lookup()
446 if (!gs->collect_md) { in geneve_udp_encap_err_lookup()
451 return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT; in geneve_udp_encap_err_lookup()
583 struct geneve_sock *gs; in geneve_socket_create() local
588 gs = kzalloc(sizeof(*gs), GFP_KERNEL); in geneve_socket_create()
589 if (!gs) in geneve_socket_create()
594 kfree(gs); in geneve_socket_create()
598 gs->sock = sock; in geneve_socket_create()
599 gs->refcnt = 1; in geneve_socket_create()
601 INIT_HLIST_HEAD(&gs->vni_list[h]); in geneve_socket_create()
604 udp_tunnel_notify_add_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE); in geneve_socket_create()
608 tunnel_cfg.sk_user_data = gs; in geneve_socket_create()
616 list_add(&gs->list, &gn->sock_list); in geneve_socket_create()
617 return gs; in geneve_socket_create()
620 static void __geneve_sock_release(struct geneve_sock *gs) in __geneve_sock_release() argument
622 if (!gs || --gs->refcnt) in __geneve_sock_release()
625 list_del(&gs->list); in __geneve_sock_release()
626 udp_tunnel_notify_del_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE); in __geneve_sock_release()
627 udp_tunnel_sock_release(gs->sock); in __geneve_sock_release()
628 kfree_rcu(gs, rcu); in __geneve_sock_release()
653 struct geneve_sock *gs; in geneve_find_sock() local
655 list_for_each_entry(gs, &gn->sock_list, list) { in geneve_find_sock()
656 if (inet_sk(gs->sock->sk)->inet_sport == dst_port && in geneve_find_sock()
657 geneve_get_sk_family(gs) == family) { in geneve_find_sock()
658 return gs; in geneve_find_sock()
669 struct geneve_sock *gs; in geneve_sock_add() local
673 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst); in geneve_sock_add()
674 if (gs) { in geneve_sock_add()
675 gs->refcnt++; in geneve_sock_add()
679 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6, in geneve_sock_add()
681 if (IS_ERR(gs)) in geneve_sock_add()
682 return PTR_ERR(gs); in geneve_sock_add()
685 gs->collect_md = geneve->cfg.collect_md; in geneve_sock_add()
688 rcu_assign_pointer(geneve->sock6, gs); in geneve_sock_add()
693 rcu_assign_pointer(geneve->sock4, gs); in geneve_sock_add()
700 hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]); in geneve_sock_add()
1222 struct geneve_sock *gs; in geneve_offload_rx_ports() local
1225 list_for_each_entry_rcu(gs, &gn->sock_list, list) { in geneve_offload_rx_ports()
1227 udp_tunnel_push_rx_port(dev, gs->sock, in geneve_offload_rx_ports()
1230 udp_tunnel_drop_rx_port(dev, gs->sock, in geneve_offload_rx_ports()