Re: [PATCH net-next-2.6 1/4] net: introduce mc list helpers
From: Ben Hutchings <hidden>
Date: 2009-10-22 14:32:41
Also in:
linux-media
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.