Lines Matching refs:gs
123 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs) in geneve_get_sk_family() argument
125 return gs->sock->sk->sk_family; in geneve_get_sk_family()
128 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs, in geneve_lookup() argument
137 vni_list_head = &gs->vni_list[hash]; in geneve_lookup()
147 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs, in geneve6_lookup() argument
156 vni_list_head = &gs->vni_list[hash]; in geneve6_lookup()
171 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs, in geneve_lookup_skb() argument
177 if (geneve_get_sk_family(gs) == AF_INET) { in geneve_lookup_skb()
183 if (gs->collect_md) { in geneve_lookup_skb()
191 return geneve_lookup(gs, addr, vni); in geneve_lookup_skb()
193 } else if (geneve_get_sk_family(gs) == AF_INET6) { in geneve_lookup_skb()
200 if (gs->collect_md) { in geneve_lookup_skb()
208 return geneve6_lookup(gs, addr6, vni); in geneve_lookup_skb()
215 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs, in geneve_rx() argument
224 if (ip_tunnel_collect_metadata() || gs->collect_md) { in geneve_rx()
230 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags, in geneve_rx()
268 if (geneve_get_sk_family(gs) == AF_INET) in geneve_rx()
277 if (geneve_get_sk_family(gs) == AF_INET) in geneve_rx()
345 struct geneve_sock *gs; in geneve_udp_encap_recv() local
360 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_recv()
361 if (!gs) in geneve_udp_encap_recv()
364 geneve = geneve_lookup_skb(gs, skb); in geneve_udp_encap_recv()
376 geneve_rx(geneve, gs, skb); in geneve_udp_encap_recv()
389 struct geneve_sock *gs; in geneve_udp_encap_err_lookup() local
403 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_err_lookup()
404 if (!gs) in geneve_udp_encap_err_lookup()
407 if (geneve_get_sk_family(gs) == AF_INET) { in geneve_udp_encap_err_lookup()
411 if (!gs->collect_md) { in geneve_udp_encap_err_lookup()
416 return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT; in geneve_udp_encap_err_lookup()
420 if (geneve_get_sk_family(gs) == AF_INET6) { in geneve_udp_encap_err_lookup()
426 if (!gs->collect_md) { in geneve_udp_encap_err_lookup()
431 return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT; in geneve_udp_encap_err_lookup()
565 struct geneve_sock *gs; in geneve_socket_create() local
570 gs = kzalloc(sizeof(*gs), GFP_KERNEL); in geneve_socket_create()
571 if (!gs) in geneve_socket_create()
576 kfree(gs); in geneve_socket_create()
580 gs->sock = sock; in geneve_socket_create()
581 gs->refcnt = 1; in geneve_socket_create()
583 INIT_HLIST_HEAD(&gs->vni_list[h]); in geneve_socket_create()
586 udp_tunnel_notify_add_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE); in geneve_socket_create()
590 tunnel_cfg.sk_user_data = gs; in geneve_socket_create()
598 list_add(&gs->list, &gn->sock_list); in geneve_socket_create()
599 return gs; in geneve_socket_create()
602 static void __geneve_sock_release(struct geneve_sock *gs) in __geneve_sock_release() argument
604 if (!gs || --gs->refcnt) in __geneve_sock_release()
607 list_del(&gs->list); in __geneve_sock_release()
608 udp_tunnel_notify_del_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE); in __geneve_sock_release()
609 udp_tunnel_sock_release(gs->sock); in __geneve_sock_release()
610 kfree_rcu(gs, rcu); in __geneve_sock_release()
635 struct geneve_sock *gs; in geneve_find_sock() local
637 list_for_each_entry(gs, &gn->sock_list, list) { in geneve_find_sock()
638 if (inet_sk(gs->sock->sk)->inet_sport == dst_port && in geneve_find_sock()
639 geneve_get_sk_family(gs) == family) { in geneve_find_sock()
640 return gs; in geneve_find_sock()
651 struct geneve_sock *gs; in geneve_sock_add() local
655 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst); in geneve_sock_add()
656 if (gs) { in geneve_sock_add()
657 gs->refcnt++; in geneve_sock_add()
661 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6, in geneve_sock_add()
663 if (IS_ERR(gs)) in geneve_sock_add()
664 return PTR_ERR(gs); in geneve_sock_add()
667 gs->collect_md = geneve->cfg.collect_md; in geneve_sock_add()
670 rcu_assign_pointer(geneve->sock6, gs); in geneve_sock_add()
675 rcu_assign_pointer(geneve->sock4, gs); in geneve_sock_add()
682 hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]); in geneve_sock_add()
1197 struct geneve_sock *gs; in geneve_offload_rx_ports() local
1200 list_for_each_entry_rcu(gs, &gn->sock_list, list) { in geneve_offload_rx_ports()
1202 udp_tunnel_push_rx_port(dev, gs->sock, in geneve_offload_rx_ports()
1205 udp_tunnel_drop_rx_port(dev, gs->sock, in geneve_offload_rx_ports()