Lines Matching refs:hard_iface

46  * @hard_iface: the interface for which the timer has to be reset
48 static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface)
52 msecs = atomic_read(&hard_iface->bat_v.elp_interval) - BATADV_JITTER;
55 queue_delayed_work(batadv_event_workqueue, &hard_iface->bat_v.elp_wq,
68 struct batadv_hard_iface *hard_iface = neigh->if_incoming;
78 throughput = atomic_read(&hard_iface->bat_v.throughput_override);
85 if (batadv_is_wifi_hardif(hard_iface)) {
86 if (!batadv_is_cfg80211_hardif(hard_iface))
90 real_netdev = batadv_get_real_netdev(hard_iface->net_dev);
129 ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings);
134 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX;
136 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX;
144 if (!(hard_iface->bat_v.flags & BATADV_WARNING_DEFAULT)) {
145 batadv_info(hard_iface->soft_iface,
147 hard_iface->net_dev->name,
150 hard_iface->bat_v.flags |= BATADV_WARNING_DEFAULT;
195 struct batadv_hard_iface *hard_iface = neigh->if_incoming;
196 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
203 if (!batadv_is_wifi_hardif(hard_iface))
221 elp_skb_len = hard_iface->bat_v.elp_skb->len;
222 skb = skb_copy_expand(hard_iface->bat_v.elp_skb, 0,
232 skb_put_zero(skb, probe_len - hard_iface->bat_v.elp_skb->len);
236 hard_iface->net_dev->name, neigh->addr);
238 batadv_send_skb_packet(skb, hard_iface, neigh->addr);
253 struct batadv_hard_iface *hard_iface;
262 hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v);
263 bat_priv = netdev_priv(hard_iface->soft_iface);
269 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE ||
270 hard_iface->if_status == BATADV_IF_TO_BE_REMOVED)
274 if (hard_iface->if_status != BATADV_IF_ACTIVE)
277 skb = skb_copy(hard_iface->bat_v.elp_skb, GFP_ATOMIC);
282 elp_packet->seqno = htonl(atomic_read(&hard_iface->bat_v.elp_seqno));
283 elp_interval = atomic_read(&hard_iface->bat_v.elp_interval);
288 hard_iface->net_dev->name,
289 atomic_read(&hard_iface->bat_v.elp_seqno));
291 batadv_send_broadcast_skb(skb, hard_iface);
293 atomic_inc(&hard_iface->bat_v.elp_seqno);
300 * 1) if the hard_iface is wifi => send a number of unicast ELPs for
307 hlist_for_each_entry_rcu(hardif_neigh, &hard_iface->neigh_list, list) {
330 batadv_v_elp_start_timer(hard_iface);
337 * @hard_iface: interface for which the data has to be prepared
341 int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface)
351 hard_iface->bat_v.elp_skb = dev_alloc_skb(size);
352 if (!hard_iface->bat_v.elp_skb)
355 skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN);
356 elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb,
365 atomic_set(&hard_iface->bat_v.elp_seqno, random_seqno);
368 hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX;
371 hard_iface->bat_v.flags &= ~BATADV_WARNING_DEFAULT;
373 if (batadv_is_wifi_hardif(hard_iface))
374 hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX;
376 INIT_DELAYED_WORK(&hard_iface->bat_v.elp_wq,
378 batadv_v_elp_start_timer(hard_iface);
387 * @hard_iface: interface for which the resources have to be released
389 void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
391 cancel_delayed_work_sync(&hard_iface->bat_v.elp_wq);
393 dev_kfree_skb(hard_iface->bat_v.elp_skb);
394 hard_iface->bat_v.elp_skb = NULL;
401 * @hard_iface: interface holding the to-be-updated buffer
404 struct batadv_hard_iface *hard_iface)
409 if (!hard_iface->bat_v.elp_skb)
412 skb = hard_iface->bat_v.elp_skb;
425 struct batadv_hard_iface *hard_iface;
429 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) {
430 if (primary_iface->soft_iface != hard_iface->soft_iface)
433 batadv_v_elp_iface_activate(primary_iface, hard_iface);