Lines Matching refs:hard_iface
87 static void batadv_v_ogm_start_queue_timer(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_start_queue_timer() argument
93 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.aggr_wq, in batadv_v_ogm_start_queue_timer()
122 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_send_to_if() argument
124 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_send_to_if()
126 if (hard_iface->if_status != BATADV_IF_ACTIVE) { in batadv_v_ogm_send_to_if()
135 batadv_send_broadcast_skb(skb, hard_iface); in batadv_v_ogm_send_to_if()
163 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_left() argument
165 unsigned int max = min_t(unsigned int, hard_iface->net_dev->mtu, in batadv_v_ogm_queue_left()
169 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_left()
171 return hard_iface->bat_v.aggr_len + ogm_len <= max; in batadv_v_ogm_queue_left()
182 static void batadv_v_ogm_aggr_list_free(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_list_free() argument
184 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_list_free()
186 __skb_queue_purge(&hard_iface->bat_v.aggr_list); in batadv_v_ogm_aggr_list_free()
187 hard_iface->bat_v.aggr_len = 0; in batadv_v_ogm_aggr_list_free()
201 static void batadv_v_ogm_aggr_send(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_aggr_send() argument
203 unsigned int aggr_len = hard_iface->bat_v.aggr_len; in batadv_v_ogm_aggr_send()
208 lockdep_assert_held(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_send()
215 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_aggr_send()
222 while ((skb = __skb_dequeue(&hard_iface->bat_v.aggr_list))) { in batadv_v_ogm_aggr_send()
223 hard_iface->bat_v.aggr_len -= batadv_v_ogm_len(skb); in batadv_v_ogm_aggr_send()
231 batadv_v_ogm_send_to_if(skb_aggr, hard_iface); in batadv_v_ogm_aggr_send()
240 struct batadv_hard_iface *hard_iface) in batadv_v_ogm_queue_on_if() argument
242 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_queue_on_if()
245 batadv_v_ogm_send_to_if(skb, hard_iface); in batadv_v_ogm_queue_on_if()
249 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_on_if()
250 if (!batadv_v_ogm_queue_left(skb, hard_iface)) in batadv_v_ogm_queue_on_if()
251 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_queue_on_if()
253 hard_iface->bat_v.aggr_len += batadv_v_ogm_len(skb); in batadv_v_ogm_queue_on_if()
254 __skb_queue_tail(&hard_iface->bat_v.aggr_list, skb); in batadv_v_ogm_queue_on_if()
255 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_queue_on_if()
264 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_send_softif() local
304 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_ogm_send_softif()
305 if (hard_iface->soft_iface != bat_priv->soft_iface) in batadv_v_ogm_send_softif()
308 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_send_softif()
311 ret = batadv_hardif_no_broadcast(hard_iface, NULL, NULL); in batadv_v_ogm_send_softif()
330 hard_iface->net_dev->name, type); in batadv_v_ogm_send_softif()
332 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
340 hard_iface->net_dev->name, in batadv_v_ogm_send_softif()
341 hard_iface->net_dev->dev_addr); in batadv_v_ogm_send_softif()
346 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
350 batadv_v_ogm_queue_on_if(skb_tmp, hard_iface); in batadv_v_ogm_send_softif()
351 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
389 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_aggr_work() local
392 hard_iface = container_of(batv, struct batadv_hard_iface, bat_v); in batadv_v_ogm_aggr_work()
394 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
395 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_aggr_work()
396 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
398 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_aggr_work()
409 int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_enable() argument
411 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_iface_enable()
413 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_iface_enable()
423 void batadv_v_ogm_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_disable() argument
425 cancel_delayed_work_sync(&hard_iface->bat_v.aggr_wq); in batadv_v_ogm_iface_disable()
427 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
428 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_iface_disable()
429 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
860 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_process() local
925 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_ogm_process()
926 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_ogm_process()
929 if (hard_iface->soft_iface != bat_priv->soft_iface) in batadv_v_ogm_process()
932 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_process()
935 ret = batadv_hardif_no_broadcast(hard_iface, in batadv_v_ogm_process()
957 ogm_packet->orig, hard_iface->net_dev->name, in batadv_v_ogm_process()
960 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()
966 if_incoming, hard_iface); in batadv_v_ogm_process()
968 batadv_hardif_put(hard_iface); in batadv_v_ogm_process()