Lines Matching refs:orig_node
54 * Return: orig_node (with increased refcnt), NULL on errors
61 struct batadv_orig_node *orig_node, *orig_node_tmp = NULL;
71 hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
72 if (!batadv_compare_eth(orig_node, data))
75 if (!kref_get_unless_zero(&orig_node->refcount))
78 orig_node_tmp = orig_node;
105 * @orig_node: the originator serving the VLAN
108 * Return: the vlan object identified by vid and belonging to orig_node or NULL
112 batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
118 hlist_for_each_entry_rcu(tmp, &orig_node->vlan_list, list) {
137 * @orig_node: the originator serving the VLAN
141 * belonging to orig_node otherwise. The object is created and added to the list
147 batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
152 spin_lock_bh(&orig_node->vlan_list_lock);
155 vlan = batadv_orig_node_vlan_get(orig_node, vid);
167 hlist_add_head_rcu(&vlan->list, &orig_node->vlan_list);
170 spin_unlock_bh(&orig_node->vlan_list_lock);
283 * @orig_node: the orig node for the router
287 * Return: the neighbor which should be the router for this orig_node/iface.
292 batadv_orig_router_get(struct batadv_orig_node *orig_node,
299 hlist_for_each_entry_rcu(orig_ifinfo, &orig_node->ifinfo_list, list) {
315 * batadv_orig_ifinfo_get() - find the ifinfo from an orig_node
316 * @orig_node: the orig node to be queried
324 batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node,
330 hlist_for_each_entry_rcu(tmp, &orig_node->ifinfo_list,
348 * @orig_node: the orig node to be queried
358 batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
364 spin_lock_bh(&orig_node->neigh_list_lock);
366 orig_ifinfo = batadv_orig_ifinfo_get(orig_node, if_outgoing);
386 &orig_node->ifinfo_list);
388 spin_unlock_bh(&orig_node->neigh_list_lock);
470 * @orig_node: originator which the neighbour belongs to
480 batadv_neigh_node_get(const struct batadv_orig_node *orig_node,
487 hlist_for_each_entry_rcu(tmp_neigh_node, &orig_node->neigh_list, list) {
509 * @orig_node: originator object representing the neighbour
516 struct batadv_orig_node *orig_node)
535 ether_addr_copy(hardif_neigh->orig, orig_node->orig);
556 * @orig_node: originator object representing the neighbour
563 struct batadv_orig_node *orig_node)
572 return batadv_hardif_neigh_create(hard_iface, neigh_addr, orig_node);
609 * @orig_node: originator object representing the neighbour
618 batadv_neigh_node_create(struct batadv_orig_node *orig_node,
625 spin_lock_bh(&orig_node->neigh_list_lock);
627 neigh_node = batadv_neigh_node_get(orig_node, hard_iface, neigh_addr);
632 neigh_addr, orig_node);
647 neigh_node->orig_node = orig_node;
658 hlist_add_head_rcu(&neigh_node->list, &orig_node->neigh_list);
660 batadv_dbg(BATADV_DBG_BATMAN, orig_node->bat_priv,
661 "Creating new neighbor %pM for orig_node %pM on interface %s\n",
662 neigh_addr, orig_node->orig, hard_iface->net_dev->name);
665 spin_unlock_bh(&orig_node->neigh_list_lock);
673 * @orig_node: originator object representing the neighbour
680 batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node,
687 neigh_node = batadv_neigh_node_get(orig_node, hard_iface, neigh_addr);
691 return batadv_neigh_node_create(orig_node, hard_iface, neigh_addr);
790 * batadv_orig_node_free_rcu() - free the orig_node
791 * @rcu: rcu pointer of the orig_node
795 struct batadv_orig_node *orig_node;
797 orig_node = container_of(rcu, struct batadv_orig_node, rcu);
799 batadv_mcast_purge_orig(orig_node);
801 batadv_frag_purge_orig(orig_node, NULL);
803 kfree(orig_node->tt_buff);
804 kfree(orig_node);
808 * batadv_orig_node_release() - release orig_node from lists and queue for
810 * @ref: kref pointer of the orig_node
816 struct batadv_orig_node *orig_node;
821 orig_node = container_of(ref, struct batadv_orig_node, refcount);
823 spin_lock_bh(&orig_node->neigh_list_lock);
827 &orig_node->neigh_list, list) {
833 &orig_node->ifinfo_list, list) {
838 last_candidate = orig_node->last_bonding_candidate;
839 orig_node->last_bonding_candidate = NULL;
840 spin_unlock_bh(&orig_node->neigh_list_lock);
844 spin_lock_bh(&orig_node->vlan_list_lock);
845 hlist_for_each_entry_safe(vlan, node_tmp, &orig_node->vlan_list, list) {
849 spin_unlock_bh(&orig_node->vlan_list_lock);
852 batadv_nc_purge_orig(orig_node->bat_priv, orig_node, NULL);
854 call_rcu(&orig_node->rcu, batadv_orig_node_free_rcu);
867 struct batadv_orig_node *orig_node;
882 hlist_for_each_entry_safe(orig_node, node_tmp,
884 hlist_del_rcu(&orig_node->hash_entry);
885 batadv_orig_node_put(orig_node);
894 * batadv_orig_node_new() - creates a new orig_node
906 struct batadv_orig_node *orig_node;
914 orig_node = kzalloc(sizeof(*orig_node), GFP_ATOMIC);
915 if (!orig_node)
918 INIT_HLIST_HEAD(&orig_node->neigh_list);
919 INIT_HLIST_HEAD(&orig_node->vlan_list);
920 INIT_HLIST_HEAD(&orig_node->ifinfo_list);
921 spin_lock_init(&orig_node->bcast_seqno_lock);
922 spin_lock_init(&orig_node->neigh_list_lock);
923 spin_lock_init(&orig_node->tt_buff_lock);
924 spin_lock_init(&orig_node->tt_lock);
925 spin_lock_init(&orig_node->vlan_list_lock);
927 batadv_nc_init_orig(orig_node);
930 kref_init(&orig_node->refcount);
932 orig_node->bat_priv = bat_priv;
933 ether_addr_copy(orig_node->orig, addr);
934 batadv_dat_init_orig_node_addr(orig_node);
935 atomic_set(&orig_node->last_ttvn, 0);
936 orig_node->tt_buff = NULL;
937 orig_node->tt_buff_len = 0;
938 orig_node->last_seen = jiffies;
940 orig_node->bcast_seqno_reset = reset_time;
943 orig_node->mcast_flags = BATADV_MCAST_WANT_NO_RTR4;
944 orig_node->mcast_flags |= BATADV_MCAST_WANT_NO_RTR6;
945 INIT_HLIST_NODE(&orig_node->mcast_want_all_unsnoopables_node);
946 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv4_node);
947 INIT_HLIST_NODE(&orig_node->mcast_want_all_ipv6_node);
948 spin_lock_init(&orig_node->mcast_handler_lock);
952 vlan = batadv_orig_node_vlan_new(orig_node, BATADV_NO_FLAGS);
962 INIT_HLIST_HEAD(&orig_node->fragments[i].fragment_list);
963 spin_lock_init(&orig_node->fragments[i].lock);
964 orig_node->fragments[i].size = 0;
967 return orig_node;
969 kfree(orig_node);
1017 * @orig_node: orig node which is to be checked
1023 struct batadv_orig_node *orig_node)
1030 spin_lock_bh(&orig_node->neigh_list_lock);
1034 &orig_node->ifinfo_list, list) {
1049 orig_node->orig, if_outgoing->net_dev->name);
1055 if (orig_node->last_bonding_candidate == orig_ifinfo) {
1056 orig_node->last_bonding_candidate = NULL;
1061 spin_unlock_bh(&orig_node->neigh_list_lock);
1069 * @orig_node: orig node which is to be checked
1075 struct batadv_orig_node *orig_node)
1083 spin_lock_bh(&orig_node->neigh_list_lock);
1087 &orig_node->neigh_list, list) {
1100 orig_node->orig, neigh_node->addr,
1105 orig_node->orig, neigh_node->addr,
1120 spin_unlock_bh(&orig_node->neigh_list_lock);
1127 * @orig_node: orig node which is to be checked
1134 struct batadv_orig_node *orig_node,
1141 hlist_for_each_entry_rcu(neigh, &orig_node->neigh_list, list) {
1159 * batadv_purge_orig_node() - purges obsolete information from an orig_node
1161 * @orig_node: orig node which is to be checked
1163 * This function checks if the orig_node or substructures of it have become
1166 * Return: true if the orig_node is to be removed, false otherwise.
1169 struct batadv_orig_node *orig_node)
1175 if (batadv_has_timed_out(orig_node->last_seen,
1179 orig_node->orig,
1180 jiffies_to_msecs(orig_node->last_seen));
1183 changed_ifinfo = batadv_purge_orig_ifinfo(bat_priv, orig_node);
1184 changed_neigh = batadv_purge_orig_neighbors(bat_priv, orig_node);
1190 best_neigh_node = batadv_find_best_neighbor(bat_priv, orig_node,
1192 batadv_update_route(bat_priv, orig_node, BATADV_IF_DEFAULT,
1209 orig_node,
1211 batadv_update_route(bat_priv, orig_node, hard_iface,
1232 struct batadv_orig_node *orig_node;
1244 hlist_for_each_entry_safe(orig_node, node_tmp,
1246 if (batadv_purge_orig_node(bat_priv, orig_node)) {
1247 batadv_gw_node_delete(bat_priv, orig_node);
1248 hlist_del_rcu(&orig_node->hash_entry);
1249 batadv_tt_global_del_orig(orig_node->bat_priv,
1250 orig_node, -1,
1252 batadv_orig_node_put(orig_node);
1256 batadv_frag_purge_orig(orig_node,