[B.A.T.M.A.N.] [PATCH 12/20] batman-adv: Purge timeouted entries in mcast forw table

Andrew Lunn andrew at lunn.ch
Wed Dec 8 19:08:23 CET 2010


On Tue, Dec 07, 2010 at 11:32:22PM +0100, Linus L??ssing wrote:
> With this commit, the multicast forwarding table, which has been
> previously filled up due to multicast tracker packets, will now be
> checked frequently (once per second) for timeouted entries. If so these
> entries get removed from the table.
> 
> Note, that a more frequent check interval is not necessary, as multicast
> data will not only be forwarded if an entry exists, but also if that one
> might not have timeouted yet.
> 
> Signed-off-by: Linus L??ssing <linus.luessing at saxnet.de>
> ---
>  multicast.c  |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  multicast.h  |    1 +
>  originator.c |    2 ++
>  3 files changed, 54 insertions(+), 0 deletions(-)
> 
> diff --git a/multicast.c b/multicast.c
> index edfe7e2..2b1bfde 100644
> --- a/multicast.c
> +++ b/multicast.c
> @@ -821,6 +821,57 @@ out:
>  	rcu_read_unlock();
>  }
>  
> +void purge_mcast_forw_table(struct bat_priv *bat_priv)
> +{
> +	unsigned long flags;
> +	struct mcast_forw_table_entry *table_entry, *tmp_table_entry;
> +	struct mcast_forw_orig_entry *orig_entry, *tmp_orig_entry;
> +	struct mcast_forw_if_entry *if_entry, *tmp_if_entry;
> +	struct mcast_forw_nexthop_entry *nexthop_entry, *tmp_nexthop_entry;
> +
> +	spin_lock_irqsave(&bat_priv->mcast_forw_table_lock, flags);
> +	list_for_each_entry_safe(table_entry, tmp_table_entry,
> +				 &bat_priv->mcast_forw_table, list) {
> +		list_for_each_entry_safe(orig_entry, tmp_orig_entry,
> +					 &table_entry->mcast_orig_list, list) {
> +			list_for_each_entry_safe(if_entry, tmp_if_entry,
> +					    &orig_entry->mcast_if_list, list) {
> +				list_for_each_entry_safe(nexthop_entry,
> +						tmp_nexthop_entry,
> +						&if_entry->mcast_nexthop_list,
> +						list) {


I would probably break this up into four functions.

  Andrew


More information about the B.A.T.M.A.N mailing list