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)
362 struct geneve_sock *gs;
375 gs = rcu_dereference_sk_user_data(sk);
376 if (!gs)
379 geneve = geneve_lookup_skb(gs, skb);
398 geneve_rx(geneve, gs, skb);
411 struct geneve_sock *gs;
425 gs = rcu_dereference_sk_user_data(sk);
426 if (!gs)
429 if (geneve_get_sk_family(gs) == AF_INET) {
433 if (!gs->collect_md) {
438 return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT;
442 if (geneve_get_sk_family(gs) == AF_INET6) {
448 if (!gs->collect_md) {
453 return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT;
585 struct geneve_sock *gs;
590 gs = kzalloc(sizeof(*gs), GFP_KERNEL);
591 if (!gs)
596 kfree(gs);
600 gs->sock = sock;
601 gs->refcnt = 1;
603 INIT_HLIST_HEAD(&gs->vni_list[h]);
606 udp_tunnel_notify_add_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
610 tunnel_cfg.sk_user_data = gs;
618 list_add(&gs->list, &gn->sock_list);
619 return gs;
622 static void __geneve_sock_release(struct geneve_sock *gs)
624 if (!gs || --gs->refcnt)
627 list_del(&gs->list);
628 udp_tunnel_notify_del_rx_port(gs->sock, UDP_TUNNEL_TYPE_GENEVE);
629 udp_tunnel_sock_release(gs->sock);
630 kfree_rcu(gs, rcu);
655 struct geneve_sock *gs;
657 list_for_each_entry(gs, &gn->sock_list, list) {
658 if (inet_sk(gs->sock->sk)->inet_sport == dst_port &&
659 geneve_get_sk_family(gs) == family) {
660 return gs;
671 struct geneve_sock *gs;
675 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst);
676 if (gs) {
677 gs->refcnt++;
681 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6,
683 if (IS_ERR(gs))
684 return PTR_ERR(gs);
687 gs->collect_md = geneve->cfg.collect_md;
690 rcu_assign_pointer(geneve->sock6, gs);
695 rcu_assign_pointer(geneve->sock4, gs);
702 hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]);
1162 struct geneve_sock *gs;
1165 list_for_each_entry_rcu(gs, &gn->sock_list, list) {
1167 udp_tunnel_push_rx_port(dev, gs->sock,
1170 udp_tunnel_drop_rx_port(dev, gs->sock,