• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/net/rxrpc/

Lines Matching refs:local

1 /* AF_RXRPC local endpoint management
27 * allocate a new local
32 struct rxrpc_local *local;
34 local = kzalloc(sizeof(struct rxrpc_local), GFP_KERNEL);
35 if (local) {
36 INIT_WORK(&local->destroyer, &rxrpc_destroy_local);
37 INIT_WORK(&local->acceptor, &rxrpc_accept_incoming_calls);
38 INIT_WORK(&local->rejecter, &rxrpc_reject_packets);
39 INIT_LIST_HEAD(&local->services);
40 INIT_LIST_HEAD(&local->link);
41 init_rwsem(&local->defrag_sem);
42 skb_queue_head_init(&local->accept_queue);
43 skb_queue_head_init(&local->reject_queue);
44 spin_lock_init(&local->lock);
45 rwlock_init(&local->services_lock);
46 atomic_set(&local->usage, 1);
47 local->debug_id = atomic_inc_return(&rxrpc_debug_id);
48 memcpy(&local->srx, srx, sizeof(*srx));
51 _leave(" = %p", local);
52 return local;
56 * create the local socket
59 static int rxrpc_create_local(struct rxrpc_local *local)
64 _enter("%p{%d}", local, local->srx.transport_type);
66 /* create a socket to represent the local endpoint */
67 ret = sock_create_kern(PF_INET, local->srx.transport_type, IPPROTO_UDP,
68 &local->socket);
74 /* if a local address was supplied then bind it */
75 if (local->srx.transport_len > sizeof(sa_family_t)) {
77 ret = kernel_bind(local->socket,
78 (struct sockaddr *) &local->srx.transport,
79 local->srx.transport_len);
88 ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR,
97 ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER,
105 list_add(&local->link, &rxrpc_locals);
109 sock = local->socket->sk;
110 sock->sk_user_data = local;
117 local->socket->ops->shutdown(local->socket, 2);
118 local->socket->sk->sk_user_data = NULL;
119 sock_release(local->socket);
120 local->socket = NULL;
127 * create a new local endpoint using the specified UDP address
131 struct rxrpc_local *local;
142 /* see if we have a suitable local local endpoint already */
145 list_for_each_entry(local, &rxrpc_locals, link) {
147 local->srx.transport_type,
148 local->srx.transport.family,
149 NIPQUAD(local->srx.transport.sin.sin_addr),
150 ntohs(local->srx.transport.sin.sin_port));
152 if (local->srx.transport_type != srx->transport_type ||
153 local->srx.transport.family != srx->transport.family)
158 if (local->srx.transport.sin.sin_port !=
161 if (memcmp(&local->srx.transport.sin.sin_addr,
175 local = rxrpc_alloc_local(srx);
176 if (!local) {
181 ret = rxrpc_create_local(local);
184 kfree(local);
192 local->debug_id,
193 local->srx.transport_type,
194 local->srx.transport.family,
195 NIPQUAD(local->srx.transport.sin.sin_addr),
196 ntohs(local->srx.transport.sin.sin_port));
198 _leave(" = %p [new]", local);
199 return local;
202 rxrpc_get_local(local);
207 local->debug_id,
208 local->srx.transport_type,
209 local->srx.transport.family,
210 NIPQUAD(local->srx.transport.sin.sin_addr),
211 ntohs(local->srx.transport.sin.sin_port));
213 _leave(" = %p [reuse]", local);
214 return local;
218 * release a local endpoint
220 void rxrpc_put_local(struct rxrpc_local *local)
222 _enter("%p{u=%d}", local, atomic_read(&local->usage));
224 ASSERTCMP(atomic_read(&local->usage), >, 0);
229 if (unlikely(atomic_dec_and_test(&local->usage))) {
230 _debug("destroy local");
231 rxrpc_queue_work(&local->destroyer);
238 * destroy a local endpoint
242 struct rxrpc_local *local =
245 _enter("%p{%d}", local, atomic_read(&local->usage));
250 if (atomic_read(&local->usage) > 0) {
257 list_del(&local->link);
258 local->socket->sk->sk_user_data = NULL;
263 ASSERT(list_empty(&local->services));
264 ASSERT(!work_pending(&local->acceptor));
265 ASSERT(!work_pending(&local->rejecter));
267 /* finish cleaning up the local descriptor */
268 rxrpc_purge_queue(&local->accept_queue);
269 rxrpc_purge_queue(&local->reject_queue);
270 local->socket->ops->shutdown(local->socket, 2);
271 sock_release(local->socket);
275 _net("DESTROY LOCAL %d", local->debug_id);
276 kfree(local);
285 * preemptively destroy all local local endpoint rather than waiting for