Lines Matching refs:forw_packet
408 static void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet) in batadv_forw_packet_free() argument
410 if (forw_packet->skb) in batadv_forw_packet_free()
411 kfree_skb(forw_packet->skb); in batadv_forw_packet_free()
412 if (forw_packet->if_incoming) in batadv_forw_packet_free()
413 batadv_hardif_free_ref(forw_packet->if_incoming); in batadv_forw_packet_free()
414 if (forw_packet->if_outgoing) in batadv_forw_packet_free()
415 batadv_hardif_free_ref(forw_packet->if_outgoing); in batadv_forw_packet_free()
416 kfree(forw_packet); in batadv_forw_packet_free()
421 struct batadv_forw_packet *forw_packet, in _batadv_add_bcast_packet_to_list() argument
426 hlist_add_head(&forw_packet->list, &bat_priv->forw_bcast_list); in _batadv_add_bcast_packet_to_list()
430 queue_delayed_work(batadv_event_workqueue, &forw_packet->delayed_work, in _batadv_add_bcast_packet_to_list()
448 struct batadv_forw_packet *forw_packet; in batadv_add_bcast_packet_to_list() local
462 forw_packet = kmalloc(sizeof(*forw_packet), GFP_ATOMIC); in batadv_add_bcast_packet_to_list()
464 if (!forw_packet) in batadv_add_bcast_packet_to_list()
477 forw_packet->skb = newskb; in batadv_add_bcast_packet_to_list()
478 forw_packet->if_incoming = primary_if; in batadv_add_bcast_packet_to_list()
479 forw_packet->if_outgoing = NULL; in batadv_add_bcast_packet_to_list()
482 forw_packet->num_packets = 0; in batadv_add_bcast_packet_to_list()
484 INIT_DELAYED_WORK(&forw_packet->delayed_work, in batadv_add_bcast_packet_to_list()
487 _batadv_add_bcast_packet_to_list(bat_priv, forw_packet, delay); in batadv_add_bcast_packet_to_list()
491 kfree(forw_packet); in batadv_add_bcast_packet_to_list()
504 struct batadv_forw_packet *forw_packet; in batadv_send_outstanding_bcast_packet() local
510 forw_packet = container_of(delayed_work, struct batadv_forw_packet, in batadv_send_outstanding_bcast_packet()
512 soft_iface = forw_packet->if_incoming->soft_iface; in batadv_send_outstanding_bcast_packet()
516 hlist_del(&forw_packet->list); in batadv_send_outstanding_bcast_packet()
522 if (batadv_dat_drop_broadcast_packet(bat_priv, forw_packet)) in batadv_send_outstanding_bcast_packet()
531 if (forw_packet->num_packets >= hard_iface->num_bcasts) in batadv_send_outstanding_bcast_packet()
535 skb1 = skb_clone(forw_packet->skb, GFP_ATOMIC); in batadv_send_outstanding_bcast_packet()
542 forw_packet->num_packets++; in batadv_send_outstanding_bcast_packet()
545 if (forw_packet->num_packets < BATADV_NUM_BCASTS_MAX) { in batadv_send_outstanding_bcast_packet()
546 _batadv_add_bcast_packet_to_list(bat_priv, forw_packet, in batadv_send_outstanding_bcast_packet()
552 batadv_forw_packet_free(forw_packet); in batadv_send_outstanding_bcast_packet()
559 struct batadv_forw_packet *forw_packet; in batadv_send_outstanding_bat_ogm_packet() local
563 forw_packet = container_of(delayed_work, struct batadv_forw_packet, in batadv_send_outstanding_bat_ogm_packet()
565 bat_priv = netdev_priv(forw_packet->if_incoming->soft_iface); in batadv_send_outstanding_bat_ogm_packet()
567 hlist_del(&forw_packet->list); in batadv_send_outstanding_bat_ogm_packet()
573 bat_priv->bat_algo_ops->bat_ogm_emit(forw_packet); in batadv_send_outstanding_bat_ogm_packet()
583 if (forw_packet->own && in batadv_send_outstanding_bat_ogm_packet()
584 forw_packet->if_incoming == forw_packet->if_outgoing) in batadv_send_outstanding_bat_ogm_packet()
585 batadv_schedule_bat_ogm(forw_packet->if_incoming); in batadv_send_outstanding_bat_ogm_packet()
589 if (!forw_packet->own) in batadv_send_outstanding_bat_ogm_packet()
592 batadv_forw_packet_free(forw_packet); in batadv_send_outstanding_bat_ogm_packet()
599 struct batadv_forw_packet *forw_packet; in batadv_purge_outstanding_packets() local
613 hlist_for_each_entry_safe(forw_packet, safe_tmp_node, in batadv_purge_outstanding_packets()
619 (forw_packet->if_incoming != hard_iface) && in batadv_purge_outstanding_packets()
620 (forw_packet->if_outgoing != hard_iface)) in batadv_purge_outstanding_packets()
628 pending = cancel_delayed_work_sync(&forw_packet->delayed_work); in batadv_purge_outstanding_packets()
632 hlist_del(&forw_packet->list); in batadv_purge_outstanding_packets()
633 if (!forw_packet->own) in batadv_purge_outstanding_packets()
636 batadv_forw_packet_free(forw_packet); in batadv_purge_outstanding_packets()
643 hlist_for_each_entry_safe(forw_packet, safe_tmp_node, in batadv_purge_outstanding_packets()
649 (forw_packet->if_incoming != hard_iface) && in batadv_purge_outstanding_packets()
650 (forw_packet->if_outgoing != hard_iface)) in batadv_purge_outstanding_packets()
658 pending = cancel_delayed_work_sync(&forw_packet->delayed_work); in batadv_purge_outstanding_packets()
662 hlist_del(&forw_packet->list); in batadv_purge_outstanding_packets()
663 if (!forw_packet->own) in batadv_purge_outstanding_packets()
666 batadv_forw_packet_free(forw_packet); in batadv_purge_outstanding_packets()