Lines Matching refs:hard_iface
48 static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface) in batadv_v_elp_start_timer() argument
52 msecs = atomic_read(&hard_iface->bat_v.elp_interval) - BATADV_JITTER; in batadv_v_elp_start_timer()
55 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.elp_wq, in batadv_v_elp_start_timer()
68 struct batadv_hard_iface *hard_iface = neigh->if_incoming; in batadv_v_elp_get_throughput() local
78 throughput = atomic_read(&hard_iface->bat_v.throughput_override); in batadv_v_elp_get_throughput()
85 if (batadv_is_wifi_hardif(hard_iface)) { in batadv_v_elp_get_throughput()
86 if (!batadv_is_cfg80211_hardif(hard_iface)) in batadv_v_elp_get_throughput()
90 real_netdev = batadv_get_real_netdev(hard_iface->net_dev); in batadv_v_elp_get_throughput()
129 ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings); in batadv_v_elp_get_throughput()
134 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX; in batadv_v_elp_get_throughput()
136 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX; in batadv_v_elp_get_throughput()
144 if (!(hard_iface->bat_v.flags & BATADV_WARNING_DEFAULT)) { in batadv_v_elp_get_throughput()
145 batadv_info(hard_iface->soft_iface, in batadv_v_elp_get_throughput()
147 hard_iface->net_dev->name, in batadv_v_elp_get_throughput()
150 hard_iface->bat_v.flags |= BATADV_WARNING_DEFAULT; in batadv_v_elp_get_throughput()
195 struct batadv_hard_iface *hard_iface = neigh->if_incoming; in batadv_v_elp_wifi_neigh_probe() local
196 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_elp_wifi_neigh_probe()
203 if (!batadv_is_wifi_hardif(hard_iface)) in batadv_v_elp_wifi_neigh_probe()
221 elp_skb_len = hard_iface->bat_v.elp_skb->len; in batadv_v_elp_wifi_neigh_probe()
222 skb = skb_copy_expand(hard_iface->bat_v.elp_skb, 0, in batadv_v_elp_wifi_neigh_probe()
232 skb_put_zero(skb, probe_len - hard_iface->bat_v.elp_skb->len); in batadv_v_elp_wifi_neigh_probe()
236 hard_iface->net_dev->name, neigh->addr); in batadv_v_elp_wifi_neigh_probe()
238 batadv_send_skb_packet(skb, hard_iface, neigh->addr); in batadv_v_elp_wifi_neigh_probe()
253 struct batadv_hard_iface *hard_iface; in batadv_v_elp_periodic_work() local
262 hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v); in batadv_v_elp_periodic_work()
263 bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_v_elp_periodic_work()
269 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE || in batadv_v_elp_periodic_work()
270 hard_iface->if_status == BATADV_IF_TO_BE_REMOVED) in batadv_v_elp_periodic_work()
274 if (hard_iface->if_status != BATADV_IF_ACTIVE) in batadv_v_elp_periodic_work()
277 skb = skb_copy(hard_iface->bat_v.elp_skb, GFP_ATOMIC); in batadv_v_elp_periodic_work()
282 elp_packet->seqno = htonl(atomic_read(&hard_iface->bat_v.elp_seqno)); in batadv_v_elp_periodic_work()
283 elp_interval = atomic_read(&hard_iface->bat_v.elp_interval); in batadv_v_elp_periodic_work()
288 hard_iface->net_dev->name, in batadv_v_elp_periodic_work()
289 atomic_read(&hard_iface->bat_v.elp_seqno)); in batadv_v_elp_periodic_work()
291 batadv_send_broadcast_skb(skb, hard_iface); in batadv_v_elp_periodic_work()
293 atomic_inc(&hard_iface->bat_v.elp_seqno); in batadv_v_elp_periodic_work()
307 hlist_for_each_entry_rcu(hardif_neigh, &hard_iface->neigh_list, list) { in batadv_v_elp_periodic_work()
330 batadv_v_elp_start_timer(hard_iface); in batadv_v_elp_periodic_work()
341 int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_enable() argument
351 hard_iface->bat_v.elp_skb = dev_alloc_skb(size); in batadv_v_elp_iface_enable()
352 if (!hard_iface->bat_v.elp_skb) in batadv_v_elp_iface_enable()
355 skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN); in batadv_v_elp_iface_enable()
356 elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, in batadv_v_elp_iface_enable()
365 atomic_set(&hard_iface->bat_v.elp_seqno, random_seqno); in batadv_v_elp_iface_enable()
368 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX; in batadv_v_elp_iface_enable()
371 hard_iface->bat_v.flags &= ~BATADV_WARNING_DEFAULT; in batadv_v_elp_iface_enable()
373 if (batadv_is_wifi_hardif(hard_iface)) in batadv_v_elp_iface_enable()
374 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX; in batadv_v_elp_iface_enable()
376 INIT_DELAYED_WORK(&hard_iface->bat_v.elp_wq, in batadv_v_elp_iface_enable()
378 batadv_v_elp_start_timer(hard_iface); in batadv_v_elp_iface_enable()
389 void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_disable() argument
391 cancel_delayed_work_sync(&hard_iface->bat_v.elp_wq); in batadv_v_elp_iface_disable()
393 dev_kfree_skb(hard_iface->bat_v.elp_skb); in batadv_v_elp_iface_disable()
394 hard_iface->bat_v.elp_skb = NULL; in batadv_v_elp_iface_disable()
404 struct batadv_hard_iface *hard_iface) in batadv_v_elp_iface_activate() argument
409 if (!hard_iface->bat_v.elp_skb) in batadv_v_elp_iface_activate()
412 skb = hard_iface->bat_v.elp_skb; in batadv_v_elp_iface_activate()
425 struct batadv_hard_iface *hard_iface; in batadv_v_elp_primary_iface_set() local
429 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_v_elp_primary_iface_set()
430 if (primary_iface->soft_iface != hard_iface->soft_iface) in batadv_v_elp_primary_iface_set()
433 batadv_v_elp_iface_activate(primary_iface, hard_iface); in batadv_v_elp_primary_iface_set()