Lines Matching defs:tvlv_handler

40 	struct batadv_tvlv_handler *tvlv_handler;
42 tvlv_handler = container_of(ref, struct batadv_tvlv_handler, refcount);
43 kfree_rcu(tvlv_handler, rcu);
49 * @tvlv_handler: the tvlv handler to free
51 static void batadv_tvlv_handler_put(struct batadv_tvlv_handler *tvlv_handler)
53 if (!tvlv_handler)
56 kref_put(&tvlv_handler->refcount, batadv_tvlv_handler_release);
71 struct batadv_tvlv_handler *tvlv_handler_tmp, *tvlv_handler = NULL;
85 tvlv_handler = tvlv_handler_tmp;
90 return tvlv_handler;
354 * @tvlv_handler: tvlv callback function handling the tvlv content
366 struct batadv_tvlv_handler *tvlv_handler,
372 if (!tvlv_handler)
376 if (!tvlv_handler->ogm_handler)
382 tvlv_handler->ogm_handler(bat_priv, orig_node,
385 tvlv_handler->flags |= BATADV_TVLV_HANDLER_OGM_CALLED;
393 if (!tvlv_handler->unicast_handler)
396 return tvlv_handler->unicast_handler(bat_priv, src,
424 struct batadv_tvlv_handler *tvlv_handler;
439 tvlv_handler = batadv_tvlv_handler_get(bat_priv,
443 ret |= batadv_tvlv_call_handler(bat_priv, tvlv_handler,
447 if (tvlv_handler)
448 batadv_tvlv_handler_put(tvlv_handler);
457 hlist_for_each_entry_rcu(tvlv_handler,
459 if ((tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CIFNOTFND) &&
460 !(tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CALLED))
461 tvlv_handler->ogm_handler(bat_priv, orig_node,
464 tvlv_handler->flags &= ~BATADV_TVLV_HANDLER_OGM_CALLED;
524 struct batadv_tvlv_handler *tvlv_handler;
528 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version);
529 if (tvlv_handler) {
531 batadv_tvlv_handler_put(tvlv_handler);
535 tvlv_handler = kzalloc(sizeof(*tvlv_handler), GFP_ATOMIC);
536 if (!tvlv_handler) {
541 tvlv_handler->ogm_handler = optr;
542 tvlv_handler->unicast_handler = uptr;
543 tvlv_handler->type = type;
544 tvlv_handler->version = version;
545 tvlv_handler->flags = flags;
546 kref_init(&tvlv_handler->refcount);
547 INIT_HLIST_NODE(&tvlv_handler->list);
549 kref_get(&tvlv_handler->refcount);
550 hlist_add_head_rcu(&tvlv_handler->list, &bat_priv->tvlv.handler_list);
553 /* don't return reference to new tvlv_handler */
554 batadv_tvlv_handler_put(tvlv_handler);
567 struct batadv_tvlv_handler *tvlv_handler;
569 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version);
570 if (!tvlv_handler)
573 batadv_tvlv_handler_put(tvlv_handler);
575 hlist_del_rcu(&tvlv_handler->list);
577 batadv_tvlv_handler_put(tvlv_handler);