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
365 struct batadv_tvlv_handler *tvlv_handler,
374 if (!tvlv_handler)
380 if (!tvlv_handler->ogm_handler)
386 tvlv_handler->ogm_handler(bat_priv, orig_node,
389 tvlv_handler->flags |= BATADV_TVLV_HANDLER_OGM_CALLED;
395 if (!tvlv_handler->unicast_handler)
401 return tvlv_handler->unicast_handler(bat_priv, src,
408 if (!tvlv_handler->mcast_handler)
415 return tvlv_handler->mcast_handler(bat_priv, skb);
440 struct batadv_tvlv_handler *tvlv_handler;
455 tvlv_handler = batadv_tvlv_handler_get(bat_priv,
459 ret |= batadv_tvlv_call_handler(bat_priv, tvlv_handler,
463 batadv_tvlv_handler_put(tvlv_handler);
473 hlist_for_each_entry_rcu(tvlv_handler,
475 if (!tvlv_handler->ogm_handler)
478 if ((tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CIFNOTFND) &&
479 !(tvlv_handler->flags & BATADV_TVLV_HANDLER_OGM_CALLED))
480 tvlv_handler->ogm_handler(bat_priv, orig_node,
483 tvlv_handler->flags &= ~BATADV_TVLV_HANDLER_OGM_CALLED;
549 struct batadv_tvlv_handler *tvlv_handler;
553 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version);
554 if (tvlv_handler) {
556 batadv_tvlv_handler_put(tvlv_handler);
560 tvlv_handler = kzalloc(sizeof(*tvlv_handler), GFP_ATOMIC);
561 if (!tvlv_handler) {
566 tvlv_handler->ogm_handler = optr;
567 tvlv_handler->unicast_handler = uptr;
568 tvlv_handler->mcast_handler = mptr;
569 tvlv_handler->type = type;
570 tvlv_handler->version = version;
571 tvlv_handler->flags = flags;
572 kref_init(&tvlv_handler->refcount);
573 INIT_HLIST_NODE(&tvlv_handler->list);
575 kref_get(&tvlv_handler->refcount);
576 hlist_add_head_rcu(&tvlv_handler->list, &bat_priv->tvlv.handler_list);
579 /* don't return reference to new tvlv_handler */
580 batadv_tvlv_handler_put(tvlv_handler);
593 struct batadv_tvlv_handler *tvlv_handler;
595 tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version);
596 if (!tvlv_handler)
599 batadv_tvlv_handler_put(tvlv_handler);
601 hlist_del_rcu(&tvlv_handler->list);
603 batadv_tvlv_handler_put(tvlv_handler);