Lines Matching refs:gs

126 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs)
128 return gs->sock->sk->sk_family;
131 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs,
140 vni_list_head = &gs->vni_list[hash];
150 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs,
159 vni_list_head = &gs->vni_list[hash];
174 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs,
180 if (geneve_get_sk_family(gs) == AF_INET) {
186 if (gs->collect_md) {
194 return geneve_lookup(gs, addr, vni);
196 } else if (geneve_get_sk_family(gs) == AF_INET6) {
203 if (gs->collect_md) {
211 return geneve6_lookup(gs, addr6, vni);
218 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
227 if (ip_tunnel_collect_metadata() || gs->collect_md) {
233 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags,
292 if (geneve_get_sk_family(gs) == AF_INET)
301 if (geneve_get_sk_family(gs) == AF_INET)
369 struct geneve_sock *gs;
382 gs = rcu_dereference_sk_user_data(sk);
383 if (!gs)
386 geneve = geneve_lookup_skb(gs, skb);
405 geneve_rx(geneve, gs, skb);
418 struct geneve_sock *gs;
432 gs = rcu_dereference_sk_user_data(sk);
433 if (!gs)
436 if (geneve_get_sk_family(gs) == AF_INET) {
440 if (!gs->collect_md) {
445 return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT;
449 if (geneve_get_sk_family(gs) == AF_INET6) {
455 if (!gs->collect_md) {
460 return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT;
592 struct geneve_sock *gs;
597 gs = kzalloc(sizeof(*gs), GFP_KERNEL);
598 if (!gs)
603 kfree(gs);
607 gs->sock = sock;
608 gs->refcnt = 1;
610 INIT_HLIST_HEAD(&gs->vni_list[h]);
613 udp_tunnel_notify_add_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
617 tunnel_cfg.sk_user_data = gs;
625 list_add(&gs->list, &gn->sock_list);
626 return gs;
629 static void __geneve_sock_release(struct geneve_sock *gs)
631 if (!gs || --gs->refcnt)
634 list_del(&gs->list);
635 udp_tunnel_notify_del_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
636 udp_tunnel_sock_release(gs->sock);
637 kfree_rcu(gs, rcu);
662 struct geneve_sock *gs;
664 list_for_each_entry(gs, &gn->sock_list, list) {
665 if (inet_sk(gs->sock->sk)->inet_sport == dst_port &&
666 geneve_get_sk_family(gs) == family) {
667 return gs;
678 struct geneve_sock *gs;
682 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst);
683 if (gs) {
684 gs->refcnt++;
688 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6,
690 if (IS_ERR(gs))
691 return PTR_ERR(gs);
694 gs->collect_md = geneve->cfg.collect_md;
697 rcu_assign_pointer(geneve->sock6, gs);
702 rcu_assign_pointer(geneve->sock4, gs);
709 hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]);
1231 struct geneve_sock *gs;
1234 list_for_each_entry_rcu(gs, &gn->sock_list, list) {
1236 udp_tunnel_push_rx_port(dev, gs->sock,
1239 udp_tunnel_drop_rx_port(dev, gs->sock,