Lines Matching refs:gs
105 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs, in geneve_lookup() argument
114 vni_list_head = &gs->vni_list[hash]; in geneve_lookup()
124 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs, in geneve6_lookup() argument
133 vni_list_head = &gs->vni_list[hash]; in geneve6_lookup()
149 static void geneve_rx(struct geneve_sock *gs, struct sk_buff *skb) in geneve_rx() argument
167 sa_family = gs->sock->sk->sk_family; in geneve_rx()
172 if (gs->collect_md) { in geneve_rx()
181 geneve = geneve_lookup(gs, addr, vni); in geneve_rx()
186 if (gs->collect_md) { in geneve_rx()
195 geneve = geneve6_lookup(gs, addr6, vni); in geneve_rx()
201 if (ip_tunnel_collect_metadata() || gs->collect_md) { in geneve_rx()
308 struct geneve_sock *gs; in geneve_udp_encap_recv() local
328 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_recv()
329 if (!gs) in geneve_udp_encap_recv()
332 geneve_rx(gs, skb); in geneve_udp_encap_recv()
368 static void geneve_notify_add_rx_port(struct geneve_sock *gs) in geneve_notify_add_rx_port() argument
370 struct sock *sk = gs->sock->sk; in geneve_notify_add_rx_port()
375 err = udp_add_offload(&gs->udp_offloads); in geneve_notify_add_rx_port()
482 struct geneve_sock *gs; in geneve_socket_create() local
487 gs = kzalloc(sizeof(*gs), GFP_KERNEL); in geneve_socket_create()
488 if (!gs) in geneve_socket_create()
493 kfree(gs); in geneve_socket_create()
497 gs->sock = sock; in geneve_socket_create()
498 gs->refcnt = 1; in geneve_socket_create()
500 INIT_HLIST_HEAD(&gs->vni_list[h]); in geneve_socket_create()
503 gs->udp_offloads.port = port; in geneve_socket_create()
504 gs->udp_offloads.callbacks.gro_receive = geneve_gro_receive; in geneve_socket_create()
505 gs->udp_offloads.callbacks.gro_complete = geneve_gro_complete; in geneve_socket_create()
506 geneve_notify_add_rx_port(gs); in geneve_socket_create()
509 tunnel_cfg.sk_user_data = gs; in geneve_socket_create()
514 list_add(&gs->list, &gn->sock_list); in geneve_socket_create()
515 return gs; in geneve_socket_create()
518 static void geneve_notify_del_rx_port(struct geneve_sock *gs) in geneve_notify_del_rx_port() argument
520 struct sock *sk = gs->sock->sk; in geneve_notify_del_rx_port()
524 udp_del_offload(&gs->udp_offloads); in geneve_notify_del_rx_port()
527 static void __geneve_sock_release(struct geneve_sock *gs) in __geneve_sock_release() argument
529 if (!gs || --gs->refcnt) in __geneve_sock_release()
532 list_del(&gs->list); in __geneve_sock_release()
533 geneve_notify_del_rx_port(gs); in __geneve_sock_release()
534 udp_tunnel_sock_release(gs->sock); in __geneve_sock_release()
535 kfree_rcu(gs, rcu); in __geneve_sock_release()
550 struct geneve_sock *gs; in geneve_find_sock() local
552 list_for_each_entry(gs, &gn->sock_list, list) { in geneve_find_sock()
553 if (inet_sk(gs->sock->sk)->inet_sport == dst_port && in geneve_find_sock()
554 inet_sk(gs->sock->sk)->sk.sk_family == family) { in geneve_find_sock()
555 return gs; in geneve_find_sock()
565 struct geneve_sock *gs; in geneve_sock_add() local
568 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->dst_port); in geneve_sock_add()
569 if (gs) { in geneve_sock_add()
570 gs->refcnt++; in geneve_sock_add()
574 gs = geneve_socket_create(net, geneve->dst_port, ipv6); in geneve_sock_add()
575 if (IS_ERR(gs)) in geneve_sock_add()
576 return PTR_ERR(gs); in geneve_sock_add()
579 gs->collect_md = geneve->collect_md; in geneve_sock_add()
582 geneve->sock6 = gs; in geneve_sock_add()
585 geneve->sock4 = gs; in geneve_sock_add()
588 hlist_add_head_rcu(&geneve->hlist, &gs->vni_list[hash]); in geneve_sock_add()