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