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()
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->soft_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_softif() local
302 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_ogm_send_softif()
303 if (hard_iface->soft_iface != bat_priv->soft_iface) in batadv_v_ogm_send_softif()
306 if (!kref_get_unless_zero(&hard_iface->refcount)) in batadv_v_ogm_send_softif()
309 ret = batadv_hardif_no_broadcast(hard_iface, NULL, NULL); in batadv_v_ogm_send_softif()
328 hard_iface->net_dev->name, type); in batadv_v_ogm_send_softif()
330 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
338 hard_iface->net_dev->name, in batadv_v_ogm_send_softif()
339 hard_iface->net_dev->dev_addr); in batadv_v_ogm_send_softif()
344 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
348 batadv_v_ogm_queue_on_if(skb_tmp, hard_iface); in batadv_v_ogm_send_softif()
349 batadv_hardif_put(hard_iface); in batadv_v_ogm_send_softif()
387 struct batadv_hard_iface *hard_iface; in batadv_v_ogm_aggr_work() local
390 hard_iface = container_of(batv, struct batadv_hard_iface, bat_v); in batadv_v_ogm_aggr_work()
392 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
393 batadv_v_ogm_aggr_send(hard_iface); in batadv_v_ogm_aggr_work()
394 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_aggr_work()
396 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_aggr_work()
407 int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_enable() argument
409 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_ogm_iface_enable()
411 batadv_v_ogm_start_queue_timer(hard_iface); in batadv_v_ogm_iface_enable()
421 void batadv_v_ogm_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_ogm_iface_disable() argument
423 cancel_delayed_work_sync(&hard_iface->bat_v.aggr_wq); in batadv_v_ogm_iface_disable()
425 spin_lock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
426 batadv_v_ogm_aggr_list_free(hard_iface); in batadv_v_ogm_iface_disable()
427 spin_unlock_bh(&hard_iface->bat_v.aggr_list.lock); in batadv_v_ogm_iface_disable()
858 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()