Lines Matching refs:orig_node
55 batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, in batadv_orig_node_vlan_get() argument
61 list_for_each_entry_rcu(tmp, &orig_node->vlan_list, list) { in batadv_orig_node_vlan_get()
90 batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, in batadv_orig_node_vlan_new() argument
95 spin_lock_bh(&orig_node->vlan_list_lock); in batadv_orig_node_vlan_new()
98 vlan = batadv_orig_node_vlan_get(orig_node, vid); in batadv_orig_node_vlan_new()
109 list_add_rcu(&vlan->list, &orig_node->vlan_list); in batadv_orig_node_vlan_new()
112 spin_unlock_bh(&orig_node->vlan_list_lock); in batadv_orig_node_vlan_new()
218 batadv_orig_router_get(struct batadv_orig_node *orig_node, in batadv_orig_router_get() argument
225 hlist_for_each_entry_rcu(orig_ifinfo, &orig_node->ifinfo_list, list) { in batadv_orig_router_get()
250 batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node, in batadv_orig_ifinfo_get() argument
256 hlist_for_each_entry_rcu(tmp, &orig_node->ifinfo_list, in batadv_orig_ifinfo_get()
284 batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node, in batadv_orig_ifinfo_new() argument
290 spin_lock_bh(&orig_node->neigh_list_lock); in batadv_orig_ifinfo_new()
292 orig_ifinfo = batadv_orig_ifinfo_get(orig_node, if_outgoing); in batadv_orig_ifinfo_new()
314 &orig_node->ifinfo_list); in batadv_orig_ifinfo_new()
316 spin_unlock_bh(&orig_node->neigh_list_lock); in batadv_orig_ifinfo_new()
410 struct batadv_orig_node *orig_node) in batadv_neigh_node_new() argument
424 neigh_node->orig_node = orig_node; in batadv_neigh_node_new()
444 batadv_neigh_node_get(const struct batadv_orig_node *orig_node, in batadv_neigh_node_get() argument
451 hlist_for_each_entry_rcu(tmp_neigh_node, &orig_node->neigh_list, list) { in batadv_neigh_node_get()
506 struct batadv_orig_node *orig_node; in batadv_orig_node_free_rcu() local
508 orig_node = container_of(rcu, struct batadv_orig_node, rcu); in batadv_orig_node_free_rcu()
510 batadv_mcast_purge_orig(orig_node); in batadv_orig_node_free_rcu()
512 batadv_frag_purge_orig(orig_node, NULL); in batadv_orig_node_free_rcu()
514 if (orig_node->bat_priv->bat_algo_ops->bat_orig_free) in batadv_orig_node_free_rcu()
515 orig_node->bat_priv->bat_algo_ops->bat_orig_free(orig_node); in batadv_orig_node_free_rcu()
517 kfree(orig_node->tt_buff); in batadv_orig_node_free_rcu()
518 kfree(orig_node); in batadv_orig_node_free_rcu()
526 static void batadv_orig_node_release(struct batadv_orig_node *orig_node) in batadv_orig_node_release() argument
532 spin_lock_bh(&orig_node->neigh_list_lock); in batadv_orig_node_release()
536 &orig_node->neigh_list, list) { in batadv_orig_node_release()
542 &orig_node->ifinfo_list, list) { in batadv_orig_node_release()
546 spin_unlock_bh(&orig_node->neigh_list_lock); in batadv_orig_node_release()
549 batadv_nc_purge_orig(orig_node->bat_priv, orig_node, NULL); in batadv_orig_node_release()
551 call_rcu(&orig_node->rcu, batadv_orig_node_free_rcu); in batadv_orig_node_release()
559 void batadv_orig_node_free_ref(struct batadv_orig_node *orig_node) in batadv_orig_node_free_ref() argument
561 if (atomic_dec_and_test(&orig_node->refcount)) in batadv_orig_node_free_ref()
562 batadv_orig_node_release(orig_node); in batadv_orig_node_free_ref()
571 struct batadv_orig_node *orig_node; in batadv_originator_free() local
586 hlist_for_each_entry_safe(orig_node, node_tmp, in batadv_originator_free()
588 hlist_del_rcu(&orig_node->hash_entry); in batadv_originator_free()
589 batadv_orig_node_free_ref(orig_node); in batadv_originator_free()
609 struct batadv_orig_node *orig_node; in batadv_orig_node_new() local
617 orig_node = kzalloc(sizeof(*orig_node), GFP_ATOMIC); in batadv_orig_node_new()
618 if (!orig_node) in batadv_orig_node_new()
621 INIT_HLIST_HEAD(&orig_node->neigh_list); in batadv_orig_node_new()
622 INIT_LIST_HEAD(&orig_node->vlan_list); in batadv_orig_node_new()
623 INIT_HLIST_HEAD(&orig_node->ifinfo_list); in batadv_orig_node_new()
624 spin_lock_init(&orig_node->bcast_seqno_lock); in batadv_orig_node_new()
625 spin_lock_init(&orig_node->neigh_list_lock); in batadv_orig_node_new()
626 spin_lock_init(&orig_node->tt_buff_lock); in batadv_orig_node_new()
627 spin_lock_init(&orig_node->tt_lock); in batadv_orig_node_new()
628 spin_lock_init(&orig_node->vlan_list_lock); in batadv_orig_node_new()
630 batadv_nc_init_orig(orig_node); in batadv_orig_node_new()
633 atomic_set(&orig_node->refcount, 2); in batadv_orig_node_new()
635 orig_node->bat_priv = bat_priv; in batadv_orig_node_new()
636 ether_addr_copy(orig_node->orig, addr); in batadv_orig_node_new()
637 batadv_dat_init_orig_node_addr(orig_node); in batadv_orig_node_new()
638 atomic_set(&orig_node->last_ttvn, 0); in batadv_orig_node_new()
639 orig_node->tt_buff = NULL; in batadv_orig_node_new()
640 orig_node->tt_buff_len = 0; in batadv_orig_node_new()
641 orig_node->last_seen = jiffies; in batadv_orig_node_new()
643 orig_node->bcast_seqno_reset = reset_time; in batadv_orig_node_new()
646 orig_node->mcast_flags = BATADV_NO_FLAGS; in batadv_orig_node_new()
647 INIT_HLIST_NODE(&orig_node->mcast_want_all_unsnoopables_node); in batadv_orig_node_new()
648 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv4_node); in batadv_orig_node_new()
649 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv6_node); in batadv_orig_node_new()
650 spin_lock_init(&orig_node->mcast_handler_lock); in batadv_orig_node_new()
654 vlan = batadv_orig_node_vlan_new(orig_node, BATADV_NO_FLAGS); in batadv_orig_node_new()
664 INIT_HLIST_HEAD(&orig_node->fragments[i].head); in batadv_orig_node_new()
665 spin_lock_init(&orig_node->fragments[i].lock); in batadv_orig_node_new()
666 orig_node->fragments[i].size = 0; in batadv_orig_node_new()
669 return orig_node; in batadv_orig_node_new()
671 kfree(orig_node); in batadv_orig_node_new()
725 struct batadv_orig_node *orig_node) in batadv_purge_orig_ifinfo() argument
732 spin_lock_bh(&orig_node->neigh_list_lock); in batadv_purge_orig_ifinfo()
736 &orig_node->ifinfo_list, list) { in batadv_purge_orig_ifinfo()
751 orig_node->orig, if_outgoing->net_dev->name); in batadv_purge_orig_ifinfo()
757 if (orig_node->last_bonding_candidate == orig_ifinfo) { in batadv_purge_orig_ifinfo()
758 orig_node->last_bonding_candidate = NULL; in batadv_purge_orig_ifinfo()
763 spin_unlock_bh(&orig_node->neigh_list_lock); in batadv_purge_orig_ifinfo()
777 struct batadv_orig_node *orig_node) in batadv_purge_orig_neighbors() argument
785 spin_lock_bh(&orig_node->neigh_list_lock); in batadv_purge_orig_neighbors()
789 &orig_node->neigh_list, list) { in batadv_purge_orig_neighbors()
802 orig_node->orig, neigh_node->addr, in batadv_purge_orig_neighbors()
807 orig_node->orig, neigh_node->addr, in batadv_purge_orig_neighbors()
822 spin_unlock_bh(&orig_node->neigh_list_lock); in batadv_purge_orig_neighbors()
836 struct batadv_orig_node *orig_node, in batadv_find_best_neighbor() argument
843 hlist_for_each_entry_rcu(neigh, &orig_node->neigh_list, list) { in batadv_find_best_neighbor()
872 struct batadv_orig_node *orig_node) in batadv_purge_orig_node() argument
878 if (batadv_has_timed_out(orig_node->last_seen, in batadv_purge_orig_node()
882 orig_node->orig, in batadv_purge_orig_node()
883 jiffies_to_msecs(orig_node->last_seen)); in batadv_purge_orig_node()
886 changed_ifinfo = batadv_purge_orig_ifinfo(bat_priv, orig_node); in batadv_purge_orig_node()
887 changed_neigh = batadv_purge_orig_neighbors(bat_priv, orig_node); in batadv_purge_orig_node()
893 best_neigh_node = batadv_find_best_neighbor(bat_priv, orig_node, in batadv_purge_orig_node()
895 batadv_update_route(bat_priv, orig_node, BATADV_IF_DEFAULT, in batadv_purge_orig_node()
910 orig_node, in batadv_purge_orig_node()
912 batadv_update_route(bat_priv, orig_node, hard_iface, in batadv_purge_orig_node()
928 struct batadv_orig_node *orig_node; in _batadv_purge_orig() local
940 hlist_for_each_entry_safe(orig_node, node_tmp, in _batadv_purge_orig()
942 if (batadv_purge_orig_node(bat_priv, orig_node)) { in _batadv_purge_orig()
943 batadv_gw_node_delete(bat_priv, orig_node); in _batadv_purge_orig()
944 hlist_del_rcu(&orig_node->hash_entry); in _batadv_purge_orig()
945 batadv_tt_global_del_orig(orig_node->bat_priv, in _batadv_purge_orig()
946 orig_node, -1, in _batadv_purge_orig()
948 batadv_orig_node_free_ref(orig_node); in _batadv_purge_orig()
952 batadv_frag_purge_orig(orig_node, in _batadv_purge_orig()
1062 struct batadv_orig_node *orig_node; in batadv_orig_hash_add_if() local
1073 hlist_for_each_entry_rcu(orig_node, head, hash_entry) { in batadv_orig_hash_add_if()
1076 ret = bao->bat_orig_add_if(orig_node, in batadv_orig_hash_add_if()
1098 struct batadv_orig_node *orig_node; in batadv_orig_hash_del_if() local
1110 hlist_for_each_entry_rcu(orig_node, head, hash_entry) { in batadv_orig_hash_del_if()
1113 ret = bao->bat_orig_del_if(orig_node, in batadv_orig_hash_del_if()