Lines Matching refs:orig_node

55  * Return: orig_node (with increased refcnt), NULL on errors
62 struct batadv_orig_node *orig_node, *orig_node_tmp = NULL;
72 hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
73 if (!batadv_compare_eth(orig_node, data))
76 if (!kref_get_unless_zero(&orig_node->refcount))
79 orig_node_tmp = orig_node;
106 * @orig_node: the originator serving the VLAN
109 * Return: the vlan object identified by vid and belonging to orig_node or NULL
113 batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
119 hlist_for_each_entry_rcu(tmp, &orig_node->vlan_list, list) {
138 * @orig_node: the originator serving the VLAN
142 * belonging to orig_node otherwise. The object is created and added to the list
148 batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
153 spin_lock_bh(&orig_node->vlan_list_lock);
156 vlan = batadv_orig_node_vlan_get(orig_node, vid);
168 hlist_add_head_rcu(&vlan->list, &orig_node->vlan_list);
171 spin_unlock_bh(&orig_node->vlan_list_lock);
284 * @orig_node: the orig node for the router
288 * Return: the neighbor which should be the router for this orig_node/iface.
293 batadv_orig_router_get(struct batadv_orig_node *orig_node,
300 hlist_for_each_entry_rcu(orig_ifinfo, &orig_node->ifinfo_list, list) {
316 * batadv_orig_ifinfo_get() - find the ifinfo from an orig_node
317 * @orig_node: the orig node to be queried
325 batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node,
331 hlist_for_each_entry_rcu(tmp, &orig_node->ifinfo_list,
349 * @orig_node: the orig node to be queried
359 batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
365 spin_lock_bh(&orig_node->neigh_list_lock);
367 orig_ifinfo = batadv_orig_ifinfo_get(orig_node, if_outgoing);
387 &orig_node->ifinfo_list);
389 spin_unlock_bh(&orig_node->neigh_list_lock);
471 * @orig_node: originator which the neighbour belongs to
481 batadv_neigh_node_get(const struct batadv_orig_node *orig_node,
488 hlist_for_each_entry_rcu(tmp_neigh_node, &orig_node->neigh_list, list) {
510 * @orig_node: originator object representing the neighbour
517 struct batadv_orig_node *orig_node)
536 ether_addr_copy(hardif_neigh->orig, orig_node->orig);
557 * @orig_node: originator object representing the neighbour
564 struct batadv_orig_node *orig_node)
573 return batadv_hardif_neigh_create(hard_iface, neigh_addr, orig_node);
610 * @orig_node: originator object representing the neighbour
619 batadv_neigh_node_create(struct batadv_orig_node *orig_node,
626 spin_lock_bh(&orig_node->neigh_list_lock);
628 neigh_node = batadv_neigh_node_get(orig_node, hard_iface, neigh_addr);
633 neigh_addr, orig_node);
648 neigh_node->orig_node = orig_node;
659 hlist_add_head_rcu(&neigh_node->list, &orig_node->neigh_list);
661 batadv_dbg(BATADV_DBG_BATMAN, orig_node->bat_priv,
662 "Creating new neighbor %pM for orig_node %pM on interface %s\n",
663 neigh_addr, orig_node->orig, hard_iface->net_dev->name);
666 spin_unlock_bh(&orig_node->neigh_list_lock);
675 * @orig_node: originator object representing the neighbour
682 batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node,
689 neigh_node = batadv_neigh_node_get(orig_node, hard_iface, neigh_addr);
693 return batadv_neigh_node_create(orig_node, hard_iface, neigh_addr);
833 * batadv_orig_node_free_rcu() - free the orig_node
834 * @rcu: rcu pointer of the orig_node
838 struct batadv_orig_node *orig_node;
840 orig_node = container_of(rcu, struct batadv_orig_node, rcu);
842 batadv_mcast_purge_orig(orig_node);
844 batadv_frag_purge_orig(orig_node, NULL);
846 kfree(orig_node->tt_buff);
847 kfree(orig_node);
851 * batadv_orig_node_release() - release orig_node from lists and queue for
853 * @ref: kref pointer of the orig_node
859 struct batadv_orig_node *orig_node;
864 orig_node = container_of(ref, struct batadv_orig_node, refcount);
866 spin_lock_bh(&orig_node->neigh_list_lock);
870 &orig_node->neigh_list, list) {
876 &orig_node->ifinfo_list, list) {
881 last_candidate = orig_node->last_bonding_candidate;
882 orig_node->last_bonding_candidate = NULL;
883 spin_unlock_bh(&orig_node->neigh_list_lock);
888 spin_lock_bh(&orig_node->vlan_list_lock);
889 hlist_for_each_entry_safe(vlan, node_tmp, &orig_node->vlan_list, list) {
893 spin_unlock_bh(&orig_node->vlan_list_lock);
896 batadv_nc_purge_orig(orig_node->bat_priv, orig_node, NULL);
898 call_rcu(&orig_node->rcu, batadv_orig_node_free_rcu);
911 struct batadv_orig_node *orig_node;
926 hlist_for_each_entry_safe(orig_node, node_tmp,
928 hlist_del_rcu(&orig_node->hash_entry);
929 batadv_orig_node_put(orig_node);
938 * batadv_orig_node_new() - creates a new orig_node
950 struct batadv_orig_node *orig_node;
958 orig_node = kzalloc(sizeof(*orig_node), GFP_ATOMIC);
959 if (!orig_node)
962 INIT_HLIST_HEAD(&orig_node->neigh_list);
963 INIT_HLIST_HEAD(&orig_node->vlan_list);
964 INIT_HLIST_HEAD(&orig_node->ifinfo_list);
965 spin_lock_init(&orig_node->bcast_seqno_lock);
966 spin_lock_init(&orig_node->neigh_list_lock);
967 spin_lock_init(&orig_node->tt_buff_lock);
968 spin_lock_init(&orig_node->tt_lock);
969 spin_lock_init(&orig_node->vlan_list_lock);
971 batadv_nc_init_orig(orig_node);
974 kref_init(&orig_node->refcount);
976 orig_node->bat_priv = bat_priv;
977 ether_addr_copy(orig_node->orig, addr);
978 batadv_dat_init_orig_node_addr(orig_node);
979 atomic_set(&orig_node->last_ttvn, 0);
980 orig_node->tt_buff = NULL;
981 orig_node->tt_buff_len = 0;
982 orig_node->last_seen = jiffies;
984 orig_node->bcast_seqno_reset = reset_time;
987 orig_node->mcast_flags = BATADV_MCAST_WANT_NO_RTR4;
988 orig_node->mcast_flags |= BATADV_MCAST_WANT_NO_RTR6;
989 INIT_HLIST_NODE(&orig_node->mcast_want_all_unsnoopables_node);
990 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv4_node);
991 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv6_node);
992 spin_lock_init(&orig_node->mcast_handler_lock);
996 vlan = batadv_orig_node_vlan_new(orig_node, BATADV_NO_FLAGS);
1006 INIT_HLIST_HEAD(&orig_node->fragments[i].fragment_list);
1007 spin_lock_init(&orig_node->fragments[i].lock);
1008 orig_node->fragments[i].size = 0;
1011 return orig_node;
1013 kfree(orig_node);
1061 * @orig_node: orig node which is to be checked
1067 struct batadv_orig_node *orig_node)
1074 spin_lock_bh(&orig_node->neigh_list_lock);
1078 &orig_node->ifinfo_list, list) {
1093 orig_node->orig, if_outgoing->net_dev->name);
1099 if (orig_node->last_bonding_candidate == orig_ifinfo) {
1100 orig_node->last_bonding_candidate = NULL;
1105 spin_unlock_bh(&orig_node->neigh_list_lock);
1113 * @orig_node: orig node which is to be checked
1119 struct batadv_orig_node *orig_node)
1127 spin_lock_bh(&orig_node->neigh_list_lock);
1131 &orig_node->neigh_list, list) {
1144 orig_node->orig, neigh_node->addr,
1149 orig_node->orig, neigh_node->addr,
1164 spin_unlock_bh(&orig_node->neigh_list_lock);
1171 * @orig_node: orig node which is to be checked
1178 struct batadv_orig_node *orig_node,
1185 hlist_for_each_entry_rcu(neigh, &orig_node->neigh_list, list) {
1204 * batadv_purge_orig_node() - purges obsolete information from an orig_node
1206 * @orig_node: orig node which is to be checked
1208 * This function checks if the orig_node or substructures of it have become
1211 * Return: true if the orig_node is to be removed, false otherwise.
1214 struct batadv_orig_node *orig_node)
1220 if (batadv_has_timed_out(orig_node->last_seen,
1224 orig_node->orig,
1225 jiffies_to_msecs(orig_node->last_seen));
1228 changed_ifinfo = batadv_purge_orig_ifinfo(bat_priv, orig_node);
1229 changed_neigh = batadv_purge_orig_neighbors(bat_priv, orig_node);
1235 best_neigh_node = batadv_find_best_neighbor(bat_priv, orig_node,
1237 batadv_update_route(bat_priv, orig_node, BATADV_IF_DEFAULT,
1255 orig_node,
1257 batadv_update_route(bat_priv, orig_node, hard_iface,
1279 struct batadv_orig_node *orig_node;
1291 hlist_for_each_entry_safe(orig_node, node_tmp,
1293 if (batadv_purge_orig_node(bat_priv, orig_node)) {
1294 batadv_gw_node_delete(bat_priv, orig_node);
1295 hlist_del_rcu(&orig_node->hash_entry);
1296 batadv_tt_global_del_orig(orig_node->bat_priv,
1297 orig_node, -1,
1299 batadv_orig_node_put(orig_node);
1303 batadv_frag_purge_orig(orig_node,