Lines Matching refs:peer
36 static void rxrpc_assess_MTU_size(struct rxrpc_peer *peer) in rxrpc_assess_MTU_size() argument
41 peer->if_mtu = 1500; in rxrpc_assess_MTU_size()
44 peer->srx.transport.sin.sin_addr.s_addr, 0, in rxrpc_assess_MTU_size()
52 peer->if_mtu = dst_mtu(&rt->dst); in rxrpc_assess_MTU_size()
55 _leave(" [if_mtu %u]", peer->if_mtu); in rxrpc_assess_MTU_size()
64 struct rxrpc_peer *peer; in rxrpc_alloc_peer() local
68 peer = kzalloc(sizeof(struct rxrpc_peer), gfp); in rxrpc_alloc_peer()
69 if (peer) { in rxrpc_alloc_peer()
70 INIT_WORK(&peer->destroyer, &rxrpc_destroy_peer); in rxrpc_alloc_peer()
71 INIT_LIST_HEAD(&peer->link); in rxrpc_alloc_peer()
72 INIT_LIST_HEAD(&peer->error_targets); in rxrpc_alloc_peer()
73 spin_lock_init(&peer->lock); in rxrpc_alloc_peer()
74 atomic_set(&peer->usage, 1); in rxrpc_alloc_peer()
75 peer->debug_id = atomic_inc_return(&rxrpc_debug_id); in rxrpc_alloc_peer()
76 memcpy(&peer->srx, srx, sizeof(*srx)); in rxrpc_alloc_peer()
78 rxrpc_assess_MTU_size(peer); in rxrpc_alloc_peer()
79 peer->mtu = peer->if_mtu; in rxrpc_alloc_peer()
82 peer->hdrsize = sizeof(struct iphdr); in rxrpc_alloc_peer()
85 peer->hdrsize += sizeof(struct udphdr); in rxrpc_alloc_peer()
95 peer->hdrsize += sizeof(struct rxrpc_header); in rxrpc_alloc_peer()
96 peer->maxdata = peer->mtu - peer->hdrsize; in rxrpc_alloc_peer()
99 _leave(" = %p", peer); in rxrpc_alloc_peer()
100 return peer; in rxrpc_alloc_peer()
108 struct rxrpc_peer *peer, *candidate; in rxrpc_get_peer() local
120 list_for_each_entry(peer, &rxrpc_peers, link) { in rxrpc_get_peer()
122 peer->debug_id, in rxrpc_get_peer()
123 atomic_read(&peer->usage), in rxrpc_get_peer()
124 peer->srx.transport_type, in rxrpc_get_peer()
125 peer->srx.transport_len); in rxrpc_get_peer()
127 if (atomic_read(&peer->usage) > 0 && in rxrpc_get_peer()
128 peer->srx.transport_type == srx->transport_type && in rxrpc_get_peer()
129 peer->srx.transport_len == srx->transport_len && in rxrpc_get_peer()
130 memcmp(&peer->srx.transport, in rxrpc_get_peer()
147 list_for_each_entry(peer, &rxrpc_peers, link) { in rxrpc_get_peer()
148 if (atomic_read(&peer->usage) > 0 && in rxrpc_get_peer()
149 peer->srx.transport_type == srx->transport_type && in rxrpc_get_peer()
150 peer->srx.transport_len == srx->transport_len && in rxrpc_get_peer()
151 memcmp(&peer->srx.transport, in rxrpc_get_peer()
158 peer = candidate; in rxrpc_get_peer()
160 usage = atomic_read(&peer->usage); in rxrpc_get_peer()
162 list_add_tail(&peer->link, &rxrpc_peers); in rxrpc_get_peer()
169 peer->debug_id, in rxrpc_get_peer()
170 peer->srx.transport_type, in rxrpc_get_peer()
171 peer->srx.transport.family, in rxrpc_get_peer()
172 &peer->srx.transport.sin.sin_addr, in rxrpc_get_peer()
173 ntohs(peer->srx.transport.sin.sin_port)); in rxrpc_get_peer()
175 _leave(" = %p {u=%d}", peer, usage); in rxrpc_get_peer()
176 return peer; in rxrpc_get_peer()
180 usage = atomic_inc_return(&peer->usage); in rxrpc_get_peer()
186 usage = atomic_inc_return(&peer->usage); in rxrpc_get_peer()
198 struct rxrpc_peer *peer; in rxrpc_find_peer() local
208 list_for_each_entry(peer, &rxrpc_peers, link) { in rxrpc_find_peer()
209 if (atomic_read(&peer->usage) > 0 && in rxrpc_find_peer()
210 peer->srx.transport_type == SOCK_DGRAM && in rxrpc_find_peer()
211 peer->srx.transport.family == AF_INET && in rxrpc_find_peer()
212 peer->srx.transport.sin.sin_port == port && in rxrpc_find_peer()
213 peer->srx.transport.sin.sin_addr.s_addr == addr) in rxrpc_find_peer()
225 _net("Rx UDP DGRAM from peer %d", peer->debug_id); in rxrpc_find_peer()
226 atomic_inc(&peer->usage); in rxrpc_find_peer()
228 _leave(" = %p", peer); in rxrpc_find_peer()
229 return peer; in rxrpc_find_peer()
241 void rxrpc_put_peer(struct rxrpc_peer *peer) in rxrpc_put_peer() argument
243 _enter("%p{u=%d}", peer, atomic_read(&peer->usage)); in rxrpc_put_peer()
245 ASSERTCMP(atomic_read(&peer->usage), >, 0); in rxrpc_put_peer()
247 if (likely(!atomic_dec_and_test(&peer->usage))) { in rxrpc_put_peer()
252 rxrpc_queue_work(&peer->destroyer); in rxrpc_put_peer()
261 struct rxrpc_peer *peer = in rxrpc_destroy_peer() local
264 _enter("%p{%d}", peer, atomic_read(&peer->usage)); in rxrpc_destroy_peer()
267 list_del(&peer->link); in rxrpc_destroy_peer()
270 _net("DESTROY PEER %d", peer->debug_id); in rxrpc_destroy_peer()
271 kfree(peer); in rxrpc_destroy_peer()