Lines Matching refs:hard_iface
86 static void batadv_v_ogm_start_queue_timer(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_start_queue_timer() argument
92 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.aggr_wq, in batadv_v_ogm_start_queue_timer()
121 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_send_to_if() argument
123 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_send_to_if()
125 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_ogm_send_to_if()
132 batadv_send_broadcast_skb(skb, hard_iface); in batadv_v_ogm_send_to_if()
160 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_left() argument
162 unsigned int max = min_t(unsigned int, hard_iface->net_dev->mtu, in batadv_v_ogm_queue_left()
166 lockdep_assert_held(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_queue_left()
168 return hard_iface->bat_v.aggr_len + ogm_len <= max; in batadv_v_ogm_queue_left()
179 static void batadv_v_ogm_aggr_list_free(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_list_free() argument
183 lockdep_assert_held(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_aggr_list_free()
185 while ((skb = skb_dequeue(&hard_iface->bat_v.aggr_list))) in batadv_v_ogm_aggr_list_free()
188 hard_iface->bat_v.aggr_len = 0; in batadv_v_ogm_aggr_list_free()
202 static void batadv_v_ogm_aggr_send(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_send() argument
204 unsigned int aggr_len = hard_iface->bat_v.aggr_len; in batadv_v_ogm_aggr_send()
209 lockdep_assert_held(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_aggr_send()
216 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_aggr_send()
223 while ((skb = skb_dequeue(&hard_iface->bat_v.aggr_list))) { in batadv_v_ogm_aggr_send()
224 hard_iface->bat_v.aggr_len -= batadv_v_ogm_len(skb); in batadv_v_ogm_aggr_send()
232 batadv_v_ogm_send_to_if(skb_aggr, hard_iface); in batadv_v_ogm_aggr_send()
241 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_on_if() argument
243 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_queue_on_if()
246 batadv_v_ogm_send_to_if(skb, hard_iface); in batadv_v_ogm_queue_on_if()
250 spin_lock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_queue_on_if()
251 if (!batadv_v_ogm_queue_left(skb, hard_iface)) in batadv_v_ogm_queue_on_if()
252 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_queue_on_if()
254 hard_iface->bat_v.aggr_len += batadv_v_ogm_len(skb); in batadv_v_ogm_queue_on_if()
255 skb_queue_tail(&hard_iface->bat_v.aggr_list, skb); in batadv_v_ogm_queue_on_if()
256 spin_unlock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_queue_on_if()
265 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_send_softif() local
305 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_ogm_send_softif()
306 if (hard_iface->soft_iface != bat_priv->soft_iface) in batadv_v_ogm_send_softif()
309 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_send_softif()
312 ret = batadv_hardif_no_broadcast(hard_iface, NULL, NULL); in batadv_v_ogm_send_softif()
331 hard_iface->net_dev->name, type); in batadv_v_ogm_send_softif()
333 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
341 hard_iface->net_dev->name, in batadv_v_ogm_send_softif()
342 hard_iface->net_dev->dev_addr); in batadv_v_ogm_send_softif()
347 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
351 batadv_v_ogm_queue_on_if(skb_tmp, hard_iface); in batadv_v_ogm_send_softif()
352 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
390 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_aggr_work() local
393 hard_iface = container_of(batv, struct batadv_hard_iface, bat_v); in batadv_v_ogm_aggr_work()
395 spin_lock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_aggr_work()
396 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_aggr_work()
397 spin_unlock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_aggr_work()
399 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_aggr_work()
410 int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_enable() argument
412 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_iface_enable()
414 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_iface_enable()
424 void batadv_v_ogm_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_disable() argument
426 cancel_delayed_work_sync(&hard_iface->bat_v.aggr_wq); in batadv_v_ogm_iface_disable()
428 spin_lock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_iface_disable()
429 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_iface_disable()
430 spin_unlock_bh(&hard_iface->bat_v.aggr_list_lock); in batadv_v_ogm_iface_disable()
864 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_process() local
923 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_ogm_process()
924 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_ogm_process()
927 if (hard_iface->soft_iface != bat_priv->soft_iface) in batadv_v_ogm_process()
930 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_process()
933 ret = batadv_hardif_no_broadcast(hard_iface, in batadv_v_ogm_process()
955 ogm_packet->orig, hard_iface->net_dev->name, in batadv_v_ogm_process()
958 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()
964 if_incoming, hard_iface); in batadv_v_ogm_process()
966 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()