Lines Matching refs:hard_iface
85 static void batadv_v_ogm_start_queue_timer(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_start_queue_timer() argument
91 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.aggr_wq, in batadv_v_ogm_start_queue_timer()
120 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_send_to_if() argument
122 struct batadv_priv *bat_priv = netdev_priv(hard_iface->mesh_iface); in batadv_v_ogm_send_to_if()
124 if (hard_iface->if_status != BATADV_IF_ACTIVE) { in batadv_v_ogm_send_to_if()
133 batadv_send_broadcast_skb(skb, hard_iface); in batadv_v_ogm_send_to_if()
161 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_left() argument
163 unsigned int max = min_t(unsigned int, hard_iface->net_dev->mtu, in batadv_v_ogm_queue_left()
167 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_left()
169 return hard_iface->bat_v.aggr_len + ogm_len <= max; in batadv_v_ogm_queue_left()
180 static void batadv_v_ogm_aggr_list_free(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_list_free() argument
182 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_list_free()
184 __skb_queue_purge(&hard_iface->bat_v.aggr_list); in batadv_v_ogm_aggr_list_free()
185 hard_iface->bat_v.aggr_len = 0; in batadv_v_ogm_aggr_list_free()
199 static void batadv_v_ogm_aggr_send(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_send() argument
201 unsigned int aggr_len = hard_iface->bat_v.aggr_len; in batadv_v_ogm_aggr_send()
206 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_send()
213 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_aggr_send()
220 while ((skb = __skb_dequeue(&hard_iface->bat_v.aggr_list))) { in batadv_v_ogm_aggr_send()
221 hard_iface->bat_v.aggr_len -= batadv_v_ogm_len(skb); in batadv_v_ogm_aggr_send()
229 batadv_v_ogm_send_to_if(skb_aggr, hard_iface); in batadv_v_ogm_aggr_send()
238 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_on_if() argument
240 struct batadv_priv *bat_priv = netdev_priv(hard_iface->mesh_iface); in batadv_v_ogm_queue_on_if()
243 batadv_v_ogm_send_to_if(skb, hard_iface); in batadv_v_ogm_queue_on_if()
247 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_on_if()
248 if (!batadv_v_ogm_queue_left(skb, hard_iface)) in batadv_v_ogm_queue_on_if()
249 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_queue_on_if()
251 hard_iface->bat_v.aggr_len += batadv_v_ogm_len(skb); in batadv_v_ogm_queue_on_if()
252 __skb_queue_tail(&hard_iface->bat_v.aggr_list, skb); in batadv_v_ogm_queue_on_if()
253 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_on_if()
262 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_send_meshif() local
303 netdev_for_each_lower_private_rcu(bat_priv->mesh_iface, hard_iface, iter) { in batadv_v_ogm_send_meshif()
304 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_send_meshif()
307 ret = batadv_hardif_no_broadcast(hard_iface, NULL, NULL); in batadv_v_ogm_send_meshif()
326 hard_iface->net_dev->name, type); in batadv_v_ogm_send_meshif()
328 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_meshif()
336 hard_iface->net_dev->name, in batadv_v_ogm_send_meshif()
337 hard_iface->net_dev->dev_addr); in batadv_v_ogm_send_meshif()
342 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_meshif()
346 batadv_v_ogm_queue_on_if(skb_tmp, hard_iface); in batadv_v_ogm_send_meshif()
347 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_meshif()
385 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_aggr_work() local
388 hard_iface = container_of(batv, struct batadv_hard_iface, bat_v); in batadv_v_ogm_aggr_work()
390 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
391 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_aggr_work()
392 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
394 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_aggr_work()
405 int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_enable() argument
407 struct batadv_priv *bat_priv = netdev_priv(hard_iface->mesh_iface); in batadv_v_ogm_iface_enable()
409 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_iface_enable()
419 void batadv_v_ogm_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_disable() argument
421 cancel_delayed_work_sync(&hard_iface->bat_v.aggr_wq); in batadv_v_ogm_iface_disable()
423 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
424 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_iface_disable()
425 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
855 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_process() local
921 netdev_for_each_lower_private_rcu(bat_priv->mesh_iface, hard_iface, iter) { in batadv_v_ogm_process()
922 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_ogm_process()
925 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_process()
928 ret = batadv_hardif_no_broadcast(hard_iface, in batadv_v_ogm_process()
950 ogm_packet->orig, hard_iface->net_dev->name, in batadv_v_ogm_process()
953 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()
959 if_incoming, hard_iface); in batadv_v_ogm_process()
961 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()