Lines Matching refs:hard_iface
47 static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface) in batadv_v_elp_start_timer() argument
51 msecs = atomic_read(&hard_iface->bat_v.elp_interval) - BATADV_JITTER; in batadv_v_elp_start_timer()
54 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.elp_wq, in batadv_v_elp_start_timer()
67 struct batadv_hard_iface *hard_iface = neigh->if_incoming; in batadv_v_elp_get_throughput() local
77 throughput = atomic_read(&hard_iface->bat_v.throughput_override); in batadv_v_elp_get_throughput()
84 if (batadv_is_wifi_hardif(hard_iface)) { in batadv_v_elp_get_throughput()
85 if (!batadv_is_cfg80211_hardif(hard_iface)) in batadv_v_elp_get_throughput()
89 real_netdev = batadv_get_real_netdev(hard_iface->net_dev); in batadv_v_elp_get_throughput()
121 ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings); in batadv_v_elp_get_throughput()
139 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX; in batadv_v_elp_get_throughput()
141 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX; in batadv_v_elp_get_throughput()
149 if (!(hard_iface->bat_v.flags & BATADV_WARNING_DEFAULT)) { in batadv_v_elp_get_throughput()
150 batadv_info(hard_iface->soft_iface, in batadv_v_elp_get_throughput()
152 hard_iface->net_dev->name, in batadv_v_elp_get_throughput()
155 hard_iface->bat_v.flags |= BATADV_WARNING_DEFAULT; in batadv_v_elp_get_throughput()
200 struct batadv_hard_iface *hard_iface = neigh->if_incoming; in batadv_v_elp_wifi_neigh_probe() local
201 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_elp_wifi_neigh_probe()
208 if (!batadv_is_wifi_hardif(hard_iface)) in batadv_v_elp_wifi_neigh_probe()
226 elp_skb_len = hard_iface->bat_v.elp_skb->len; in batadv_v_elp_wifi_neigh_probe()
227 skb = skb_copy_expand(hard_iface->bat_v.elp_skb, 0, in batadv_v_elp_wifi_neigh_probe()
237 skb_put_zero(skb, probe_len - hard_iface->bat_v.elp_skb->len); in batadv_v_elp_wifi_neigh_probe()
241 hard_iface->net_dev->name, neigh->addr); in batadv_v_elp_wifi_neigh_probe()
243 batadv_send_skb_packet(skb, hard_iface, neigh->addr); in batadv_v_elp_wifi_neigh_probe()
258 struct batadv_hard_iface *hard_iface; in batadv_v_elp_periodic_work() local
267 hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v); in batadv_v_elp_periodic_work()
268 bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_elp_periodic_work()
274 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE || in batadv_v_elp_periodic_work()
275 hard_iface->if_status == BATADV_IF_TO_BE_REMOVED) in batadv_v_elp_periodic_work()
279 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_elp_periodic_work()
282 skb = skb_copy(hard_iface->bat_v.elp_skb, GFP_ATOMIC); in batadv_v_elp_periodic_work()
287 elp_packet->seqno = htonl(atomic_read(&hard_iface->bat_v.elp_seqno)); in batadv_v_elp_periodic_work()
288 elp_interval = atomic_read(&hard_iface->bat_v.elp_interval); in batadv_v_elp_periodic_work()
293 hard_iface->net_dev->name, in batadv_v_elp_periodic_work()
294 atomic_read(&hard_iface->bat_v.elp_seqno)); in batadv_v_elp_periodic_work()
296 batadv_send_broadcast_skb(skb, hard_iface); in batadv_v_elp_periodic_work()
298 atomic_inc(&hard_iface->bat_v.elp_seqno); in batadv_v_elp_periodic_work()
312 hlist_for_each_entry_rcu(hardif_neigh, &hard_iface->neigh_list, list) { in batadv_v_elp_periodic_work()
335 batadv_v_elp_start_timer(hard_iface); in batadv_v_elp_periodic_work()
346 int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_enable() argument
356 hard_iface->bat_v.elp_skb = dev_alloc_skb(size); in batadv_v_elp_iface_enable()
357 if (!hard_iface->bat_v.elp_skb) in batadv_v_elp_iface_enable()
360 skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN); in batadv_v_elp_iface_enable()
361 elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, in batadv_v_elp_iface_enable()
370 atomic_set(&hard_iface->bat_v.elp_seqno, random_seqno); in batadv_v_elp_iface_enable()
373 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX; in batadv_v_elp_iface_enable()
376 hard_iface->bat_v.flags &= ~BATADV_WARNING_DEFAULT; in batadv_v_elp_iface_enable()
378 if (batadv_is_wifi_hardif(hard_iface)) in batadv_v_elp_iface_enable()
379 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX; in batadv_v_elp_iface_enable()
381 INIT_DELAYED_WORK(&hard_iface->bat_v.elp_wq, in batadv_v_elp_iface_enable()
383 batadv_v_elp_start_timer(hard_iface); in batadv_v_elp_iface_enable()
394 void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_disable() argument
396 cancel_delayed_work_sync(&hard_iface->bat_v.elp_wq); in batadv_v_elp_iface_disable()
398 dev_kfree_skb(hard_iface->bat_v.elp_skb); in batadv_v_elp_iface_disable()
399 hard_iface->bat_v.elp_skb = NULL; in batadv_v_elp_iface_disable()
409 struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_activate() argument
414 if (!hard_iface->bat_v.elp_skb) in batadv_v_elp_iface_activate()
417 skb = hard_iface->bat_v.elp_skb; in batadv_v_elp_iface_activate()
430 struct batadv_hard_iface *hard_iface; in batadv_v_elp_primary_iface_set() local
434 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_elp_primary_iface_set()
435 if (primary_iface->soft_iface != hard_iface->soft_iface) in batadv_v_elp_primary_iface_set()
438 batadv_v_elp_iface_activate(primary_iface, hard_iface); in batadv_v_elp_primary_iface_set()