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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html