On Thu, 2009-10-22 at 15:52 +0200, Jiri Pirko wrote:
> This helpers should be used by network drivers to access to netdev
> multicast lists.
[...]
> +static inline void netdev_mc_walk(struct net_device *dev,
> +                               void (*func)(void *, unsigned char *),
> +                               void *data)
> +{
> +     struct dev_addr_list *mclist;
> +     int i;
> +
> +     for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
> +          i++, mclist = mclist->next)
> +             func(data, mclist->dmi_addr);
> +}
[...]

We usually implement iteration as macros so that any context doesn't
have to be squeezed through a single untyped (void *) variable.  A macro
for this would look something like:

#define netdev_for_each_mc_addr(dev, addr)                                      
        \
        for (addr = (dev)->mc_list ? (dev)->mc_list->dmi_addr : NULL;           
        \
             addr;                                                              
        \
             addr = (container_of(addr, struct dev_addr_list, dmi_addr)->next ? 
        \
                     container_of(addr, struct dev_addr_list, 
dmi_addr)->next->dmi_addr : \
                     NULL))

Once you change the list type this can presumably be made less ugly.

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to