Lines Matching refs:sk
42 u32 sk_ehashfn(const struct sock *sk) in sk_ehashfn() argument
45 if (sk->sk_family == AF_INET6 && in sk_ehashfn()
46 !ipv6_addr_v4mapped(&sk->sk_v6_daddr)) in sk_ehashfn()
47 return inet6_ehashfn(sock_net(sk), in sk_ehashfn()
48 &sk->sk_v6_rcv_saddr, sk->sk_num, in sk_ehashfn()
49 &sk->sk_v6_daddr, sk->sk_dport); in sk_ehashfn()
51 return inet_ehashfn(sock_net(sk), in sk_ehashfn()
52 sk->sk_rcv_saddr, sk->sk_num, in sk_ehashfn()
53 sk->sk_daddr, sk->sk_dport); in sk_ehashfn()
90 void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb, in inet_bind_hash() argument
93 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in inet_bind_hash()
97 inet_sk(sk)->inet_num = snum; in inet_bind_hash()
98 sk_add_bind_node(sk, &tb->owners); in inet_bind_hash()
100 inet_csk(sk)->icsk_bind_hash = tb; in inet_bind_hash()
106 static void __inet_put_port(struct sock *sk) in __inet_put_port() argument
108 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in __inet_put_port()
109 const int bhash = inet_bhashfn(sock_net(sk), inet_sk(sk)->inet_num, in __inet_put_port()
117 tb = inet_csk(sk)->icsk_bind_hash; in __inet_put_port()
118 __sk_del_bind_node(sk); in __inet_put_port()
120 inet_csk(sk)->icsk_bind_hash = NULL; in __inet_put_port()
121 inet_sk(sk)->inet_num = 0; in __inet_put_port()
126 void inet_put_port(struct sock *sk) in inet_put_port() argument
129 __inet_put_port(sk); in inet_put_port()
134 int __inet_inherit_port(struct sock *sk, struct sock *child) in __inet_inherit_port() argument
136 struct inet_hashinfo *table = sk->sk_prot->h.hashinfo; in __inet_inherit_port()
138 const int bhash = inet_bhashfn(sock_net(sk), port, in __inet_inherit_port()
144 tb = inet_csk(sk)->icsk_bind_hash; in __inet_inherit_port()
152 if (net_eq(ib_net(tb), sock_net(sk)) && in __inet_inherit_port()
158 sock_net(sk), head, port); in __inet_inherit_port()
172 static inline int compute_score(struct sock *sk, struct net *net, in compute_score() argument
177 struct inet_sock *inet = inet_sk(sk); in compute_score()
179 if (net_eq(sock_net(sk), net) && inet->inet_num == hnum && in compute_score()
180 !ipv6_only_sock(sk)) { in compute_score()
182 score = sk->sk_family == PF_INET ? 2 : 1; in compute_score()
188 if (sk->sk_bound_dev_if) { in compute_score()
189 if (sk->sk_bound_dev_if != dif) in compute_score()
211 struct sock *sk, *result; in __inet_lookup_listener() local
222 sk_nulls_for_each_rcu(sk, node, &ilb->head) { in __inet_lookup_listener()
223 score = compute_score(sk, net, hnum, daddr, dif); in __inet_lookup_listener()
225 result = sk; in __inet_lookup_listener()
227 reuseport = sk->sk_reuseport; in __inet_lookup_listener()
236 result = sk; in __inet_lookup_listener()
262 void sock_gen_put(struct sock *sk) in sock_gen_put() argument
264 if (!atomic_dec_and_test(&sk->sk_refcnt)) in sock_gen_put()
267 if (sk->sk_state == TCP_TIME_WAIT) in sock_gen_put()
268 inet_twsk_free(inet_twsk(sk)); in sock_gen_put()
269 else if (sk->sk_state == TCP_NEW_SYN_RECV) in sock_gen_put()
270 reqsk_free(inet_reqsk(sk)); in sock_gen_put()
272 sk_free(sk); in sock_gen_put()
278 sock_gen_put(skb->sk); in sock_edemux()
290 struct sock *sk; in __inet_lookup_established() local
301 sk_nulls_for_each_rcu(sk, node, &head->chain) { in __inet_lookup_established()
302 if (sk->sk_hash != hash) in __inet_lookup_established()
304 if (likely(INET_MATCH(sk, net, acookie, in __inet_lookup_established()
306 if (unlikely(!atomic_inc_not_zero(&sk->sk_refcnt))) in __inet_lookup_established()
308 if (unlikely(!INET_MATCH(sk, net, acookie, in __inet_lookup_established()
310 sock_gen_put(sk); in __inet_lookup_established()
324 sk = NULL; in __inet_lookup_established()
327 return sk; in __inet_lookup_established()
333 struct sock *sk, __u16 lport, in __inet_check_established() argument
337 struct inet_sock *inet = inet_sk(sk); in __inet_check_established()
340 int dif = sk->sk_bound_dev_if; in __inet_check_established()
343 struct net *net = sock_net(sk); in __inet_check_established()
363 if (twsk_unique(sk, sk2, twp)) in __inet_check_established()
375 sk->sk_hash = hash; in __inet_check_established()
376 WARN_ON(!sk_unhashed(sk)); in __inet_check_established()
377 __sk_nulls_add_node_rcu(sk, &head->chain); in __inet_check_established()
385 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); in __inet_check_established()
402 static inline u32 inet_sk_port_offset(const struct sock *sk) in inet_sk_port_offset() argument
404 const struct inet_sock *inet = inet_sk(sk); in inet_sk_port_offset()
410 int __inet_hash_nolisten(struct sock *sk, struct inet_timewait_sock *tw) in __inet_hash_nolisten() argument
412 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in __inet_hash_nolisten()
418 WARN_ON(!sk_unhashed(sk)); in __inet_hash_nolisten()
420 sk->sk_hash = sk_ehashfn(sk); in __inet_hash_nolisten()
421 head = inet_ehash_bucket(hashinfo, sk->sk_hash); in __inet_hash_nolisten()
423 lock = inet_ehash_lockp(hashinfo, sk->sk_hash); in __inet_hash_nolisten()
426 __sk_nulls_add_node_rcu(sk, list); in __inet_hash_nolisten()
428 WARN_ON(sk->sk_hash != tw->tw_hash); in __inet_hash_nolisten()
432 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); in __inet_hash_nolisten()
437 int __inet_hash(struct sock *sk, struct inet_timewait_sock *tw) in __inet_hash() argument
439 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in __inet_hash()
442 if (sk->sk_state != TCP_LISTEN) in __inet_hash()
443 return __inet_hash_nolisten(sk, tw); in __inet_hash()
445 WARN_ON(!sk_unhashed(sk)); in __inet_hash()
446 ilb = &hashinfo->listening_hash[inet_sk_listen_hashfn(sk)]; in __inet_hash()
449 __sk_nulls_add_node_rcu(sk, &ilb->head); in __inet_hash()
450 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); in __inet_hash()
456 void inet_hash(struct sock *sk) in inet_hash() argument
458 if (sk->sk_state != TCP_CLOSE) { in inet_hash()
460 __inet_hash(sk, NULL); in inet_hash()
466 void inet_unhash(struct sock *sk) in inet_unhash() argument
468 struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; in inet_unhash()
472 if (sk_unhashed(sk)) in inet_unhash()
475 if (sk->sk_state == TCP_LISTEN) in inet_unhash()
476 lock = &hashinfo->listening_hash[inet_sk_listen_hashfn(sk)].lock; in inet_unhash()
478 lock = inet_ehash_lockp(hashinfo, sk->sk_hash); in inet_unhash()
481 done = __sk_nulls_del_node_init_rcu(sk); in inet_unhash()
483 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); in inet_unhash()
489 struct sock *sk, u32 port_offset, in __inet_hash_connect() argument
494 const unsigned short snum = inet_sk(sk)->inet_num; in __inet_hash_connect()
498 struct net *net = sock_net(sk); in __inet_hash_connect()
530 if (!check_established(death_row, sk, in __inet_hash_connect()
558 inet_bind_hash(sk, tb, port); in __inet_hash_connect()
559 if (sk_unhashed(sk)) { in __inet_hash_connect()
560 inet_sk(sk)->inet_sport = htons(port); in __inet_hash_connect()
561 twrefcnt += __inet_hash_nolisten(sk, tw); in __inet_hash_connect()
580 tb = inet_csk(sk)->icsk_bind_hash; in __inet_hash_connect()
582 if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { in __inet_hash_connect()
583 __inet_hash_nolisten(sk, NULL); in __inet_hash_connect()
589 ret = check_established(death_row, sk, snum, NULL); in __inet_hash_connect()
600 struct sock *sk) in inet_hash_connect() argument
602 return __inet_hash_connect(death_row, sk, inet_sk_port_offset(sk), in inet_hash_connect()