Lines Matching refs:forw_packet
481 void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet, in batadv_forw_packet_free() argument
485 kfree_skb(forw_packet->skb); in batadv_forw_packet_free()
487 consume_skb(forw_packet->skb); in batadv_forw_packet_free()
489 if (forw_packet->if_incoming) in batadv_forw_packet_free()
490 batadv_hardif_put(forw_packet->if_incoming); in batadv_forw_packet_free()
491 if (forw_packet->if_outgoing) in batadv_forw_packet_free()
492 batadv_hardif_put(forw_packet->if_outgoing); in batadv_forw_packet_free()
493 if (forw_packet->queue_left) in batadv_forw_packet_free()
494 atomic_inc(forw_packet->queue_left); in batadv_forw_packet_free()
495 kfree(forw_packet); in batadv_forw_packet_free()
519 struct batadv_forw_packet *forw_packet; in batadv_forw_packet_alloc() local
537 forw_packet = kmalloc(sizeof(*forw_packet), GFP_ATOMIC); in batadv_forw_packet_alloc()
538 if (!forw_packet) in batadv_forw_packet_alloc()
547 INIT_HLIST_NODE(&forw_packet->list); in batadv_forw_packet_alloc()
548 INIT_HLIST_NODE(&forw_packet->cleanup_list); in batadv_forw_packet_alloc()
549 forw_packet->skb = skb; in batadv_forw_packet_alloc()
550 forw_packet->queue_left = queue_left; in batadv_forw_packet_alloc()
551 forw_packet->if_incoming = if_incoming; in batadv_forw_packet_alloc()
552 forw_packet->if_outgoing = if_outgoing; in batadv_forw_packet_alloc()
553 forw_packet->num_packets = 0; in batadv_forw_packet_alloc()
555 return forw_packet; in batadv_forw_packet_alloc()
574 batadv_forw_packet_was_stolen(struct batadv_forw_packet *forw_packet) in batadv_forw_packet_was_stolen() argument
576 return !hlist_unhashed(&forw_packet->cleanup_list); in batadv_forw_packet_was_stolen()
591 bool batadv_forw_packet_steal(struct batadv_forw_packet *forw_packet, in batadv_forw_packet_steal() argument
596 if (batadv_forw_packet_was_stolen(forw_packet)) { in batadv_forw_packet_steal()
601 hlist_del_init(&forw_packet->list); in batadv_forw_packet_steal()
604 hlist_add_fake(&forw_packet->cleanup_list); in batadv_forw_packet_steal()
628 struct batadv_forw_packet *forw_packet; in batadv_forw_packet_list_steal() local
631 hlist_for_each_entry_safe(forw_packet, safe_tmp_node, in batadv_forw_packet_list_steal()
637 forw_packet->if_incoming != hard_iface && in batadv_forw_packet_list_steal()
638 forw_packet->if_outgoing != hard_iface) in batadv_forw_packet_list_steal()
641 hlist_del(&forw_packet->list); in batadv_forw_packet_list_steal()
642 hlist_add_head(&forw_packet->cleanup_list, cleanup_list); in batadv_forw_packet_list_steal()
658 struct batadv_forw_packet *forw_packet; in batadv_forw_packet_list_free() local
661 hlist_for_each_entry_safe(forw_packet, safe_tmp_node, head, in batadv_forw_packet_list_free()
663 cancel_delayed_work_sync(&forw_packet->delayed_work); in batadv_forw_packet_list_free()
665 hlist_del(&forw_packet->cleanup_list); in batadv_forw_packet_list_free()
666 batadv_forw_packet_free(forw_packet, true); in batadv_forw_packet_list_free()
687 static void batadv_forw_packet_queue(struct batadv_forw_packet *forw_packet, in batadv_forw_packet_queue() argument
694 if (batadv_forw_packet_was_stolen(forw_packet)) { in batadv_forw_packet_queue()
698 WARN_ONCE(hlist_fake(&forw_packet->cleanup_list), in batadv_forw_packet_queue()
705 hlist_del_init(&forw_packet->list); in batadv_forw_packet_queue()
706 hlist_add_head(&forw_packet->list, head); in batadv_forw_packet_queue()
709 &forw_packet->delayed_work, in batadv_forw_packet_queue()
726 struct batadv_forw_packet *forw_packet, in batadv_forw_packet_bcast_queue() argument
729 batadv_forw_packet_queue(forw_packet, &bat_priv->forw_bcast_list_lock, in batadv_forw_packet_bcast_queue()
744 struct batadv_forw_packet *forw_packet, in batadv_forw_packet_ogmv1_queue() argument
747 batadv_forw_packet_queue(forw_packet, &bat_priv->forw_bat_list_lock, in batadv_forw_packet_ogmv1_queue()
772 struct batadv_forw_packet *forw_packet; in batadv_add_bcast_packet_to_list() local
786 forw_packet = batadv_forw_packet_alloc(primary_if, NULL, in batadv_add_bcast_packet_to_list()
790 if (!forw_packet) in batadv_add_bcast_packet_to_list()
797 forw_packet->own = own_packet; in batadv_add_bcast_packet_to_list()
799 INIT_DELAYED_WORK(&forw_packet->delayed_work, in batadv_add_bcast_packet_to_list()
802 batadv_forw_packet_bcast_queue(bat_priv, forw_packet, jiffies + delay); in batadv_add_bcast_packet_to_list()
826 batadv_forw_packet_bcasts_left(struct batadv_forw_packet *forw_packet, in batadv_forw_packet_bcasts_left() argument
836 return BATADV_SKB_CB(forw_packet->skb)->num_bcasts < max; in batadv_forw_packet_bcasts_left()
845 batadv_forw_packet_bcasts_inc(struct batadv_forw_packet *forw_packet) in batadv_forw_packet_bcasts_inc() argument
847 BATADV_SKB_CB(forw_packet->skb)->num_bcasts++; in batadv_forw_packet_bcasts_inc()
856 bool batadv_forw_packet_is_rebroadcast(struct batadv_forw_packet *forw_packet) in batadv_forw_packet_is_rebroadcast() argument
858 return BATADV_SKB_CB(forw_packet->skb)->num_bcasts > 0; in batadv_forw_packet_is_rebroadcast()
866 struct batadv_forw_packet *forw_packet; in batadv_send_outstanding_bcast_packet() local
878 forw_packet = container_of(delayed_work, struct batadv_forw_packet, in batadv_send_outstanding_bcast_packet()
880 soft_iface = forw_packet->if_incoming->soft_iface; in batadv_send_outstanding_bcast_packet()
888 if (batadv_dat_drop_broadcast_packet(bat_priv, forw_packet)) { in batadv_send_outstanding_bcast_packet()
893 bcast_packet = (struct batadv_bcast_packet *)forw_packet->skb->data; in batadv_send_outstanding_bcast_packet()
901 if (!batadv_forw_packet_bcasts_left(forw_packet, hard_iface)) in batadv_send_outstanding_bcast_packet()
904 if (forw_packet->own) { in batadv_send_outstanding_bcast_packet()
907 neigh_addr = eth_hdr(forw_packet->skb)->h_source; in batadv_send_outstanding_bcast_packet()
951 skb1 = skb_clone(forw_packet->skb, GFP_ATOMIC); in batadv_send_outstanding_bcast_packet()
959 batadv_forw_packet_bcasts_inc(forw_packet); in batadv_send_outstanding_bcast_packet()
962 if (batadv_forw_packet_bcasts_left(forw_packet, NULL)) { in batadv_send_outstanding_bcast_packet()
963 batadv_forw_packet_bcast_queue(bat_priv, forw_packet, in batadv_send_outstanding_bcast_packet()
970 if (batadv_forw_packet_steal(forw_packet, in batadv_send_outstanding_bcast_packet()
972 batadv_forw_packet_free(forw_packet, dropped); in batadv_send_outstanding_bcast_packet()