Lines Matching refs:sk

46 int inet_csk_bind_conflict(const struct sock *sk,  in inet_csk_bind_conflict()  argument
50 int reuse = sk->sk_reuse; in inet_csk_bind_conflict()
51 int reuseport = sk->sk_reuseport; in inet_csk_bind_conflict()
52 kuid_t uid = sock_i_uid((struct sock *)sk); in inet_csk_bind_conflict()
62 if (sk != sk2 && in inet_csk_bind_conflict()
64 (!sk->sk_bound_dev_if || in inet_csk_bind_conflict()
66 sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) { in inet_csk_bind_conflict()
73 if (!sk2->sk_rcv_saddr || !sk->sk_rcv_saddr || in inet_csk_bind_conflict()
74 sk2->sk_rcv_saddr == sk->sk_rcv_saddr) in inet_csk_bind_conflict()
80 if (!sk2->sk_rcv_saddr || !sk->sk_rcv_saddr || in inet_csk_bind_conflict()
81 sk2->sk_rcv_saddr == sk->sk_rcv_saddr) in inet_csk_bind_conflict()
93 int inet_csk_get_port(struct sock *sk, unsigned short snum) in inet_csk_get_port() argument
95 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in inet_csk_get_port()
99 struct net *net = sock_net(sk); in inet_csk_get_port()
101 kuid_t uid = sock_i_uid(sk); in inet_csk_get_port()
122 sk->sk_reuse && in inet_csk_get_port()
123 sk->sk_state != TCP_LISTEN) || in inet_csk_get_port()
125 sk->sk_reuseport && in inet_csk_get_port()
131 !inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, false)) { in inet_csk_get_port()
136 if (!inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, false)) { in inet_csk_get_port()
181 if (sk->sk_reuse == SK_FORCE_REUSE) in inet_csk_get_port()
185 sk->sk_reuse && sk->sk_state != TCP_LISTEN) || in inet_csk_get_port()
187 sk->sk_reuseport && uid_eq(tb->fastuid, uid))) && in inet_csk_get_port()
192 if (inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, true)) { in inet_csk_get_port()
193 if (((sk->sk_reuse && sk->sk_state != TCP_LISTEN) || in inet_csk_get_port()
195 sk->sk_reuseport && uid_eq(tb->fastuid, uid))) && in inet_csk_get_port()
211 if (sk->sk_reuse && sk->sk_state != TCP_LISTEN) in inet_csk_get_port()
215 if (sk->sk_reuseport) { in inet_csk_get_port()
222 (!sk->sk_reuse || sk->sk_state == TCP_LISTEN)) in inet_csk_get_port()
225 (!sk->sk_reuseport || !uid_eq(tb->fastuid, uid))) in inet_csk_get_port()
229 if (!inet_csk(sk)->icsk_bind_hash) in inet_csk_get_port()
230 inet_bind_hash(sk, tb, snum); in inet_csk_get_port()
231 WARN_ON(inet_csk(sk)->icsk_bind_hash != tb); in inet_csk_get_port()
246 static int inet_csk_wait_for_connect(struct sock *sk, long timeo) in inet_csk_wait_for_connect() argument
248 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_wait_for_connect()
267 prepare_to_wait_exclusive(sk_sleep(sk), &wait, in inet_csk_wait_for_connect()
269 release_sock(sk); in inet_csk_wait_for_connect()
273 lock_sock(sk); in inet_csk_wait_for_connect()
278 if (sk->sk_state != TCP_LISTEN) in inet_csk_wait_for_connect()
287 finish_wait(sk_sleep(sk), &wait); in inet_csk_wait_for_connect()
294 struct sock *inet_csk_accept(struct sock *sk, int flags, int *err) in inet_csk_accept() argument
296 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_accept()
302 lock_sock(sk); in inet_csk_accept()
308 if (sk->sk_state != TCP_LISTEN) in inet_csk_accept()
313 long timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in inet_csk_accept()
320 error = inet_csk_wait_for_connect(sk, timeo); in inet_csk_accept()
325 newsk = req->sk; in inet_csk_accept()
327 sk_acceptq_removed(sk); in inet_csk_accept()
328 if (sk->sk_protocol == IPPROTO_TCP && in inet_csk_accept()
339 req->sk = NULL; in inet_csk_accept()
345 release_sock(sk); in inet_csk_accept()
362 void inet_csk_init_xmit_timers(struct sock *sk, in inet_csk_init_xmit_timers() argument
367 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_init_xmit_timers()
370 (unsigned long)sk); in inet_csk_init_xmit_timers()
372 (unsigned long)sk); in inet_csk_init_xmit_timers()
373 setup_timer(&sk->sk_timer, keepalive_handler, (unsigned long)sk); in inet_csk_init_xmit_timers()
378 void inet_csk_clear_xmit_timers(struct sock *sk) in inet_csk_clear_xmit_timers() argument
380 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_clear_xmit_timers()
384 sk_stop_timer(sk, &icsk->icsk_retransmit_timer); in inet_csk_clear_xmit_timers()
385 sk_stop_timer(sk, &icsk->icsk_delack_timer); in inet_csk_clear_xmit_timers()
386 sk_stop_timer(sk, &sk->sk_timer); in inet_csk_clear_xmit_timers()
390 void inet_csk_delete_keepalive_timer(struct sock *sk) in inet_csk_delete_keepalive_timer() argument
392 sk_stop_timer(sk, &sk->sk_timer); in inet_csk_delete_keepalive_timer()
396 void inet_csk_reset_keepalive_timer(struct sock *sk, unsigned long len) in inet_csk_reset_keepalive_timer() argument
398 sk_reset_timer(sk, &sk->sk_timer, jiffies + len); in inet_csk_reset_keepalive_timer()
402 struct dst_entry *inet_csk_route_req(struct sock *sk, in inet_csk_route_req() argument
412 RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE, in inet_csk_route_req()
413 sk->sk_protocol, inet_sk_flowi_flags(sk), in inet_csk_route_req()
418 rt = ip_route_output_flow(net, fl4, sk); in inet_csk_route_req()
433 struct dst_entry *inet_csk_route_child_sock(struct sock *sk, in inet_csk_route_child_sock() argument
449 RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE, in inet_csk_route_child_sock()
450 sk->sk_protocol, inet_sk_flowi_flags(sk), in inet_csk_route_child_sock()
455 rt = ip_route_output_flow(net, fl4, sk); in inet_csk_route_child_sock()
487 struct request_sock *inet_csk_search_req(struct sock *sk, in inet_csk_search_req() argument
492 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_search_req()
507 WARN_ON(req->sk); in inet_csk_search_req()
517 void inet_csk_reqsk_queue_hash_add(struct sock *sk, struct request_sock *req, in inet_csk_reqsk_queue_hash_add() argument
520 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_reqsk_queue_hash_add()
527 inet_csk_reqsk_queue_added(sk, timeout); in inet_csk_reqsk_queue_hash_add()
593 void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req) in inet_csk_reqsk_queue_drop() argument
595 if (reqsk_queue_unlink(&inet_csk(sk)->icsk_accept_queue, req)) { in inet_csk_reqsk_queue_drop()
596 reqsk_queue_removed(&inet_csk(sk)->icsk_accept_queue, req); in inet_csk_reqsk_queue_drop()
678 req->sk = NULL; in reqsk_queue_hash_req()
705 struct sock *inet_csk_clone_lock(const struct sock *sk, in inet_csk_clone_lock() argument
709 struct sock *newsk = sk_clone_lock(sk, priority); in inet_csk_clone_lock()
745 void inet_csk_destroy_sock(struct sock *sk) in inet_csk_destroy_sock() argument
747 WARN_ON(sk->sk_state != TCP_CLOSE); in inet_csk_destroy_sock()
748 WARN_ON(!sock_flag(sk, SOCK_DEAD)); in inet_csk_destroy_sock()
751 WARN_ON(!sk_unhashed(sk)); in inet_csk_destroy_sock()
754 WARN_ON(inet_sk(sk)->inet_num && !inet_csk(sk)->icsk_bind_hash); in inet_csk_destroy_sock()
756 sk->sk_prot->destroy(sk); in inet_csk_destroy_sock()
758 sk_stream_kill_queues(sk); in inet_csk_destroy_sock()
760 xfrm_sk_free_policy(sk); in inet_csk_destroy_sock()
762 sk_refcnt_debug_release(sk); in inet_csk_destroy_sock()
764 percpu_counter_dec(sk->sk_prot->orphan_count); in inet_csk_destroy_sock()
765 sock_put(sk); in inet_csk_destroy_sock()
772 void inet_csk_prepare_forced_close(struct sock *sk) in inet_csk_prepare_forced_close() argument
773 __releases(&sk->sk_lock.slock) in inet_csk_prepare_forced_close()
776 bh_unlock_sock(sk); in inet_csk_prepare_forced_close()
777 sock_put(sk); in inet_csk_prepare_forced_close()
780 sock_set_flag(sk, SOCK_DEAD); in inet_csk_prepare_forced_close()
781 percpu_counter_inc(sk->sk_prot->orphan_count); in inet_csk_prepare_forced_close()
782 inet_sk(sk)->inet_num = 0; in inet_csk_prepare_forced_close()
786 int inet_csk_listen_start(struct sock *sk, const int nr_table_entries) in inet_csk_listen_start() argument
788 struct inet_sock *inet = inet_sk(sk); in inet_csk_listen_start()
789 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_listen_start()
795 sk->sk_max_ack_backlog = 0; in inet_csk_listen_start()
796 sk->sk_ack_backlog = 0; in inet_csk_listen_start()
797 inet_csk_delack_init(sk); in inet_csk_listen_start()
804 sk->sk_state = TCP_LISTEN; in inet_csk_listen_start()
805 if (!sk->sk_prot->get_port(sk, inet->inet_num)) { in inet_csk_listen_start()
808 sk_dst_reset(sk); in inet_csk_listen_start()
809 sk->sk_prot->hash(sk); in inet_csk_listen_start()
814 sk->sk_state = TCP_CLOSE; in inet_csk_listen_start()
824 void inet_csk_listen_stop(struct sock *sk) in inet_csk_listen_stop() argument
826 struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_listen_stop()
845 struct sock *child = req->sk; in inet_csk_listen_stop()
854 sk->sk_prot->disconnect(child, O_NONBLOCK); in inet_csk_listen_stop()
858 percpu_counter_inc(sk->sk_prot->orphan_count); in inet_csk_listen_stop()
860 if (sk->sk_protocol == IPPROTO_TCP && tcp_rsk(req)->tfo_listener) { in inet_csk_listen_stop()
862 BUG_ON(sk != req->rsk_listener); in inet_csk_listen_stop()
878 sk_acceptq_removed(sk); in inet_csk_listen_stop()
892 WARN_ON(sk->sk_ack_backlog); in inet_csk_listen_stop()
896 void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr) in inet_csk_addr2sockaddr() argument
899 const struct inet_sock *inet = inet_sk(sk); in inet_csk_addr2sockaddr()
908 int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname, in inet_csk_compat_getsockopt() argument
911 const struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_compat_getsockopt()
914 return icsk->icsk_af_ops->compat_getsockopt(sk, level, optname, in inet_csk_compat_getsockopt()
916 return icsk->icsk_af_ops->getsockopt(sk, level, optname, in inet_csk_compat_getsockopt()
921 int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, in inet_csk_compat_setsockopt() argument
924 const struct inet_connection_sock *icsk = inet_csk(sk); in inet_csk_compat_setsockopt()
927 return icsk->icsk_af_ops->compat_setsockopt(sk, level, optname, in inet_csk_compat_setsockopt()
929 return icsk->icsk_af_ops->setsockopt(sk, level, optname, in inet_csk_compat_setsockopt()
935 static struct dst_entry *inet_csk_rebuild_route(struct sock *sk, struct flowi *fl) in inet_csk_rebuild_route() argument
937 const struct inet_sock *inet = inet_sk(sk); in inet_csk_rebuild_route()
948 rt = ip_route_output_ports(sock_net(sk), fl4, sk, daddr, in inet_csk_rebuild_route()
950 inet->inet_sport, sk->sk_protocol, in inet_csk_rebuild_route()
951 RT_CONN_FLAGS(sk), sk->sk_bound_dev_if); in inet_csk_rebuild_route()
955 sk_setup_caps(sk, &rt->dst); in inet_csk_rebuild_route()
961 struct dst_entry *inet_csk_update_pmtu(struct sock *sk, u32 mtu) in inet_csk_update_pmtu() argument
963 struct dst_entry *dst = __sk_dst_check(sk, 0); in inet_csk_update_pmtu()
964 struct inet_sock *inet = inet_sk(sk); in inet_csk_update_pmtu()
967 dst = inet_csk_rebuild_route(sk, &inet->cork.fl); in inet_csk_update_pmtu()
971 dst->ops->update_pmtu(dst, sk, NULL, mtu); in inet_csk_update_pmtu()
973 dst = __sk_dst_check(sk, 0); in inet_csk_update_pmtu()
975 dst = inet_csk_rebuild_route(sk, &inet->cork.fl); in inet_csk_update_pmtu()