Lines Matching refs:gs
72 struct geneve_sock *gs; in geneve_find_sock() local
74 list_for_each_entry(gs, &gn->sock_list, list) { in geneve_find_sock()
75 if (inet_sk(gs->sock->sk)->inet_sport == port && in geneve_find_sock()
76 inet_sk(gs->sock->sk)->sk.sk_family == family) in geneve_find_sock()
77 return gs; in geneve_find_sock()
106 int geneve_xmit_skb(struct geneve_sock *gs, struct rtable *rt, in geneve_xmit_skb() argument
139 return udp_tunnel_xmit_skb(rt, gs->sock->sk, skb, src, dst, in geneve_xmit_skb()
240 static void geneve_notify_add_rx_port(struct geneve_sock *gs) in geneve_notify_add_rx_port() argument
242 struct sock *sk = gs->sock->sk; in geneve_notify_add_rx_port()
247 err = udp_add_offload(&gs->udp_offloads); in geneve_notify_add_rx_port()
254 static void geneve_notify_del_rx_port(struct geneve_sock *gs) in geneve_notify_del_rx_port() argument
256 struct sock *sk = gs->sock->sk; in geneve_notify_del_rx_port()
260 udp_del_offload(&gs->udp_offloads); in geneve_notify_del_rx_port()
267 struct geneve_sock *gs; in geneve_udp_encap_recv() local
288 gs = rcu_dereference_sk_user_data(sk); in geneve_udp_encap_recv()
289 if (!gs) in geneve_udp_encap_recv()
292 gs->rcv(gs, skb); in geneve_udp_encap_recv()
337 struct geneve_sock *gs; in geneve_socket_create() local
341 gs = kzalloc(sizeof(*gs), GFP_KERNEL); in geneve_socket_create()
342 if (!gs) in geneve_socket_create()
347 kfree(gs); in geneve_socket_create()
351 gs->sock = sock; in geneve_socket_create()
352 gs->refcnt = 1; in geneve_socket_create()
353 gs->rcv = rcv; in geneve_socket_create()
354 gs->rcv_data = data; in geneve_socket_create()
357 gs->udp_offloads.port = port; in geneve_socket_create()
358 gs->udp_offloads.callbacks.gro_receive = geneve_gro_receive; in geneve_socket_create()
359 gs->udp_offloads.callbacks.gro_complete = geneve_gro_complete; in geneve_socket_create()
360 geneve_notify_add_rx_port(gs); in geneve_socket_create()
363 tunnel_cfg.sk_user_data = gs; in geneve_socket_create()
369 list_add(&gs->list, &gn->sock_list); in geneve_socket_create()
371 return gs; in geneve_socket_create()
378 struct geneve_sock *gs; in geneve_sock_add() local
382 gs = geneve_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port); in geneve_sock_add()
383 if (gs) { in geneve_sock_add()
384 if (!no_share && gs->rcv == rcv) in geneve_sock_add()
385 gs->refcnt++; in geneve_sock_add()
387 gs = ERR_PTR(-EBUSY); in geneve_sock_add()
389 gs = geneve_socket_create(net, port, rcv, data, ipv6); in geneve_sock_add()
394 return gs; in geneve_sock_add()
398 void geneve_sock_release(struct geneve_sock *gs) in geneve_sock_release() argument
402 if (--gs->refcnt) in geneve_sock_release()
405 list_del(&gs->list); in geneve_sock_release()
406 geneve_notify_del_rx_port(gs); in geneve_sock_release()
407 udp_tunnel_sock_release(gs->sock); in geneve_sock_release()
408 kfree_rcu(gs, rcu); in geneve_sock_release()