• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/net/tipc/

Lines Matching defs:subscriber

44  * struct subscriber - TIPC network topology subscriber
45 * @ref: object reference to subscriber object itself
46 * @lock: pointer to spinlock controlling access to subscriber object
48 * @subscription_list: list of subscription objects for this subscriber
49 * @port_ref: object reference to port used to communicate with subscriber
50 * @swap: indicates if subscriber uses opposite endianness in its messages
53 struct subscriber {
68 * @lock: spinlock govering access to subscriber list
97 * subscr_send_event - send a message containing a tipc_event to the subscriber
169 struct subscriber *subscriber;
172 /* Validate subscriber reference (in case subscriber is terminating) */
175 subscriber = (struct subscriber *)tipc_ref_lock(subscriber_ref);
176 if (subscriber == NULL)
190 /* Notify subscriber of timeout, then unlink subscription */
211 * Called with subscriber locked.
223 * subscr_terminate - terminate communication with a subscriber
225 * Called with subscriber locked. Routine must temporarily release this lock
233 static void subscr_terminate(struct subscriber *subscriber)
238 /* Invalidate subscriber reference */
240 tipc_ref_discard(subscriber->ref);
241 spin_unlock_bh(subscriber->lock);
243 /* Destroy any existing subscriptions for subscriber */
245 list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
251 dbg("Term: Removing sub %u,%u,%u from subscriber %x list\n",
252 sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
256 /* Sever connection to subscriber */
258 tipc_shutdown(subscriber->port_ref);
259 tipc_deleteport(subscriber->port_ref);
261 /* Remove subscriber from topology server's subscriber list */
264 list_del(&subscriber->subscriber_list);
267 /* Now destroy subscriber */
269 spin_lock_bh(subscriber->lock);
270 kfree(subscriber);
276 * Called with subscriber locked. Routine must temporarily release this lock
280 * Note that fields of 's' use subscriber's endianness!
284 struct subscriber *subscriber)
292 list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
306 spin_unlock_bh(subscriber->lock);
309 spin_lock_bh(subscriber->lock);
311 dbg("Cancel: removing sub %u,%u,%u from subscriber %x list\n",
312 sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
317 * subscr_subscribe - create subscription for subscriber
319 * Called with subscriber locked
323 struct subscriber *subscriber)
327 /* Determine/update subscriber's endianness */
330 subscriber->swap = 0;
332 subscriber->swap = 1;
336 if (s->filter & htohl(TIPC_SUB_CANCEL, subscriber->swap)) {
337 s->filter &= ~htohl(TIPC_SUB_CANCEL, subscriber->swap);
338 subscr_cancel(s, subscriber);
347 subscr_terminate(subscriber);
356 subscr_terminate(subscriber);
362 sub->seq.type = htohl(s->seq.type, subscriber->swap);
363 sub->seq.lower = htohl(s->seq.lower, subscriber->swap);
364 sub->seq.upper = htohl(s->seq.upper, subscriber->swap);
365 sub->timeout = htohl(s->timeout, subscriber->swap);
366 sub->filter = htohl(s->filter, subscriber->swap);
372 subscr_terminate(subscriber);
378 list_add(&sub->subscription_list, &subscriber->subscription_list);
385 sub->owner = subscriber;
390 * subscr_conn_shutdown_event - handle termination request from subscriber
400 struct subscriber *subscriber;
403 subscriber = tipc_ref_lock((u32)(unsigned long)usr_handle);
404 if (subscriber == NULL)
407 subscriber_lock = subscriber->lock;
408 subscr_terminate(subscriber);
413 * subscr_conn_msg_event - handle new subscription request from subscriber
422 struct subscriber *subscriber;
425 subscriber = tipc_ref_lock((u32)(unsigned long)usr_handle);
426 if (subscriber == NULL)
429 subscriber_lock = subscriber->lock;
431 subscr_terminate(subscriber);
433 subscr_subscribe((struct tipc_subscr *)data, subscriber);
439 * subscr_named_msg_event - handle request to establish a new subscriber
451 struct subscriber *subscriber;
462 /* Create subscriber object */
464 subscriber = kzalloc(sizeof(struct subscriber), GFP_ATOMIC);
465 if (subscriber == NULL) {
469 INIT_LIST_HEAD(&subscriber->subscription_list);
470 INIT_LIST_HEAD(&subscriber->subscriber_list);
471 subscriber->ref = tipc_ref_acquire(subscriber, &subscriber->lock);
472 if (subscriber->ref == 0) {
474 kfree(subscriber);
478 /* Establish a connection to subscriber */
481 (void *)(unsigned long)subscriber->ref,
490 &subscriber->port_ref);
491 if (subscriber->port_ref == 0) {
493 tipc_ref_discard(subscriber->ref);
494 kfree(subscriber);
497 tipc_connect2port(subscriber->port_ref, orig);
500 /* Add subscriber to topology server's subscriber list */
502 tipc_ref_lock(subscriber->ref);
504 list_add(&subscriber->subscriber_list, &topsrv.subscriber_list);
512 subscriber_lock = subscriber->lock;
514 subscr_subscribe((struct tipc_subscr *)data, subscriber);
516 tipc_send(subscriber->port_ref, 1, &msg_sect);
568 struct subscriber *subscriber;
569 struct subscriber *subscriber_temp;
574 list_for_each_entry_safe(subscriber, subscriber_temp,
577 tipc_ref_lock(subscriber->ref);
578 subscriber_lock = subscriber->lock;
579 subscr_terminate(subscriber);