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 <[email protected]> > --- > 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
