Lines Matching refs:tb

70 	struct inet_bind_bucket *tb = kmem_cache_alloc(cachep, GFP_ATOMIC);  in inet_bind_bucket_create()  local
72 if (tb) { in inet_bind_bucket_create()
73 write_pnet(&tb->ib_net, net); in inet_bind_bucket_create()
74 tb->l3mdev = l3mdev; in inet_bind_bucket_create()
75 tb->port = snum; in inet_bind_bucket_create()
76 tb->fastreuse = 0; in inet_bind_bucket_create()
77 tb->fastreuseport = 0; in inet_bind_bucket_create()
78 INIT_HLIST_HEAD(&tb->owners); in inet_bind_bucket_create()
79 hlist_add_head(&tb->node, &head->chain); in inet_bind_bucket_create()
81 return tb; in inet_bind_bucket_create()
87 void inet_bind_bucket_destroy(struct kmem_cache *cachep, struct inet_bind_bucket *tb) in inet_bind_bucket_destroy() argument
89 if (hlist_empty(&tb->owners)) { in inet_bind_bucket_destroy()
90 __hlist_del(&tb->node); in inet_bind_bucket_destroy()
91 kmem_cache_free(cachep, tb); in inet_bind_bucket_destroy()
95 bool inet_bind_bucket_match(const struct inet_bind_bucket *tb, const struct net *net, in inet_bind_bucket_match() argument
98 return net_eq(ib_net(tb), net) && tb->port == port && in inet_bind_bucket_match()
99 tb->l3mdev == l3mdev; in inet_bind_bucket_match()
102 static void inet_bind2_bucket_init(struct inet_bind2_bucket *tb, in inet_bind2_bucket_init() argument
108 write_pnet(&tb->ib_net, net); in inet_bind2_bucket_init()
109 tb->l3mdev = l3mdev; in inet_bind2_bucket_init()
110 tb->port = port; in inet_bind2_bucket_init()
112 tb->family = sk->sk_family; in inet_bind2_bucket_init()
114 tb->v6_rcv_saddr = sk->sk_v6_rcv_saddr; in inet_bind2_bucket_init()
117 tb->rcv_saddr = sk->sk_rcv_saddr; in inet_bind2_bucket_init()
118 INIT_HLIST_HEAD(&tb->owners); in inet_bind2_bucket_init()
119 hlist_add_head(&tb->node, &head->chain); in inet_bind2_bucket_init()
129 struct inet_bind2_bucket *tb = kmem_cache_alloc(cachep, GFP_ATOMIC); in inet_bind2_bucket_create() local
131 if (tb) in inet_bind2_bucket_create()
132 inet_bind2_bucket_init(tb, net, head, port, l3mdev, sk); in inet_bind2_bucket_create()
134 return tb; in inet_bind2_bucket_create()
138 void inet_bind2_bucket_destroy(struct kmem_cache *cachep, struct inet_bind2_bucket *tb) in inet_bind2_bucket_destroy() argument
140 if (hlist_empty(&tb->owners)) { in inet_bind2_bucket_destroy()
141 __hlist_del(&tb->node); in inet_bind2_bucket_destroy()
142 kmem_cache_free(cachep, tb); in inet_bind2_bucket_destroy()
160 void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb, in inet_bind_hash() argument
164 sk_add_bind_node(sk, &tb->owners); in inet_bind_hash()
165 inet_csk(sk)->icsk_bind_hash = tb; in inet_bind_hash()
178 struct inet_bind_bucket *tb; in __inet_put_port() local
186 tb = inet_csk(sk)->icsk_bind_hash; in __inet_put_port()
190 inet_bind_bucket_destroy(hashinfo->bind_bucket_cachep, tb); in __inet_put_port()
222 struct inet_bind_bucket *tb; in __inet_inherit_port() local
231 tb = inet_csk(sk)->icsk_bind_hash; in __inet_inherit_port()
233 if (unlikely(!tb || !tb2)) { in __inet_inherit_port()
238 if (tb->port != port) { in __inet_inherit_port()
246 inet_bind_bucket_for_each(tb, &head->chain) { in __inet_inherit_port()
247 if (inet_bind_bucket_match(tb, net, port, l3mdev)) in __inet_inherit_port()
250 if (!tb) { in __inet_inherit_port()
251 tb = inet_bind_bucket_create(table->bind_bucket_cachep, in __inet_inherit_port()
253 if (!tb) { in __inet_inherit_port()
277 inet_csk_update_fastreuse(tb, child); in __inet_inherit_port()
278 inet_bind_hash(child, tb, tb2, port); in __inet_inherit_port()
286 inet_bind_bucket_destroy(table->bind_bucket_cachep, tb); in __inet_inherit_port()
686 struct inet_bind_bucket *tb = inet_csk(sk)->icsk_bind_hash; in inet_reuseport_add_sock() local
696 inet_csk(sk2)->icsk_bind_hash == tb && in inet_reuseport_add_sock()
793 static bool inet_bind2_bucket_match(const struct inet_bind2_bucket *tb, in inet_bind2_bucket_match() argument
798 if (sk->sk_family != tb->family) in inet_bind2_bucket_match()
802 return net_eq(ib2_net(tb), net) && tb->port == port && in inet_bind2_bucket_match()
803 tb->l3mdev == l3mdev && in inet_bind2_bucket_match()
804 ipv6_addr_equal(&tb->v6_rcv_saddr, &sk->sk_v6_rcv_saddr); in inet_bind2_bucket_match()
807 return net_eq(ib2_net(tb), net) && tb->port == port && in inet_bind2_bucket_match()
808 tb->l3mdev == l3mdev && tb->rcv_saddr == sk->sk_rcv_saddr; in inet_bind2_bucket_match()
811 bool inet_bind2_bucket_match_addr_any(const struct inet_bind2_bucket *tb, const struct net *net, in inet_bind2_bucket_match_addr_any() argument
817 if (sk->sk_family != tb->family) in inet_bind2_bucket_match_addr_any()
821 return net_eq(ib2_net(tb), net) && tb->port == port && in inet_bind2_bucket_match_addr_any()
822 tb->l3mdev == l3mdev && in inet_bind2_bucket_match_addr_any()
823 ipv6_addr_equal(&tb->v6_rcv_saddr, &addr_any); in inet_bind2_bucket_match_addr_any()
826 return net_eq(ib2_net(tb), net) && tb->port == port && in inet_bind2_bucket_match_addr_any()
827 tb->l3mdev == l3mdev && tb->rcv_saddr == 0; in inet_bind2_bucket_match_addr_any()
989 struct inet_bind_bucket *tb; in __inet_hash_connect() local
999 tb = inet_csk(sk)->icsk_bind_hash; in __inet_hash_connect()
1001 if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { in __inet_hash_connect()
1046 inet_bind_bucket_for_each(tb, &head->chain) { in __inet_hash_connect()
1047 if (inet_bind_bucket_match(tb, net, port, l3mdev)) { in __inet_hash_connect()
1048 if (tb->fastreuse >= 0 || in __inet_hash_connect()
1049 tb->fastreuseport >= 0) in __inet_hash_connect()
1051 WARN_ON(hlist_empty(&tb->owners)); in __inet_hash_connect()
1059 tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep, in __inet_hash_connect()
1061 if (!tb) { in __inet_hash_connect()
1066 tb->fastreuse = -1; in __inet_hash_connect()
1067 tb->fastreuseport = -1; in __inet_hash_connect()
1104 inet_bind_hash(sk, tb, tb2, port); in __inet_hash_connect()
1123 inet_bind_bucket_destroy(hinfo->bind_bucket_cachep, tb); in __inet_hash_connect()