Patchwork [RFC] net: refactor multicast/unicast address list

login
register
mail settings
Submitter Johannes Berg
Date June 13, 2009, 10:41 a.m.
Message ID <1244889678.13033.6.camel@johannes.local>
Download mbox | patch
Permalink /patch/28667/
State RFC
Delegated to: David Miller
Headers show

Comments

Johannes Berg - June 13, 2009, 10:41 a.m.
I'm trying to use address lists without netdevs, but as
a first step I thought it would be good to reduce the
amount duplicated code between unicast and multicast
lists.

After introducing a new 'struct address_list', we can
unify a lot between these. The next step will probably
be exporting the __dev_addr_sync and __dev_addr_unsync
functions so I can use them without a netdev, but this
cleanup can stand on its own.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
Also reduces the number of exported symbols by 4.

 arch/xtensa/platforms/iss/network.c            |    2 
 drivers/infiniband/hw/nes/nes_nic.c            |    4 
 drivers/infiniband/ulp/ipoib/ipoib_multicast.c |    2 
 drivers/media/dvb/dvb-core/dvb_net.c           |   10 -
 drivers/net/3c501.c                            |    2 
 drivers/net/3c505.c                            |    8 -
 drivers/net/3c509.c                            |    8 -
 drivers/net/3c515.c                            |    2 
 drivers/net/3c523.c                            |    6 
 drivers/net/3c527.c                            |   12 -
 drivers/net/3c59x.c                            |    2 
 drivers/net/7990.c                             |    4 
 drivers/net/8139cp.c                           |    4 
 drivers/net/8139too.c                          |    4 
 drivers/net/82596.c                            |   10 -
 drivers/net/a2065.c                            |    4 
 drivers/net/acenic.c                           |    2 
 drivers/net/amd8111e.c                         |   10 -
 drivers/net/appletalk/ltpc.c                   |    2 
 drivers/net/ariadne.c                          |    2 
 drivers/net/arm/am79c961a.c                    |    2 
 drivers/net/arm/at91_ether.c                   |    6 
 drivers/net/arm/ether3.c                       |    2 
 drivers/net/arm/ixp4xx_eth.c                   |    4 
 drivers/net/arm/ks8695net.c                    |    6 
 drivers/net/at1700.c                           |    6 
 drivers/net/atarilance.c                       |    2 
 drivers/net/atl1c/atl1c_main.c                 |    2 
 drivers/net/atl1e/atl1e_main.c                 |    2 
 drivers/net/atlx/atl2.c                        |    2 
 drivers/net/atlx/atlx.c                        |    2 
 drivers/net/atp.c                              |    6 
 drivers/net/au1000_eth.c                       |    4 
 drivers/net/b44.c                              |    6 
 drivers/net/benet/be_main.c                    |    2 
 drivers/net/bfin_mac.c                         |    6 
 drivers/net/bmac.c                             |   12 -
 drivers/net/bnx2.c                             |    8 -
 drivers/net/bnx2x_main.c                       |   10 -
 drivers/net/bonding/bond_main.c                |   16 +-
 drivers/net/cassini.c                          |    2 
 drivers/net/chelsio/common.h                   |    4 
 drivers/net/chelsio/cxgb2.c                    |    2 
 drivers/net/cpmac.c                            |    2 
 drivers/net/cris/eth_v10.c                     |    4 
 drivers/net/cs89x0.c                           |    2 
 drivers/net/cxgb3/common.h                     |    2 
 drivers/net/cxgb3/cxgb3_main.c                 |    4 
 drivers/net/de620.c                            |    2 
 drivers/net/declance.c                         |    4 
 drivers/net/defxx.c                            |    6 
 drivers/net/depca.c                            |    4 
 drivers/net/dl2k.c                             |    6 
 drivers/net/dm9000.c                           |    4 
 drivers/net/e100.c                             |    8 -
 drivers/net/e1000/e1000_main.c                 |    6 
 drivers/net/e1000e/netdev.c                    |    8 -
 drivers/net/eepro.c                            |   16 +-
 drivers/net/eexpress.c                         |    8 -
 drivers/net/ehea/ehea_main.c                   |    6 
 drivers/net/enc28j60.c                         |    2 
 drivers/net/enic/enic_main.c                   |    6 
 drivers/net/epic100.c                          |    6 
 drivers/net/eth16i.c                           |    2 
 drivers/net/ethoc.c                            |    2 
 drivers/net/ewrk3.c                            |    4 
 drivers/net/fealnx.c                           |    4 
 drivers/net/fec.c                              |    4 
 drivers/net/fec_mpc52xx.c                      |    4 
 drivers/net/forcedeth.c                        |    4 
 drivers/net/fs_enet/mac-fcc.c                  |    4 
 drivers/net/fs_enet/mac-fec.c                  |    4 
 drivers/net/fs_enet/mac-scc.c                  |    4 
 drivers/net/gianfar.c                          |    4 
 drivers/net/hamachi.c                          |    6 
 drivers/net/hp100.c                            |    6 
 drivers/net/ibm_newemac/core.c                 |    8 -
 drivers/net/ibmlana.c                          |    2 
 drivers/net/ibmveth.c                          |    6 
 drivers/net/igb/igb_main.c                     |    8 -
 drivers/net/igbvf/netdev.c                     |    8 -
 drivers/net/ioc3-eth.c                         |    6 
 drivers/net/ipg.c                              |    6 
 drivers/net/isa-skeleton.c                     |    6 
 drivers/net/iseries_veth.c                     |    6 
 drivers/net/ixgb/ixgb_main.c                   |    8 -
 drivers/net/ixgbe/ixgbe_main.c                 |    8 -
 drivers/net/jme.c                              |    4 
 drivers/net/korina.c                           |    8 -
 drivers/net/lance.c                            |    2 
 drivers/net/lib82596.c                         |   10 -
 drivers/net/lib8390.c                          |    6 
 drivers/net/lp486e.c                           |   12 -
 drivers/net/mac89x0.c                          |    2 
 drivers/net/macb.c                             |    6 
 drivers/net/mace.c                             |    4 
 drivers/net/macmace.c                          |    4 
 drivers/net/mlx4/en_netdev.c                   |    2 
 drivers/net/mv643xx_eth.c                      |    4 
 drivers/net/myri10ge/myri10ge.c                |    2 
 drivers/net/natsemi.c                          |    4 
 drivers/net/netxen/netxen_nic_hw.c             |   14 -
 drivers/net/ni5010.c                           |    2 
 drivers/net/ni52.c                             |    4 
 drivers/net/ni65.c                             |    2 
 drivers/net/niu.c                              |   10 -
 drivers/net/ns83820.c                          |    2 
 drivers/net/pci-skeleton.c                     |    4 
 drivers/net/pcmcia/3c574_cs.c                  |    2 
 drivers/net/pcmcia/3c589_cs.c                  |    2 
 drivers/net/pcmcia/axnet_cs.c                  |    6 
 drivers/net/pcmcia/fmvj18x_cs.c                |    6 
 drivers/net/pcmcia/nmclan_cs.c                 |   16 +-
 drivers/net/pcmcia/smc91c92_cs.c               |    4 
 drivers/net/pcmcia/xirc2ps_cs.c                |   10 -
 drivers/net/pcnet32.c                          |    4 
 drivers/net/ps3_gelic_net.c                    |    4 
 drivers/net/qlge/qlge_main.c                   |    6 
 drivers/net/r6040.c                            |   12 -
 drivers/net/r8169.c                            |    4 
 drivers/net/s2io.c                             |    8 -
 drivers/net/sb1250-mac.c                       |    2 
 drivers/net/sc92031.c                          |    4 
 drivers/net/sfc/efx.c                          |    4 
 drivers/net/sgiseeq.c                          |    2 
 drivers/net/sis190.c                           |    4 
 drivers/net/sis900.c                           |    6 
 drivers/net/skfp/skfddi.c                      |    8 -
 drivers/net/skge.c                             |   10 -
 drivers/net/sky2.c                             |    6 
 drivers/net/smc911x.c                          |    8 -
 drivers/net/smc9194.c                          |    4 
 drivers/net/smc91x.c                           |    8 -
 drivers/net/smsc911x.c                         |    8 -
 drivers/net/smsc9420.c                         |    4 
 drivers/net/sonic.c                            |    8 -
 drivers/net/spider_net.c                       |    2 
 drivers/net/starfire.c                         |    8 -
 drivers/net/sun3_82586.c                       |    4 
 drivers/net/sun3lance.c                        |    2 
 drivers/net/sunbmac.c                          |    6 
 drivers/net/sundance.c                         |    6 
 drivers/net/sungem.c                           |    6 
 drivers/net/sunhme.c                           |   12 -
 drivers/net/sunlance.c                         |    4 
 drivers/net/sunqe.c                            |    6 
 drivers/net/sunvnet.c                          |    2 
 drivers/net/tc35815.c                          |    8 -
 drivers/net/tehuti.c                           |    6 
 drivers/net/tg3.c                              |    4 
 drivers/net/tlan.c                             |    4 
 drivers/net/tokenring/3c359.c                  |    2 
 drivers/net/tokenring/ibmtr.c                  |    4 
 drivers/net/tokenring/lanstreamer.c            |    2 
 drivers/net/tokenring/olympic.c                |    2 
 drivers/net/tokenring/tms380tr.c               |    4 
 drivers/net/tsi108_eth.c                       |    4 
 drivers/net/tulip/de2104x.c                    |    8 -
 drivers/net/tulip/de4x5.c                      |    8 -
 drivers/net/tulip/dmfe.c                       |   18 +-
 drivers/net/tulip/tulip_core.c                 |   12 -
 drivers/net/tulip/uli526x.c                    |   12 -
 drivers/net/tulip/winbond-840.c                |    4 
 drivers/net/typhoon.c                          |    6 
 drivers/net/ucc_geth.c                         |    4 
 drivers/net/usb/asix.c                         |   16 +-
 drivers/net/usb/catc.c                         |    2 
 drivers/net/usb/dm9601.c                       |    8 -
 drivers/net/usb/kaweth.c                       |    2 
 drivers/net/usb/mcs7830.c                      |    8 -
 drivers/net/usb/pegasus.c                      |    2 
 drivers/net/usb/rtl8150.c                      |    2 
 drivers/net/usb/smsc95xx.c                     |    8 -
 drivers/net/via-rhine.c                        |    4 
 drivers/net/via-velocity.c                     |    4 
 drivers/net/virtio_net.c                       |   20 +-
 drivers/net/vxge/vxge-main.c                   |    6 
 drivers/net/wireless/airo.c                    |    2 
 drivers/net/wireless/arlan-main.c              |    4 
 drivers/net/wireless/libertas/main.c           |    2 
 drivers/net/wireless/netwave_cs.c              |    8 -
 drivers/net/wireless/orinoco/main.c            |    6 
 drivers/net/wireless/ray_cs.c                  |    4 
 drivers/net/wireless/rndis_wlan.c              |    8 -
 drivers/net/wireless/wavelan.c                 |   14 -
 drivers/net/wireless/wavelan_cs.c              |   16 +-
 drivers/net/wireless/zd1201.c                  |    8 -
 drivers/net/yellowfin.c                        |    6 
 drivers/net/znet.c                             |    2 
 drivers/s390/net/qeth_l2_main.c                |    4 
 drivers/staging/et131x/et131x_netdev.c         |   14 -
 drivers/staging/slicoss/slicoss.c              |    4 
 drivers/staging/sxg/sxg.c                      |    4 
 include/linux/netdevice.h                      |  143 +++++++++++++++++--
 net/bluetooth/bnep/netdev.c                    |    6 
 net/core/dev.c                                 |  180 +++++++++----------------
 net/core/dev_mcast.c                           |   96 -------------
 net/irda/irlan/irlan_eth.c                     |    4 
 net/mac80211/main.c                            |    4 
 net/mac80211/scan.c                            |    8 -
 200 files changed, 743 insertions(+), 778 deletions(-)



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg - June 13, 2009, 12:28 p.m.
On Sat, 2009-06-13 at 12:41 +0200, Johannes Berg wrote:
> I'm trying to use address lists without netdevs, but as
> a first step I thought it would be good to reduce the
> amount duplicated code between unicast and multicast
> lists.
> 
> After introducing a new 'struct address_list', we can
> unify a lot between these. The next step will probably
> be exporting the __dev_addr_sync and __dev_addr_unsync
> functions so I can use them without a netdev, but this
> cleanup can stand on its own.

Sorry, this was based against the wrong tree and now I see that in
net-next the lists have diverged significantly. Ignore this.

johannes
Jiri Pirko - June 16, 2009, 11:18 a.m.
Sat, Jun 13, 2009 at 02:28:14PM CEST, johannes@sipsolutions.net wrote:
>On Sat, 2009-06-13 at 12:41 +0200, Johannes Berg wrote:
>> I'm trying to use address lists without netdevs, but as
>> a first step I thought it would be good to reduce the
>> amount duplicated code between unicast and multicast
>> lists.
>> 
>> After introducing a new 'struct address_list', we can
>> unify a lot between these. The next step will probably
>> be exporting the __dev_addr_sync and __dev_addr_unsync
>> functions so I can use them without a netdev, but this
>> cleanup can stand on its own.
>
>Sorry, this was based against the wrong tree and now I see that in
>net-next the lists have diverged significantly. Ignore this.

Yes, I've already converted unicast lists to use list_head there. I'm sending
the patch doing the same for multicast lists soon.

Jirka
>
>johannes


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg - June 16, 2009, 11:29 a.m.
On Tue, 2009-06-16 at 13:18 +0200, Jiri Pirko wrote:
> Sat, Jun 13, 2009 at 02:28:14PM CEST, johannes@sipsolutions.net wrote:
> >On Sat, 2009-06-13 at 12:41 +0200, Johannes Berg wrote:
> >> I'm trying to use address lists without netdevs, but as
> >> a first step I thought it would be good to reduce the
> >> amount duplicated code between unicast and multicast
> >> lists.
> >> 
> >> After introducing a new 'struct address_list', we can
> >> unify a lot between these. The next step will probably
> >> be exporting the __dev_addr_sync and __dev_addr_unsync
> >> functions so I can use them without a netdev, but this
> >> cleanup can stand on its own.
> >
> >Sorry, this was based against the wrong tree and now I see that in
> >net-next the lists have diverged significantly. Ignore this.
> 
> Yes, I've already converted unicast lists to use list_head there. I'm sending
> the patch doing the same for multicast lists soon.

Very nice! After that maybe I'll take a look again at moving things into
a common structure -- I ultimately want to use a multicast list without
a netdev to sync multiple netdevs onto a common multicast list that is
not part of a netdev.

johannes
Jiri Pirko - June 16, 2009, 12:38 p.m.
Tue, Jun 16, 2009 at 01:29:31PM CEST, johannes@sipsolutions.net wrote:
>On Tue, 2009-06-16 at 13:18 +0200, Jiri Pirko wrote:
>> Sat, Jun 13, 2009 at 02:28:14PM CEST, johannes@sipsolutions.net wrote:
>> >On Sat, 2009-06-13 at 12:41 +0200, Johannes Berg wrote:
>> >> I'm trying to use address lists without netdevs, but as
>> >> a first step I thought it would be good to reduce the
>> >> amount duplicated code between unicast and multicast
>> >> lists.
>> >> 
>> >> After introducing a new 'struct address_list', we can
>> >> unify a lot between these. The next step will probably
>> >> be exporting the __dev_addr_sync and __dev_addr_unsync
>> >> functions so I can use them without a netdev, but this
>> >> cleanup can stand on its own.
>> >
>> >Sorry, this was based against the wrong tree and now I see that in
>> >net-next the lists have diverged significantly. Ignore this.
>> 
>> Yes, I've already converted unicast lists to use list_head there. I'm sending
>> the patch doing the same for multicast lists soon.
>
>Very nice! After that maybe I'll take a look again at moving things into
>a common structure -- I ultimately want to use a multicast list without
>a netdev to sync multiple netdevs onto a common multicast list that is
>not part of a netdev.

I see, hmm, I think I can do this change with my conversion... I was thinking
about similar thing as you suggest before...

Jirka

>
>johannes


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg - June 16, 2009, 11:09 p.m.
On Tue, 2009-06-16 at 14:38 +0200, Jiri Pirko wrote:

> >> Yes, I've already converted unicast lists to use list_head there. I'm sending
> >> the patch doing the same for multicast lists soon.
> >
> >Very nice! After that maybe I'll take a look again at moving things into
> >a common structure -- I ultimately want to use a multicast list without
> >a netdev to sync multiple netdevs onto a common multicast list that is
> >not part of a netdev.
> 
> I see, hmm, I think I can do this change with my conversion... I was thinking
> about similar thing as you suggest before...

I don't think the patch for converting the multicast lists will hit .31,
I take it?

I'd like to get this patch into the .32 tree once it opens
http://johannes.sipsolutions.net/patches/kernel/all/LATEST/NNN-net-core-mc-sync-list.patch

but I don't know how to handle that wrt. your patch, which will clearly
conflict with mein. Will you be sending that soon?

I guess we could stick this one into wireless-testing, and then take it
out again once your patch hits the tree and offers me similar API for
list_head based multicast lists?

johannes
Johannes Berg - June 16, 2009, 11:19 p.m.
On Wed, 2009-06-17 at 01:10 +0200, Johannes Berg wrote:

> I'd like to get this patch into the .32 tree once it opens
> http://johannes.sipsolutions.net/patches/kernel/all/LATEST/NNN-net-core-mc-sync-list.patch

+/**
+ * 	mc_unsync_from_dev - Remove synchronized addresses from the destination list
+ *	@to: destination list
+ *	@to_count: destination list count
+ *	@from: source device
+ *
+ * 	Remove all addresses that were added to the destination list by
+ * 	mc_sync_from_dev(). This function is intended to be called from
+ *	the * 	dev->stop function of layered software devices. The
+ *	destination list must be locked in whatever way the caller
+ *	manages it.
+ */
+void mc_unsync_from_dev(struct dev_addr_list **to, int *to_count,
+			struct net_device *from)
+{
+	netif_addr_lock_bh(from);
+	__dev_addr_unsync(to, to_count,
+			  &from->mc_list, &from->mc_count);
+	netif_addr_unlock_bh(from);
+}
+EXPORT_SYMBOL(mc_unsync_from_dev);

That can't work, of course, because the "to" list needs to be locked
_after_ "from" is locked, due mc_sync_from_dev() begin used in
ndo_set_multicast_list(). I guess I have to push out all the locking, by
just exporting __dev_addr_sync/__dev_addr_unsync.

Objections? Better ideas?

johannes
Jiri Pirko - June 17, 2009, 7:21 a.m.
Wed, Jun 17, 2009 at 01:09:48AM CEST, johannes@sipsolutions.net wrote:
>On Tue, 2009-06-16 at 14:38 +0200, Jiri Pirko wrote:
>
>> >> Yes, I've already converted unicast lists to use list_head there. I'm sending
>> >> the patch doing the same for multicast lists soon.
>> >
>> >Very nice! After that maybe I'll take a look again at moving things into
>> >a common structure -- I ultimately want to use a multicast list without
>> >a netdev to sync multiple netdevs onto a common multicast list that is
>> >not part of a netdev.
>> 
>> I see, hmm, I think I can do this change with my conversion... I was thinking
>> about similar thing as you suggest before...
>
>I don't think the patch for converting the multicast lists will hit .31,
>I take it?

I'm preparing the patch right now. It's most likely it will hit .32.

>
>I'd like to get this patch into the .32 tree once it opens
>http://johannes.sipsolutions.net/patches/kernel/all/LATEST/NNN-net-core-mc-sync-list.patch
>
>but I don't know how to handle that wrt. your patch, which will clearly
>conflict with mein. Will you be sending that soon?

I see your need. I'll think about it and try to prepare the lists for this use.
>
>I guess we could stick this one into wireless-testing, and then take it
>out again once your patch hits the tree and offers me similar API for
>list_head based multicast lists?

Or wait, I hope the patch will be ready in week tops.

Jirka
>
>johannes


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg - June 17, 2009, 9:30 a.m.
On Wed, 2009-06-17 at 09:21 +0200, Jiri Pirko wrote:

> >I guess we could stick this one into wireless-testing, and then take it
> >out again once your patch hits the tree and offers me similar API for
> >list_head based multicast lists?
> 
> Or wait, I hope the patch will be ready in week tops.

Yeah, that's fine, I'll ask people to throw in the simple export patch
for testing. Thanks for considering! Please disregard my work on
mac80211, I'll rebase over your work.

johannes
John W. Linville - June 17, 2009, 12:26 p.m.
On Wed, Jun 17, 2009 at 11:30:24AM +0200, Johannes Berg wrote:
> On Wed, 2009-06-17 at 09:21 +0200, Jiri Pirko wrote:
> 
> > >I guess we could stick this one into wireless-testing, and then take it
> > >out again once your patch hits the tree and offers me similar API for
> > >list_head based multicast lists?
> > 
> > Or wait, I hope the patch will be ready in week tops.
> 
> Yeah, that's fine, I'll ask people to throw in the simple export patch
> for testing. Thanks for considering! Please disregard my work on
> mac80211, I'll rebase over your work.

If you need Jiri's patch in wireless-testing I can make arrangements
to cherry-pick it.

John
Johannes Berg - June 17, 2009, 12:58 p.m.
On Wed, 2009-06-17 at 08:26 -0400, John W. Linville wrote:
> On Wed, Jun 17, 2009 at 11:30:24AM +0200, Johannes Berg wrote:
> > On Wed, 2009-06-17 at 09:21 +0200, Jiri Pirko wrote:
> > 
> > > >I guess we could stick this one into wireless-testing, and then take it
> > > >out again once your patch hits the tree and offers me similar API for
> > > >list_head based multicast lists?
> > > 
> > > Or wait, I hope the patch will be ready in week tops.
> > 
> > Yeah, that's fine, I'll ask people to throw in the simple export patch
> > for testing. Thanks for considering! Please disregard my work on
> > mac80211, I'll rebase over your work.
> 
> If you need Jiri's patch in wireless-testing I can make arrangements
> to cherry-pick it.

Not the one he just sent, that one's concerned with unicast address
lists. We'll see. The mdev removal still had a bunch of issues anyway.

johannes

Patch

--- wireless-testing.orig/include/linux/netdevice.h	2009-06-13 12:29:25.000000000 +0200
+++ wireless-testing/include/linux/netdevice.h	2009-06-13 12:30:21.000000000 +0200
@@ -200,6 +200,11 @@  struct dev_addr_list
 	int			da_gusers;
 };
 
+struct address_list {
+	struct dev_addr_list	*list;
+	int			count;
+};
+
 /*
  *	We tag multicasts with these structures.
  */
@@ -748,11 +753,9 @@  struct net_device
 	unsigned short          dev_id;		/* for shared network cards */
 
 	spinlock_t		addr_list_lock;
-	struct dev_addr_list	*uc_list;	/* Secondary unicast mac addresses */
-	int			uc_count;	/* Number of installed ucasts	*/
-	int			uc_promisc;
-	struct dev_addr_list	*mc_list;	/* Multicast mac addresses	*/
-	int			mc_count;	/* Number of installed mcasts	*/
+	struct address_list	uc;		/* secondary unicast mac addresses */
+	int			uc_promisc;	/* Multicast mac addresses */
+	struct address_list	mc;
 	unsigned int		promiscuity;
 	unsigned int		allmulti;
 
@@ -1792,24 +1795,128 @@  extern int		register_netdev(struct net_d
 extern void		unregister_netdev(struct net_device *dev);
 /* Functions used for secondary unicast and multicast support */
 extern void		dev_set_rx_mode(struct net_device *dev);
-extern void		__dev_set_rx_mode(struct net_device *dev);
-extern int		dev_unicast_delete(struct net_device *dev, void *addr, int alen);
-extern int		dev_unicast_add(struct net_device *dev, void *addr, int alen);
-extern int		dev_unicast_sync(struct net_device *to, struct net_device *from);
-extern void		dev_unicast_unsync(struct net_device *to, struct net_device *from);
-extern int 		dev_mc_delete(struct net_device *dev, void *addr, int alen, int all);
-extern int		dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly);
-extern int		dev_mc_sync(struct net_device *to, struct net_device *from);
-extern void		dev_mc_unsync(struct net_device *to, struct net_device *from);
-extern int 		__dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all);
-extern int		__dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly);
-extern int		__dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
-extern void		__dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
 extern int		dev_set_promiscuity(struct net_device *dev, int inc);
 extern int		dev_set_allmulti(struct net_device *dev, int inc);
 extern void		netdev_state_change(struct net_device *dev);
 extern void		netdev_bonding_change(struct net_device *dev);
 extern void		netdev_features_change(struct net_device *dev);
+
+int dev_addr_add(struct net_device *dev, struct address_list *alist,
+		 void *addr, int alen, int glbl);
+int dev_addr_delete(struct net_device *dev, struct address_list *alist,
+		    void *addr, int alen, int glbl);
+int dev_addr_sync(struct net_device *todev, struct address_list *to,
+		  struct address_list *from);
+void dev_addr_unsync(struct net_device *todev, struct net_device *fromdev,
+		     struct address_list *to, struct address_list *from);
+
+static inline int dev_mc_delete(struct net_device *dev, void *addr,
+				int alen, int glbl)
+{
+	return dev_addr_delete(dev, &dev->mc, addr, alen, glbl);
+}
+
+static inline int dev_mc_add(struct net_device *dev, void *addr,
+			     int alen, int glbl)
+{
+	return dev_addr_add(dev, &dev->mc, addr, alen, glbl);
+}
+
+/**
+ *	dev_mc_sync	- Synchronize device's multicast list to another device
+ *	@to: destination device
+ *	@from: source device
+ *
+ * 	Add newly added addresses to the destination device and release
+ * 	addresses that have no users left. The source device must be
+ * 	locked by netif_tx_lock_bh.
+ *
+ *	This function is intended to be called from the dev->set_multicast_list
+ *	or dev->set_rx_mode function of layered software devices.
+ */
+static inline int dev_mc_sync(struct net_device *to, struct net_device *from)
+{
+	return dev_addr_sync(to, &to->mc, &from->mc);
+}
+
+/**
+ * 	dev_mc_unsync	- Remove synchronized addresses from the destination
+ * 			  device
+ *	@to: destination device
+ *	@from: source device
+ *
+ * 	Remove all addresses that were added to the destination device by
+ * 	dev_mc_sync(). This function is intended to be called from the
+ * 	dev->stop function of layered software devices.
+ */
+static inline void dev_mc_unsync(struct net_device *to, struct net_device *from)
+{
+	dev_addr_unsync(to, from, &to->mc, &from->mc);
+}
+
+/**
+ *	dev_unicast_delete	- Release secondary unicast address.
+ *	@dev: device
+ *	@addr: address to delete
+ *	@alen: length of @addr
+ *
+ *	Release reference to a secondary unicast address and remove it
+ *	from the device if the reference count drops to zero.
+ *
+ *	The caller must hold the rtnl_mutex.
+ */
+static inline int dev_unicast_delete(struct net_device *dev, void *addr, int alen)
+{
+	return dev_addr_delete(dev, &dev->uc, addr, alen, 0);
+}
+
+/**
+ *	dev_unicast_add		- add a secondary unicast address
+ *	@dev: device
+ *	@addr: address to add
+ *	@alen: length of @addr
+ *
+ *	Add a secondary unicast address to the device or increase
+ *	the reference count if it already exists.
+ *
+ *	The caller must hold the rtnl_mutex.
+ */
+static inline int dev_unicast_add(struct net_device *dev, void *addr, int alen)
+{
+	return dev_addr_add(dev, &dev->uc, addr, alen, 0);
+}
+
+/**
+ *	dev_unicast_sync - Synchronize device's unicast list to another device
+ *	@to: destination device
+ *	@from: source device
+ *
+ *	Add newly added addresses to the destination device and release
+ *	addresses that have no users left. The source device must be
+ *	locked by netif_tx_lock_bh.
+ *
+ *	This function is intended to be called from the dev->set_rx_mode
+ *	function of layered software devices.
+ */
+static inline int dev_unicast_sync(struct net_device *to, struct net_device *from)
+{
+	return dev_addr_sync(to, &to->uc, &from->uc);
+}
+
+/**
+ *	dev_unicast_unsync - Remove synchronized addresses from the destination device
+ *	@to: destination device
+ *	@from: source device
+ *
+ *	Remove all addresses that were added to the destination device by
+ *	dev_unicast_sync(). This function is intended to be called from the
+ *	dev->stop function of layered software devices.
+ */
+static inline void dev_unicast_unsync(struct net_device *to, struct net_device *from)
+{
+	dev_addr_unsync(to, from, &to->uc, &from->uc);
+}
+
 /* Load a device via the kmod */
 extern void		dev_load(struct net *net, const char *name);
 extern void		dev_mcast_init(void);
--- wireless-testing.orig/net/bluetooth/bnep/netdev.c	2009-01-13 15:05:23.000000000 +0100
+++ wireless-testing/net/bluetooth/bnep/netdev.c	2009-06-13 12:29:32.000000000 +0200
@@ -64,7 +64,7 @@  static void bnep_net_set_mc_list(struct 
 	struct sk_buff *skb;
 	int size;
 
-	BT_DBG("%s mc_count %d", dev->name, dev->mc_count);
+	BT_DBG("%s mc_count %d", dev->name, dev->mc.count);
 
 	size = sizeof(*r) + (BNEP_MAX_MULTICAST_FILTERS + 1) * ETH_ALEN * 2;
 	skb  = alloc_skb(size, GFP_ATOMIC);
@@ -87,7 +87,7 @@  static void bnep_net_set_mc_list(struct 
 		memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
 		r->len = htons(ETH_ALEN * 2);
 	} else {
-		struct dev_mc_list *dmi = dev->mc_list;
+		struct dev_mc_list *dmi = dev->mc.list;
 		int i, len = skb->len;
 
 		if (dev->flags & IFF_BROADCAST) {
@@ -97,7 +97,7 @@  static void bnep_net_set_mc_list(struct 
 
 		/* FIXME: We should group addresses here. */
 
-		for (i = 0; i < dev->mc_count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {
+		for (i = 0; i < dev->mc.count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {
 			memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
 			memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
 			dmi = dmi->next;
--- wireless-testing.orig/net/core/dev.c	2009-06-01 22:33:04.000000000 +0200
+++ wireless-testing/net/core/dev.c	2009-06-13 12:29:32.000000000 +0200
@@ -3412,7 +3412,7 @@  int dev_set_allmulti(struct net_device *
  *	filtering it is put in promiscuous mode while unicast addresses
  *	are present.
  */
-void __dev_set_rx_mode(struct net_device *dev)
+static void __dev_set_rx_mode(struct net_device *dev)
 {
 	const struct net_device_ops *ops = dev->netdev_ops;
 
@@ -3429,10 +3429,10 @@  void __dev_set_rx_mode(struct net_device
 		/* Unicast addresses changes may only happen under the rtnl,
 		 * therefore calling __dev_set_promiscuity here is safe.
 		 */
-		if (dev->uc_count > 0 && !dev->uc_promisc) {
+		if (dev->uc.count > 0 && !dev->uc_promisc) {
 			__dev_set_promiscuity(dev, 1);
 			dev->uc_promisc = 1;
-		} else if (dev->uc_count == 0 && dev->uc_promisc) {
+		} else if (dev->uc.count == 0 && dev->uc_promisc) {
 			__dev_set_promiscuity(dev, -1);
 			dev->uc_promisc = 0;
 		}
@@ -3449,9 +3449,10 @@  void dev_set_rx_mode(struct net_device *
 	netif_addr_unlock_bh(dev);
 }
 
-int __dev_addr_delete(struct dev_addr_list **list, int *count,
-		      void *addr, int alen, int glbl)
+static int __dev_addr_delete(struct address_list *alist,
+			     void *addr, int alen, int glbl)
 {
+	struct dev_addr_list **list = &alist->list;
 	struct dev_addr_list *da;
 
 	for (; (da = *list) != NULL; list = &da->next) {
@@ -3468,16 +3469,32 @@  int __dev_addr_delete(struct dev_addr_li
 
 			*list = da->next;
 			kfree(da);
-			(*count)--;
+			alist->count--;
 			return 0;
 		}
 	}
 	return -ENOENT;
 }
 
-int __dev_addr_add(struct dev_addr_list **list, int *count,
-		   void *addr, int alen, int glbl)
+int dev_addr_delete(struct net_device *dev, struct address_list *alist,
+		    void *addr, int alen, int glbl)
 {
+	int err;
+
+	netif_addr_lock_bh(dev);
+	err = __dev_addr_delete(alist, addr, alen, glbl);
+	if (!err)
+		__dev_set_rx_mode(dev);
+	netif_addr_unlock_bh(dev);
+
+	return err;
+}
+EXPORT_SYMBOL(dev_addr_delete);
+
+static int __dev_addr_add(struct address_list *alist,
+			  void *addr, int alen, int glbl)
+{
+	struct dev_addr_list **list = &alist->list;
 	struct dev_addr_list *da;
 
 	for (da = *list; da != NULL; da = da->next) {
@@ -3503,156 +3520,91 @@  int __dev_addr_add(struct dev_addr_list 
 	da->da_gusers = glbl ? 1 : 0;
 	da->next = *list;
 	*list = da;
-	(*count)++;
+	alist->count++;
 	return 0;
 }
 
-/**
- *	dev_unicast_delete	- Release secondary unicast address.
- *	@dev: device
- *	@addr: address to delete
- *	@alen: length of @addr
- *
- *	Release reference to a secondary unicast address and remove it
- *	from the device if the reference count drops to zero.
- *
- * 	The caller must hold the rtnl_mutex.
- */
-int dev_unicast_delete(struct net_device *dev, void *addr, int alen)
+int dev_addr_add(struct net_device *dev, struct address_list *alist,
+		 void *addr, int alen, int glbl)
 {
 	int err;
 
-	ASSERT_RTNL();
-
 	netif_addr_lock_bh(dev);
-	err = __dev_addr_delete(&dev->uc_list, &dev->uc_count, addr, alen, 0);
+	err = __dev_addr_add(alist, addr, alen, glbl);
 	if (!err)
 		__dev_set_rx_mode(dev);
 	netif_addr_unlock_bh(dev);
-	return err;
-}
-EXPORT_SYMBOL(dev_unicast_delete);
-
-/**
- *	dev_unicast_add		- add a secondary unicast address
- *	@dev: device
- *	@addr: address to add
- *	@alen: length of @addr
- *
- *	Add a secondary unicast address to the device or increase
- *	the reference count if it already exists.
- *
- *	The caller must hold the rtnl_mutex.
- */
-int dev_unicast_add(struct net_device *dev, void *addr, int alen)
-{
-	int err;
-
-	ASSERT_RTNL();
 
-	netif_addr_lock_bh(dev);
-	err = __dev_addr_add(&dev->uc_list, &dev->uc_count, addr, alen, 0);
-	if (!err)
-		__dev_set_rx_mode(dev);
-	netif_addr_unlock_bh(dev);
 	return err;
 }
-EXPORT_SYMBOL(dev_unicast_add);
+EXPORT_SYMBOL(dev_addr_add);
 
-int __dev_addr_sync(struct dev_addr_list **to, int *to_count,
-		    struct dev_addr_list **from, int *from_count)
+static int __dev_addr_sync(struct address_list *to, struct address_list *from)
 {
 	struct dev_addr_list *da, *next;
 	int err = 0;
 
-	da = *from;
+	da = from->list;
 	while (da != NULL) {
 		next = da->next;
 		if (!da->da_synced) {
-			err = __dev_addr_add(to, to_count,
-					     da->da_addr, da->da_addrlen, 0);
+			err = __dev_addr_add(to, da->da_addr, da->da_addrlen, 0);
 			if (err < 0)
 				break;
 			da->da_synced = 1;
 			da->da_users++;
 		} else if (da->da_users == 1) {
-			__dev_addr_delete(to, to_count,
-					  da->da_addr, da->da_addrlen, 0);
-			__dev_addr_delete(from, from_count,
-					  da->da_addr, da->da_addrlen, 0);
+			__dev_addr_delete(to, da->da_addr, da->da_addrlen, 0);
+			__dev_addr_delete(from, da->da_addr, da->da_addrlen, 0);
 		}
 		da = next;
 	}
 	return err;
 }
 
-void __dev_addr_unsync(struct dev_addr_list **to, int *to_count,
-		       struct dev_addr_list **from, int *from_count)
+int dev_addr_sync(struct net_device *todev, struct address_list *to,
+		  struct address_list *from)
+{
+	int err = 0;
+
+	netif_addr_lock_bh(todev);
+	err = __dev_addr_sync(to, from);
+	if (!err)
+		__dev_set_rx_mode(todev);
+	netif_addr_unlock_bh(todev);
+	return err;
+}
+EXPORT_SYMBOL(dev_addr_sync);
+
+static void __dev_addr_unsync(struct address_list *to, struct address_list *from)
 {
 	struct dev_addr_list *da, *next;
 
-	da = *from;
+	da = from->list;
 	while (da != NULL) {
 		next = da->next;
 		if (da->da_synced) {
-			__dev_addr_delete(to, to_count,
-					  da->da_addr, da->da_addrlen, 0);
+			__dev_addr_delete(to, da->da_addr, da->da_addrlen, 0);
 			da->da_synced = 0;
-			__dev_addr_delete(from, from_count,
-					  da->da_addr, da->da_addrlen, 0);
+			__dev_addr_delete(from, da->da_addr, da->da_addrlen, 0);
 		}
 		da = next;
 	}
 }
 
-/**
- *	dev_unicast_sync - Synchronize device's unicast list to another device
- *	@to: destination device
- *	@from: source device
- *
- *	Add newly added addresses to the destination device and release
- *	addresses that have no users left. The source device must be
- *	locked by netif_tx_lock_bh.
- *
- *	This function is intended to be called from the dev->set_rx_mode
- *	function of layered software devices.
- */
-int dev_unicast_sync(struct net_device *to, struct net_device *from)
-{
-	int err = 0;
-
-	netif_addr_lock_bh(to);
-	err = __dev_addr_sync(&to->uc_list, &to->uc_count,
-			      &from->uc_list, &from->uc_count);
-	if (!err)
-		__dev_set_rx_mode(to);
-	netif_addr_unlock_bh(to);
-	return err;
-}
-EXPORT_SYMBOL(dev_unicast_sync);
-
-/**
- *	dev_unicast_unsync - Remove synchronized addresses from the destination device
- *	@to: destination device
- *	@from: source device
- *
- *	Remove all addresses that were added to the destination device by
- *	dev_unicast_sync(). This function is intended to be called from the
- *	dev->stop function of layered software devices.
- */
-void dev_unicast_unsync(struct net_device *to, struct net_device *from)
+void dev_addr_unsync(struct net_device *todev, struct net_device *fromdev,
+		     struct address_list *to, struct address_list *from)
 {
-	netif_addr_lock_bh(from);
-	netif_addr_lock(to);
+	netif_addr_lock_bh(fromdev);
+	netif_addr_lock(todev);
 
-	__dev_addr_unsync(&to->uc_list, &to->uc_count,
-			  &from->uc_list, &from->uc_count);
-	__dev_set_rx_mode(to);
+	__dev_addr_unsync(to, from);
+	__dev_set_rx_mode(todev);
 
-	netif_addr_unlock(to);
-	netif_addr_unlock_bh(from);
+	netif_addr_unlock(todev);
+	netif_addr_unlock_bh(fromdev);
 }
-EXPORT_SYMBOL(dev_unicast_unsync);
+EXPORT_SYMBOL(dev_addr_unsync);
 
 static void __dev_addr_discard(struct dev_addr_list **list)
 {
@@ -3672,11 +3624,11 @@  static void dev_addr_discard(struct net_
 {
 	netif_addr_lock_bh(dev);
 
-	__dev_addr_discard(&dev->uc_list);
-	dev->uc_count = 0;
+	__dev_addr_discard(&dev->uc.list);
+	dev->uc.count = 0;
 
-	__dev_addr_discard(&dev->mc_list);
-	dev->mc_count = 0;
+	__dev_addr_discard(&dev->mc.list);
+	dev->mc.count = 0;
 
 	netif_addr_unlock_bh(dev);
 }
--- wireless-testing.orig/net/core/dev_mcast.c	2009-06-13 12:29:25.000000000 +0200
+++ wireless-testing/net/core/dev_mcast.c	2009-06-13 12:29:32.000000000 +0200
@@ -64,97 +64,6 @@ 
  *	We block accesses to device mc filters with netif_tx_lock.
  */
 
-/*
- *	Delete a device level multicast
- */
-
-int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
-{
-	int err;
-
-	netif_addr_lock_bh(dev);
-	err = __dev_addr_delete(&dev->mc_list, &dev->mc_count,
-				addr, alen, glbl);
-	if (!err) {
-		/*
-		 *	We have altered the list, so the card
-		 *	loaded filter is now wrong. Fix it
-		 */
-
-		__dev_set_rx_mode(dev);
-	}
-	netif_addr_unlock_bh(dev);
-	return err;
-}
-
-/*
- *	Add a device level multicast
- */
-
-int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
-{
-	int err;
-
-	netif_addr_lock_bh(dev);
-	err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl);
-	if (!err)
-		__dev_set_rx_mode(dev);
-	netif_addr_unlock_bh(dev);
-	return err;
-}
-
-/**
- *	dev_mc_sync	- Synchronize device's multicast list to another device
- *	@to: destination device
- *	@from: source device
- *
- * 	Add newly added addresses to the destination device and release
- * 	addresses that have no users left. The source device must be
- * 	locked by netif_tx_lock_bh.
- *
- *	This function is intended to be called from the dev->set_multicast_list
- *	or dev->set_rx_mode function of layered software devices.
- */
-int dev_mc_sync(struct net_device *to, struct net_device *from)
-{
-	int err = 0;
-
-	netif_addr_lock_bh(to);
-	err = __dev_addr_sync(&to->mc_list, &to->mc_count,
-			      &from->mc_list, &from->mc_count);
-	if (!err)
-		__dev_set_rx_mode(to);
-	netif_addr_unlock_bh(to);
-
-	return err;
-}
-EXPORT_SYMBOL(dev_mc_sync);
-
-
-/**
- * 	dev_mc_unsync	- Remove synchronized addresses from the destination
- * 			  device
- *	@to: destination device
- *	@from: source device
- *
- * 	Remove all addresses that were added to the destination device by
- * 	dev_mc_sync(). This function is intended to be called from the
- * 	dev->stop function of layered software devices.
- */
-void dev_mc_unsync(struct net_device *to, struct net_device *from)
-{
-	netif_addr_lock_bh(from);
-	netif_addr_lock(to);
-
-	__dev_addr_unsync(&to->mc_list, &to->mc_count,
-			  &from->mc_list, &from->mc_count);
-	__dev_set_rx_mode(to);
-
-	netif_addr_unlock(to);
-	netif_addr_unlock_bh(from);
-}
-EXPORT_SYMBOL(dev_mc_unsync);
-
 #ifdef CONFIG_PROC_FS
 static int dev_mc_seq_show(struct seq_file *seq, void *v)
 {
@@ -165,7 +74,7 @@  static int dev_mc_seq_show(struct seq_fi
 		return 0;
 
 	netif_addr_lock_bh(dev);
-	for (m = dev->mc_list; m; m = m->next) {
+	for (m = dev->mc.list; m; m = m->next) {
 		int i;
 
 		seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex,
@@ -224,6 +133,3 @@  void __init dev_mcast_init(void)
 {
 	register_pernet_subsys(&dev_mc_net_ops);
 }
-
-EXPORT_SYMBOL(dev_mc_add);
-EXPORT_SYMBOL(dev_mc_delete);
--- wireless-testing.orig/net/irda/irlan/irlan_eth.c	2009-04-09 10:00:39.000000000 +0200
+++ wireless-testing/net/irda/irlan/irlan_eth.c	2009-06-13 12:29:32.000000000 +0200
@@ -318,14 +318,14 @@  static void irlan_eth_set_multicast_list
 		/* Enable promiscuous mode */
 		IRDA_WARNING("Promiscuous mode not implemented by IrLAN!\n");
 	}
-	else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count > HW_MAX_ADDRS) {
+	else if ((dev->flags & IFF_ALLMULTI) || dev->mc.count > HW_MAX_ADDRS) {
 		/* Disable promiscuous mode, use normal mode. */
 		IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__ );
 		/* hardware_set_filter(NULL); */
 
 		irlan_set_multicast_filter(self, TRUE);
 	}
-	else if (dev->mc_count) {
+	else if (dev->mc.count) {
 		IRDA_DEBUG(4, "%s(), Setting multicast filter\n", __func__ );
 		/* Walk the address list, and load the filter */
 		/* hardware_set_filter(dev->mc_list); */
--- wireless-testing.orig/net/mac80211/main.c	2009-06-11 11:34:09.000000000 +0200
+++ wireless-testing/net/mac80211/main.c	2009-06-13 12:29:32.000000000 +0200
@@ -83,8 +83,8 @@  void ieee80211_configure_filter(struct i
 	new_flags |= (1<<31);
 
 	drv_configure_filter(local, changed_flags, &new_flags,
-			     local->mdev->mc_count,
-			     local->mdev->mc_list);
+			     local->mdev->mc.count,
+			     local->mdev->mc.list);
 
 	WARN_ON(new_flags & (1<<31));
 
--- wireless-testing.orig/net/mac80211/scan.c	2009-06-11 11:34:09.000000000 +0200
+++ wireless-testing/net/mac80211/scan.c	2009-06-13 12:29:32.000000000 +0200
@@ -312,8 +312,8 @@  void ieee80211_scan_completed(struct iee
 	local->filter_flags &= ~FIF_BCN_PRBRESP_PROMISC;
 	drv_configure_filter(local, FIF_BCN_PRBRESP_PROMISC,
 			     &local->filter_flags,
-			     local->mdev->mc_count,
-			     local->mdev->mc_list);
+			     local->mdev->mc.count,
+			     local->mdev->mc.list);
 
 	netif_addr_unlock(local->mdev);
 	netif_tx_unlock_bh(local->mdev);
@@ -399,8 +399,8 @@  static int ieee80211_start_sw_scan(struc
 	local->filter_flags |= FIF_BCN_PRBRESP_PROMISC;
 	drv_configure_filter(local, FIF_BCN_PRBRESP_PROMISC,
 			     &local->filter_flags,
-			     local->mdev->mc_count,
-			     local->mdev->mc_list);
+			     local->mdev->mc.count,
+			     local->mdev->mc.list);
 	netif_addr_unlock_bh(local->mdev);
 
 	/* TODO: start scan as soon as all nullfunc frames are ACKed */
--- wireless-testing.orig/drivers/infiniband/hw/nes/nes_nic.c	2009-04-16 02:16:34.000000000 +0200
+++ wireless-testing/drivers/infiniband/hw/nes/nes_nic.c	2009-06-13 12:29:33.000000000 +0200
@@ -862,10 +862,10 @@  static void nes_netdev_set_multicast_lis
 	}
 
 	nes_debug(NES_DBG_NIC_RX, "Number of MC entries = %d, Promiscous = %d, All Multicast = %d.\n",
-		  netdev->mc_count, !!(netdev->flags & IFF_PROMISC),
+		  netdev->mc.count, !!(netdev->flags & IFF_PROMISC),
 		  !!(netdev->flags & IFF_ALLMULTI));
 	if (!mc_all_on) {
-		multicast_addr = netdev->mc_list;
+		multicast_addr = netdev->mc.list;
 		perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW +
 						pft_entries_preallocated * 0x8;
 		for (mc_index = 0; mc_index < max_pft_entries_avaiable;
--- wireless-testing.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c	2009-01-29 20:09:53.000000000 +0100
+++ wireless-testing/drivers/infiniband/ulp/ipoib/ipoib_multicast.c	2009-06-13 12:29:33.000000000 +0200
@@ -788,7 +788,7 @@  void ipoib_mcast_restart_task(struct wor
 		clear_bit(IPOIB_MCAST_FLAG_FOUND, &mcast->flags);
 
 	/* Mark all of the entries that are found or don't exist */
-	for (mclist = dev->mc_list; mclist; mclist = mclist->next) {
+	for (mclist = dev->mc.list; mclist; mclist = mclist->next) {
 		union ib_gid mgid;
 
 		memcpy(mgid.raw, mclist->dmi_addr + 4, sizeof mgid);
--- wireless-testing.orig/drivers/media/dvb/dvb-core/dvb_net.c	2009-04-09 10:00:09.000000000 +0200
+++ wireless-testing/drivers/media/dvb/dvb-core/dvb_net.c	2009-06-13 12:29:33.000000000 +0200
@@ -1140,18 +1140,18 @@  static void wq_set_multicast_list (struc
 	} else if ((dev->flags & IFF_ALLMULTI)) {
 		dprintk("%s: allmulti mode\n", dev->name);
 		priv->rx_mode = RX_MODE_ALL_MULTI;
-	} else if (dev->mc_count) {
+	} else if (dev->mc.count) {
 		int mci;
 		struct dev_mc_list *mc;
 
 		dprintk("%s: set_mc_list, %d entries\n",
-			dev->name, dev->mc_count);
+			dev->name, dev->mc.count);
 
 		priv->rx_mode = RX_MODE_MULTI;
 		priv->multi_num = 0;
 
-		for (mci = 0, mc=dev->mc_list;
-		     mci < dev->mc_count;
+		for (mci = 0, mc=dev->mc.list;
+		     mci < dev->mc.count;
 		     mc = mc->next, mci++) {
 			dvb_set_mc_filter(dev, mc);
 		}
@@ -1238,7 +1238,7 @@  static void dvb_net_setup(struct net_dev
 	dev->header_ops		= &dvb_header_ops;
 	dev->netdev_ops		= &dvb_netdev_ops;
 	dev->mtu		= 4096;
-	dev->mc_count           = 0;
+	dev->mc.count           = 0;
 
 	dev->flags |= IFF_NOARP;
 }
--- wireless-testing.orig/drivers/net/3c501.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c501.c	2009-06-13 12:29:33.000000000 +0200
@@ -819,7 +819,7 @@  static void set_multicast_list(struct ne
 	if (dev->flags & IFF_PROMISC) {
 		outb(RX_PROM, RX_CMD);
 		inb(RX_STATUS);
-	} else if (dev->mc_list || dev->flags & IFF_ALLMULTI) {
+	} else if (dev->mc.list || dev->flags & IFF_ALLMULTI) {
 		/* Multicast or all multicast is the same */
 		outb(RX_MULT, RX_CMD);
 		inb(RX_STATUS);		/* Clear status. */
--- wireless-testing.orig/drivers/net/3c505.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c505.c	2009-06-13 12:29:33.000000000 +0200
@@ -1208,7 +1208,7 @@  static int elp_close(struct net_device *
 static void elp_set_mc_list(struct net_device *dev)
 {
 	elp_device *adapter = netdev_priv(dev);
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_addr_list *dmi = dev->mc.list;
 	int i;
 	unsigned long flags;
 
@@ -1221,8 +1221,8 @@  static void elp_set_mc_list(struct net_d
 		/* send a "load multicast list" command to the board, max 10 addrs/cmd */
 		/* if num_addrs==0 the list will be cleared */
 		adapter->tx_pcb.command = CMD_LOAD_MULTICAST_LIST;
-		adapter->tx_pcb.length = 6 * dev->mc_count;
-		for (i = 0; i < dev->mc_count; i++) {
+		adapter->tx_pcb.length = 6 * dev->mc.count;
+		for (i = 0; i < dev->mc.count; i++) {
 			memcpy(adapter->tx_pcb.data.multicast[i], dmi->dmi_addr, 6);
 			dmi = dmi->next;
 		}
@@ -1236,7 +1236,7 @@  static void elp_set_mc_list(struct net_d
 				TIMEOUT_MSG(__LINE__);
 			}
 		}
-		if (dev->mc_count)
+		if (dev->mc.count)
 			adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_BROAD | RECV_MULTI;
 		else		/* num_addrs == 0 */
 			adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_BROAD;
--- wireless-testing.orig/drivers/net/3c509.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/3c509.c	2009-06-13 12:29:33.000000000 +0200
@@ -1116,9 +1116,9 @@  set_multicast_list(struct net_device *de
 
 	if (el3_debug > 1) {
 		static int old;
-		if (old != dev->mc_count) {
-			old = dev->mc_count;
-			printk("%s: Setting Rx mode to %d addresses.\n", dev->name, dev->mc_count);
+		if (old != dev->mc.count) {
+			old = dev->mc.count;
+			printk("%s: Setting Rx mode to %d addresses.\n", dev->name, dev->mc.count);
 		}
 	}
 	spin_lock_irqsave(&lp->lock, flags);
@@ -1126,7 +1126,7 @@  set_multicast_list(struct net_device *de
 		outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
 			 ioaddr + EL3_CMD);
 	}
-	else if (dev->mc_count || (dev->flags&IFF_ALLMULTI)) {
+	else if (dev->mc.count || (dev->flags&IFF_ALLMULTI)) {
 		outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast, ioaddr + EL3_CMD);
 	}
 	else
--- wireless-testing.orig/drivers/net/3c515.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c515.c	2009-06-13 12:29:33.000000000 +0200
@@ -1537,7 +1537,7 @@  static void set_rx_mode(struct net_devic
 			printk("%s: Setting promiscuous mode.\n",
 			       dev->name);
 		new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm;
-	} else if ((dev->mc_list) || (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.list) || (dev->flags & IFF_ALLMULTI)) {
 		new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast;
 	} else
 		new_mode = SetRxFilter | RxStation | RxBroadcast;
--- wireless-testing.orig/drivers/net/3c523.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c523.c	2009-06-13 12:29:33.000000000 +0200
@@ -625,8 +625,8 @@  static int init586(struct net_device *de
 	volatile struct iasetup_cmd_struct *ias_cmd;
 	volatile struct tdr_cmd_struct *tdr_cmd;
 	volatile struct mcsetup_cmd_struct *mc_cmd;
-	struct dev_mc_list *dmi = dev->mc_list;
-	int num_addrs = dev->mc_count;
+	struct dev_mc_list *dmi = dev->mc.list;
+	int num_addrs = dev->mc.count;
 
 	ptr = (void *) ((char *) p->scb + sizeof(struct scb_struct));
 
@@ -770,7 +770,7 @@  static int init586(struct net_device *de
 	 * Multicast setup
 	 */
 
-	if (dev->mc_count) {
+	if (dev->mc.count) {
 		/* I don't understand this: do we really need memory after the init? */
 		int len = ((char *) p->iscp - (char *) ptr - 8) / 6;
 		if (len <= 0) {
--- wireless-testing.orig/drivers/net/3c527.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c527.c	2009-06-13 12:29:33.000000000 +0200
@@ -1528,14 +1528,14 @@  static void do_mc32_set_multicast_list(s
 
 	if ((dev->flags&IFF_PROMISC) ||
 	    (dev->flags&IFF_ALLMULTI) ||
-	    dev->mc_count > 10)
+	    dev->mc.count > 10)
 		/* Enable promiscuous mode */
 		filt |= 1;
-	else if(dev->mc_count)
+	else if(dev->mc.count)
 	{
 		unsigned char block[62];
 		unsigned char *bp;
-		struct dev_mc_list *dmc=dev->mc_list;
+		struct dev_mc_list *dmc=dev->mc.list;
 
 		int i;
 
@@ -1544,16 +1544,16 @@  static void do_mc32_set_multicast_list(s
 		if(!lp->mc_list_valid)
 		{
 			block[1]=0;
-			block[0]=dev->mc_count;
+			block[0]=dev->mc.count;
 			bp=block+2;
 
-			for(i=0;i<dev->mc_count;i++)
+			for(i=0;i<dev->mclcount;i++)
 			{
 				memcpy(bp, dmc->dmi_addr, 6);
 				bp+=6;
 				dmc=dmc->next;
 			}
-			if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
+			if(mc32_command_nowait(dev, 2, block, 2+6*dev->mclcount)==-1)
 			{
 				lp->mc_reload_wait = 1;
 				return;
--- wireless-testing.orig/drivers/net/3c59x.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/3c59x.c	2009-06-13 12:29:33.000000000 +0200
@@ -2972,7 +2972,7 @@  static void set_rx_mode(struct net_devic
 		if (vortex_debug > 3)
 			printk(KERN_NOTICE "%s: Setting promiscuous mode.\n", dev->name);
 		new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast|RxProm;
-	} else	if ((dev->mc_list)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else	if ((dev->mc.list)  ||  (dev->flags & IFF_ALLMULTI)) {
 		new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast;
 	} else
 		new_mode = SetRxFilter | RxStation | RxBroadcast;
--- wireless-testing.orig/drivers/net/7990.c	2009-01-13 15:05:05.000000000 +0100
+++ wireless-testing/drivers/net/7990.c	2009-06-13 12:29:33.000000000 +0200
@@ -595,7 +595,7 @@  static void lance_load_multicast (struct
         struct lance_private *lp = netdev_priv(dev);
         volatile struct lance_init_block *ib = lp->init_block;
         volatile u16 *mcast_table = (u16 *)&ib->filter;
-        struct dev_mc_list *dmi=dev->mc_list;
+        struct dev_mc_list *dmi=dev->mc.list;
         char *addrs;
         int i;
         u32 crc;
@@ -611,7 +611,7 @@  static void lance_load_multicast (struct
         ib->filter [1] = 0;
 
         /* Add addresses */
-        for (i = 0; i < dev->mc_count; i++){
+        for (i = 0; i < dev->mc.count; i++){
                 addrs = dmi->dmi_addr;
                 dmi   = dmi->next;
 
--- wireless-testing.orig/drivers/net/8139cp.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/8139cp.c	2009-06-13 12:29:33.000000000 +0200
@@ -912,7 +912,7 @@  static void __cp_set_rx_mode (struct net
 		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 		    AcceptAllPhys;
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
@@ -921,7 +921,7 @@  static void __cp_set_rx_mode (struct net
 		struct dev_mc_list *mclist;
 		rx_mode = AcceptBroadcast | AcceptMyPhys;
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
 
--- wireless-testing.orig/drivers/net/8139too.c	2009-04-30 23:07:17.000000000 +0200
+++ wireless-testing/drivers/net/8139too.c	2009-06-13 12:29:33.000000000 +0200
@@ -2536,7 +2536,7 @@  static void __set_rx_mode (struct net_de
 		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 		    AcceptAllPhys;
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
@@ -2545,7 +2545,7 @@  static void __set_rx_mode (struct net_de
 		struct dev_mc_list *mclist;
 		rx_mode = AcceptBroadcast | AcceptMyPhys;
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
 
--- wireless-testing.orig/drivers/net/82596.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/82596.c	2009-06-13 12:29:33.000000000 +0200
@@ -1506,7 +1506,7 @@  static void set_multicast_list(struct ne
 	int config = 0, cnt;
 
 	DEB(DEB_MULTI,printk(KERN_DEBUG "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
-		dev->name, dev->mc_count,
+		dev->name, dev->mc.count,
 		dev->flags & IFF_PROMISC  ? "ON" : "OFF",
 		dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
 
@@ -1534,7 +1534,7 @@  static void set_multicast_list(struct ne
 		i596_add_cmd(dev, &lp->cf_cmd.cmd);
 	}
 
-	cnt = dev->mc_count;
+	cnt = dev->mc.count;
 	if (cnt > MAX_MC_CNT)
 	{
 		cnt = MAX_MC_CNT;
@@ -1542,7 +1542,7 @@  static void set_multicast_list(struct ne
 			dev->name, cnt);
 	}
 
-	if (dev->mc_count > 0) {
+	if (dev->mc.count > 0) {
 		struct dev_mc_list *dmi;
 		unsigned char *cp;
 		struct mc_cmd *cmd;
@@ -1551,9 +1551,9 @@  static void set_multicast_list(struct ne
 			return;
 		cmd = &lp->mc_cmd;
 		cmd->cmd.command = CmdMulticastList;
-		cmd->mc_cnt = dev->mc_count * 6;
+		cmd->mc_cnt = dev->mc.count * 6;
 		cp = cmd->mc_addrs;
-		for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
+		for (dmi = dev->mc.list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
 			memcpy(cp, dmi->dmi_addr, 6);
 			if (i596_debug > 1)
 				DEB(DEB_MULTI,printk(KERN_INFO "%s: Adding address %pM\n",
--- wireless-testing.orig/drivers/net/a2065.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/a2065.c	2009-06-13 12:29:33.000000000 +0200
@@ -610,7 +610,7 @@  static void lance_load_multicast (struct
 	struct lance_private *lp = netdev_priv(dev);
 	volatile struct lance_init_block *ib = lp->init_block;
 	volatile u16 *mcast_table = (u16 *)&ib->filter;
-	struct dev_mc_list *dmi=dev->mc_list;
+	struct dev_mc_list *dmi=dev->mc.list;
 	char *addrs;
 	int i;
 	u32 crc;
@@ -626,7 +626,7 @@  static void lance_load_multicast (struct
 	ib->filter [1] = 0;
 
 	/* Add addresses */
-	for (i = 0; i < dev->mc_count; i++){
+	for (i = 0; i < dev->mc.count; i++){
 		addrs = dmi->dmi_addr;
 		dmi   = dmi->next;
 
--- wireless-testing.orig/drivers/net/acenic.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/acenic.c	2009-06-13 12:29:33.000000000 +0200
@@ -2844,7 +2844,7 @@  static void ace_set_multicast_list(struc
 	 * set the entire multicast list at a time and keeping track of
 	 * it here is going to be messy.
 	 */
-	if ((dev->mc_count) && !(ap->mcast_all)) {
+	if ((dev->mc.count) && !(ap->mcast_all)) {
 		cmd.evt = C_SET_MULTICAST_MODE;
 		cmd.code = C_C_MCAST_ENABLE;
 		cmd.idx = 0;
--- wireless-testing.orig/drivers/net/amd8111e.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/amd8111e.c	2009-06-13 12:29:33.000000000 +0200
@@ -1387,15 +1387,15 @@  static void amd8111e_set_multicast_list(
 	}
 	else
 		writel( PROM, lp->mmio + CMD2);
-	if(dev->flags & IFF_ALLMULTI || dev->mc_count > MAX_FILTER_SIZE){
+	if(dev->flags & IFF_ALLMULTI || dev->mc.count > MAX_FILTER_SIZE){
 		/* get all multicast packet */
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-		lp->mc_list = dev->mc_list;
+		lp->mc_list = dev->mc.list;
 		lp->options |= OPTION_MULTICAST_ENABLE;
 		amd8111e_writeq(*(u64*)mc_filter,lp->mmio + LADRF);
 		return;
 	}
-	if( dev->mc_count == 0 ){
+	if( dev->mc.count == 0 ){
 		/* get only own packets */
 		mc_filter[1] = mc_filter[0] = 0;
 		lp->mc_list = NULL;
@@ -1407,9 +1407,9 @@  static void amd8111e_set_multicast_list(
 	}
 	/* load all the multicast addresses in the logic filter */
 	lp->options |= OPTION_MULTICAST_ENABLE;
-	lp->mc_list = dev->mc_list;
+	lp->mc_list = dev->mc.list;
 	mc_filter[1] = mc_filter[0] = 0;
-	for (i = 0, mc_ptr = dev->mc_list; mc_ptr && i < dev->mc_count;
+	for (i = 0, mc_ptr = dev->mc.list; mc_ptr && i < dev->mc.count;
 		     i++, mc_ptr = mc_ptr->next) {
 		bit_num = (ether_crc_le(ETH_ALEN, mc_ptr->dmi_addr) >> 26) & 0x3f;
 		mc_filter[bit_num >> 5] |= 1 << (bit_num & 31);
--- wireless-testing.orig/drivers/net/appletalk/ltpc.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/appletalk/ltpc.c	2009-06-13 12:29:33.000000000 +0200
@@ -1125,7 +1125,7 @@  struct net_device * __init ltpc_probe(vo
 		printk(KERN_INFO "Apple/Farallon LocalTalk-PC card at %03x, DMA%d.  Using polled mode.\n",io,dma);
 
 	dev->netdev_ops = &ltpc_netdev;
-	dev->mc_list = NULL;
+	dev->mc.list = NULL;
 	dev->base_addr = io;
 	dev->irq = irq;
 	dev->dma = dma;
--- wireless-testing.orig/drivers/net/ariadne.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/ariadne.c	2009-06-13 12:29:33.000000000 +0200
@@ -819,7 +819,7 @@  static void set_multicast_list(struct ne
 	lance->RDP = PROM;		/* Set promiscuous mode */
     } else {
 	short multicast_table[4];
-	int num_addrs = dev->mc_count;
+	int num_addrs = dev->mc.count;
 	int i;
 	/* We don't use the multicast table, but rely on upper-layer filtering. */
 	memset(multicast_table, (num_addrs == 0) ? 0 : -1,
--- wireless-testing.orig/drivers/net/arm/am79c961a.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/arm/am79c961a.c	2009-06-13 12:29:33.000000000 +0200
@@ -387,7 +387,7 @@  static void am79c961_setmulticastlist (s
 
 		memset(multi_hash, 0x00, sizeof(multi_hash));
 
-		for (dmi = dev->mc_list; dmi; dmi = dmi->next)
+		for (dmi = dev->mc.list; dmi; dmi = dmi->next)
 			am79c961_mc_hash(dmi, multi_hash);
 	}
 
--- wireless-testing.orig/drivers/net/arm/at91_ether.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/arm/at91_ether.c	2009-06-13 12:29:34.000000000 +0200
@@ -562,8 +562,8 @@  static void at91ether_sethashtable(struc
 
 	mc_filter[0] = mc_filter[1] = 0;
 
-	curr = dev->mc_list;
-	for (i = 0; i < dev->mc_count; i++, curr = curr->next) {
+	curr = dev->mc.list;
+	for (i = 0; i < dev->mc.count; i++, curr = curr->next) {
 		if (!curr) break;	/* unexpected end of list */
 
 		bitnr = hash_get_index(curr->dmi_addr);
@@ -592,7 +592,7 @@  static void at91ether_set_multicast_list
 		at91_emac_write(AT91_EMAC_HSH, -1);
 		at91_emac_write(AT91_EMAC_HSL, -1);
 		cfg |= AT91_EMAC_MTI;
-	} else if (dev->mc_count > 0) {			/* Enable specific multicasts */
+	} else if (dev->mc.count > 0) {			/* Enable specific multicasts */
 		at91ether_sethashtable(dev);
 		cfg |= AT91_EMAC_MTI;
 	} else if (dev->flags & (~IFF_ALLMULTI)) {	/* Disable all multicast mode */
--- wireless-testing.orig/drivers/net/arm/ether3.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/arm/ether3.c	2009-06-13 12:29:34.000000000 +0200
@@ -463,7 +463,7 @@  static void ether3_setmulticastlist(stru
 	if (dev->flags & IFF_PROMISC) {
 		/* promiscuous mode */
 		priv(dev)->regs.config1 |= CFG1_RECVPROMISC;
-	} else if (dev->flags & IFF_ALLMULTI || dev->mc_count) {
+	} else if (dev->flags & IFF_ALLMULTI || dev->mc.count) {
 		priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI;
 	} else
 		priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD;
--- wireless-testing.orig/drivers/net/arm/ixp4xx_eth.c	2009-05-18 12:02:00.000000000 +0200
+++ wireless-testing/drivers/net/arm/ixp4xx_eth.c	2009-06-13 12:29:34.000000000 +0200
@@ -733,9 +733,9 @@  static int eth_xmit(struct sk_buff *skb,
 static void eth_set_mcast_list(struct net_device *dev)
 {
 	struct port *port = netdev_priv(dev);
-	struct dev_mc_list *mclist = dev->mc_list;
+	struct dev_mc_list *mclist = dev->mc.list;
 	u8 diffs[ETH_ALEN], *addr;
-	int cnt = dev->mc_count, i;
+	int cnt = dev->mc.count, i;
 
 	if ((dev->flags & IFF_PROMISC) || !mclist || !cnt) {
 		__raw_writel(DEFAULT_RX_CNTRL0 & ~RX_CNTRL0_ADDR_FLTR_EN,
--- wireless-testing.orig/drivers/net/arm/ks8695net.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/arm/ks8695net.c	2009-06-13 12:29:34.000000000 +0200
@@ -1127,7 +1127,7 @@  ks8695_set_multicast(struct net_device *
 	if (ndev->flags & IFF_ALLMULTI) {
 		/* enable all multicast mode */
 		ctrl |= DRXC_RM;
-	} else if (ndev->mc_count > KS8695_NR_ADDRESSES) {
+	} else if (ndev->mc.count > KS8695_NR_ADDRESSES) {
 		/* more specific multicast addresses than can be
 		 * handled in hardware
 		 */
@@ -1135,8 +1135,8 @@  ks8695_set_multicast(struct net_device *
 	} else {
 		/* enable specific multicasts */
 		ctrl &= ~DRXC_RM;
-		ks8695_init_partial_multicast(ksp, ndev->mc_list,
-					      ndev->mc_count);
+		ks8695_init_partial_multicast(ksp, ndev->mc.list,
+					      ndev->mc.count);
 	}
 
 	ks8695_writereg(ksp, KS8695_DRXC, ctrl);
--- wireless-testing.orig/drivers/net/at1700.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/at1700.c	2009-06-13 12:29:34.000000000 +0200
@@ -837,12 +837,12 @@  set_rx_mode(struct net_device *dev)
 	if (dev->flags & IFF_PROMISC) {
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		outb(3, ioaddr + RX_MODE);	/* Enable promiscuous mode */
-	} else if (dev->mc_count > MC_FILTERBREAK
+	} else if (dev->mc.count > MC_FILTERBREAK
 			   ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		outb(2, ioaddr + RX_MODE);	/* Use normal mode. */
-	} else if (dev->mc_count == 0) {
+	} else if (dev->mc.count == 0) {
 		memset(mc_filter, 0x00, sizeof(mc_filter));
 		outb(1, ioaddr + RX_MODE);	/* Ignore almost all multicasts. */
 	} else {
@@ -850,7 +850,7 @@  set_rx_mode(struct net_device *dev)
 		int i;
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			unsigned int bit =
 				ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 26;
--- wireless-testing.orig/drivers/net/atarilance.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/atarilance.c	2009-06-13 12:29:34.000000000 +0200
@@ -1097,7 +1097,7 @@  static void set_multicast_list( struct n
 		REGA( CSR15 ) = 0x8000; /* Set promiscuous mode */
 	} else {
 		short multicast_table[4];
-		int num_addrs = dev->mc_count;
+		int num_addrs = dev->mc.count;
 		int i;
 		/* We don't use the multicast table, but rely on upper-layer
 		 * filtering. */
--- wireless-testing.orig/drivers/net/atl1c/atl1c_main.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/atl1c/atl1c_main.c	2009-06-13 12:29:34.000000000 +0200
@@ -355,7 +355,7 @@  static void atl1c_set_multi(struct net_d
 	AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
 
 	/* comoute mc addresses' hash value ,and put it into hash table */
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 		hash_value = atl1c_hash_mc_addr(hw, mc_ptr->dmi_addr);
 		atl1c_hash_set(hw, hash_value);
 	}
--- wireless-testing.orig/drivers/net/atl1e/atl1e_main.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/atl1e/atl1e_main.c	2009-06-13 12:29:35.000000000 +0200
@@ -311,7 +311,7 @@  static void atl1e_set_multi(struct net_d
 	AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
 
 	/* comoute mc addresses' hash value ,and put it into hash table */
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 		hash_value = atl1e_hash_mc_addr(hw, mc_ptr->dmi_addr);
 		atl1e_hash_set(hw, hash_value);
 	}
--- wireless-testing.orig/drivers/net/atlx/atl2.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/atlx/atl2.c	2009-06-13 12:29:35.000000000 +0200
@@ -157,7 +157,7 @@  static void atl2_set_multi(struct net_de
 	ATL2_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
 
 	/* comoute mc addresses' hash value ,and put it into hash table */
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 		hash_value = atl2_hash_mc_addr(hw, mc_ptr->dmi_addr);
 		atl2_hash_set(hw, hash_value);
 	}
--- wireless-testing.orig/drivers/net/atlx/atlx.c	2009-01-13 15:05:05.000000000 +0100
+++ wireless-testing/drivers/net/atlx/atlx.c	2009-06-13 12:29:35.000000000 +0200
@@ -144,7 +144,7 @@  static void atlx_set_multi(struct net_de
 	iowrite32(0, (hw->hw_addr + REG_RX_HASH_TABLE) + (1 << 2));
 
 	/* compute mc addresses' hash value ,and put it into hash table */
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 		hash_value = atlx_hash_mc_addr(hw, mc_ptr->dmi_addr);
 		atlx_hash_set(hw, hash_value);
 	}
--- wireless-testing.orig/drivers/net/atp.c	2009-01-13 15:05:05.000000000 +0100
+++ wireless-testing/drivers/net/atp.c	2009-06-13 12:29:35.000000000 +0200
@@ -859,7 +859,7 @@  static void set_rx_mode_8002(struct net_
 	struct net_local *lp = netdev_priv(dev);
 	long ioaddr = dev->base_addr;
 
-	if (dev->mc_count > 0 || (dev->flags & (IFF_ALLMULTI|IFF_PROMISC)))
+	if (dev->mc.count > 0 || (dev->flags & (IFF_ALLMULTI|IFF_PROMISC)))
 		lp->addr_mode = CMR2h_PROMISC;
 	else
 		lp->addr_mode = CMR2h_Normal;
@@ -875,7 +875,7 @@  static void set_rx_mode_8012(struct net_
 
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		new_mode = CMR2h_PROMISC;
-	} else if ((dev->mc_count > 1000)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.count > 1000)  ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		new_mode = CMR2h_Normal;
@@ -883,7 +883,7 @@  static void set_rx_mode_8012(struct net_
 		struct dev_mc_list *mclist;
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next)
 		{
 			int filterbit = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f;
--- wireless-testing.orig/drivers/net/au1000_eth.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/au1000_eth.c	2009-06-13 12:29:35.000000000 +0200
@@ -1014,7 +1014,7 @@  static void au1000_multicast_list(struct
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		aup->mac->control |= MAC_PROMISCUOUS;
 	} else if ((dev->flags & IFF_ALLMULTI)  ||
-			   dev->mc_count > MULTICAST_FILTER_LIMIT) {
+			   dev->mc.count > MULTICAST_FILTER_LIMIT) {
 		aup->mac->control |= MAC_PASS_ALL_MULTI;
 		aup->mac->control &= ~MAC_PROMISCUOUS;
 		printk(KERN_INFO "%s: Pass all multicast\n", dev->name);
@@ -1024,7 +1024,7 @@  static void au1000_multicast_list(struct
 		u32 mc_filter[2];	/* Multicast hash filter */
 
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			set_bit(ether_crc(ETH_ALEN, mclist->dmi_addr)>>26,
 					(long *)mc_filter);
--- wireless-testing.orig/drivers/net/b44.c	2009-04-09 10:00:10.000000000 +0200
+++ wireless-testing/drivers/net/b44.c	2009-06-13 12:29:35.000000000 +0200
@@ -1691,8 +1691,8 @@  static int __b44_load_mcast(struct b44 *
 	struct dev_mc_list *mclist;
 	int i, num_ents;
 
-	num_ents = min_t(int, dev->mc_count, B44_MCAST_TABLE_SIZE);
-	mclist = dev->mc_list;
+	num_ents = min_t(int, dev->mc.count, B44_MCAST_TABLE_SIZE);
+	mclist = dev->mc.list;
 	for (i = 0; mclist && i < num_ents; i++, mclist = mclist->next) {
 		__b44_cam_write(bp, mclist->dmi_addr, i + 1);
 	}
@@ -1716,7 +1716,7 @@  static void __b44_set_rx_mode(struct net
 		__b44_set_mac_addr(bp);
 
 		if ((dev->flags & IFF_ALLMULTI) ||
-		    (dev->mc_count > B44_MCAST_TABLE_SIZE))
+		    (dev->mc.count > B44_MCAST_TABLE_SIZE))
 			val |= RXCONFIG_ALLMULTI;
 		else
 			i = __b44_load_mcast(bp, dev);
--- wireless-testing.orig/drivers/net/benet/be_main.c	2009-05-30 01:38:26.000000000 +0200
+++ wireless-testing/drivers/net/benet/be_main.c	2009-06-13 12:29:35.000000000 +0200
@@ -576,7 +576,7 @@  static void be_set_multicast_filter(stru
 		return;
 	}
 
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 		memcpy(&mac_addr[i][0], mc_ptr->dmi_addr, ETH_ALEN);
 		if (++i >= 32) {
 			be_cmd_mcast_mac_set(&adapter->ctrl,
--- wireless-testing.orig/drivers/net/bfin_mac.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/bfin_mac.c	2009-06-13 12:29:35.000000000 +0200
@@ -863,14 +863,14 @@  static void bfin_mac_timeout(struct net_
 static void bfin_mac_multicast_hash(struct net_device *dev)
 {
 	u32 emac_hashhi, emac_hashlo;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	u32 crc;
 
 	emac_hashhi = emac_hashlo = 0;
 
-	for (i = 0; i < dev->mc_count; i++) {
+	for (i = 0; i < dev->mc.count; i++) {
 		addrs = dmi->dmi_addr;
 		dmi = dmi->next;
 
@@ -913,7 +913,7 @@  static void bfin_mac_set_multicast_list(
 		sysctl = bfin_read_EMAC_OPMODE();
 		sysctl |= PAM;
 		bfin_write_EMAC_OPMODE(sysctl);
-	} else if (dev->mc_count) {
+	} else if (dev->mc.count) {
 		/* set up multicast hash table */
 		sysctl = bfin_read_EMAC_OPMODE();
 		sysctl |= HM;
--- wireless-testing.orig/drivers/net/bmac.c	2009-04-09 10:00:11.000000000 +0200
+++ wireless-testing/drivers/net/bmac.c	2009-06-13 12:29:35.000000000 +0200
@@ -972,7 +972,7 @@  static void bmac_set_multicast(struct ne
 {
 	struct dev_mc_list *dmi;
 	struct bmac_data *bp = netdev_priv(dev);
-	int num_addrs = dev->mc_count;
+	int num_addrs = dev->mc.count;
 	unsigned short rx_cfg;
 	int i;
 
@@ -981,7 +981,7 @@  static void bmac_set_multicast(struct ne
 
 	XXDEBUG(("bmac: enter bmac_set_multicast, n_addrs=%d\n", num_addrs));
 
-	if((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+	if((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 		for (i=0; i<4; i++) bp->hash_table_mask[i] = 0xffff;
 		bmac_update_hash_table_mask(dev, bp);
 		rx_cfg = bmac_rx_on(dev, 1, 0);
@@ -999,7 +999,7 @@  static void bmac_set_multicast(struct ne
 			rx_cfg = bmac_rx_on(dev, 0, 0);
 			XXDEBUG(("bmac: multi disabled, rx_cfg=%#08x\n", rx_cfg));
 		} else {
-			for (dmi=dev->mc_list; dmi!=NULL; dmi=dmi->next)
+			for (dmi=dev->mc.list; dmi!=NULL; dmi=dmi->next)
 				bmac_addhash(bp, dmi->dmi_addr);
 			bmac_update_hash_table_mask(dev, bp);
 			rx_cfg = bmac_rx_on(dev, 1, 0);
@@ -1014,13 +1014,13 @@  static void bmac_set_multicast(struct ne
 
 static void bmac_set_multicast(struct net_device *dev)
 {
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	unsigned short rx_cfg;
 	u32 crc;
 
-	if((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+	if((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 		bmwrite(dev, BHASH0, 0xffff);
 		bmwrite(dev, BHASH1, 0xffff);
 		bmwrite(dev, BHASH2, 0xffff);
@@ -1038,7 +1038,7 @@  static void bmac_set_multicast(struct ne
 
 		for(i = 0; i < 4; i++) hash_table[i] = 0;
 
-		for(i = 0; i < dev->mc_count; i++) {
+		for(i = 0; i < dev->mc.count; i++) {
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/bnx2.c	2009-05-18 12:02:00.000000000 +0200
+++ wireless-testing/drivers/net/bnx2.c	2009-06-13 12:29:35.000000000 +0200
@@ -3349,7 +3349,7 @@  bnx2_set_rx_mode(struct net_device *dev)
 
 		memset(mc_filter, 0, 4 * NUM_MC_HASH_REGISTERS);
 
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 
 			crc = ether_crc_le(ETH_ALEN, mclist->dmi_addr);
@@ -3368,15 +3368,15 @@  bnx2_set_rx_mode(struct net_device *dev)
 	}
 
 	uc_ptr = NULL;
-	if (dev->uc_count > BNX2_MAX_UNICAST_ADDRESSES) {
+	if (dev->uc.count > BNX2_MAX_UNICAST_ADDRESSES) {
 		rx_mode |= BNX2_EMAC_RX_MODE_PROMISCUOUS;
 		sort_mode |= BNX2_RPM_SORT_USER0_PROM_EN |
 			     BNX2_RPM_SORT_USER0_PROM_VLAN;
 	} else if (!(dev->flags & IFF_PROMISC)) {
-		uc_ptr = dev->uc_list;
+		uc_ptr = dev->uc.list;
 
 		/* Add all entries into to the match filter list */
-		for (i = 0; i < dev->uc_count; i++) {
+		for (i = 0; i < dev->uc.count; i++) {
 			bnx2_set_mac_addr(bp, uc_ptr->da_addr,
 					  i + BNX2_START_UNICAST_ADDRESS_INDEX);
 			sort_mode |= (1 <<
--- wireless-testing.orig/drivers/net/bnx2x_main.c	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/bnx2x_main.c	2009-06-13 12:29:35.000000000 +0200
@@ -10655,7 +10655,7 @@  static void bnx2x_set_rx_mode(struct net
 		rx_mode = BNX2X_RX_MODE_PROMISC;
 
 	else if ((dev->flags & IFF_ALLMULTI) ||
-		 ((dev->mc_count > BNX2X_MAX_MULTICAST) && CHIP_IS_E1(bp)))
+		 ((dev->mc.count > BNX2X_MAX_MULTICAST) && CHIP_IS_E1(bp)))
 		rx_mode = BNX2X_RX_MODE_ALLMULTI;
 
 	else { /* some multicasts */
@@ -10665,8 +10665,8 @@  static void bnx2x_set_rx_mode(struct net
 			struct mac_configuration_cmd *config =
 						bnx2x_sp(bp, mcast_config);
 
-			for (i = 0, mclist = dev->mc_list;
-			     mclist && (i < dev->mc_count);
+			for (i = 0, mclist = dev->mc.list;
+			     mclist && (i < dev->mc.count);
 			     i++, mclist = mclist->next) {
 
 				config->config_table[i].
@@ -10733,8 +10733,8 @@  static void bnx2x_set_rx_mode(struct net
 
 			memset(mc_filter, 0, 4 * MC_HASH_SIZE);
 
-			for (i = 0, mclist = dev->mc_list;
-			     mclist && (i < dev->mc_count);
+			for (i = 0, mclist = dev->mc.list;
+			     mclist && (i < dev->mc.count);
 			     i++, mclist = mclist->next) {
 
 				DP(NETIF_MSG_IFUP, "Adding mcast MAC: %pM\n",
--- wireless-testing.orig/drivers/net/bonding/bond_main.c	2009-05-18 12:02:00.000000000 +0200
+++ wireless-testing/drivers/net/bonding/bond_main.c	2009-06-13 12:29:35.000000000 +0200
@@ -872,7 +872,7 @@  static void bond_resend_igmp_join_reques
 	rcu_read_lock();
 	in_dev = __in_dev_get_rcu(bond->dev);
 	if (in_dev) {
-		for (im = in_dev->mc_list; im; im = im->next) {
+		for (im = in_dev->mc.list; im; im = im->next) {
 			ip_mc_rejoin_group(im);
 		}
 	}
@@ -931,7 +931,7 @@  static void bond_mc_list_flush(struct ne
 	struct bonding *bond = netdev_priv(bond_dev);
 	struct dev_mc_list *dmi;
 
-	for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {
+	for (dmi = bond_dev->mc.list; dmi; dmi = dmi->next) {
 		dev_mc_delete(slave_dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
 	}
 
@@ -970,7 +970,7 @@  static void bond_mc_swap(struct bonding 
 			dev_set_allmulti(old_active->dev, -1);
 		}
 
-		for (dmi = bond->dev->mc_list; dmi; dmi = dmi->next) {
+		for (dmi = bond->dev->mc.list; dmi; dmi = dmi->next) {
 			dev_mc_delete(old_active->dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
 		}
 	}
@@ -985,7 +985,7 @@  static void bond_mc_swap(struct bonding 
 			dev_set_allmulti(new_active->dev, 1);
 		}
 
-		for (dmi = bond->dev->mc_list; dmi; dmi = dmi->next) {
+		for (dmi = bond->dev->mc.list; dmi; dmi = dmi->next) {
 			dev_mc_add(new_active->dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
 		}
 		bond_resend_igmp_join_requests(bond);
@@ -1578,7 +1578,7 @@  int bond_enslave(struct net_device *bond
 
 		netif_addr_lock_bh(bond_dev);
 		/* upload master's mc_list to new slave */
-		for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {
+		for (dmi = bond_dev->mc.list; dmi; dmi = dmi->next) {
 			dev_mc_add (slave_dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
 		}
 		netif_addr_unlock_bh(bond_dev);
@@ -4067,7 +4067,7 @@  static void bond_set_multicast_list(stru
 	bond->flags = bond_dev->flags;
 
 	/* looking for addresses to add to slaves' mc list */
-	for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {
+	for (dmi = bond_dev->mc.list; dmi; dmi = dmi->next) {
 		if (!bond_mc_list_find_dmi(dmi, bond->mc_list)) {
 			bond_mc_add(bond, dmi->dmi_addr, dmi->dmi_addrlen);
 		}
@@ -4075,14 +4075,14 @@  static void bond_set_multicast_list(stru
 
 	/* looking for addresses to delete from slaves' list */
 	for (dmi = bond->mc_list; dmi; dmi = dmi->next) {
-		if (!bond_mc_list_find_dmi(dmi, bond_dev->mc_list)) {
+		if (!bond_mc_list_find_dmi(dmi, bond_dev->mc.list)) {
 			bond_mc_delete(bond, dmi->dmi_addr, dmi->dmi_addrlen);
 		}
 	}
 
 	/* save master's multicast list */
 	bond_mc_list_destroy(bond);
-	bond_mc_list_copy(bond_dev->mc_list, bond, GFP_ATOMIC);
+	bond_mc_list_copy(bond_dev->mc.list, bond, GFP_ATOMIC);
 
 	read_unlock(&bond->lock);
 }
--- wireless-testing.orig/drivers/net/cassini.c	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/cassini.c	2009-06-13 12:29:36.000000000 +0200
@@ -3016,7 +3016,7 @@  static u32 cas_setup_multicast(struct ca
 	} else {
 		u16 hash_table[16];
 		u32 crc;
-		struct dev_mc_list *dmi = cp->dev->mc_list;
+		struct dev_mc_list *dmi = cp->dev->mc.list;
 		int i;
 
 		/* use the alternate mac address registers for the
--- wireless-testing.orig/drivers/net/chelsio/common.h	2008-12-19 00:28:05.000000000 +0100
+++ wireless-testing/drivers/net/chelsio/common.h	2009-06-13 12:29:36.000000000 +0200
@@ -97,13 +97,13 @@  struct t1_rx_mode {
 
 #define t1_rx_mode_promisc(rm)	(rm->dev->flags & IFF_PROMISC)
 #define t1_rx_mode_allmulti(rm)	(rm->dev->flags & IFF_ALLMULTI)
-#define t1_rx_mode_mc_cnt(rm)	(rm->dev->mc_count)
+#define t1_rx_mode_mc_cnt(rm)	(rm->dev->mc.count)
 
 static inline u8 *t1_get_next_mcaddr(struct t1_rx_mode *rm)
 {
 	u8 *addr = NULL;
 
-	if (rm->idx++ < rm->dev->mc_count) {
+	if (rm->idx++ < rm->dev->mc.count) {
 		addr = rm->list->dmi_addr;
 		rm->list = rm->list->next;
 	}
--- wireless-testing.orig/drivers/net/chelsio/cxgb2.c	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/chelsio/cxgb2.c	2009-06-13 12:29:36.000000000 +0200
@@ -126,7 +126,7 @@  static void t1_set_rxmode(struct net_dev
 
 	rm.dev = dev;
 	rm.idx = 0;
-	rm.list = dev->mc_list;
+	rm.list = dev->mc.list;
 	mac->ops->set_rx_mode(mac, &rm);
 }
 
--- wireless-testing.orig/drivers/net/cpmac.c	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/cpmac.c	2009-06-13 12:29:36.000000000 +0200
@@ -340,7 +340,7 @@  static void cpmac_set_multicast_list(str
 			 * cpmac uses some strange mac address hashing
 			 * (not crc32)
 			 */
-			for (i = 0, iter = dev->mc_list; i < dev->mc_count;
+			for (i = 0, iter = dev->mc.list; i < dev->mc.count;
 			     i++, iter = iter->next) {
 				bit = 0;
 				tmp = iter->dmi_addr[0];
--- wireless-testing.orig/drivers/net/cris/eth_v10.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/cris/eth_v10.c	2009-06-13 12:29:36.000000000 +0200
@@ -1550,7 +1550,7 @@  static void
 set_multicast_list(struct net_device *dev)
 {
 	struct net_local *lp = netdev_priv(dev);
-	int num_addr = dev->mc_count;
+	int num_addr = dev->mc.count;
 	unsigned long int lo_bits;
 	unsigned long int hi_bits;
 
@@ -1582,7 +1582,7 @@  set_multicast_list(struct net_device *de
 	} else {
 		/* MC mode, receive normal and MC packets */
 		char hash_ix;
-		struct dev_mc_list *dmi = dev->mc_list;
+		struct dev_mc_list *dmi = dev->mc.list;
 		int i;
 		char *baddr;
 
--- wireless-testing.orig/drivers/net/cs89x0.c	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/cs89x0.c	2009-06-13 12:29:36.000000000 +0200
@@ -1788,7 +1788,7 @@  static void set_multicast_list(struct ne
 	{
 		lp->rx_mode = RX_ALL_ACCEPT;
 	}
-	else if((dev->flags&IFF_ALLMULTI)||dev->mc_list)
+	else if((dev->flags&IFF_ALLMULTI)||dev->mc.list)
 	{
 		/* The multicast-accept list is initialized to accept-all, and we
 		   rely on higher-level filtering for now. */
--- wireless-testing.orig/drivers/net/cxgb3/common.h	2009-04-09 10:00:14.000000000 +0200
+++ wireless-testing/drivers/net/cxgb3/common.h	2009-06-13 12:29:36.000000000 +0200
@@ -85,7 +85,7 @@  static inline u8 *t3_get_next_mcaddr(str
 {
 	u8 *addr = NULL;
 
-	if (rm->mclist && rm->idx < rm->dev->mc_count) {
+	if (rm->mclist && rm->idx < rm->dev->mc.count) {
 		addr = rm->mclist->dmi_addr;
 		rm->mclist = rm->mclist->next;
 		rm->idx++;
--- wireless-testing.orig/drivers/net/cxgb3/cxgb3_main.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/cxgb3/cxgb3_main.c	2009-06-13 12:29:36.000000000 +0200
@@ -297,7 +297,7 @@  static void cxgb_set_rxmode(struct net_d
 	struct t3_rx_mode rm;
 	struct port_info *pi = netdev_priv(dev);
 
-	init_rx_mode(&rm, dev, dev->mc_list);
+	init_rx_mode(&rm, dev, dev->mc.list);
 	t3_mac_set_rx_mode(&pi->mac, &rm);
 }
 
@@ -313,7 +313,7 @@  static void link_start(struct net_device
 	struct port_info *pi = netdev_priv(dev);
 	struct cmac *mac = &pi->mac;
 
-	init_rx_mode(&rm, dev, dev->mc_list);
+	init_rx_mode(&rm, dev, dev->mc.list);
 	t3_mac_reset(mac);
 	t3_mac_set_mtu(mac, dev->mtu);
 	t3_mac_set_address(mac, 0, dev->dev_addr);
--- wireless-testing.orig/drivers/net/de620.c	2009-01-13 15:05:05.000000000 +0100
+++ wireless-testing/drivers/net/de620.c	2009-06-13 12:29:36.000000000 +0200
@@ -486,7 +486,7 @@  static int de620_close(struct net_device
 
 static void de620_set_multicast_list(struct net_device *dev)
 {
-	if (dev->mc_count || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
+	if (dev->mc.count || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
 	{ /* Enable promiscuous mode */
 		de620_set_register(dev, W_TCR, (TCR_DEF & ~RXPBM) | RXALL);
 	}
--- wireless-testing.orig/drivers/net/declance.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/declance.c	2009-06-13 12:29:36.000000000 +0200
@@ -935,7 +935,7 @@  static void lance_load_multicast(struct 
 {
 	struct lance_private *lp = netdev_priv(dev);
 	volatile u16 *ib = (volatile u16 *)dev->mem_start;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	u32 crc;
@@ -955,7 +955,7 @@  static void lance_load_multicast(struct 
 	*lib_ptr(ib, filter[3], lp->type) = 0;
 
 	/* Add addresses */
-	for (i = 0; i < dev->mc_count; i++) {
+	for (i = 0; i < dev->mc.count; i++) {
 		addrs = dmi->dmi_addr;
 		dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/defxx.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/defxx.c	2009-06-13 12:29:36.000000000 +0200
@@ -2229,7 +2229,7 @@  static void dfx_ctl_set_multicast_list(s
 		 *		 perfect filtering will be used.
 		 */
 
-		if (dev->mc_count > (PI_CMD_ADDR_FILTER_K_SIZE - bp->uc_count))
+		if (dev->mc.count > (PI_CMD_ADDR_FILTER_K_SIZE - bp->uc_count))
 			{
 			bp->group_prom	= PI_FSTATE_K_PASS;		/* Enable LLC group prom mode */
 			bp->mc_count	= 0;					/* Don't add mc addrs to CAM */
@@ -2237,12 +2237,12 @@  static void dfx_ctl_set_multicast_list(s
 		else
 			{
 			bp->group_prom	= PI_FSTATE_K_BLOCK;	/* Disable LLC group prom mode */
-			bp->mc_count	= dev->mc_count;		/* Add mc addrs to CAM */
+			bp->mc_count	= dev->mc.count;		/* Add mc addrs to CAM */
 			}
 
 		/* Copy addresses to multicast address table, then update adapter CAM */
 
-		dmi = dev->mc_list;				/* point to first multicast addr */
+		dmi = dev->mc.list;				/* point to first multicast addr */
 		for (i=0; i < bp->mc_count; i++)
 			{
 			memcpy(&bp->mc_table[i*FDDI_K_ALEN], dmi->dmi_addr, FDDI_K_ALEN);
--- wireless-testing.orig/drivers/net/depca.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/depca.c	2009-06-13 12:29:36.000000000 +0200
@@ -1269,7 +1269,7 @@  static void set_multicast_list(struct ne
 static void SetMulticastFilter(struct net_device *dev)
 {
 	struct depca_private *lp = netdev_priv(dev);
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i, j, bit, byte;
 	u16 hashcode;
@@ -1284,7 +1284,7 @@  static void SetMulticastFilter(struct ne
 			lp->init_block.mcast_table[i] = 0;
 		}
 		/* Add multicast addresses */
-		for (i = 0; i < dev->mc_count; i++) {	/* for each address in the list */
+		for (i = 0; i < dev->mc.count; i++) {	/* for each address in the list */
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 			if ((*addrs & 0x01) == 1) {	/* multicast address? */
--- wireless-testing.orig/drivers/net/dl2k.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/dl2k.c	2009-06-13 12:29:37.000000000 +0200
@@ -1133,17 +1133,17 @@  set_multicast (struct net_device *dev)
 		/* Receive all frames promiscuously. */
 		rx_mode = ReceiveAllFrames;
 	} else if ((dev->flags & IFF_ALLMULTI) ||
-			(dev->mc_count > multicast_filter_limit)) {
+			(dev->mc.count > multicast_filter_limit)) {
 		/* Receive broadcast and multicast frames */
 		rx_mode = ReceiveBroadcast | ReceiveMulticast | ReceiveUnicast;
-	} else if (dev->mc_count > 0) {
+	} else if (dev->mc.count > 0) {
 		int i;
 		struct dev_mc_list *mclist;
 		/* Receive broadcast frames and multicast frames filtering
 		   by Hashtable */
 		rx_mode =
 		    ReceiveBroadcast | ReceiveMulticastHash | ReceiveUnicast;
-		for (i=0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i=0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 				i++, mclist=mclist->next)
 		{
 			int bit, index = 0;
--- wireless-testing.orig/drivers/net/dm9000.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/dm9000.c	2009-06-13 12:29:37.000000000 +0200
@@ -627,8 +627,8 @@  static void
 dm9000_hash_table(struct net_device *dev)
 {
 	board_info_t *db = netdev_priv(dev);
-	struct dev_mc_list *mcptr = dev->mc_list;
-	int mc_cnt = dev->mc_count;
+	struct dev_mc_list *mcptr = dev->mc.list;
+	int mc_cnt = dev->mc.count;
 	int i, oft;
 	u32 hash_val;
 	u16 hash_table[4];
--- wireless-testing.orig/drivers/net/e100.c	2009-04-30 23:07:17.000000000 +0200
+++ wireless-testing/drivers/net/e100.c	2009-06-13 12:29:37.000000000 +0200
@@ -1375,8 +1375,8 @@  static int e100_hw_init(struct nic *nic)
 static void e100_multi(struct nic *nic, struct cb *cb, struct sk_buff *skb)
 {
 	struct net_device *netdev = nic->netdev;
-	struct dev_mc_list *list = netdev->mc_list;
-	u16 i, count = min(netdev->mc_count, E100_MAX_MULTICAST_ADDRS);
+	struct dev_mc_list *list = netdev->mc.list;
+	u16 i, count = min(netdev->mc.count, E100_MAX_MULTICAST_ADDRS);
 
 	cb->command = cpu_to_le16(cb_multi);
 	cb->u.multi.count = cpu_to_le16(count * ETH_ALEN);
@@ -1390,7 +1390,7 @@  static void e100_set_multicast_list(stru
 	struct nic *nic = netdev_priv(netdev);
 
 	DPRINTK(HW, DEBUG, "mc_count=%d, flags=0x%04X\n",
-		netdev->mc_count, netdev->flags);
+		netdev->mc.count, netdev->flags);
 
 	if (netdev->flags & IFF_PROMISC)
 		nic->flags |= promiscuous;
@@ -1398,7 +1398,7 @@  static void e100_set_multicast_list(stru
 		nic->flags &= ~promiscuous;
 
 	if (netdev->flags & IFF_ALLMULTI ||
-		netdev->mc_count > E100_MAX_MULTICAST_ADDRS)
+		netdev->mc.count > E100_MAX_MULTICAST_ADDRS)
 		nic->flags |= multicast_all;
 	else
 		nic->flags &= ~multicast_all;
--- wireless-testing.orig/drivers/net/e1000/e1000_main.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/e1000/e1000_main.c	2009-06-13 12:29:37.000000000 +0200
@@ -2367,11 +2367,11 @@  static void e1000_set_rx_mode(struct net
 	}
 
 	uc_ptr = NULL;
-	if (netdev->uc_count > rar_entries - 1) {
+	if (netdev->uc.count > rar_entries - 1) {
 		rctl |= E1000_RCTL_UPE;
 	} else if (!(netdev->flags & IFF_PROMISC)) {
 		rctl &= ~E1000_RCTL_UPE;
-		uc_ptr = netdev->uc_list;
+		uc_ptr = netdev->uc.list;
 	}
 
 	ew32(RCTL, rctl);
@@ -2389,7 +2389,7 @@  static void e1000_set_rx_mode(struct net
 	 * if there are not 14 addresses, go ahead and clear the filters
 	 * -- with 82571 controllers only 0-13 entries are filled here
 	 */
-	mc_ptr = netdev->mc_list;
+	mc_ptr = netdev->mc.list;
 
 	for (i = 1; i < rar_entries; i++) {
 		if (uc_ptr) {
--- wireless-testing.orig/drivers/net/e1000e/netdev.c	2009-04-30 23:07:17.000000000 +0200
+++ wireless-testing/drivers/net/e1000e/netdev.c	2009-06-13 12:29:37.000000000 +0200
@@ -2572,15 +2572,15 @@  static void e1000_set_multi(struct net_d
 
 	ew32(RCTL, rctl);
 
-	if (netdev->mc_count) {
-		mta_list = kmalloc(netdev->mc_count * 6, GFP_ATOMIC);
+	if (netdev->mc.count) {
+		mta_list = kmalloc(netdev->mc.count * 6, GFP_ATOMIC);
 		if (!mta_list)
 			return;
 
 		/* prepare a packed array of only addresses. */
-		mc_ptr = netdev->mc_list;
+		mc_ptr = netdev->mc.list;
 
-		for (i = 0; i < netdev->mc_count; i++) {
+		for (i = 0; i < netdev->mc.count; i++) {
 			if (!mc_ptr)
 				break;
 			memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr,
--- wireless-testing.orig/drivers/net/eepro.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/eepro.c	2009-06-13 12:29:37.000000000 +0200
@@ -1285,9 +1285,9 @@  set_multicast_list(struct net_device *de
 	struct eepro_local *lp = netdev_priv(dev);
 	short ioaddr = dev->base_addr;
 	unsigned short mode;
-	struct dev_mc_list *dmi=dev->mc_list;
+	struct dev_mc_list *dmi=dev->mc.list;
 
-	if (dev->flags&(IFF_ALLMULTI|IFF_PROMISC) || dev->mc_count > 63)
+	if (dev->flags&(IFF_ALLMULTI|IFF_PROMISC) || dev->mc.count > 63)
 	{
 		eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
 		mode = inb(ioaddr + REG2);
@@ -1297,7 +1297,7 @@  set_multicast_list(struct net_device *de
 		eepro_sw2bank0(ioaddr); /* Return to BANK 0 now */
 	}
 
-	else if (dev->mc_count==0 )
+	else if (dev->mc.count==0 )
 	{
 		eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
 		mode = inb(ioaddr + REG2);
@@ -1327,9 +1327,9 @@  set_multicast_list(struct net_device *de
 		outw(MC_SETUP, ioaddr + IO_PORT);
 		outw(0, ioaddr + IO_PORT);
 		outw(0, ioaddr + IO_PORT);
-		outw(6*(dev->mc_count + 1), ioaddr + IO_PORT);
+		outw(6*(dev->mc.count + 1), ioaddr + IO_PORT);
 
-		for (i = 0; i < dev->mc_count; i++)
+		for (i = 0; i < dev->mc.count; i++)
 		{
 			eaddrs=(unsigned short *)dmi->dmi_addr;
 			dmi=dmi->next;
@@ -1346,7 +1346,7 @@  set_multicast_list(struct net_device *de
 		outb(MC_SETUP, ioaddr);
 
 		/* Update the transmit queue */
-		i = lp->tx_end + XMT_HEADER + 6*(dev->mc_count + 1);
+		i = lp->tx_end + XMT_HEADER + 6*(dev->mc.count + 1);
 
 		if (lp->tx_start != lp->tx_end)
 		{
@@ -1378,8 +1378,8 @@  set_multicast_list(struct net_device *de
 					break;
 				} else if ((i & 0x0f) == 0x03)	{ /* MC-Done */
 					printk(KERN_DEBUG "%s: set Rx mode to %d address%s.\n",
-						dev->name, dev->mc_count,
-						dev->mc_count > 1 ? "es":"");
+						dev->name, dev->mc.count,
+						dev->mc.count > 1 ? "es":"");
 					break;
 				}
 			}
--- wireless-testing.orig/drivers/net/eexpress.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/eexpress.c	2009-06-13 12:29:37.000000000 +0200
@@ -1577,7 +1577,7 @@  static void eexp_setup_filter(struct net
 {
 	struct dev_mc_list *dmi;
 	unsigned short ioaddr = dev->base_addr;
-	int count = dev->mc_count;
+	int count = dev->mc.count;
 	int i;
 	if (count > 8) {
 		printk(KERN_INFO "%s: too many multicast addresses (%d)\n",
@@ -1587,7 +1587,7 @@  static void eexp_setup_filter(struct net
 
 	outw(CONF_NR_MULTICAST & ~31, ioaddr+SM_PTR);
 	outw(6*count, ioaddr+SHADOW(CONF_NR_MULTICAST));
-	for (i = 0, dmi = dev->mc_list; i < count; i++, dmi = dmi->next) {
+	for (i = 0, dmi = dev->mc.list; i < count; i++, dmi = dmi->next) {
 		unsigned short *data;
 		if (!dmi) {
 			printk(KERN_INFO "%s: too few multicast addresses\n", dev->name);
@@ -1626,9 +1626,9 @@  eexp_set_multicast(struct net_device *de
         }
         if (!(dev->flags & IFF_PROMISC)) {
                 eexp_setup_filter(dev);
-                if (lp->old_mc_count != dev->mc_count) {
+                if (lp->old_mc_count != dev->mc.count) {
                         kick = 1;
-                        lp->old_mc_count = dev->mc_count;
+                        lp->old_mc_count = dev->mc.count;
                 }
         }
         if (kick) {
--- wireless-testing.orig/drivers/net/ehea/ehea_main.c	2009-05-11 21:32:39.000000000 +0200
+++ wireless-testing/drivers/net/ehea/ehea_main.c	2009-06-13 12:29:37.000000000 +0200
@@ -1977,7 +1977,7 @@  static void ehea_set_multicast_list(stru
 	}
 	ehea_allmulti(dev, 0);
 
-	if (dev->mc_count) {
+	if (dev->mc.count) {
 		ret = ehea_drop_multicast_list(dev);
 		if (ret) {
 			/* Dropping the current multicast list failed.
@@ -1986,14 +1986,14 @@  static void ehea_set_multicast_list(stru
 			ehea_allmulti(dev, 1);
 		}
 
-		if (dev->mc_count > port->adapter->max_mc_mac) {
+		if (dev->mc.count > port->adapter->max_mc_mac) {
 			ehea_info("Mcast registration limit reached (0x%llx). "
 				  "Use ALLMULTI!",
 				  port->adapter->max_mc_mac);
 			goto out;
 		}
 
-		for (i = 0, k_mcl_entry = dev->mc_list; i < dev->mc_count; i++,
+		for (i = 0, k_mcl_entry = dev->mc.list; i < dev->mc.count; i++,
 			     k_mcl_entry = k_mcl_entry->next)
 			ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr);
 
--- wireless-testing.orig/drivers/net/enc28j60.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/enc28j60.c	2009-06-13 12:29:38.000000000 +0200
@@ -1412,7 +1412,7 @@  static void enc28j60_set_multicast_list(
 		if (netif_msg_link(priv))
 			dev_info(&dev->dev, "promiscuous mode\n");
 		priv->rxfilter = RXFILTER_PROMISC;
-	} else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count) {
+	} else if ((dev->flags & IFF_ALLMULTI) || dev->mc.count) {
 		if (netif_msg_link(priv))
 			dev_info(&dev->dev, "%smulticast mode\n",
 				(dev->flags & IFF_ALLMULTI) ? "all-" : "");
--- wireless-testing.orig/drivers/net/enic/enic_main.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/enic/enic_main.c	2009-06-13 12:29:38.000000000 +0200
@@ -713,15 +713,15 @@  static int enic_set_mac_addr(struct net_
 static void enic_set_multicast_list(struct net_device *netdev)
 {
 	struct enic *enic = netdev_priv(netdev);
-	struct dev_mc_list *list = netdev->mc_list;
+	struct dev_mc_list *list = netdev->mc.list;
 	int directed = 1;
 	int multicast = (netdev->flags & IFF_MULTICAST) ? 1 : 0;
 	int broadcast = (netdev->flags & IFF_BROADCAST) ? 1 : 0;
 	int promisc = (netdev->flags & IFF_PROMISC) ? 1 : 0;
 	int allmulti = (netdev->flags & IFF_ALLMULTI) ||
-	    (netdev->mc_count > ENIC_MULTICAST_PERFECT_FILTERS);
+	    (netdev->mc.count > ENIC_MULTICAST_PERFECT_FILTERS);
 	u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN];
-	unsigned int mc_count = netdev->mc_count;
+	unsigned int mc_count = netdev->mc.count;
 	unsigned int i, j;
 
 	if (mc_count > ENIC_MULTICAST_PERFECT_FILTERS)
--- wireless-testing.orig/drivers/net/epic100.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/epic100.c	2009-06-13 12:29:38.000000000 +0200
@@ -1390,20 +1390,20 @@  static void set_rx_mode(struct net_devic
 		outl(0x002C, ioaddr + RxCtrl);
 		/* Unconditionally log net taps. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
-	} else if ((dev->mc_count > 0)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.count > 0)  ||  (dev->flags & IFF_ALLMULTI)) {
 		/* There is apparently a chip bug, so the multicast filter
 		   is never enabled. */
 		/* Too many to filter perfectly -- accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		outl(0x000C, ioaddr + RxCtrl);
-	} else if (dev->mc_count == 0) {
+	} else if (dev->mc.count == 0) {
 		outl(0x0004, ioaddr + RxCtrl);
 		return;
 	} else {					/* Never executed, for now. */
 		struct dev_mc_list *mclist;
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			unsigned int bit_nr =
 				ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f;
--- wireless-testing.orig/drivers/net/eth16i.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/eth16i.c	2009-06-13 12:29:38.000000000 +0200
@@ -1359,7 +1359,7 @@  static void eth16i_multicast(struct net_
 {
 	int ioaddr = dev->base_addr;
 
-	if(dev->mc_count || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
+	if(dev->mc.count || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
 	{
 		outb(3, ioaddr + RECEIVE_MODE_REG);
 	} else {
--- wireless-testing.orig/drivers/net/ethoc.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ethoc.c	2009-06-13 12:29:38.000000000 +0200
@@ -772,7 +772,7 @@  static void ethoc_set_multicast_list(str
 		hash[0] = 0xffffffff;
 		hash[1] = 0xffffffff;
 	} else {
-		for (mc = dev->mc_list; mc; mc = mc->next) {
+		for (mc = dev->mc.list; mc; mc = mc->next) {
 			u32 crc = ether_crc(mc->dmi_addrlen, mc->dmi_addr);
 			int bit = (crc >> 26) & 0x3f;
 			hash[bit >> 5] |= 1 << (bit & 0x1f);
--- wireless-testing.orig/drivers/net/ewrk3.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ewrk3.c	2009-06-13 12:29:38.000000000 +0200
@@ -1168,7 +1168,7 @@  static void set_multicast_list(struct ne
 static void SetMulticastFilter(struct net_device *dev)
 {
 	struct ewrk3_private *lp = netdev_priv(dev);
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	u_long iobase = dev->base_addr;
 	int i;
 	char *addrs, bit, byte;
@@ -1212,7 +1212,7 @@  static void SetMulticastFilter(struct ne
 		}
 
 		/* Update table */
-		for (i = 0; i < dev->mc_count; i++) {	/* for each address in the list */
+		for (i = 0; i < dev->mc.count; i++) {	/* for each address in the list */
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 			if ((*addrs & 0x01) == 1) {	/* multicast address? */
--- wireless-testing.orig/drivers/net/fealnx.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/fealnx.c	2009-06-13 12:29:38.000000000 +0200
@@ -1782,7 +1782,7 @@  static void __set_rx_mode(struct net_dev
 	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		rx_mode = CR_W_PROM | CR_W_AB | CR_W_AM;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
@@ -1792,7 +1792,7 @@  static void __set_rx_mode(struct net_dev
 		int i;
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			unsigned int bit;
 			bit = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26) ^ 0x3F;
--- wireless-testing.orig/drivers/net/fec.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/fec.c	2009-06-13 12:29:38.000000000 +0200
@@ -1610,9 +1610,9 @@  static void set_multicast_list(struct ne
 			ep->fec_grp_hash_table_high = 0;
 			ep->fec_grp_hash_table_low = 0;
 
-			dmi = dev->mc_list;
+			dmi = dev->mc.list;
 
-			for (j = 0; j < dev->mc_count; j++, dmi = dmi->next)
+			for (j = 0; j < dev->mc.count; j++, dmi = dmi->next)
 			{
 				/* Only support group multicast for now.
 				*/
--- wireless-testing.orig/drivers/net/fec_mpc52xx.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/fec_mpc52xx.c	2009-06-13 12:29:38.000000000 +0200
@@ -635,8 +635,8 @@  static void mpc52xx_fec_set_multicast_li
 			u32 gaddr1 = 0x00000000;
 			u32 gaddr2 = 0x00000000;
 
-			dmi = dev->mc_list;
-			for (i=0; i<dev->mc_count; i++) {
+			dmi = dev->mc.list;
+			for (i=0; i<dev->mc.count; i++) {
 				crc = ether_crc_le(6, dmi->dmi_addr) >> 26;
 				if (crc >= 32)
 					gaddr1 |= 1 << (crc-32);
--- wireless-testing.orig/drivers/net/forcedeth.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/forcedeth.c	2009-06-13 12:29:38.000000000 +0200
@@ -3077,7 +3077,7 @@  static void nv_set_multicast(struct net_
 	} else {
 		pff |= NVREG_PFF_MYADDR;
 
-		if (dev->flags & IFF_ALLMULTI || dev->mc_list) {
+		if (dev->flags & IFF_ALLMULTI || dev->mc.list) {
 			u32 alwaysOff[2];
 			u32 alwaysOn[2];
 
@@ -3087,7 +3087,7 @@  static void nv_set_multicast(struct net_
 			} else {
 				struct dev_mc_list *walk;
 
-				walk = dev->mc_list;
+				walk = dev->mc.list;
 				while (walk != NULL) {
 					u32 a, b;
 					a = le32_to_cpu(*(__le32 *) walk->dmi_addr);
--- wireless-testing.orig/drivers/net/fs_enet/mac-fcc.c	2008-12-19 00:28:05.000000000 +0100
+++ wireless-testing/drivers/net/fs_enet/mac-fcc.c	2009-06-13 12:29:38.000000000 +0200
@@ -218,7 +218,7 @@  static void set_multicast_finish(struct 
 
 	/* if all multi or too many multicasts; just enable all */
 	if ((dev->flags & IFF_ALLMULTI) != 0 ||
-	    dev->mc_count > FCC_MAX_MULTICAST_ADDRS) {
+	    dev->mc.count > FCC_MAX_MULTICAST_ADDRS) {
 
 		W32(ep, fen_gaddrh, 0xffffffff);
 		W32(ep, fen_gaddrl, 0xffffffff);
@@ -235,7 +235,7 @@  static void set_multicast_list(struct ne
 
 	if ((dev->flags & IFF_PROMISC) == 0) {
 		set_multicast_start(dev);
-		for (pmc = dev->mc_list; pmc != NULL; pmc = pmc->next)
+		for (pmc = dev->mc.list; pmc != NULL; pmc = pmc->next)
 			set_multicast_one(dev, pmc->dmi_addr);
 		set_multicast_finish(dev);
 	} else
--- wireless-testing.orig/drivers/net/fs_enet/mac-fec.c	2008-12-19 00:28:05.000000000 +0100
+++ wireless-testing/drivers/net/fs_enet/mac-fec.c	2009-06-13 12:29:38.000000000 +0200
@@ -220,7 +220,7 @@  static void set_multicast_finish(struct 
 
 	/* if all multi or too many multicasts; just enable all */
 	if ((dev->flags & IFF_ALLMULTI) != 0 ||
-	    dev->mc_count > FEC_MAX_MULTICAST_ADDRS) {
+	    dev->mc.count > FEC_MAX_MULTICAST_ADDRS) {
 		fep->fec.hthi = 0xffffffffU;
 		fep->fec.htlo = 0xffffffffU;
 	}
@@ -236,7 +236,7 @@  static void set_multicast_list(struct ne
 
 	if ((dev->flags & IFF_PROMISC) == 0) {
 		set_multicast_start(dev);
-		for (pmc = dev->mc_list; pmc != NULL; pmc = pmc->next)
+		for (pmc = dev->mc.list; pmc != NULL; pmc = pmc->next)
 			set_multicast_one(dev, pmc->dmi_addr);
 		set_multicast_finish(dev);
 	} else
--- wireless-testing.orig/drivers/net/fs_enet/mac-scc.c	2008-12-19 00:28:05.000000000 +0100
+++ wireless-testing/drivers/net/fs_enet/mac-scc.c	2009-06-13 12:29:38.000000000 +0200
@@ -213,7 +213,7 @@  static void set_multicast_finish(struct 
 
 	/* if all multi or too many multicasts; just enable all */
 	if ((dev->flags & IFF_ALLMULTI) != 0 ||
-	    dev->mc_count > SCC_MAX_MULTICAST_ADDRS) {
+	    dev->mc.count > SCC_MAX_MULTICAST_ADDRS) {
 
 		W16(ep, sen_gaddr1, 0xffff);
 		W16(ep, sen_gaddr2, 0xffff);
@@ -228,7 +228,7 @@  static void set_multicast_list(struct ne
 
 	if ((dev->flags & IFF_PROMISC) == 0) {
 		set_multicast_start(dev);
-		for (pmc = dev->mc_list; pmc != NULL; pmc = pmc->next)
+		for (pmc = dev->mc.list; pmc != NULL; pmc = pmc->next)
 			set_multicast_one(dev, pmc->dmi_addr);
 		set_multicast_finish(dev);
 	} else
--- wireless-testing.orig/drivers/net/gianfar.c	2009-06-07 21:32:31.000000000 +0200
+++ wireless-testing/drivers/net/gianfar.c	2009-06-13 12:29:38.000000000 +0200
@@ -2196,11 +2196,11 @@  static void gfar_set_multi(struct net_de
 			em_num = 0;
 		}
 
-		if(dev->mc_count == 0)
+		if(dev->mc.count == 0)
 			return;
 
 		/* Parse the list, and set the appropriate bits */
-		for(mc_ptr = dev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+		for(mc_ptr = dev->mc.list; mc_ptr; mc_ptr = mc_ptr->next) {
 			if (idx < em_num) {
 				gfar_set_mac_for_addr(dev, idx,
 						mc_ptr->dmi_addr);
--- wireless-testing.orig/drivers/net/hamachi.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/hamachi.c	2009-06-13 12:29:38.000000000 +0200
@@ -1849,13 +1849,13 @@  static void set_rx_mode(struct net_devic
 
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		writew(0x000F, ioaddr + AddrMode);
-	} else if ((dev->mc_count > 63)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.count > 63)  ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		writew(0x000B, ioaddr + AddrMode);
-	} else if (dev->mc_count > 0) { /* Must use the CAM filter. */
+	} else if (dev->mc.count > 0) { /* Must use the CAM filter. */
 		struct dev_mc_list *mclist;
 		int i;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			writel(*(u32*)(mclist->dmi_addr), ioaddr + 0x100 + i*8);
 			writel(0x20000 | (*(u16*)&mclist->dmi_addr[4]),
--- wireless-testing.orig/drivers/net/hp100.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/hp100.c	2009-06-13 12:29:39.000000000 +0200
@@ -2087,7 +2087,7 @@  static void hp100_set_multicast_list(str
 		lp->mac2_mode = HP100_MAC2MODE6;	/* promiscuous mode = get all good */
 		lp->mac1_mode = HP100_MAC1MODE6;	/* packets on the net */
 		memset(&lp->hash_bytes, 0xff, 8);
-	} else if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
+	} else if (dev->mc.count || (dev->flags & IFF_ALLMULTI)) {
 		lp->mac2_mode = HP100_MAC2MODE5;	/* multicast mode = get packets for */
 		lp->mac1_mode = HP100_MAC1MODE5;	/* me, broadcasts and all multicasts */
 #ifdef HP100_MULTICAST_FILTER	/* doesn't work!!! */
@@ -2101,9 +2101,9 @@  static void hp100_set_multicast_list(str
 
 			memset(&lp->hash_bytes, 0x00, 8);
 #ifdef HP100_DEBUG
-			printk("hp100: %s: computing hash filter - mc_count = %i\n", dev->name, dev->mc_count);
+			printk("hp100: %s: computing hash filter - mc_count = %i\n", dev->name, dev->mc.count);
 #endif
-			for (i = 0, dmi = dev->mc_list; i < dev->mc_count; i++, dmi = dmi->next) {
+			for (i = 0, dmi = dev->mc.list; i < dev->mc.count; i++, dmi = dmi->next) {
 				addrs = dmi->dmi_addr;
 				if ((*addrs & 0x01) == 0x01) {	/* multicast address? */
 #ifdef HP100_DEBUG
--- wireless-testing.orig/drivers/net/ibm_newemac/core.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/ibm_newemac/core.c	2009-06-13 12:29:39.000000000 +0200
@@ -390,11 +390,11 @@  static void emac_hash_mc(struct emac_ins
 	struct dev_mc_list *dmi;
 	int i;
 
-	DBG(dev, "hash_mc %d" NL, dev->ndev->mc_count);
+	DBG(dev, "hash_mc %d" NL, dev->ndev->mc.count);
 
 	memset(gaht_temp, 0, sizeof (gaht_temp));
 
-	for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) {
+	for (dmi = dev->ndev->mc.list; dmi; dmi = dmi->next) {
 		int slot, reg, mask;
 		DBG2(dev, "mc %pM" NL, dmi->dmi_addr);
 
@@ -424,9 +424,9 @@  static inline u32 emac_iff2rmr(struct ne
 	if (ndev->flags & IFF_PROMISC)
 		r |= EMAC_RMR_PME;
 	else if (ndev->flags & IFF_ALLMULTI ||
-			 (ndev->mc_count > EMAC_XAHT_SLOTS(dev)))
+			 (ndev->mc.count > EMAC_XAHT_SLOTS(dev)))
 		r |= EMAC_RMR_PMME;
-	else if (ndev->mc_count > 0)
+	else if (ndev->mc.count > 0)
 		r |= EMAC_RMR_MAE;
 
 	return r;
--- wireless-testing.orig/drivers/net/ibmlana.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ibmlana.c	2009-06-13 12:29:39.000000000 +0200
@@ -419,7 +419,7 @@  static void InitBoard(struct net_device 
 	/* start putting the multicast addresses into the CAM list.  Stop if
 	   it is full. */
 
-	for (mcptr = dev->mc_list; mcptr != NULL; mcptr = mcptr->next) {
+	for (mcptr = dev->mc.list; mcptr != NULL; mcptr = mcptr->next) {
 		putcam(cams, &camcnt, mcptr->dmi_addr);
 		if (camcnt == 16)
 			break;
--- wireless-testing.orig/drivers/net/ibmveth.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ibmveth.c	2009-06-13 12:29:39.000000000 +0200
@@ -1061,7 +1061,7 @@  static void ibmveth_set_multicast_list(s
 	struct ibmveth_adapter *adapter = netdev_priv(netdev);
 	unsigned long lpar_rc;
 
-	if((netdev->flags & IFF_PROMISC) || (netdev->mc_count > adapter->mcastFilterSize)) {
+	if((netdev->flags & IFF_PROMISC) || (netdev->mc.count > adapter->mcastFilterSize)) {
 		lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
 					   IbmVethMcastEnableRecv |
 					   IbmVethMcastDisableFiltering,
@@ -1070,7 +1070,7 @@  static void ibmveth_set_multicast_list(s
 			ibmveth_error_printk("h_multicast_ctrl rc=%ld when entering promisc mode\n", lpar_rc);
 		}
 	} else {
-		struct dev_mc_list *mclist = netdev->mc_list;
+		struct dev_mc_list *mclist = netdev->mc.list;
 		int i;
 		/* clear the filter table & disable filtering */
 		lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
@@ -1082,7 +1082,7 @@  static void ibmveth_set_multicast_list(s
 			ibmveth_error_printk("h_multicast_ctrl rc=%ld when attempting to clear filter table\n", lpar_rc);
 		}
 		/* add the addresses to the filter table */
-		for(i = 0; i < netdev->mc_count; ++i, mclist = mclist->next) {
+		for(i = 0; i < netdev->mc.count; ++i, mclist = mclist->next) {
 			// add the multicast address to the filter table
 			unsigned long mcast_addr = 0;
 			memcpy(((char *)&mcast_addr)+2, mclist->dmi_addr, 6);
--- wireless-testing.orig/drivers/net/igb/igb_main.c	2009-05-18 12:02:00.000000000 +0200
+++ wireless-testing/drivers/net/igb/igb_main.c	2009-06-13 12:29:39.000000000 +0200
@@ -2523,8 +2523,8 @@  static void igb_set_multi(struct net_dev
 	}
 	wr32(E1000_RCTL, rctl);
 
-	if (netdev->mc_count) {
-		mta_list = kzalloc(netdev->mc_count * 6, GFP_ATOMIC);
+	if (netdev->mc.count) {
+		mta_list = kzalloc(netdev->mc.count * 6, GFP_ATOMIC);
 		if (!mta_list) {
 			dev_err(&adapter->pdev->dev,
 			        "failed to allocate multicast filter list\n");
@@ -2533,9 +2533,9 @@  static void igb_set_multi(struct net_dev
 	}
 
 	/* The shared function expects a packed array of only addresses. */
-	mc_ptr = netdev->mc_list;
+	mc_ptr = netdev->mc.list;
 
-	for (i = 0; i < netdev->mc_count; i++) {
+	for (i = 0; i < netdev->mc.count; i++) {
 		if (!mc_ptr)
 			break;
 		memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, ETH_ALEN);
--- wireless-testing.orig/drivers/net/igbvf/netdev.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/igbvf/netdev.c	2009-06-13 12:29:39.000000000 +0200
@@ -1402,8 +1402,8 @@  static void igbvf_set_multi(struct net_d
 	u8  *mta_list = NULL;
 	int i;
 
-	if (netdev->mc_count) {
-		mta_list = kmalloc(netdev->mc_count * 6, GFP_ATOMIC);
+	if (netdev->mc.count) {
+		mta_list = kmalloc(netdev->mc.count * 6, GFP_ATOMIC);
 		if (!mta_list) {
 			dev_err(&adapter->pdev->dev,
 			        "failed to allocate multicast filter list\n");
@@ -1412,9 +1412,9 @@  static void igbvf_set_multi(struct net_d
 	}
 
 	/* prepare a packed array of only addresses. */
-	mc_ptr = netdev->mc_list;
+	mc_ptr = netdev->mc.list;
 
-	for (i = 0; i < netdev->mc_count; i++) {
+	for (i = 0; i < netdev->mc.count; i++) {
 		if (!mc_ptr)
 			break;
 		memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr,
--- wireless-testing.orig/drivers/net/ioc3-eth.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/ioc3-eth.c	2009-06-13 12:29:39.000000000 +0200
@@ -1664,7 +1664,7 @@  static int ioc3_ioctl(struct net_device 
 
 static void ioc3_set_multicast_list(struct net_device *dev)
 {
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	struct ioc3_private *ip = netdev_priv(dev);
 	struct ioc3 *ioc3 = ip->regs;
 	u64 ehar = 0;
@@ -1681,14 +1681,14 @@  static void ioc3_set_multicast_list(stru
 		ioc3_w_emcr(ip->emcr);			/* Clear promiscuous. */
 		(void) ioc3_r_emcr();
 
-		if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+		if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 			/* Too many for hashing to make sense or we want all
 			   multicast packets anyway,  so skip computing all the
 			   hashes and just accept all packets.  */
 			ip->ehar_h = 0xffffffff;
 			ip->ehar_l = 0xffffffff;
 		} else {
-			for (i = 0; i < dev->mc_count; i++) {
+			for (i = 0; i < dev->mc.count; i++) {
 				char *addr = dmi->dmi_addr;
 				dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/ipg.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ipg.c	2009-06-13 12:29:39.000000000 +0200
@@ -585,11 +585,11 @@  static void ipg_nic_set_multicast_list(s
 		receivemode = IPG_RM_RECEIVEALLFRAMES;
 	} else if ((dev->flags & IFF_ALLMULTI) ||
 		   ((dev->flags & IFF_MULTICAST) &&
-		    (dev->mc_count > IPG_MULTICAST_HASHTABLE_SIZE))) {
+		    (dev->mc.count > IPG_MULTICAST_HASHTABLE_SIZE))) {
 		/* NIC to be configured to receive all multicast
 		 * frames. */
 		receivemode |= IPG_RM_RECEIVEMULTICAST;
-	} else if ((dev->flags & IFF_MULTICAST) && (dev->mc_count > 0)) {
+	} else if ((dev->flags & IFF_MULTICAST) && (dev->mc.count > 0)) {
 		/* NIC to be configured to receive selected
 		 * multicast addresses. */
 		receivemode |= IPG_RM_RECEIVEMULTICASTHASH;
@@ -610,7 +610,7 @@  static void ipg_nic_set_multicast_list(s
 	hashtable[1] = 0x00000000;
 
 	/* Cycle through all multicast addresses to filter. */
-	for (mc_list_ptr = dev->mc_list;
+	for (mc_list_ptr = dev->mc.list;
 	     mc_list_ptr != NULL; mc_list_ptr = mc_list_ptr->next) {
 		/* Calculate CRC result for each multicast address. */
 		hashindex = crc32_le(0xffffffff, mc_list_ptr->dmi_addr,
--- wireless-testing.orig/drivers/net/isa-skeleton.c	2009-04-23 00:20:40.000000000 +0200
+++ wireless-testing/drivers/net/isa-skeleton.c	2009-06-13 12:29:39.000000000 +0200
@@ -654,17 +654,17 @@  set_multicast_list(struct net_device *de
 		/* Enable promiscuous mode */
 		outw(MULTICAST|PROMISC, ioaddr);
 	}
-	else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > HW_MAX_ADDRS)
+	else if((dev->flags&IFF_ALLMULTI) || dev->mc.count > HW_MAX_ADDRS)
 	{
 		/* Disable promiscuous mode, use normal mode. */
 		hardware_set_filter(NULL);
 
 		outw(MULTICAST, ioaddr);
 	}
-	else if(dev->mc_count)
+	else if(dev->mc.count)
 	{
 		/* Walk the address list, and load the filter */
-		hardware_set_filter(dev->mc_list);
+		hardware_set_filter(dev->mc.list);
 
 		outw(MULTICAST, ioaddr);
 	}
--- wireless-testing.orig/drivers/net/iseries_veth.c	2009-01-21 12:47:53.000000000 +0100
+++ wireless-testing/drivers/net/iseries_veth.c	2009-06-13 12:29:39.000000000 +0200
@@ -958,10 +958,10 @@  static void veth_set_multicast_list(stru
 	write_lock_irqsave(&port->mcast_gate, flags);
 
 	if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI) ||
-			(dev->mc_count > VETH_MAX_MCAST)) {
+			(dev->mc.count > VETH_MAX_MCAST)) {
 		port->promiscuous = 1;
 	} else {
-		struct dev_mc_list *dmi = dev->mc_list;
+		struct dev_mc_list *dmi = dev->mc.list;
 		int i;
 
 		port->promiscuous = 0;
@@ -969,7 +969,7 @@  static void veth_set_multicast_list(stru
 		/* Update table */
 		port->num_mcast = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			u8 *addr = dmi->dmi_addr;
 			u64 xaddr = 0;
 
--- wireless-testing.orig/drivers/net/ixgb/ixgb_main.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/ixgb/ixgb_main.c	2009-06-13 12:29:39.000000000 +0200
@@ -1064,7 +1064,7 @@  ixgb_set_multi(struct net_device *netdev
 		rctl |= IXGB_RCTL_VFE;
 	}
 
-	if (netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES) {
+	if (netdev->mc.count > IXGB_MAX_NUM_MULTICAST_ADDRESSES) {
 		rctl |= IXGB_RCTL_MPE;
 		IXGB_WRITE_REG(hw, RCTL, rctl);
 	} else {
@@ -1073,13 +1073,13 @@  ixgb_set_multi(struct net_device *netdev
 
 		IXGB_WRITE_REG(hw, RCTL, rctl);
 
-		for (i = 0, mc_ptr = netdev->mc_list;
+		for (i = 0, mc_ptr = netdev->mc.list;
 		     mc_ptr;
 		     i++, mc_ptr = mc_ptr->next)
 			memcpy(&mta[i * IXGB_ETH_LENGTH_OF_ADDRESS],
 			       mc_ptr->dmi_addr, IXGB_ETH_LENGTH_OF_ADDRESS);
 
-		ixgb_mc_addr_list_update(hw, mta, netdev->mc_count, 0);
+		ixgb_mc_addr_list_update(hw, mta, netdev->mc.count, 0);
 	}
 }
 
@@ -1593,7 +1593,7 @@  ixgb_update_stats(struct ixgb_adapter *a
 		return;
 
 	if ((netdev->flags & IFF_PROMISC) || (netdev->flags & IFF_ALLMULTI) ||
-	   (netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES)) {
+	   (netdev->mc.count > IXGB_MAX_NUM_MULTICAST_ADDRESSES)) {
 		u64 multi = IXGB_READ_REG(&adapter->hw, MPRCL);
 		u32 bcast_l = IXGB_READ_REG(&adapter->hw, BPRCL);
 		u32 bcast_h = IXGB_READ_REG(&adapter->hw, BPRCH);
--- wireless-testing.orig/drivers/net/ixgbe/ixgbe_main.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/ixgbe/ixgbe_main.c	2009-06-13 12:29:40.000000000 +0200
@@ -2015,16 +2015,16 @@  static void ixgbe_set_rx_mode(struct net
 	IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl);
 
 	/* reprogram secondary unicast list */
-	addr_count = netdev->uc_count;
+	addr_count = netdev->uc.count;
 	if (addr_count)
-		addr_list = netdev->uc_list->dmi_addr;
+		addr_list = netdev->uc.list->dmi_addr;
 	hw->mac.ops.update_uc_addr_list(hw, addr_list, addr_count,
 	                                  ixgbe_addr_list_itr);
 
 	/* reprogram multicast list */
-	addr_count = netdev->mc_count;
+	addr_count = netdev->mc.count;
 	if (addr_count)
-		addr_list = netdev->mc_list->dmi_addr;
+		addr_list = netdev->mc.list->dmi_addr;
 	hw->mac.ops.update_mc_addr_list(hw, addr_list, addr_count,
 	                                ixgbe_addr_list_itr);
 }
--- wireless-testing.orig/drivers/net/jme.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/jme.c	2009-06-13 12:29:40.000000000 +0200
@@ -1995,8 +1995,8 @@  jme_set_multi(struct net_device *netdev)
 		int bit_nr;
 
 		jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED;
-		for (i = 0, mclist = netdev->mc_list;
-			mclist && i < netdev->mc_count;
+		for (i = 0, mclist = netdev->mc.list;
+			mclist && i < netdev->mc.count;
 			++i, mclist = mclist->next) {
 
 			bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3F;
--- wireless-testing.orig/drivers/net/korina.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/korina.c	2009-06-13 12:29:40.000000000 +0200
@@ -484,7 +484,7 @@  static void korina_multicast_list(struct
 {
 	struct korina_private *lp = netdev_priv(dev);
 	unsigned long flags;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	u32 recognise = ETH_ARC_AB;	/* always accept broadcasts */
 	int i;
 
@@ -492,19 +492,19 @@  static void korina_multicast_list(struct
 	if (dev->flags & IFF_PROMISC)
 		recognise |= ETH_ARC_PRO;
 
-	else if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 4))
+	else if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 4))
 		/* All multicast and broadcast */
 		recognise |= ETH_ARC_AM;
 
 	/* Build the hash table */
-	if (dev->mc_count > 4) {
+	if (dev->mc.count > 4) {
 		u16 hash_table[4];
 		u32 crc;
 
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			char *addrs = dmi->dmi_addr;
 
 			dmi = dmi->next;
--- wireless-testing.orig/drivers/net/lance.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/lance.c	2009-06-13 12:29:40.000000000 +0200
@@ -1286,7 +1286,7 @@  static void set_multicast_list(struct ne
 	} else {
 		short multicast_table[4];
 		int i;
-		int num_addrs=dev->mc_count;
+		int num_addrs=dev->mc.count;
 		if(dev->flags&IFF_ALLMULTI)
 			num_addrs=1;
 		/* FIXIT: We don't use the multicast table, but rely on upper-layer filtering. */
--- wireless-testing.orig/drivers/net/lib82596.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/lib82596.c	2009-06-13 12:29:40.000000000 +0200
@@ -1342,7 +1342,7 @@  static void set_multicast_list(struct ne
 	DEB(DEB_MULTI,
 	    printk(KERN_DEBUG
 		   "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
-		   dev->name, dev->mc_count,
+		   dev->name, dev->mc.count,
 		   dev->flags & IFF_PROMISC ? "ON" : "OFF",
 		   dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
 
@@ -1378,23 +1378,23 @@  static void set_multicast_list(struct ne
 		}
 	}
 
-	cnt = dev->mc_count;
+	cnt = dev->mc.count;
 	if (cnt > MAX_MC_CNT) {
 		cnt = MAX_MC_CNT;
 		printk(KERN_NOTICE "%s: Only %d multicast addresses supported",
 			dev->name, cnt);
 	}
 
-	if (dev->mc_count > 0) {
+	if (dev->mc.count > 0) {
 		struct dev_mc_list *dmi;
 		unsigned char *cp;
 		struct mc_cmd *cmd;
 
 		cmd = &dma->mc_cmd;
 		cmd->cmd.command = SWAP16(CmdMulticastList);
-		cmd->mc_cnt = SWAP16(dev->mc_count * 6);
+		cmd->mc_cnt = SWAP16(dev->mc.count * 6);
 		cp = cmd->mc_addrs;
-		for (dmi = dev->mc_list;
+		for (dmi = dev->mc.list;
 		     cnt && dmi != NULL;
 		     dmi = dmi->next, cnt--, cp += 6) {
 			memcpy(cp, dmi->dmi_addr, 6);
--- wireless-testing.orig/drivers/net/lib8390.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/lib8390.c	2009-06-13 12:29:40.000000000 +0200
@@ -906,7 +906,7 @@  static inline void make_mc_bits(u8 *bits
 {
 	struct dev_mc_list *dmi;
 
-	for (dmi=dev->mc_list; dmi; dmi=dmi->next)
+	for (dmi=dev->mc.list; dmi; dmi=dmi->next)
 	{
 		u32 crc;
 		if (dmi->dmi_addrlen != ETH_ALEN)
@@ -940,7 +940,7 @@  static void do_set_multicast_list(struct
 	if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI)))
 	{
 		memset(ei_local->mcfilter, 0, 8);
-		if (dev->mc_list)
+		if (dev->mc.list)
 			make_mc_bits(ei_local->mcfilter, dev);
 	}
 	else
@@ -974,7 +974,7 @@  static void do_set_multicast_list(struct
 
   	if(dev->flags&IFF_PROMISC)
   		ei_outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
-	else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
+	else if(dev->flags&IFF_ALLMULTI || dev->mc.list)
   		ei_outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
   	else
   		ei_outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
--- wireless-testing.orig/drivers/net/lp486e.c	2009-04-09 10:00:15.000000000 +0200
+++ wireless-testing/drivers/net/lp486e.c	2009-06-13 12:29:40.000000000 +0200
@@ -1253,20 +1253,20 @@  static void set_multicast_list(struct ne
 
 	if (i596_debug > 1)
 		printk ("%s: set multicast list %d\n",
-			dev->name, dev->mc_count);
+			dev->name, dev->mc.count);
 
-	if (dev->mc_count > 0) {
+	if (dev->mc.count > 0) {
 		struct dev_mc_list *dmi;
 		char *cp;
-		cmd = kmalloc(sizeof(struct i596_cmd)+2+dev->mc_count*6, GFP_ATOMIC);
+		cmd = kmalloc(sizeof(struct i596_cmd)+2+dev->mc.count*6, GFP_ATOMIC);
 		if (cmd == NULL) {
 			printk (KERN_ERR "%s: set_multicast Memory squeeze.\n", dev->name);
 			return;
 		}
 		cmd->command = CmdMulticastList;
-		*((unsigned short *) (cmd + 1)) = dev->mc_count * 6;
+		*((unsigned short *) (cmd + 1)) = dev->mc.count * 6;
 		cp = ((char *)(cmd + 1))+2;
-		for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) {
+		for (dmi = dev->mc.list; dmi != NULL; dmi = dmi->next) {
 			memcpy(cp, dmi,6);
 			cp += 6;
 		}
@@ -1277,7 +1277,7 @@  static void set_multicast_list(struct ne
 		if (lp->set_conf.pa_next != I596_NULL) {
 			return;
 		}
-		if (dev->mc_count == 0 && !(dev->flags & (IFF_PROMISC | IFF_ALLMULTI))) {
+		if (dev->mc.count == 0 && !(dev->flags & (IFF_PROMISC | IFF_ALLMULTI))) {
 			lp->i596_config[8] &= ~0x01;
 		} else {
 			lp->i596_config[8] |= 0x01;
--- wireless-testing.orig/drivers/net/mac89x0.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/mac89x0.c	2009-06-13 12:29:40.000000000 +0200
@@ -571,7 +571,7 @@  static void set_multicast_list(struct ne
 	{
 		lp->rx_mode = RX_ALL_ACCEPT;
 	}
-	else if((dev->flags&IFF_ALLMULTI)||dev->mc_list)
+	else if((dev->flags&IFF_ALLMULTI)||dev->mc.list)
 	{
 		/* The multicast-accept list is initialized to accept-all, and we
 		   rely on higher-level filtering for now. */
--- wireless-testing.orig/drivers/net/macb.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/macb.c	2009-06-13 12:29:40.000000000 +0200
@@ -884,8 +884,8 @@  static void macb_sethashtable(struct net
 
 	mc_filter[0] = mc_filter[1] = 0;
 
-	curr = dev->mc_list;
-	for (i = 0; i < dev->mc_count; i++, curr = curr->next) {
+	curr = dev->mc.list;
+	for (i = 0; i < dev->mc.count; i++, curr = curr->next) {
 		if (!curr) break;	/* unexpected end of list */
 
 		bitnr = hash_get_index(curr->dmi_addr);
@@ -918,7 +918,7 @@  static void macb_set_rx_mode(struct net_
 		macb_writel(bp, HRB, -1);
 		macb_writel(bp, HRT, -1);
 		cfg |= MACB_BIT(NCFGR_MTI);
-	} else if (dev->mc_count > 0) {
+	} else if (dev->mc.count > 0) {
 		/* Enable specific multicasts */
 		macb_sethashtable(dev);
 		cfg |= MACB_BIT(NCFGR_MTI);
--- wireless-testing.orig/drivers/net/mace.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/mace.c	2009-06-13 12:29:40.000000000 +0200
@@ -592,7 +592,7 @@  static void mace_set_multicast(struct ne
 	mp->maccc |= PROM;
     } else {
 	unsigned char multicast_filter[8];
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 
 	if (dev->flags & IFF_ALLMULTI) {
 	    for (i = 0; i < 8; i++)
@@ -600,7 +600,7 @@  static void mace_set_multicast(struct ne
 	} else {
 	    for (i = 0; i < 8; i++)
 		multicast_filter[i] = 0;
-	    for (i = 0; i < dev->mc_count; i++) {
+	    for (i = 0; i < dev->mc.count; i++) {
 	        crc = ether_crc_le(6, dmi->dmi_addr);
 		j = crc >> 26;	/* bit number in multicast_filter */
 		multicast_filter[j >> 3] |= 1 << (j & 7);
--- wireless-testing.orig/drivers/net/macmace.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/macmace.c	2009-06-13 12:29:40.000000000 +0200
@@ -503,7 +503,7 @@  static void mace_set_multicast(struct ne
 		mb->maccc |= PROM;
 	} else {
 		unsigned char multicast_filter[8];
-		struct dev_mc_list *dmi = dev->mc_list;
+		struct dev_mc_list *dmi = dev->mc.list;
 
 		if (dev->flags & IFF_ALLMULTI) {
 			for (i = 0; i < 8; i++) {
@@ -512,7 +512,7 @@  static void mace_set_multicast(struct ne
 		} else {
 			for (i = 0; i < 8; i++)
 				multicast_filter[i] = 0;
-			for (i = 0; i < dev->mc_count; i++) {
+			for (i = 0; i < dev->mc.count; i++) {
 				crc = ether_crc_le(6, dmi->dmi_addr);
 				j = crc >> 26;	/* bit number in multicast_filter */
 				multicast_filter[j >> 3] |= 1 << (j & 7);
--- wireless-testing.orig/drivers/net/mlx4/en_netdev.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/mlx4/en_netdev.c	2009-06-13 12:29:40.000000000 +0200
@@ -179,7 +179,7 @@  static void mlx4_en_cache_mclist(struct 
 	struct dev_mc_list *tmp;
 	struct dev_mc_list *plist = NULL;
 
-	for (mclist = dev->mc_list; mclist; mclist = mclist->next) {
+	for (mclist = dev->mc.list; mclist; mclist = mclist->next) {
 		tmp = kmalloc(sizeof(struct dev_mc_list), GFP_ATOMIC);
 		if (!tmp) {
 			mlx4_err(mdev, "failed to allocate multicast list\n");
--- wireless-testing.orig/drivers/net/mv643xx_eth.c	2009-05-30 01:38:26.000000000 +0200
+++ wireless-testing/drivers/net/mv643xx_eth.c	2009-06-13 12:29:40.000000000 +0200
@@ -1730,7 +1730,7 @@  static u32 uc_addr_filter_mask(struct ne
 		return 0;
 
 	nibbles = 1 << (dev->dev_addr[5] & 0x0f);
-	for (uc_ptr = dev->uc_list; uc_ptr != NULL; uc_ptr = uc_ptr->next) {
+	for (uc_ptr = dev->uc.list; uc_ptr != NULL; uc_ptr = uc_ptr->next) {
 		if (memcmp(dev->dev_addr, uc_ptr->da_addr, 5))
 			return 0;
 		if ((dev->dev_addr[5] ^ uc_ptr->da_addr[5]) & 0xf0)
@@ -1830,7 +1830,7 @@  oom:
 	memset(mc_spec, 0, 0x100);
 	memset(mc_other, 0, 0x100);
 
-	for (addr = dev->mc_list; addr != NULL; addr = addr->next) {
+	for (addr = dev->mc.list; addr != NULL; addr = addr->next) {
 		u8 *a = addr->da_addr;
 		u32 *table;
 		int entry;
--- wireless-testing.orig/drivers/net/myri10ge/myri10ge.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/myri10ge/myri10ge.c	2009-06-13 12:29:40.000000000 +0200
@@ -3024,7 +3024,7 @@  static void myri10ge_set_multicast_list(
 	}
 
 	/* Walk the multicast list, and add each address */
-	for (mc_list = dev->mc_list; mc_list != NULL; mc_list = mc_list->next) {
+	for (mc_list = dev->mc.list; mc_list != NULL; mc_list = mc_list->next) {
 		memcpy(data, &mc_list->dmi_addr, 6);
 		cmd.data0 = ntohl(data[0]);
 		cmd.data1 = ntohl(data[1]);
--- wireless-testing.orig/drivers/net/natsemi.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/natsemi.c	2009-06-13 12:29:40.000000000 +0200
@@ -2488,7 +2488,7 @@  static void __set_rx_mode(struct net_dev
 	if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
 		rx_mode = RxFilterEnable | AcceptBroadcast
 			| AcceptAllMulticast | AcceptAllPhys | AcceptMyPhys;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 	  || (dev->flags & IFF_ALLMULTI)) {
 		rx_mode = RxFilterEnable | AcceptBroadcast
 			| AcceptAllMulticast | AcceptMyPhys;
@@ -2496,7 +2496,7 @@  static void __set_rx_mode(struct net_dev
 		struct dev_mc_list *mclist;
 		int i;
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			int b = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 23) & 0x1ff;
 			mc_filter[b/8] |= (1 << (b & 0x07));
--- wireless-testing.orig/drivers/net/netxen/netxen_nic_hw.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/netxen/netxen_nic_hw.c	2009-06-13 12:29:41.000000000 +0200
@@ -417,7 +417,7 @@  void netxen_p2_nic_set_multi(struct net_
 		return;
 	}
 
-	if (netdev->mc_count == 0) {
+	if (netdev->mc.count == 0) {
 		adapter->set_promisc(adapter,
 				NETXEN_NIU_NON_PROMISC_MODE);
 		netxen_nic_disable_mcast_filter(adapter);
@@ -426,17 +426,17 @@  void netxen_p2_nic_set_multi(struct net_
 
 	adapter->set_promisc(adapter, NETXEN_NIU_ALLMULTI_MODE);
 	if (netdev->flags & IFF_ALLMULTI ||
-			netdev->mc_count > adapter->max_mc_count) {
+			netdev->mc.count > adapter->max_mc_count) {
 		netxen_nic_disable_mcast_filter(adapter);
 		return;
 	}
 
 	netxen_nic_enable_mcast_filter(adapter);
 
-	for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next, index++)
+	for (mc_ptr = netdev->mc.list; mc_ptr; mc_ptr = mc_ptr->next, index++)
 		netxen_nic_set_mcast_addr(adapter, index, mc_ptr->dmi_addr);
 
-	if (index != netdev->mc_count)
+	if (index != netdev->mc.count)
 		printk(KERN_WARNING "%s: %s multicast address count mismatch\n",
 			netxen_nic_driver_name, netdev->name);
 
@@ -579,13 +579,13 @@  void netxen_p3_nic_set_multi(struct net_
 	}
 
 	if ((netdev->flags & IFF_ALLMULTI) ||
-			(netdev->mc_count > adapter->max_mc_count)) {
+			(netdev->mc.count > adapter->max_mc_count)) {
 		mode = VPORT_MISS_MODE_ACCEPT_MULTI;
 		goto send_fw_cmd;
 	}
 
-	if (netdev->mc_count > 0) {
-		for (mc_ptr = netdev->mc_list; mc_ptr;
+	if (netdev->mc.count > 0) {
+		for (mc_ptr = netdev->mc.list; mc_ptr;
 		     mc_ptr = mc_ptr->next) {
 			nx_p3_nic_add_mac(adapter, mc_ptr->dmi_addr,
 					  &add_list, &del_list);
--- wireless-testing.orig/drivers/net/ni5010.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/ni5010.c	2009-06-13 12:29:41.000000000 +0200
@@ -651,7 +651,7 @@  static void ni5010_set_multicast_list(st
 
 	PRINTK2((KERN_DEBUG "%s: entering set_multicast_list\n", dev->name));
 
-	if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI || dev->mc_list) {
+	if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI || dev->mc.list) {
 		outb(RMD_PROMISC, EDLC_RMODE); /* Enable promiscuous mode */
 		PRINTK((KERN_DEBUG "%s: Entering promiscuous mode\n", dev->name));
 	} else {
--- wireless-testing.orig/drivers/net/ni52.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/ni52.c	2009-06-13 12:29:41.000000000 +0200
@@ -596,8 +596,8 @@  static int init586(struct net_device *de
 	struct iasetup_cmd_struct __iomem *ias_cmd;
 	struct tdr_cmd_struct __iomem *tdr_cmd;
 	struct mcsetup_cmd_struct __iomem *mc_cmd;
-	struct dev_mc_list *dmi = dev->mc_list;
-	int num_addrs = dev->mc_count;
+	struct dev_mc_list *dmi = dev->mc.list;
+	int num_addrs = dev->mc.count;
 
 	ptr = p->scb + 1;
 
--- wireless-testing.orig/drivers/net/ni65.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/ni65.c	2009-06-13 12:29:41.000000000 +0200
@@ -848,7 +848,7 @@  static int ni65_lance_reinit(struct net_
 
 	 if(dev->flags & IFF_PROMISC)
 		 ni65_init_lance(p,dev->dev_addr,0x00,M_PROM);
-	 else if(dev->mc_count || dev->flags & IFF_ALLMULTI)
+	 else if(dev->mc.count || dev->flags & IFF_ALLMULTI)
 		 ni65_init_lance(p,dev->dev_addr,0xff,0x0);
 	 else
 		 ni65_init_lance(p,dev->dev_addr,0x00,0x00);
--- wireless-testing.orig/drivers/net/niu.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/niu.c	2009-06-13 12:29:41.000000000 +0200
@@ -6339,10 +6339,10 @@  static void niu_set_rx_mode(struct net_d
 	np->flags &= ~(NIU_FLAGS_MCAST | NIU_FLAGS_PROMISC);
 	if (dev->flags & IFF_PROMISC)
 		np->flags |= NIU_FLAGS_PROMISC;
-	if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 0))
+	if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 0))
 		np->flags |= NIU_FLAGS_MCAST;
 
-	alt_cnt = dev->uc_count;
+	alt_cnt = dev->uc.count;
 	if (alt_cnt > niu_num_alt_addr(np)) {
 		alt_cnt = 0;
 		np->flags |= NIU_FLAGS_PROMISC;
@@ -6351,7 +6351,7 @@  static void niu_set_rx_mode(struct net_d
 	if (alt_cnt) {
 		int index = 0;
 
-		for (addr = dev->uc_list; addr; addr = addr->next) {
+		for (addr = dev->uc.list; addr; addr = addr->next) {
 			err = niu_set_alt_mac(np, index,
 					      addr->da_addr);
 			if (err)
@@ -6383,8 +6383,8 @@  static void niu_set_rx_mode(struct net_d
 	if (dev->flags & IFF_ALLMULTI) {
 		for (i = 0; i < 16; i++)
 			hash[i] = 0xffff;
-	} else if (dev->mc_count > 0) {
-		for (addr = dev->mc_list; addr; addr = addr->next) {
+	} else if (dev->mc.count > 0) {
+		for (addr = dev->mc.list; addr; addr = addr->next) {
 			u32 crc = ether_crc_le(ETH_ALEN, addr->da_addr);
 
 			crc >>= 24;
--- wireless-testing.orig/drivers/net/ns83820.c	2009-04-09 10:00:16.000000000 +0200
+++ wireless-testing/drivers/net/ns83820.c	2009-06-13 12:29:41.000000000 +0200
@@ -1719,7 +1719,7 @@  static void ns83820_set_multicast(struct
 	else
 		and_mask &= ~(RFCR_AAU | RFCR_AAM);
 
-	if (ndev->flags & IFF_ALLMULTI || ndev->mc_count)
+	if (ndev->flags & IFF_ALLMULTI || ndev->mc.count)
 		or_mask |= RFCR_AAM;
 	else
 		and_mask &= ~RFCR_AAM;
--- wireless-testing.orig/drivers/net/pci-skeleton.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/pci-skeleton.c	2009-06-13 12:29:41.000000000 +0200
@@ -1820,7 +1820,7 @@  static void netdrv_set_rx_mode (struct n
 		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 		    AcceptAllPhys;
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
@@ -1829,7 +1829,7 @@  static void netdrv_set_rx_mode (struct n
 		struct dev_mc_list *mclist;
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
 
--- wireless-testing.orig/drivers/net/pcmcia/3c574_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/3c574_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1152,7 +1152,7 @@  static void set_rx_mode(struct net_devic
 	if (dev->flags & IFF_PROMISC)
 		outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
 			 ioaddr + EL3_CMD);
-	else if (dev->mc_count || (dev->flags & IFF_ALLMULTI))
+	else if (dev->mc.count || (dev->flags & IFF_ALLMULTI))
 		outw(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD);
 	else
 		outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
--- wireless-testing.orig/drivers/net/pcmcia/3c589_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/3c589_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -915,7 +915,7 @@  static void set_multicast_list(struct ne
     if (!pcmcia_dev_present(link)) return;
     if (dev->flags & IFF_PROMISC)
 	opts |= RxMulticast | RxProm;
-    else if (dev->mc_count || (dev->flags & IFF_ALLMULTI))
+    else if (dev->mc.count || (dev->flags & IFF_ALLMULTI))
 	opts |= RxMulticast;
     outw(opts, ioaddr + EL3_CMD);
 }
--- wireless-testing.orig/drivers/net/pcmcia/axnet_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/axnet_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1647,7 +1647,7 @@  static inline void make_mc_bits(u8 *bits
 	struct dev_mc_list *dmi;
 	u32 crc;
 
-	for (dmi=dev->mc_list; dmi; dmi=dmi->next) {
+	for (dmi=dev->mc.list; dmi; dmi=dmi->next) {
 		
 		crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
 		/* 
@@ -1674,7 +1674,7 @@  static void do_set_multicast_list(struct
 
 	if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) {
 		memset(ei_local->mcfilter, 0, 8);
-		if (dev->mc_list)
+		if (dev->mc.list)
 			make_mc_bits(ei_local->mcfilter, dev);
 	} else {
 		/* set to accept-all */
@@ -1690,7 +1690,7 @@  static void do_set_multicast_list(struct
 
   	if(dev->flags&IFF_PROMISC)
   		outb_p(E8390_RXCONFIG | 0x58, e8390_base + EN0_RXCR);
-	else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
+	else if(dev->flags&IFF_ALLMULTI || dev->mc.list)
   		outb_p(E8390_RXCONFIG | 0x48, e8390_base + EN0_RXCR);
   	else
   		outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
--- wireless-testing.orig/drivers/net/pcmcia/fmvj18x_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/fmvj18x_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1217,19 +1217,19 @@  static void set_rx_mode(struct net_devic
     if (dev->flags & IFF_PROMISC) {
 	memset(mc_filter, 0xff, sizeof(mc_filter));
 	outb(3, ioaddr + RX_MODE);	/* Enable promiscuous mode */
-    } else if (dev->mc_count > MC_FILTERBREAK
+    } else if (dev->mc.count > MC_FILTERBREAK
 	       ||  (dev->flags & IFF_ALLMULTI)) {
 	/* Too many to filter perfectly -- accept all multicasts. */
 	memset(mc_filter, 0xff, sizeof(mc_filter));
 	outb(2, ioaddr + RX_MODE);	/* Use normal mode. */
-    } else if (dev->mc_count == 0) {
+    } else if (dev->mc.count == 0) {
 	memset(mc_filter, 0x00, sizeof(mc_filter));
 	outb(1, ioaddr + RX_MODE);	/* Ignore almost all multicasts. */
     } else {
 	struct dev_mc_list *mclist;
 
 	memset(mc_filter, 0, sizeof(mc_filter));
-	for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+	for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 	     i++, mclist = mclist->next) {
 	    unsigned int bit =
 	    	ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 26;
--- wireless-testing.orig/drivers/net/pcmcia/nmclan_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/nmclan_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1509,13 +1509,13 @@  static void set_multicast_list(struct ne
   mace_private *lp = netdev_priv(dev);
   int adr[ETHER_ADDR_LEN] = {0}; /* Ethernet address */
   int i;
-  struct dev_mc_list *dmi = dev->mc_list;
+  struct dev_mc_list *dmi = dev->mc.list;
 
 #ifdef PCMCIA_DEBUG
   if (pc_debug > 1) {
     static int old;
-    if (dev->mc_count != old) {
-      old = dev->mc_count;
+    if (dev->mc.count != old) {
+      old = dev->mc.count;
       DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
 	    dev->name, old);
     }
@@ -1523,13 +1523,13 @@  static void set_multicast_list(struct ne
 #endif
 
   /* Set multicast_num_addrs. */
-  lp->multicast_num_addrs = dev->mc_count;
+  lp->multicast_num_addrs = dev->mc.count;
 
   /* Set multicast_ladrf. */
   if (num_addrs > 0) {
     /* Calculate multicast logical address filter */
     memset(lp->multicast_ladrf, 0, MACE_LADRF_LEN);
-    for (i = 0; i < dev->mc_count; i++) {
+    for (i = 0; i < dev->mc.count; i++) {
       memcpy(adr, dmi->dmi_addr, ETHER_ADDR_LEN);
       dmi = dmi->next;
       BuildLAF(lp->multicast_ladrf, adr);
@@ -1570,15 +1570,15 @@  static void set_multicast_list(struct ne
 #ifdef PCMCIA_DEBUG
   if (pc_debug > 1) {
     static int old;
-    if (dev->mc_count != old) {
-      old = dev->mc_count;
+    if (dev->mc.count != old) {
+      old = dev->mc.count;
       DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
 	    dev->name, old);
     }
   }
 #endif
 
-  lp->multicast_num_addrs = dev->mc_count;
+  lp->multicast_num_addrs = dev->mc.count;
   restore_multicast_list(dev);
 
 } /* set_multicast_list */
--- wireless-testing.orig/drivers/net/pcmcia/smc91c92_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/smc91c92_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1748,8 +1748,8 @@  static void set_rx_mode(struct net_devic
     } else if (dev->flags & IFF_ALLMULTI)
 	rx_cfg_setting = RxStripCRC | RxEnable | RxAllMulti;
     else {
-	if (dev->mc_count)  {
-	    fill_multicast_tbl(dev->mc_count, dev->mc_list,
+	if (dev->mc.count)  {
+	    fill_multicast_tbl(dev->mc.count, dev->mc.list,
 			       (u_char *)multicast_table);
 	}
 	rx_cfg_setting = RxStripCRC | RxEnable;
--- wireless-testing.orig/drivers/net/pcmcia/xirc2ps_cs.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcmcia/xirc2ps_cs.c	2009-06-13 12:29:41.000000000 +0200
@@ -1427,7 +1427,7 @@  set_addresses(struct net_device *dev)
 {
     unsigned int ioaddr = dev->base_addr;
     local_info_t *lp = netdev_priv(dev);
-    struct dev_mc_list *dmi = dev->mc_list;
+    struct dev_mc_list *dmi = dev->mc.list;
     unsigned char *addr;
     int i,j,k,n;
 
@@ -1437,7 +1437,7 @@  set_addresses(struct net_device *dev)
 	    if (++n > 9)
 		break;
 	    i = 0;
-	    if (n > 1 && n <= dev->mc_count && dmi) {
+	    if (n > 1 && n <= dev->mc.count && dmi) {
 	   	 dmi = dmi->next;
 	    }
 	}
@@ -1447,7 +1447,7 @@  set_addresses(struct net_device *dev)
 	    SelectPage(k);
 	}
 
-	if (n && n <= dev->mc_count && dmi)
+	if (n && n <= dev->mc.count && dmi)
 	    addr = dmi->dmi_addr;
 	else
 	    addr = dev->dev_addr;
@@ -1477,9 +1477,9 @@  set_multicast_list(struct net_device *de
 
     if (dev->flags & IFF_PROMISC) { /* snoop */
 	PutByte(XIRCREG42_SWC1, value | 0x06); /* set MPE and PME */
-    } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) {
+    } else if (dev->mc.count > 9 || (dev->flags & IFF_ALLMULTI)) {
 	PutByte(XIRCREG42_SWC1, value | 0x02); /* set MPE */
-    } else if (dev->mc_count) {
+    } else if (dev->mc.count) {
 	/* the chip can filter 9 addresses perfectly */
 	PutByte(XIRCREG42_SWC1, value | 0x01);
 	SelectPage(0x40);
--- wireless-testing.orig/drivers/net/pcnet32.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/pcnet32.c	2009-06-13 12:29:41.000000000 +0200
@@ -2676,7 +2676,7 @@  static void pcnet32_load_multicast(struc
 	struct pcnet32_private *lp = netdev_priv(dev);
 	volatile struct pcnet32_init_block *ib = lp->init_block;
 	volatile __le16 *mcast_table = (__le16 *)ib->filter;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	unsigned long ioaddr = dev->base_addr;
 	char *addrs;
 	int i;
@@ -2697,7 +2697,7 @@  static void pcnet32_load_multicast(struc
 	ib->filter[1] = 0;
 
 	/* Add addresses */
-	for (i = 0; i < dev->mc_count; i++) {
+	for (i = 0; i < dev->mc.count; i++) {
 		addrs = dmi->dmi_addr;
 		dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/ps3_gelic_net.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/ps3_gelic_net.c	2009-06-13 12:29:41.000000000 +0200
@@ -549,7 +549,7 @@  void gelic_net_set_multi(struct net_devi
 			status);
 
 	if ((netdev->flags & IFF_ALLMULTI) ||
-	    (netdev->mc_count > GELIC_NET_MC_COUNT_MAX)) {
+	    (netdev->mc.count > GELIC_NET_MC_COUNT_MAX)) {
 		status = lv1_net_add_multicast_address(bus_id(card),
 						       dev_id(card),
 						       0, 1);
@@ -561,7 +561,7 @@  void gelic_net_set_multi(struct net_devi
 	}
 
 	/* set multicast addresses */
-	for (mc = netdev->mc_list; mc; mc = mc->next) {
+	for (mc = netdev->mc.list; mc; mc = mc->next) {
 		addr = 0;
 		p = mc->dmi_addr;
 		for (i = 0; i < ETH_ALEN; i++) {
--- wireless-testing.orig/drivers/net/qlge/qlge_main.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/qlge/qlge_main.c	2009-06-13 12:29:41.000000000 +0200
@@ -3529,7 +3529,7 @@  static void qlge_set_multicast_list(stru
 	 * transition is taking place.
 	 */
 	if ((ndev->flags & IFF_ALLMULTI) ||
-	    (ndev->mc_count > MAX_MULTICAST_ENTRIES)) {
+	    (ndev->mc.count > MAX_MULTICAST_ENTRIES)) {
 		if (!test_bit(QL_ALLMULTI, &qdev->flags)) {
 			if (ql_set_routing_reg
 			    (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 1)) {
@@ -3551,11 +3551,11 @@  static void qlge_set_multicast_list(stru
 		}
 	}
 
-	if (ndev->mc_count) {
+	if (ndev->mc.count) {
 		status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
 		if (status)
 			goto exit;
-		for (i = 0, mc_ptr = ndev->mc_list; mc_ptr;
+		for (i = 0, mc_ptr = ndev->mc.list; mc_ptr;
 		     i++, mc_ptr = mc_ptr->next)
 			if (ql_set_mac_addr_reg(qdev, (u8 *) mc_ptr->dmi_addr,
 						MAC_ADDR_TYPE_MULTI_MAC, i)) {
--- wireless-testing.orig/drivers/net/r6040.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/r6040.c	2009-06-13 12:29:41.000000000 +0200
@@ -931,7 +931,7 @@  static void r6040_multicast_list(struct 
 	u16 *adrp;
 	u16 reg;
 	unsigned long flags;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	int i;
 
 	/* MAC Address */
@@ -951,7 +951,7 @@  static void r6040_multicast_list(struct 
 	}
 	/* Too many multicast addresses
 	 * accept all traffic */
-	else if ((dev->mc_count > MCAST_MAX)
+	else if ((dev->mc.count > MCAST_MAX)
 		|| (dev->flags & IFF_ALLMULTI))
 		reg |= 0x0020;
 
@@ -959,14 +959,14 @@  static void r6040_multicast_list(struct 
 	spin_unlock_irqrestore(&lp->lock, flags);
 
 	/* Build the hash table */
-	if (dev->mc_count > MCAST_MAX) {
+	if (dev->mc.count > MCAST_MAX) {
 		u16 hash_table[4];
 		u32 crc;
 
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			char *addrs = dmi->dmi_addr;
 
 			dmi = dmi->next;
@@ -988,14 +988,14 @@  static void r6040_multicast_list(struct 
 		iowrite16(hash_table[3], ioaddr + MAR3);
 	}
 	/* Multicast Address 1~4 case */
-	for (i = 0, dmi; (i < dev->mc_count) && (i < MCAST_MAX); i++) {
+	for (i = 0, dmi; (i < dev->mc.count) && (i < MCAST_MAX); i++) {
 		adrp = (u16 *)dmi->dmi_addr;
 		iowrite16(adrp[0], ioaddr + MID_1L + 8*i);
 		iowrite16(adrp[1], ioaddr + MID_1M + 8*i);
 		iowrite16(adrp[2], ioaddr + MID_1H + 8*i);
 		dmi = dmi->next;
 	}
-	for (i = dev->mc_count; i < MCAST_MAX; i++) {
+	for (i = dev->mc.count; i < MCAST_MAX; i++) {
 		iowrite16(0xffff, ioaddr + MID_0L + 8*i);
 		iowrite16(0xffff, ioaddr + MID_0M + 8*i);
 		iowrite16(0xffff, ioaddr + MID_0H + 8*i);
--- wireless-testing.orig/drivers/net/r8169.c	2009-06-11 11:04:46.000000000 +0200
+++ wireless-testing/drivers/net/r8169.c	2009-06-13 12:29:41.000000000 +0200
@@ -3742,7 +3742,7 @@  static void rtl_set_rx_mode(struct net_d
 		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 		    AcceptAllPhys;
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
@@ -3753,7 +3753,7 @@  static void rtl_set_rx_mode(struct net_d
 
 		rx_mode = AcceptBroadcast | AcceptMyPhys;
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
 			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
--- wireless-testing.orig/drivers/net/s2io.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/s2io.c	2009-06-13 12:29:41.000000000 +0200
@@ -5038,8 +5038,8 @@  static void s2io_set_multicast(struct ne
 	}
 
 	/*  Update individual M_CAST address list */
-	if ((!sp->m_cast_flg) && dev->mc_count) {
-		if (dev->mc_count >
+	if ((!sp->m_cast_flg) && dev->mc.count) {
+		if (dev->mc.count >
 		    (config->max_mc_addr - config->max_mac_addr)) {
 			DBG_PRINT(ERR_DBG, "%s: No more Rx filters ",
 				  dev->name);
@@ -5049,7 +5049,7 @@  static void s2io_set_multicast(struct ne
 		}
 
 		prev_cnt = sp->mc_addr_count;
-		sp->mc_addr_count = dev->mc_count;
+		sp->mc_addr_count = dev->mc.count;
 
 		/* Clear out the previous list of Mc in the H/W. */
 		for (i = 0; i < prev_cnt; i++) {
@@ -5075,7 +5075,7 @@  static void s2io_set_multicast(struct ne
 		}
 
 		/* Create the new Rx filter list and update the same in H/W. */
-		for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr,
 			       ETH_ALEN);
--- wireless-testing.orig/drivers/net/sb1250-mac.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/sb1250-mac.c	2009-06-13 12:29:41.000000000 +0200
@@ -2162,7 +2162,7 @@  static void sbmac_setmulti(struct sbmac_
 	 * XXX if the table overflows */
 
 	idx = 1;		/* skip station address */
-	mclist = dev->mc_list;
+	mclist = dev->mc.list;
 	while (mclist && (idx < MAC_ADDR_COUNT)) {
 		reg = sbmac_addr2reg(mclist->dmi_addr);
 		port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t));
--- wireless-testing.orig/drivers/net/sc92031.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/sc92031.c	2009-06-13 12:29:41.000000000 +0200
@@ -429,13 +429,13 @@  static void _sc92031_set_mar(struct net_
 	u32 mar0 = 0, mar1 = 0;
 
 	if ((dev->flags & IFF_PROMISC)
-			|| dev->mc_count > multicast_filter_limit
+			|| dev->mc.count > multicast_filter_limit
 			|| (dev->flags & IFF_ALLMULTI))
 		mar0 = mar1 = 0xffffffff;
 	else if (dev->flags & IFF_MULTICAST) {
 		struct dev_mc_list *mc_list;
 
-		for (mc_list = dev->mc_list; mc_list; mc_list = mc_list->next) {
+		for (mc_list = dev->mc.list; mc_list; mc_list = mc_list->next) {
 			u32 crc;
 			unsigned bit = 0;
 
--- wireless-testing.orig/drivers/net/sfc/efx.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/sfc/efx.c	2009-06-13 12:29:41.000000000 +0200
@@ -1526,7 +1526,7 @@  static int efx_set_mac_address(struct ne
 static void efx_set_multicast_list(struct net_device *net_dev)
 {
 	struct efx_nic *efx = netdev_priv(net_dev);
-	struct dev_mc_list *mc_list = net_dev->mc_list;
+	struct dev_mc_list *mc_list = net_dev->mc.list;
 	union efx_multicast_hash *mc_hash = &efx->multicast_hash;
 	bool promiscuous = !!(net_dev->flags & IFF_PROMISC);
 	bool changed = (efx->promiscuous != promiscuous);
@@ -1541,7 +1541,7 @@  static void efx_set_multicast_list(struc
 		memset(mc_hash, 0xff, sizeof(*mc_hash));
 	} else {
 		memset(mc_hash, 0x00, sizeof(*mc_hash));
-		for (i = 0; i < net_dev->mc_count; i++) {
+		for (i = 0; i < net_dev->mc.count; i++) {
 			crc = ether_crc_le(ETH_ALEN, mc_list->dmi_addr);
 			bit = crc & (EFX_MCAST_HASH_ENTRIES - 1);
 			set_bit_le(bit, mc_hash->byte);
--- wireless-testing.orig/drivers/net/sgiseeq.c	2009-01-13 15:05:06.000000000 +0100
+++ wireless-testing/drivers/net/sgiseeq.c	2009-06-13 12:29:41.000000000 +0200
@@ -661,7 +661,7 @@  static void sgiseeq_set_multicast(struct
 
 	if(dev->flags & IFF_PROMISC)
 		sp->mode = SEEQ_RCMD_RANY;
-	else if ((dev->flags & IFF_ALLMULTI) || dev->mc_count)
+	else if ((dev->flags & IFF_ALLMULTI) || dev->mc.count)
 		sp->mode = SEEQ_RCMD_RBMCAST;
 	else
 		sp->mode = SEEQ_RCMD_RBCAST;
--- wireless-testing.orig/drivers/net/sis190.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/sis190.c	2009-06-13 12:29:41.000000000 +0200
@@ -841,7 +841,7 @@  static void sis190_set_rx_mode(struct ne
 			AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 			AcceptAllPhys;
 		mc_filter[1] = mc_filter[0] = 0xffffffff;
-	} else if ((dev->mc_count > multicast_filter_limit) ||
+	} else if ((dev->mc.count > multicast_filter_limit) ||
 		   (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter perfectly -- accept all multicasts. */
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
@@ -852,7 +852,7 @@  static void sis190_set_rx_mode(struct ne
 
 		rx_mode = AcceptBroadcast | AcceptMyPhys;
 		mc_filter[1] = mc_filter[0] = 0;
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr =
 				ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f;
--- wireless-testing.orig/drivers/net/sis900.c	2009-04-09 10:00:17.000000000 +0200
+++ wireless-testing/drivers/net/sis900.c	2009-06-13 12:29:41.000000000 +0200
@@ -2288,7 +2288,7 @@  static void set_rx_mode(struct net_devic
 		rx_mode = RFPromiscuous;
 		for (i = 0; i < table_entries; i++)
 			mc_filter[i] = 0xffff;
-	} else if ((net_dev->mc_count > multicast_filter_limit) ||
+	} else if ((net_dev->mc.count > multicast_filter_limit) ||
 		   (net_dev->flags & IFF_ALLMULTI)) {
 		/* too many multicast addresses or accept all multicast packet */
 		rx_mode = RFAAB | RFAAM;
@@ -2300,8 +2300,8 @@  static void set_rx_mode(struct net_devic
 		 * packets */
 		struct dev_mc_list *mclist;
 		rx_mode = RFAAB;
-		for (i = 0, mclist = net_dev->mc_list;
-			mclist && i < net_dev->mc_count;
+		for (i = 0, mclist = net_dev->mc.list;
+			mclist && i < net_dev->mc.count;
 			i++, mclist = mclist->next) {
 			unsigned int bit_nr =
 				sis900_mcast_bitnr(mclist->dmi_addr, sis_priv->chipset_rev);
--- wireless-testing.orig/drivers/net/skfp/skfddi.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/skfp/skfddi.c	2009-06-13 12:29:41.000000000 +0200
@@ -882,14 +882,14 @@  static void skfp_ctl_set_multicast_list_
 		if (dev->flags & IFF_ALLMULTI) {
 			mac_drv_rx_mode(smc, RX_ENABLE_ALLMULTI);
 			PRINTK(KERN_INFO "ENABLE ALL MC ADDRESSES\n");
-		} else if (dev->mc_count > 0) {
-			if (dev->mc_count <= FPMAX_MULTICAST) {
+		} else if (dev->mc.count > 0) {
+			if (dev->mc.count <= FPMAX_MULTICAST) {
 				/* use exact filtering */
 
 				// point to first multicast addr
-				dmi = dev->mc_list;
+				dmi = dev->mc.list;
 
-				for (i = 0; i < dev->mc_count; i++) {
+				for (i = 0; i < dev->mc.count; i++) {
 					mac_add_multicast(smc, 
 							  (struct fddi_addr *)dmi->dmi_addr, 
 							  1);
--- wireless-testing.orig/drivers/net/skge.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/skge.c	2009-06-13 12:29:42.000000000 +0200
@@ -2934,8 +2934,8 @@  static void genesis_set_multicast(struct
 	struct skge_port *skge = netdev_priv(dev);
 	struct skge_hw *hw = skge->hw;
 	int port = skge->port;
-	int i, count = dev->mc_count;
-	struct dev_mc_list *list = dev->mc_list;
+	int i, count = dev->mc.count;
+	struct dev_mc_list *list = dev->mc.list;
 	u32 mode;
 	u8 filter[8];
 
@@ -2974,7 +2974,7 @@  static void yukon_set_multicast(struct n
 	struct skge_port *skge = netdev_priv(dev);
 	struct skge_hw *hw = skge->hw;
 	int port = skge->port;
-	struct dev_mc_list *list = dev->mc_list;
+	struct dev_mc_list *list = dev->mc.list;
 	int rx_pause = (skge->flow_status == FLOW_STAT_REM_SEND
 			|| skge->flow_status == FLOW_STAT_SYMMETRIC);
 	u16 reg;
@@ -2989,7 +2989,7 @@  static void yukon_set_multicast(struct n
 		reg &= ~(GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
 	else if (dev->flags & IFF_ALLMULTI)	/* all multicast */
 		memset(filter, 0xff, sizeof(filter));
-	else if (dev->mc_count == 0 && !rx_pause)/* no multicast */
+	else if (dev->mc.count == 0 && !rx_pause)/* no multicast */
 		reg &= ~GM_RXCR_MCF_ENA;
 	else {
 		int i;
@@ -2998,7 +2998,7 @@  static void yukon_set_multicast(struct n
 		if (rx_pause)
 			yukon_add_filter(filter, pause_mc_addr);
 
-		for (i = 0; list && i < dev->mc_count; i++, list = list->next)
+		for (i = 0; list && i < dev->mc.count; i++, list = list->next)
 			yukon_add_filter(filter, list->dmi_addr);
 	}
 
--- wireless-testing.orig/drivers/net/sky2.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sky2.c	2009-06-13 12:29:43.000000000 +0200
@@ -3380,7 +3380,7 @@  static void sky2_set_multicast(struct ne
 	struct sky2_port *sky2 = netdev_priv(dev);
 	struct sky2_hw *hw = sky2->hw;
 	unsigned port = sky2->port;
-	struct dev_mc_list *list = dev->mc_list;
+	struct dev_mc_list *list = dev->mc.list;
 	u16 reg;
 	u8 filter[8];
 	int rx_pause;
@@ -3396,7 +3396,7 @@  static void sky2_set_multicast(struct ne
 		reg &= ~(GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
 	else if (dev->flags & IFF_ALLMULTI)
 		memset(filter, 0xff, sizeof(filter));
-	else if (dev->mc_count == 0 && !rx_pause)
+	else if (dev->mc.count == 0 && !rx_pause)
 		reg &= ~GM_RXCR_MCF_ENA;
 	else {
 		int i;
@@ -3405,7 +3405,7 @@  static void sky2_set_multicast(struct ne
 		if (rx_pause)
 			sky2_add_filter(filter, pause_mc_addr);
 
-		for (i = 0; list && i < dev->mc_count; i++, list = list->next)
+		for (i = 0; list && i < dev->mc.count; i++, list = list->next)
 			sky2_add_filter(filter, list->dmi_addr);
 	}
 
--- wireless-testing.orig/drivers/net/smc911x.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/smc911x.c	2009-06-13 12:29:43.000000000 +0200
@@ -1323,7 +1323,7 @@  static void smc911x_set_multicast_list(s
 	 * I don't need to zero the multicast table, because the flag is
 	 * checked before the table is
 	 */
-	else if (dev->flags & IFF_ALLMULTI || dev->mc_count > 16) {
+	else if (dev->flags & IFF_ALLMULTI || dev->mc.count > 16) {
 		DBG(SMC_DEBUG_MISC, "%s: RCR_ALMUL\n", dev->name);
 		mcr |= MAC_CR_MCPAS_;
 	}
@@ -1340,7 +1340,7 @@  static void smc911x_set_multicast_list(s
 	 * the number of the 32 bit register, while the low 5 bits are the bit
 	 * within that register.
 	 */
-	else if (dev->mc_count)  {
+	else if (dev->mc.count)  {
 		int i;
 		struct dev_mc_list *cur_addr;
 
@@ -1350,8 +1350,8 @@  static void smc911x_set_multicast_list(s
 		/* start with a table of all zeros: reject all */
 		memset(multicast_table, 0, sizeof(multicast_table));
 
-		cur_addr = dev->mc_list;
-		for (i = 0; i < dev->mc_count; i++, cur_addr = cur_addr->next) {
+		cur_addr = dev->mc.list;
+		for (i = 0; i < dev->mc.count; i++, cur_addr = cur_addr->next) {
 			u32 position;
 
 			/* do we have a pointer here? */
--- wireless-testing.orig/drivers/net/smc9194.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/smc9194.c	2009-06-13 12:29:43.000000000 +0200
@@ -1540,7 +1540,7 @@  static void smc_set_multicast_list(struc
 	/* We just get all multicast packets even if we only want them
 	 . from one source.  This will be changed at some future
 	 . point. */
-	else if (dev->mc_count )  {
+	else if (dev->mc.count)  {
 		/* support hardware multicasting */
 
 		/* be sure I get rid of flags I might have set */
@@ -1548,7 +1548,7 @@  static void smc_set_multicast_list(struc
 			ioaddr + RCR );
 		/* NOTE: this has to set the bank, so make sure it is the
 		   last thing called.  The bank is set to zero at the top */
-		smc_setmulticast( ioaddr, dev->mc_count, dev->mc_list );
+		smc_setmulticast( ioaddr, dev->mc.count, dev->mc.list);
 	}
 	else  {
 		outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL),
--- wireless-testing.orig/drivers/net/smc91x.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/smc91x.c	2009-06-13 12:29:43.000000000 +0200
@@ -1391,7 +1391,7 @@  static void smc_set_multicast_list(struc
 	 * I don't need to zero the multicast table, because the flag is
 	 * checked before the table is
 	 */
-	else if (dev->flags & IFF_ALLMULTI || dev->mc_count > 16) {
+	else if (dev->flags & IFF_ALLMULTI || dev->mc.count > 16) {
 		DBG(2, "%s: RCR_ALMUL\n", dev->name);
 		lp->rcr_cur_mode |= RCR_ALMUL;
 	}
@@ -1408,7 +1408,7 @@  static void smc_set_multicast_list(struc
 	 * the number of the 8 bit register, while the low 3 bits are the bit
 	 * within that register.
 	 */
-	else if (dev->mc_count)  {
+	else if (dev->mc.count)  {
 		int i;
 		struct dev_mc_list *cur_addr;
 
@@ -1418,8 +1418,8 @@  static void smc_set_multicast_list(struc
 		/* start with a table of all zeros: reject all */
 		memset(multicast_table, 0, sizeof(multicast_table));
 
-		cur_addr = dev->mc_list;
-		for (i = 0; i < dev->mc_count; i++, cur_addr = cur_addr->next) {
+		cur_addr = dev->mc.list;
+		for (i = 0; i < dev->mc.count; i++, cur_addr = cur_addr->next) {
 			int position;
 
 			/* do we have a pointer here? */
--- wireless-testing.orig/drivers/net/smsc911x.c	2009-04-16 02:16:35.000000000 +0200
+++ wireless-testing/drivers/net/smsc911x.c	2009-06-13 12:29:43.000000000 +0200
@@ -1370,12 +1370,12 @@  static void smsc911x_set_multicast_list(
 		pdata->clear_bits_mask = (MAC_CR_PRMS_ | MAC_CR_HPFILT_);
 		pdata->hashhi = 0;
 		pdata->hashlo = 0;
-	} else if (dev->mc_count > 0) {
+	} else if (dev->mc.count > 0) {
 		/* Enabling specific multicast addresses */
 		unsigned int hash_high = 0;
 		unsigned int hash_low = 0;
 		unsigned int count = 0;
-		struct dev_mc_list *mc_list = dev->mc_list;
+		struct dev_mc_list *mc_list = dev->mc.list;
 
 		pdata->set_bits_mask = MAC_CR_HPFILT_;
 		pdata->clear_bits_mask = (MAC_CR_PRMS_ | MAC_CR_MCPAS_);
@@ -1395,8 +1395,8 @@  static void smsc911x_set_multicast_list(
 			}
 			mc_list = mc_list->next;
 		}
-		if (count != (unsigned int)dev->mc_count)
-			SMSC_WARNING(DRV, "mc_count != dev->mc_count");
+		if (count != (unsigned int)dev->mc.count)
+			SMSC_WARNING(DRV, "mc_count != dev->mc.count");
 
 		pdata->hashhi = hash_high;
 		pdata->hashlo = hash_low;
--- wireless-testing.orig/drivers/net/smsc9420.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/smsc9420.c	2009-06-13 12:29:43.000000000 +0200
@@ -1048,8 +1048,8 @@  static void smsc9420_set_multicast_list(
 		mac_cr &= (~MAC_CR_PRMS_);
 		mac_cr |= MAC_CR_MCPAS_;
 		mac_cr &= (~MAC_CR_HPFILT_);
-	} else if (dev->mc_count > 0) {
-		struct dev_mc_list *mc_list = dev->mc_list;
+	} else if (dev->mc.count > 0) {
+		struct dev_mc_list *mc_list = dev->mc.list;
 		u32 hash_lo = 0, hash_hi = 0;
 
 		smsc_dbg(HW, "Multicast filter enabled");
--- wireless-testing.orig/drivers/net/sonic.c	2009-01-13 15:05:07.000000000 +0100
+++ wireless-testing/drivers/net/sonic.c	2009-06-13 12:29:43.000000000 +0200
@@ -531,7 +531,7 @@  static void sonic_multicast_list(struct 
 {
 	struct sonic_local *lp = netdev_priv(dev);
 	unsigned int rcr;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	unsigned char *addr;
 	int i;
 
@@ -541,13 +541,13 @@  static void sonic_multicast_list(struct 
 	if (dev->flags & IFF_PROMISC) {	/* set promiscuous mode */
 		rcr |= SONIC_RCR_PRO;
 	} else {
-		if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 15)) {
+		if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 15)) {
 			rcr |= SONIC_RCR_AMC;
 		} else {
 			if (sonic_debug > 2)
-				printk("sonic_multicast_list: mc_count %d\n", dev->mc_count);
+				printk("sonic_multicast_list: mc_count %d\n", dev->mc.count);
 			sonic_set_cam_enable(dev, 1);  /* always enable our own address */
-			for (i = 1; i <= dev->mc_count; i++) {
+			for (i = 1; i <= dev->mc.count; i++) {
 				addr = dmi->dmi_addr;
 				dmi = dmi->next;
 				sonic_cda_put(dev, i, SONIC_CD_CAP0, addr[1] << 8 | addr[0]);
--- wireless-testing.orig/drivers/net/spider_net.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/spider_net.c	2009-06-13 12:29:44.000000000 +0200
@@ -645,7 +645,7 @@  spider_net_set_multi(struct net_device *
 	hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */
 	set_bit(0xfd, bitmask);
 
-	for (mc = netdev->mc_list; mc; mc = mc->next) {
+	for (mc = netdev->mc.list; mc; mc = mc->next) {
 		hash = spider_net_get_multicast_hash(netdev, mc->dmi_addr);
 		set_bit(hash, bitmask);
 	}
--- wireless-testing.orig/drivers/net/starfire.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/starfire.c	2009-06-13 12:29:44.000000000 +0200
@@ -1793,15 +1793,15 @@  static void set_rx_mode(struct net_devic
 
 	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
 		rx_mode |= AcceptAll;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter;
-	} else if (dev->mc_count <= 14) {
+	} else if (dev->mc.count <= 14) {
 		/* Use the 16 element perfect filter, skip first two entries. */
 		void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16;
 		__be16 *eaddrs;
-		for (i = 2, mclist = dev->mc_list; mclist && i < dev->mc_count + 2;
+		for (i = 2, mclist = dev->mc.list; mclist && i < dev->mc.count + 2;
 		     i++, mclist = mclist->next) {
 			eaddrs = (__be16 *)mclist->dmi_addr;
 			writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4;
@@ -1822,7 +1822,7 @@  static void set_rx_mode(struct net_devic
 		__le16 mc_filter[32] __attribute__ ((aligned(sizeof(long))));	/* Multicast hash filter */
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			/* The chip uses the upper 9 CRC bits
 			   as index into the hash table */
--- wireless-testing.orig/drivers/net/sun3_82586.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/sun3_82586.c	2009-06-13 12:29:44.000000000 +0200
@@ -413,8 +413,8 @@  static int init586(struct net_device *de
 	volatile struct iasetup_cmd_struct *ias_cmd;
 	volatile struct tdr_cmd_struct *tdr_cmd;
 	volatile struct mcsetup_cmd_struct *mc_cmd;
-	struct dev_mc_list *dmi=dev->mc_list;
-	int num_addrs=dev->mc_count;
+	struct dev_mc_list *dmi=dev->mc.list;
+	int num_addrs=dev->mc.count;
 
 	ptr = (void *) ((char *)p->scb + sizeof(struct scb_struct));
 
--- wireless-testing.orig/drivers/net/sun3lance.c	2009-02-17 22:07:37.000000000 +0100
+++ wireless-testing/drivers/net/sun3lance.c	2009-06-13 12:29:44.000000000 +0200
@@ -912,7 +912,7 @@  static void set_multicast_list( struct n
 		REGA( CSR15 ) = 0x8000; /* Set promiscuous mode */
 	} else {
 		short multicast_table[4];
-		int num_addrs = dev->mc_count;
+		int num_addrs = dev->mc.count;
 		int i;
 		/* We don't use the multicast table, but rely on upper-layer
 		 * filtering. */
--- wireless-testing.orig/drivers/net/sunbmac.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sunbmac.c	2009-06-13 12:29:44.000000000 +0200
@@ -999,7 +999,7 @@  static void bigmac_set_multicast(struct 
 {
 	struct bigmac *bp = netdev_priv(dev);
 	void __iomem *bregs = bp->bregs;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	u32 tmp, crc;
@@ -1013,7 +1013,7 @@  static void bigmac_set_multicast(struct 
 	while ((sbus_readl(bregs + BMAC_RXCFG) & BIGMAC_RXCFG_ENABLE) != 0)
 		udelay(20);
 
-	if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+	if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 		sbus_writel(0xffff, bregs + BMAC_HTABLE0);
 		sbus_writel(0xffff, bregs + BMAC_HTABLE1);
 		sbus_writel(0xffff, bregs + BMAC_HTABLE2);
@@ -1028,7 +1028,7 @@  static void bigmac_set_multicast(struct 
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/sundance.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sundance.c	2009-06-13 12:29:44.000000000 +0200
@@ -1514,18 +1514,18 @@  static void set_rx_mode(struct net_devic
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAll | AcceptMyPhys;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 			   ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
-	} else if (dev->mc_count) {
+	} else if (dev->mc.count) {
 		struct dev_mc_list *mclist;
 		int bit;
 		int index;
 		int crc;
 		memset (mc_filter, 0, sizeof (mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr);
 			for (index=0, bit=0; bit < 6; bit++, crc <<= 1)
--- wireless-testing.orig/drivers/net/sungem.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sungem.c	2009-06-13 12:29:45.000000000 +0200
@@ -1837,7 +1837,7 @@  static u32 gem_setup_multicast(struct ge
 	int i;
 
 	if ((gp->dev->flags & IFF_ALLMULTI) ||
-	    (gp->dev->mc_count > 256)) {
+	    (gp->dev->mc.count > 256)) {
 	    	for (i=0; i<16; i++)
 			writel(0xffff, gp->regs + MAC_HASH0 + (i << 2));
 		rxcfg |= MAC_RXCFG_HFE;
@@ -1846,13 +1846,13 @@  static u32 gem_setup_multicast(struct ge
 	} else {
 		u16 hash_table[16];
 		u32 crc;
-		struct dev_mc_list *dmi = gp->dev->mc_list;
+		struct dev_mc_list *dmi = gp->dev->mc.list;
 		int i;
 
 		for (i = 0; i < 16; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < gp->dev->mc_count; i++) {
+		for (i = 0; i < gp->dev->mc.count; i++) {
 			char *addrs = dmi->dmi_addr;
 
 			dmi = dmi->next;
--- wireless-testing.orig/drivers/net/sunhme.c	2009-04-01 23:46:22.000000000 +0200
+++ wireless-testing/drivers/net/sunhme.c	2009-06-13 12:29:45.000000000 +0200
@@ -1510,14 +1510,14 @@  static int happy_meal_init(struct happy_
 
 	HMD(("htable, "));
 	if ((hp->dev->flags & IFF_ALLMULTI) ||
-	    (hp->dev->mc_count > 64)) {
+	    (hp->dev->mc.count > 64)) {
 		hme_write32(hp, bregs + BMAC_HTABLE0, 0xffff);
 		hme_write32(hp, bregs + BMAC_HTABLE1, 0xffff);
 		hme_write32(hp, bregs + BMAC_HTABLE2, 0xffff);
 		hme_write32(hp, bregs + BMAC_HTABLE3, 0xffff);
 	} else if ((hp->dev->flags & IFF_PROMISC) == 0) {
 		u16 hash_table[4];
-		struct dev_mc_list *dmi = hp->dev->mc_list;
+		struct dev_mc_list *dmi = hp->dev->mc.list;
 		char *addrs;
 		int i;
 		u32 crc;
@@ -1525,7 +1525,7 @@  static int happy_meal_init(struct happy_
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < hp->dev->mc_count; i++) {
+		for (i = 0; i < hp->dev->mc.count; i++) {
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 
@@ -2356,14 +2356,14 @@  static void happy_meal_set_multicast(str
 {
 	struct happy_meal *hp = netdev_priv(dev);
 	void __iomem *bregs = hp->bigmacregs;
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	u32 crc;
 
 	spin_lock_irq(&hp->happy_lock);
 
-	if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+	if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 		hme_write32(hp, bregs + BMAC_HTABLE0, 0xffff);
 		hme_write32(hp, bregs + BMAC_HTABLE1, 0xffff);
 		hme_write32(hp, bregs + BMAC_HTABLE2, 0xffff);
@@ -2377,7 +2377,7 @@  static void happy_meal_set_multicast(str
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/sunlance.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sunlance.c	2009-06-13 12:29:45.000000000 +0200
@@ -1170,7 +1170,7 @@  static int lance_start_xmit(struct sk_bu
 static void lance_load_multicast(struct net_device *dev)
 {
 	struct lance_private *lp = netdev_priv(dev);
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	char *addrs;
 	int i;
 	u32 crc;
@@ -1196,7 +1196,7 @@  static void lance_load_multicast(struct 
 		return;
 
 	/* Add addresses */
-	for (i = 0; i < dev->mc_count; i++) {
+	for (i = 0; i < dev->mc.count; i++) {
 		addrs = dmi->dmi_addr;
 		dmi   = dmi->next;
 
--- wireless-testing.orig/drivers/net/sunqe.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sunqe.c	2009-06-13 12:29:45.000000000 +0200
@@ -627,7 +627,7 @@  static int qe_start_xmit(struct sk_buff 
 static void qe_set_multicast(struct net_device *dev)
 {
 	struct sunqe *qep = netdev_priv(dev);
-	struct dev_mc_list *dmi = dev->mc_list;
+	struct dev_mc_list *dmi = dev->mc.list;
 	u8 new_mconfig = qep->mconfig;
 	char *addrs;
 	int i;
@@ -636,7 +636,7 @@  static void qe_set_multicast(struct net_
 	/* Lock out others. */
 	netif_stop_queue(dev);
 
-	if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+	if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 64)) {
 		sbus_writeb(MREGS_IACONFIG_ACHNGE | MREGS_IACONFIG_LARESET,
 			    qep->mregs + MREGS_IACONFIG);
 		while ((sbus_readb(qep->mregs + MREGS_IACONFIG) & MREGS_IACONFIG_ACHNGE) != 0)
@@ -653,7 +653,7 @@  static void qe_set_multicast(struct net_
 		for (i = 0; i < 4; i++)
 			hash_table[i] = 0;
 
-		for (i = 0; i < dev->mc_count; i++) {
+		for (i = 0; i < dev->mc.count; i++) {
 			addrs = dmi->dmi_addr;
 			dmi = dmi->next;
 
--- wireless-testing.orig/drivers/net/sunvnet.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/sunvnet.c	2009-06-13 12:29:45.000000000 +0200
@@ -765,7 +765,7 @@  static void __update_mc_list(struct vnet
 {
 	struct dev_addr_list *p;
 
-	for (p = dev->mc_list; p; p = p->next) {
+	for (p = dev->mc.list; p; p = p->next) {
 		struct vnet_mcast_entry *m;
 
 		m = __vnet_mc_find(vp, p->dmi_addr);
--- wireless-testing.orig/drivers/net/tc35815.c	2009-04-23 00:20:41.000000000 +0200
+++ wireless-testing/drivers/net/tc35815.c	2009-06-13 12:29:45.000000000 +0200
@@ -2217,18 +2217,18 @@  tc35815_set_multicast_list(struct net_de
 		/* Enable promiscuous mode */
 		tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc | CAM_StationAcc, &tr->CAM_Ctl);
 	} else if ((dev->flags & IFF_ALLMULTI) ||
-		  dev->mc_count > CAM_ENTRY_MAX - 3) {
+		  dev->mc.count > CAM_ENTRY_MAX - 3) {
 		/* CAM 0, 1, 20 are reserved. */
 		/* Disable promiscuous mode, use normal mode. */
 		tc_writel(CAM_CompEn | CAM_BroadAcc | CAM_GroupAcc, &tr->CAM_Ctl);
-	} else if (dev->mc_count) {
-		struct dev_mc_list *cur_addr = dev->mc_list;
+	} else if (dev->mc.count) {
+		struct dev_mc_list *cur_addr = dev->mc.list;
 		int i;
 		int ena_bits = CAM_Ena_Bit(CAM_ENTRY_SOURCE);
 
 		tc_writel(0, &tr->CAM_Ctl);
 		/* Walk the address list, and load the filter */
-		for (i = 0; i < dev->mc_count; i++, cur_addr = cur_addr->next) {
+		for (i = 0; i < dev->mc.count; i++, cur_addr = cur_addr->next) {
 			if (!cur_addr)
 				break;
 			/* entry 0,1 is reserved. */
--- wireless-testing.orig/drivers/net/tehuti.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tehuti.c	2009-06-13 12:29:45.000000000 +0200
@@ -808,7 +808,7 @@  static void bdx_setmulti(struct net_devi
 		/* set IMF to accept all multicast frmaes */
 		for (i = 0; i < MAC_MCST_HASH_NUM; i++)
 			WRITE_REG(priv, regRX_MCST_HASH0 + i * 4, ~0);
-	} else if (ndev->mc_count) {
+	} else if (ndev->mc.count) {
 		u8 hash;
 		struct dev_mc_list *mclist;
 		u32 reg, val;
@@ -826,7 +826,7 @@  static void bdx_setmulti(struct net_devi
 		/* TBD: sort addreses and write them in ascending order
 		 * into RX_MAC_MCST regs. we skip this phase now and accept ALL
 		 * multicast frames throu IMF */
-		mclist = ndev->mc_list;
+		mclist = ndev->mc.list;
 
 		/* accept the rest of addresses throu IMF */
 		for (; mclist; mclist = mclist->next) {
@@ -840,7 +840,7 @@  static void bdx_setmulti(struct net_devi
 		}
 
 	} else {
-		DBG("only own mac %d\n", ndev->mc_count);
+		DBG("only own mac %d\n", ndev->mc.count);
 		rxf_val |= GMAC_RX_FILTER_AB;
 	}
 	WRITE_REG(priv, regGMAC_RXF_A, rxf_val);
--- wireless-testing.orig/drivers/net/tg3.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/tg3.c	2009-06-13 12:29:45.000000000 +0200
@@ -8397,7 +8397,7 @@  static void __tg3_set_rx_mode(struct net
 	} else if (dev->flags & IFF_ALLMULTI) {
 		/* Accept all multicast. */
 		tg3_set_multi (tp, 1);
-	} else if (dev->mc_count < 1) {
+	} else if (dev->mc.count < 1) {
 		/* Reject all multicast. */
 		tg3_set_multi (tp, 0);
 	} else {
@@ -8409,7 +8409,7 @@  static void __tg3_set_rx_mode(struct net
 		u32 bit;
 		u32 crc;
 
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 
 			crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
--- wireless-testing.orig/drivers/net/tlan.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tlan.c	2009-06-13 12:29:45.000000000 +0200
@@ -1316,7 +1316,7 @@  static struct net_device_stats *TLan_Get
 
 static void TLan_SetMulticastList( struct net_device *dev )
 {
-	struct dev_mc_list	*dmi = dev->mc_list;
+	struct dev_mc_list	*dmi = dev->mc.list;
 	u32			hash1 = 0;
 	u32			hash2 = 0;
 	int			i;
@@ -1337,7 +1337,7 @@  static void TLan_SetMulticastList( struc
 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF );
 			TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF );
 		} else {
-			for ( i = 0; i < dev->mc_count; i++ ) {
+			for ( i = 0; i < dev->mc.count; i++ ) {
 				if ( i < 3 ) {
 					TLan_SetMac( dev, i + 1,
 						     (char *) &dmi->dmi_addr );
--- wireless-testing.orig/drivers/net/tokenring/3c359.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tokenring/3c359.c	2009-06-13 12:29:46.000000000 +0200
@@ -1409,7 +1409,7 @@  static void xl_set_rx_mode(struct net_de
 
 	dev_mc_address[0] = dev_mc_address[1] = dev_mc_address[2] = dev_mc_address[3] = 0 ;
 
-        for (i=0,dmi=dev->mc_list;i < dev->mc_count; i++,dmi = dmi->next) {
+        for (i=0,dmi=dev->mc.list;i < dev->mc.count; i++,dmi = dmi->next) {
                 dev_mc_address[0] |= dmi->dmi_addr[2] ;
                 dev_mc_address[1] |= dmi->dmi_addr[3] ;
                 dev_mc_address[2] |= dmi->dmi_addr[4] ;
--- wireless-testing.orig/drivers/net/tokenring/ibmtr.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tokenring/ibmtr.c	2009-06-13 12:29:46.000000000 +0200
@@ -993,8 +993,8 @@  static void tok_set_multicast_list(struc
 	/*BMS ifconfig tr down or hot unplug a PCMCIA card ??hownowbrowncow*/
 	if (/*BMSHELPdev->start == 0 ||*/ ti->open_status != OPEN) return;
 	address[0] = address[1] = address[2] = address[3] = 0;
-	mclist = dev->mc_list;
-	for (i = 0; i < dev->mc_count; i++) {
+	mclist = dev->mc.list;
+	for (i = 0; i < dev->mc.count; i++) {
 		address[0] |= mclist->dmi_addr[2];
 		address[1] |= mclist->dmi_addr[3];
 		address[2] |= mclist->dmi_addr[4];
--- wireless-testing.orig/drivers/net/tokenring/lanstreamer.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tokenring/lanstreamer.c	2009-06-13 12:30:14.000000000 +0200
@@ -1301,7 +1301,7 @@  static void streamer_set_rx_mode(struct 
 	writel(streamer_priv->srb,streamer_mmio+LAPA);
 	dev_mc_address[0] = dev_mc_address[1] = dev_mc_address[2] = dev_mc_address[3] = 0 ; 
   
-	for (i=0,dmi=dev->mc_list;i < dev->mc_count; i++,dmi = dmi->next) 
+	for (i=0,dmi=dev->mc.list;i < dev->mc.count; i++,dmi = dmi->next)
 	{ 
    	        dev_mc_address[0] |= dmi->dmi_addr[2] ; 
 		dev_mc_address[1] |= dmi->dmi_addr[3] ; 
--- wireless-testing.orig/drivers/net/tokenring/olympic.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tokenring/olympic.c	2009-06-13 12:30:10.000000000 +0200
@@ -1176,7 +1176,7 @@  static void olympic_set_rx_mode(struct n
 
 	dev_mc_address[0] = dev_mc_address[1] = dev_mc_address[2] = dev_mc_address[3] = 0 ; 
 
-	for (i=0,dmi=dev->mc_list;i < dev->mc_count; i++,dmi = dmi->next) { 
+	for (i=0,dmi=dev->mc.list;i < dev->mc.count; i++,dmi = dmi->next) {
 		dev_mc_address[0] |= dmi->dmi_addr[2] ; 
 		dev_mc_address[1] |= dmi->dmi_addr[3] ; 
 		dev_mc_address[2] |= dmi->dmi_addr[4] ; 
--- wireless-testing.orig/drivers/net/tokenring/tms380tr.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tokenring/tms380tr.c	2009-06-13 12:29:46.000000000 +0200
@@ -1210,8 +1210,8 @@  static void tms380tr_set_multicast_list(
 		else
 		{
 			int i;
-			struct dev_mc_list *mclist = dev->mc_list;
-			for (i=0; i< dev->mc_count; i++)
+			struct dev_mc_list *mclist = dev->mc.list;
+			for (i=0; i< dev->mc.count; i++)
 			{
 				((char *)(&tp->ocpl.FunctAddr))[0] |=
 					mclist->dmi_addr[2];
--- wireless-testing.orig/drivers/net/tsi108_eth.c	2009-04-23 00:20:42.000000000 +0200
+++ wireless-testing/drivers/net/tsi108_eth.c	2009-06-13 12:29:46.000000000 +0200
@@ -1184,9 +1184,9 @@  static void tsi108_set_rx_mode(struct ne
 
 	rxcfg &= ~(TSI108_EC_RXCFG_UFE | TSI108_EC_RXCFG_MFE);
 
-	if (dev->flags & IFF_ALLMULTI || dev->mc_count) {
+	if (dev->flags & IFF_ALLMULTI || dev->mc.count) {
 		int i;
-		struct dev_mc_list *mc = dev->mc_list;
+		struct dev_mc_list *mc = dev->mc.list;
 		rxcfg |= TSI108_EC_RXCFG_MFE | TSI108_EC_RXCFG_MC_HASH;
 
 		memset(data->mc_hash, 0, sizeof(data->mc_hash));
--- wireless-testing.orig/drivers/net/tulip/de2104x.c	2009-02-17 22:07:37.000000000 +0100
+++ wireless-testing/drivers/net/tulip/de2104x.c	2009-06-13 12:29:46.000000000 +0200
@@ -662,7 +662,7 @@  static void build_setup_frame_hash(u16 *
 	memset(hash_table, 0, sizeof(hash_table));
 	set_bit_le(255, hash_table); 			/* Broadcast entry */
 	/* This should work on big-endian machines as well. */
-	for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+	for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 	     i++, mclist = mclist->next) {
 		int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
 
@@ -691,7 +691,7 @@  static void build_setup_frame_perfect(u1
 
 	/* We have <= 14 addresses so we can use the wonderful
 	   16 address perfect filtering of the Tulip. */
-	for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
+	for (i = 0, mclist = dev->mc.list; i < dev->mc.count;
 	     i++, mclist = mclist->next) {
 		eaddrs = (u16 *)mclist->dmi_addr;
 		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
@@ -726,7 +726,7 @@  static void __de_set_rx_mode (struct net
 		goto out;
 	}
 
-	if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
+	if ((dev->mc.count > 1000) || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter well -- accept all multicasts. */
 		macmode |= AcceptAllMulticast;
 		goto out;
@@ -734,7 +734,7 @@  static void __de_set_rx_mode (struct net
 
 	/* Note that only the low-address shortword of setup_frame is valid!
 	   The values are doubled for big-endian architectures. */
-	if (dev->mc_count > 14)	/* Must use a multicast hash table. */
+	if (dev->mc.count > 14)	/* Must use a multicast hash table. */
 		build_setup_frame_hash (de->setup_frame, dev);
 	else
 		build_setup_frame_perfect (de->setup_frame, dev);
--- wireless-testing.orig/drivers/net/tulip/de4x5.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tulip/de4x5.c	2009-06-13 12:29:46.000000000 +0200
@@ -1952,7 +1952,7 @@  static void
 SetMulticastFilter(struct net_device *dev)
 {
     struct de4x5_private *lp = netdev_priv(dev);
-    struct dev_mc_list *dmi=dev->mc_list;
+    struct dev_mc_list *dmi=dev->mc.list;
     u_long iobase = dev->base_addr;
     int i, j, bit, byte;
     u16 hashcode;
@@ -1964,10 +1964,10 @@  SetMulticastFilter(struct net_device *de
     omr &= ~(OMR_PR | OMR_PM);
     pa = build_setup_frame(dev, ALL);        /* Build the basic frame */
 
-    if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 14)) {
+    if ((dev->flags & IFF_ALLMULTI) || (dev->mc.count > 14)) {
 	omr |= OMR_PM;                       /* Pass all multicasts */
     } else if (lp->setup_f == HASH_PERF) {   /* Hash Filtering */
-	for (i=0;i<dev->mc_count;i++) {      /* for each address in the list */
+	for (i=0;i<dev->mc.count;i++) {      /* for each address in the list */
 	    addrs=dmi->dmi_addr;
 	    dmi=dmi->next;
 	    if ((*addrs & 0x01) == 1) {      /* multicast address? */
@@ -1985,7 +1985,7 @@  SetMulticastFilter(struct net_device *de
 	    }
 	}
     } else {                                 /* Perfect filtering */
-	for (j=0; j<dev->mc_count; j++) {
+	for (j=0; j<dev->mc.count; j++) {
 	    addrs=dmi->dmi_addr;
 	    dmi=dmi->next;
 	    for (i=0; i<ETH_ALEN; i++) {
--- wireless-testing.orig/drivers/net/tulip/dmfe.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tulip/dmfe.c	2009-06-13 12:29:46.000000000 +0200
@@ -639,9 +639,9 @@  static void dmfe_init_dm910x(struct DEVI
 
 	/* Send setup frame */
 	if (db->chip_id == PCI_DM9132_ID)
-		dm9132_id_table(dev, dev->mc_count);	/* DM9132 */
+		dm9132_id_table(dev, dev->mc.count);	/* DM9132 */
 	else
-		send_filter_frame(dev, dev->mc_count);	/* DM9102/DM9102A */
+		send_filter_frame(dev, dev->mc.count);	/* DM9102/DM9102A */
 
 	/* Init CR7, interrupt active bit */
 	db->cr7_data = CR7_DEFAULT;
@@ -1046,19 +1046,19 @@  static void dmfe_set_filter_mode(struct 
 		return;
 	}
 
-	if (dev->flags & IFF_ALLMULTI || dev->mc_count > DMFE_MAX_MULTICAST) {
-		DMFE_DBUG(0, "Pass all multicast address", dev->mc_count);
+	if (dev->flags & IFF_ALLMULTI || dev->mc.count > DMFE_MAX_MULTICAST) {
+		DMFE_DBUG(0, "Pass all multicast address", dev->mc.count);
 		db->cr6_data &= ~(CR6_PM | CR6_PBF);
 		db->cr6_data |= CR6_PAM;
 		spin_unlock_irqrestore(&db->lock, flags);
 		return;
 	}
 
-	DMFE_DBUG(0, "Set multicast address", dev->mc_count);
+	DMFE_DBUG(0, "Set multicast address", dev->mc.count);
 	if (db->chip_id == PCI_DM9132_ID)
-		dm9132_id_table(dev, dev->mc_count);	/* DM9132 */
+		dm9132_id_table(dev, dev->mc.count);	/* DM9132 */
 	else
-		send_filter_frame(dev, dev->mc_count); 	/* DM9102/DM9102A */
+		send_filter_frame(dev, dev->mc.count); 	/* DM9102/DM9102A */
 	spin_unlock_irqrestore(&db->lock, flags);
 }
 
@@ -1461,7 +1461,7 @@  static void dm9132_id_table(struct DEVIC
 	hash_table[3] = 0x8000;
 
 	/* the multicast address in Hash Table : 64 bits */
-	for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
+	for (mcptr = dev->mc.list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
 		hash_val = cal_CRC( (char *) mcptr->dmi_addr, 6, 0) & 0x3f;
 		hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16);
 	}
@@ -1503,7 +1503,7 @@  static void send_filter_frame(struct DEV
 	*suptr++ = 0xffff;
 
 	/* fit the multicast address */
-	for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
+	for (mcptr = dev->mc.list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
 		addrptr = (u16 *) mcptr->dmi_addr;
 		*suptr++ = addrptr[0];
 		*suptr++ = addrptr[1];
--- wireless-testing.orig/drivers/net/tulip/tulip_core.c	2009-04-02 03:29:39.000000000 +0200
+++ wireless-testing/drivers/net/tulip/tulip_core.c	2009-06-13 12:29:46.000000000 +0200
@@ -980,7 +980,7 @@  static void build_setup_frame_hash(u16 *
 	memset(hash_table, 0, sizeof(hash_table));
 	set_bit_le(255, hash_table); 			/* Broadcast entry */
 	/* This should work on big-endian machines as well. */
-	for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+	for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 	     i++, mclist = mclist->next) {
 		int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
 
@@ -1009,7 +1009,7 @@  static void build_setup_frame_perfect(u1
 
 	/* We have <= 14 addresses so we can use the wonderful
 	   16 address perfect filtering of the Tulip. */
-	for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
+	for (i = 0, mclist = dev->mc.list; i < dev->mc.count;
 	     i++, mclist = mclist->next) {
 		eaddrs = (u16 *)mclist->dmi_addr;
 		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
@@ -1040,7 +1040,7 @@  static void set_rx_mode(struct net_devic
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
 		csr6 |= AcceptAllMulticast | AcceptAllPhys;
-	} else if ((dev->mc_count > 1000)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.count > 1000)  ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter well -- accept all multicasts. */
 		tp->csr6 |= AcceptAllMulticast;
 		csr6 |= AcceptAllMulticast;
@@ -1049,13 +1049,13 @@  static void set_rx_mode(struct net_devic
 		/* Should verify correctness on big-endian/__powerpc__ */
 		struct dev_mc_list *mclist;
 		int i;
-		if (dev->mc_count > 64) {		/* Arbitrary non-effective limit. */
+		if (dev->mc.count > 64) {		/* Arbitrary non-effective limit. */
 			tp->csr6 |= AcceptAllMulticast;
 			csr6 |= AcceptAllMulticast;
 		} else {
 			u32 mc_filter[2] = {0, 0};		 /* Multicast hash filter */
 			int filterbit;
-			for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+			for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 				 i++, mclist = mclist->next) {
 				if (tp->flags & COMET_MAC_ADDR)
 					filterbit = ether_crc_le(ETH_ALEN, mclist->dmi_addr);
@@ -1090,7 +1090,7 @@  static void set_rx_mode(struct net_devic
 
 		/* Note that only the low-address shortword of setup_frame is valid!
 		   The values are doubled for big-endian architectures. */
-		if (dev->mc_count > 14) { /* Must use a multicast hash table. */
+		if (dev->mc.count > 14) { /* Must use a multicast hash table. */
 			build_setup_frame_hash(tp->setup_frame, dev);
 			tx_flags = 0x08400000 | 192;
 		} else {
--- wireless-testing.orig/drivers/net/tulip/uli526x.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tulip/uli526x.c	2009-06-13 12:29:46.000000000 +0200
@@ -547,7 +547,7 @@  static void uli526x_init(struct net_devi
 	update_cr6(db->cr6_data, ioaddr);
 
 	/* Send setup frame */
-	send_filter_frame(dev, dev->mc_count);	/* M5261/M5263 */
+	send_filter_frame(dev, dev->mc.count);	/* M5261/M5263 */
 
 	/* Init CR7, interrupt active bit */
 	db->cr7_data = CR7_DEFAULT;
@@ -895,16 +895,16 @@  static void uli526x_set_filter_mode(stru
 		return;
 	}
 
-	if (dev->flags & IFF_ALLMULTI || dev->mc_count > ULI5261_MAX_MULTICAST) {
-		ULI526X_DBUG(0, "Pass all multicast address", dev->mc_count);
+	if (dev->flags & IFF_ALLMULTI || dev->mc.count > ULI5261_MAX_MULTICAST) {
+		ULI526X_DBUG(0, "Pass all multicast address", dev->mc.count);
 		db->cr6_data &= ~(CR6_PM | CR6_PBF);
 		db->cr6_data |= CR6_PAM;
 		spin_unlock_irqrestore(&db->lock, flags);
 		return;
 	}
 
-	ULI526X_DBUG(0, "Set multicast address", dev->mc_count);
-	send_filter_frame(dev, dev->mc_count); 	/* M5261/M5263 */
+	ULI526X_DBUG(0, "Set multicast address", dev->mc.count);
+	send_filter_frame(dev, dev->mc.count); 	/* M5261/M5263 */
 	spin_unlock_irqrestore(&db->lock, flags);
 }
 
@@ -1403,7 +1403,7 @@  static void send_filter_frame(struct net
 	*suptr++ = 0xffff << FLT_SHIFT;
 
 	/* fit the multicast address */
-	for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
+	for (mcptr = dev->mc.list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
 		addrptr = (u16 *) mcptr->dmi_addr;
 		*suptr++ = addrptr[0] << FLT_SHIFT;
 		*suptr++ = addrptr[1] << FLT_SHIFT;
--- wireless-testing.orig/drivers/net/tulip/winbond-840.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/tulip/winbond-840.c	2009-06-13 12:29:46.000000000 +0200
@@ -1357,7 +1357,7 @@  static u32 __set_rx_mode(struct net_devi
 		memset(mc_filter, 0xff, sizeof(mc_filter));
 		rx_mode = RxAcceptBroadcast | AcceptMulticast | RxAcceptAllPhys
 			| AcceptMyPhys;
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 			   ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		memset(mc_filter, 0xff, sizeof(mc_filter));
@@ -1366,7 +1366,7 @@  static u32 __set_rx_mode(struct net_devi
 		struct dev_mc_list *mclist;
 		int i;
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			int filterbit = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26) ^ 0x3F;
 			filterbit &= 0x3f;
--- wireless-testing.orig/drivers/net/typhoon.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/typhoon.c	2009-06-13 12:29:46.000000000 +0200
@@ -923,16 +923,16 @@  typhoon_set_rx_mode(struct net_device *d
 	filter = TYPHOON_RX_FILTER_DIRECTED | TYPHOON_RX_FILTER_BROADCAST;
 	if(dev->flags & IFF_PROMISC) {
 		filter |= TYPHOON_RX_FILTER_PROMISCOUS;
-	} else if((dev->mc_count > multicast_filter_limit) ||
+	} else if((dev->mc.count > multicast_filter_limit) ||
 		  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		filter |= TYPHOON_RX_FILTER_ALL_MCAST;
-	} else if(dev->mc_count) {
+	} else if(dev->mc.count) {
 		struct dev_mc_list *mclist;
 		int i;
 
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for(i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for(i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		    i++, mclist = mclist->next) {
 			int bit = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f;
 			mc_filter[bit >> 5] |= 1 << (bit & 0x1f);
--- wireless-testing.orig/drivers/net/ucc_geth.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/ucc_geth.c	2009-06-13 12:29:46.000000000 +0200
@@ -1969,9 +1969,9 @@  static void ucc_geth_set_multi(struct ne
 			out_be32(&p_82xx_addr_filt->gaddr_h, 0x0);
 			out_be32(&p_82xx_addr_filt->gaddr_l, 0x0);
 
-			dmi = dev->mc_list;
+			dmi = dev->mc.list;
 
-			for (i = 0; i < dev->mc_count; i++, dmi = dmi->next) {
+			for (i = 0; i < dev->mc.count; i++, dmi = dmi->next) {
 
 				/* Only support group multicast for now.
 				 */
--- wireless-testing.orig/drivers/net/usb/asix.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/asix.c	2009-06-13 12:29:46.000000000 +0200
@@ -542,23 +542,23 @@  static void asix_set_multicast(struct ne
 	if (net->flags & IFF_PROMISC) {
 		rx_ctl |= AX_RX_CTL_PRO;
 	} else if (net->flags & IFF_ALLMULTI
-		   || net->mc_count > AX_MAX_MCAST) {
+		   || net->mc.count > AX_MAX_MCAST) {
 		rx_ctl |= AX_RX_CTL_AMALL;
-	} else if (net->mc_count == 0) {
+	} else if (net->mc.count == 0) {
 		/* just broadcast and directed */
 	} else {
 		/* We use the 20 byte dev->data
 		 * for our 8 byte filter buffer
 		 * to avoid allocating memory that
 		 * is tricky to free later */
-		struct dev_mc_list *mc_list = net->mc_list;
+		struct dev_mc_list *mc_list = net->mc.list;
 		u32 crc_bits;
 		int i;
 
 		memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE);
 
 		/* Build the multicast hash filter. */
-		for (i = 0; i < net->mc_count; i++) {
+		for (i = 0; i < net->mc.count; i++) {
 			crc_bits =
 			    ether_crc(ETH_ALEN,
 				      mc_list->dmi_addr) >> 26;
@@ -754,23 +754,23 @@  static void ax88172_set_multicast(struct
 	if (net->flags & IFF_PROMISC) {
 		rx_ctl |= 0x01;
 	} else if (net->flags & IFF_ALLMULTI
-		   || net->mc_count > AX_MAX_MCAST) {
+		   || net->mc.count > AX_MAX_MCAST) {
 		rx_ctl |= 0x02;
-	} else if (net->mc_count == 0) {
+	} else if (net->mc.count == 0) {
 		/* just broadcast and directed */
 	} else {
 		/* We use the 20 byte dev->data
 		 * for our 8 byte filter buffer
 		 * to avoid allocating memory that
 		 * is tricky to free later */
-		struct dev_mc_list *mc_list = net->mc_list;
+		struct dev_mc_list *mc_list = net->mc.list;
 		u32 crc_bits;
 		int i;
 
 		memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE);
 
 		/* Build the multicast hash filter. */
-		for (i = 0; i < net->mc_count; i++) {
+		for (i = 0; i < net->mc.count; i++) {
 			crc_bits =
 			    ether_crc(ETH_ALEN,
 				      mc_list->dmi_addr) >> 26;
--- wireless-testing.orig/drivers/net/usb/catc.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/catc.c	2009-06-13 12:29:46.000000000 +0200
@@ -647,7 +647,7 @@  static void catc_set_multicast_list(stru
 	if (netdev->flags & IFF_ALLMULTI) {
 		memset(catc->multicast, 0xff, 64);
 	} else {
-		for (i = 0, mc = netdev->mc_list; mc && i < netdev->mc_count; i++, mc = mc->next) {
+		for (i = 0, mc = netdev->mc.list; mc && i < netdev->mc.count; i++, mc = mc->next) {
 			u32 crc = ether_crc_le(6, mc->dmi_addr);
 			if (!catc->is_f5u011) {
 				catc->multicast[(crc >> 3) & 0x3f] |= 1 << (crc & 7);
--- wireless-testing.orig/drivers/net/usb/dm9601.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/dm9601.c	2009-06-13 12:29:46.000000000 +0200
@@ -381,13 +381,13 @@  static void dm9601_set_multicast(struct 
 
 	if (net->flags & IFF_PROMISC) {
 		rx_ctl |= 0x02;
-	} else if (net->flags & IFF_ALLMULTI || net->mc_count > DM_MAX_MCAST) {
+	} else if (net->flags & IFF_ALLMULTI || net->mc.count > DM_MAX_MCAST) {
 		rx_ctl |= 0x04;
-	} else if (net->mc_count) {
-		struct dev_mc_list *mc_list = net->mc_list;
+	} else if (net->mc.count) {
+		struct dev_mc_list *mc_list = net->mc.list;
 		int i;
 
-		for (i = 0; i < net->mc_count; i++, mc_list = mc_list->next) {
+		for (i = 0; i < net->mc.count; i++, mc_list = mc_list->next) {
 			u32 crc = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26;
 			hashes[crc >> 3] |= 1 << (crc & 0x7);
 		}
--- wireless-testing.orig/drivers/net/usb/kaweth.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/kaweth.c	2009-06-13 12:29:46.000000000 +0200
@@ -870,7 +870,7 @@  static void kaweth_set_rx_mode(struct ne
 	if (net->flags & IFF_PROMISC) {
 		packet_filter_bitmap |= KAWETH_PACKET_FILTER_PROMISCUOUS;
 	}
-	else if ((net->mc_count) || (net->flags & IFF_ALLMULTI)) {
+	else if ((net->mc.count) || (net->flags & IFF_ALLMULTI)) {
 		packet_filter_bitmap |= KAWETH_PACKET_FILTER_ALL_MULTICAST;
 	}
 
--- wireless-testing.orig/drivers/net/usb/mcs7830.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/mcs7830.c	2009-06-13 12:29:46.000000000 +0200
@@ -392,23 +392,23 @@  static void mcs7830_set_multicast(struct
 	if (net->flags & IFF_PROMISC) {
 		data->config |= HIF_REG_CONFIG_PROMISCIOUS;
 	} else if (net->flags & IFF_ALLMULTI
-		   || net->mc_count > MCS7830_MAX_MCAST) {
+		   || net->mc.count > MCS7830_MAX_MCAST) {
 		data->config |= HIF_REG_CONFIG_ALLMULTICAST;
-	} else if (net->mc_count == 0) {
+	} else if (net->mc.count == 0) {
 		/* just broadcast and directed */
 	} else {
 		/* We use the 20 byte dev->data
 		 * for our 8 byte filter buffer
 		 * to avoid allocating memory that
 		 * is tricky to free later */
-		struct dev_mc_list *mc_list = net->mc_list;
+		struct dev_mc_list *mc_list = net->mc.list;
 		u32 crc_bits;
 		int i;
 
 		memset(data->multi_filter, 0, sizeof data->multi_filter);
 
 		/* Build the multicast hash filter. */
-		for (i = 0; i < net->mc_count; i++) {
+		for (i = 0; i < net->mc.count; i++) {
 			crc_bits = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26;
 			data->multi_filter[crc_bits >> 3] |= 1 << (crc_bits & 7);
 			mc_list = mc_list->next;
--- wireless-testing.orig/drivers/net/usb/pegasus.c	2009-04-30 23:07:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/pegasus.c	2009-06-13 12:29:46.000000000 +0200
@@ -1214,7 +1214,7 @@  static void pegasus_set_multicast(struct
 		pegasus->eth_regs[EthCtrl2] |= RX_PROMISCUOUS;
 		if (netif_msg_link(pegasus))
 			pr_info("%s: Promiscuous mode enabled.\n", net->name);
-	} else if (net->mc_count || (net->flags & IFF_ALLMULTI)) {
+	} else if (net->mc.count || (net->flags & IFF_ALLMULTI)) {
 		pegasus->eth_regs[EthCtrl0] |= RX_MULTICAST;
 		pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS;
 		if (netif_msg_link(pegasus))
--- wireless-testing.orig/drivers/net/usb/rtl8150.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/usb/rtl8150.c	2009-06-13 12:29:46.000000000 +0200
@@ -711,7 +711,7 @@  static void rtl8150_set_multicast(struct
 	if (netdev->flags & IFF_PROMISC) {
 		dev->rx_creg |= cpu_to_le16(0x0001);
 		dev_info(&netdev->dev, "%s: promiscuous mode\n", netdev->name);
-	} else if (netdev->mc_count ||
+	} else if (netdev->mc.count ||
 		   (netdev->flags & IFF_ALLMULTI)) {
 		dev->rx_creg &= cpu_to_le16(0xfffe);
 		dev->rx_creg |= cpu_to_le16(0x0002);
--- wireless-testing.orig/drivers/net/usb/smsc95xx.c	2009-05-11 21:32:40.000000000 +0200
+++ wireless-testing/drivers/net/usb/smsc95xx.c	2009-06-13 12:29:46.000000000 +0200
@@ -389,8 +389,8 @@  static void smsc95xx_set_multicast(struc
 			devdbg(dev, "receive all multicast enabled");
 		pdata->mac_cr |= MAC_CR_MCPAS_;
 		pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_);
-	} else if (dev->net->mc_count > 0) {
-		struct dev_mc_list *mc_list = dev->net->mc_list;
+	} else if (dev->net->mc.count > 0) {
+		struct dev_mc_list *mc_list = dev->net->mc.list;
 		int count = 0;
 
 		pdata->mac_cr |= MAC_CR_HPFILT_;
@@ -411,8 +411,8 @@  static void smsc95xx_set_multicast(struc
 			mc_list = mc_list->next;
 		}
 
-		if (count != ((u32)dev->net->mc_count))
-			devwarn(dev, "mc_count != dev->mc_count");
+		if (count != ((u32)dev->net->mc.count))
+			devwarn(dev, "mc_count != dev->mc.count");
 
 		if (netif_msg_drv(dev))
 			devdbg(dev, "HASHH=0x%08X, HASHL=0x%08X", hash_hi,
--- wireless-testing.orig/drivers/net/via-rhine.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/via-rhine.c	2009-06-13 12:29:46.000000000 +0200
@@ -1673,7 +1673,7 @@  static void rhine_set_rx_mode(struct net
 		rx_mode = 0x1C;
 		iowrite32(0xffffffff, ioaddr + MulticastFilter0);
 		iowrite32(0xffffffff, ioaddr + MulticastFilter1);
-	} else if ((dev->mc_count > multicast_filter_limit)
+	} else if ((dev->mc.count > multicast_filter_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to match, or accept all multicasts. */
 		iowrite32(0xffffffff, ioaddr + MulticastFilter0);
@@ -1683,7 +1683,7 @@  static void rhine_set_rx_mode(struct net
 		struct dev_mc_list *mclist;
 		int i;
 		memset(mc_filter, 0, sizeof(mc_filter));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 		     i++, mclist = mclist->next) {
 			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
 
--- wireless-testing.orig/drivers/net/via-velocity.c	2009-04-23 00:20:43.000000000 +0200
+++ wireless-testing/drivers/net/via-velocity.c	2009-06-13 12:29:46.000000000 +0200
@@ -2283,7 +2283,7 @@  static void velocity_set_multi(struct ne
 		writel(0xffffffff, &regs->MARCAM[0]);
 		writel(0xffffffff, &regs->MARCAM[4]);
 		rx_mode = (RCR_AM | RCR_AB | RCR_PROM);
-	} else if ((dev->mc_count > vptr->multicast_limit)
+	} else if ((dev->mc.count > vptr->multicast_limit)
 		   || (dev->flags & IFF_ALLMULTI)) {
 		writel(0xffffffff, &regs->MARCAM[0]);
 		writel(0xffffffff, &regs->MARCAM[4]);
@@ -2292,7 +2292,7 @@  static void velocity_set_multi(struct ne
 		int offset = MCAM_SIZE - vptr->multicast_limit;
 		mac_get_cam_mask(regs, vptr->mCAMmask);
 
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; i++, mclist = mclist->next) {
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count; i++, mclist = mclist->next) {
 			mac_set_cam(regs, i + offset, mclist->dmi_addr);
 			vptr->mCAMmask[(offset + i) / 8] |= 1 << ((offset + i) & 7);
 		}
--- wireless-testing.orig/drivers/net/virtio_net.c	2009-05-11 21:32:40.000000000 +0200
+++ wireless-testing/drivers/net/virtio_net.c	2009-06-13 12:29:46.000000000 +0200
@@ -711,7 +711,7 @@  static void virtnet_set_rx_mode(struct n
 			 allmulti ? "en" : "dis");
 
 	/* MAC filter - use one buffer for both lists */
-	mac_data = buf = kzalloc(((dev->uc_count + dev->mc_count) * ETH_ALEN) +
+	mac_data = buf = kzalloc(((dev->uc.count + dev->mc.count) * ETH_ALEN) +
 				 (2 * sizeof(mac_data->entries)), GFP_ATOMIC);
 	if (!buf) {
 		dev_warn(&dev->dev, "No memory for MAC address buffer\n");
@@ -721,24 +721,24 @@  static void virtnet_set_rx_mode(struct n
 	sg_init_table(sg, 2);
 
 	/* Store the unicast list and count in the front of the buffer */
-	mac_data->entries = dev->uc_count;
-	addr = dev->uc_list;
-	for (i = 0; i < dev->uc_count; i++, addr = addr->next)
+	mac_data->entries = dev->uc.count;
+	addr = dev->uc.list;
+	for (i = 0; i < dev->uc.count; i++, addr = addr->next)
 		memcpy(&mac_data->macs[i][0], addr->da_addr, ETH_ALEN);
 
 	sg_set_buf(&sg[0], mac_data,
-		   sizeof(mac_data->entries) + (dev->uc_count * ETH_ALEN));
+		   sizeof(mac_data->entries) + (dev->uc.count * ETH_ALEN));
 
 	/* multicast list and count fill the end */
-	mac_data = (void *)&mac_data->macs[dev->uc_count][0];
+	mac_data = (void *)&mac_data->macs[dev->uc.count][0];
 
-	mac_data->entries = dev->mc_count;
-	addr = dev->mc_list;
-	for (i = 0; i < dev->mc_count; i++, addr = addr->next)
+	mac_data->entries = dev->mc.count;
+	addr = dev->mc.list;
+	for (i = 0; i < dev->mc.count; i++, addr = addr->next)
 		memcpy(&mac_data->macs[i][0], addr->da_addr, ETH_ALEN);
 
 	sg_set_buf(&sg[1], mac_data,
-		   sizeof(mac_data->entries) + (dev->mc_count * ETH_ALEN));
+		   sizeof(mac_data->entries) + (dev->mc.count * ETH_ALEN));
 
 	if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MAC,
 				  VIRTIO_NET_CTRL_MAC_TABLE_SET,
--- wireless-testing.orig/drivers/net/vxge/vxge-main.c	2009-04-09 10:00:18.000000000 +0200
+++ wireless-testing/drivers/net/vxge/vxge-main.c	2009-06-13 12:29:47.000000000 +0200
@@ -1167,11 +1167,11 @@  static void vxge_set_multicast(struct ne
 
 	memset(&mac_info, 0, sizeof(struct macInfo));
 	/* Update individual M_CAST address list */
-	if ((!vdev->all_multi_flg) && dev->mc_count) {
+	if ((!vdev->all_multi_flg) && dev->mc.count) {
 
 		mcast_cnt = vdev->vpaths[0].mcast_addr_cnt;
 		list_head = &vdev->vpaths[0].mac_addr_list;
-		if ((dev->mc_count +
+		if ((dev->mc.count +
 			(vdev->vpaths[0].mac_addr_cnt - mcast_cnt)) >
 				vdev->vpaths[0].max_mac_addr_cnt)
 			goto _set_all_mcast;
@@ -1206,7 +1206,7 @@  static void vxge_set_multicast(struct ne
 		}
 
 		/* Add new ones */
-		for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; i < dev->mc.count;
 			i++, mclist = mclist->next) {
 
 			memcpy(mac_info.macaddr, mclist->dmi_addr, ETH_ALEN);
--- wireless-testing.orig/drivers/net/wireless/airo.c	2009-05-30 01:38:26.000000000 +0200
+++ wireless-testing/drivers/net/wireless/airo.c	2009-06-13 12:29:47.000000000 +0200
@@ -2303,7 +2303,7 @@  static void airo_set_multicast_list(stru
 			airo_set_promisc(ai);
 	}
 
-	if ((dev->flags&IFF_ALLMULTI)||dev->mc_count>0) {
+	if ((dev->flags&IFF_ALLMULTI)||dev->mc.count>0) {
 		/* Turn on multicast.  (Should be already setup...) */
 	}
 }
--- wireless-testing.orig/drivers/net/wireless/arlan-main.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/arlan-main.c	2009-06-13 12:29:47.000000000 +0200
@@ -1455,10 +1455,10 @@  static void arlan_rx_interrupt(struct ne
 #ifdef ARLAN_MULTICAST
 			if (!(dev->flags & IFF_ALLMULTI) &&
 				!(dev->flags & IFF_PROMISC) &&
-				dev->mc_list)
+				dev->mc.list)
 			{
 				char hw_dst_addr[6];
-				struct dev_mc_list *dmi = dev->mc_list;
+				struct dev_mc_list *dmi = dev->mc.list;
 				int i;
 
 				memcpy_fromio(hw_dst_addr, arlan->ultimateDestAddress, 6);
--- wireless-testing.orig/drivers/net/wireless/libertas/main.c	2009-06-03 08:41:49.000000000 +0200
+++ wireless-testing/drivers/net/wireless/libertas/main.c	2009-06-13 12:29:47.000000000 +0200
@@ -638,7 +638,7 @@  static int lbs_add_mcast_addrs(struct cm
 		return nr_addrs;
 
 	netif_addr_lock_bh(dev);
-	for (mc_list = dev->mc_list; mc_list; mc_list = mc_list->next) {
+	for (mc_list = dev->mc.list; mc_list; mc_list = mc_list->next) {
 		if (mac_in_list(cmd->maclist, nr_addrs, mc_list->dmi_addr)) {
 			lbs_deb_net("mcast address %s:%pM skipped\n", dev->name,
 				    mc_list->dmi_addr);
--- wireless-testing.orig/drivers/net/wireless/netwave_cs.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/netwave_cs.c	2009-06-13 12:29:47.000000000 +0200
@@ -1358,15 +1358,15 @@  static void set_multicast_list(struct ne
 #ifdef PCMCIA_DEBUG
     if (pc_debug > 2) {
 	static int old;
-	if (old != dev->mc_count) {
-	    old = dev->mc_count;
+	if (old != dev->mc.count) {
+	    old = dev->mc.count;
 	    DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
-		  dev->name, dev->mc_count);
+		  dev->name, dev->mc.count);
 	}
     }
 #endif
 	
-    if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
+    if (dev->mc.count || (dev->flags & IFF_ALLMULTI)) {
 	/* Multicast Mode */
 	rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast;
     } else if (dev->flags & IFF_PROMISC) {
--- wireless-testing.orig/drivers/net/wireless/orinoco/main.c	2009-04-02 03:29:39.000000000 +0200
+++ wireless-testing/drivers/net/wireless/orinoco/main.c	2009-06-13 12:29:47.000000000 +0200
@@ -1854,15 +1854,15 @@  __orinoco_set_multicast_list(struct net_
 	/* The Hermes doesn't seem to have an allmulti mode, so we go
 	 * into promiscuous mode and let the upper levels deal. */
 	if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI) ||
-	    (dev->mc_count > MAX_MULTICAST(priv))) {
+	    (dev->mc.count > MAX_MULTICAST(priv))) {
 		promisc = 1;
 		mc_count = 0;
 	} else {
 		promisc = 0;
-		mc_count = dev->mc_count;
+		mc_count = dev->mc.count;
 	}
 
-	err = __orinoco_hw_set_multicast_list(priv, dev->mc_list, mc_count,
+	err = __orinoco_hw_set_multicast_list(priv, dev->mc.list, mc_count,
 					      promisc);
 }
 
--- wireless-testing.orig/drivers/net/wireless/ray_cs.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ray_cs.c	2009-06-13 12:29:47.000000000 +0200
@@ -1906,7 +1906,7 @@  static void ray_update_multi_list(struct
 		local->num_multi = 0xff;
 	} else {
 		/* Copy the kernel's list of MC addresses to card */
-		for (dmip = &dev->mc_list; (dmi = *dmip) != NULL;
+		for (dmip = &dev->mc.list; (dmi = *dmip) != NULL;
 		     dmip = &dmi->next) {
 			memcpy_toio(p, dmi->dmi_addr, ETH_ALEN);
 			DEBUG(1,
@@ -1960,7 +1960,7 @@  static void set_multicast_list(struct ne
 	if (dev->flags & IFF_ALLMULTI)
 		ray_update_multi_list(dev, 1);
 	else {
-		if (local->num_multi != dev->mc_count)
+		if (local->num_multi != dev->mc.count)
 			ray_update_multi_list(dev, 0);
 	}
 } /* end set_multicast_list */
--- wireless-testing.orig/drivers/net/wireless/rndis_wlan.c	2009-06-07 21:32:33.000000000 +0200
+++ wireless-testing/drivers/net/wireless/rndis_wlan.c	2009-06-13 12:29:47.000000000 +0200
@@ -1173,10 +1173,10 @@  static void set_multicast_list(struct us
 		filter |= RNDIS_PACKET_TYPE_PROMISCUOUS |
 			RNDIS_PACKET_TYPE_ALL_LOCAL;
 	} else if (usbdev->net->flags & IFF_ALLMULTI ||
-		   usbdev->net->mc_count > priv->multicast_size) {
+		   usbdev->net->mc.count > priv->multicast_size) {
 		filter |= RNDIS_PACKET_TYPE_ALL_MULTICAST;
-	} else if (usbdev->net->mc_count > 0) {
-		size = min(priv->multicast_size, usbdev->net->mc_count);
+	} else if (usbdev->net->mc.count > 0) {
+		size = min(priv->multicast_size, usbdev->net->mc.count);
 		buf = kmalloc(size * ETH_ALEN, GFP_KERNEL);
 		if (!buf) {
 			devwarn(usbdev,
@@ -1185,7 +1185,7 @@  static void set_multicast_list(struct us
 			return;
 		}
 
-		mclist = usbdev->net->mc_list;
+		mclist = usbdev->net->mc.list;
 		for (i = 0; i < size && mclist; mclist = mclist->next) {
 			if (mclist->dmi_addrlen != ETH_ALEN)
 				continue;
--- wireless-testing.orig/drivers/net/wireless/wavelan.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/wavelan.c	2009-06-13 12:29:47.000000000 +0200
@@ -1367,7 +1367,7 @@  static void wavelan_set_multicast_list(s
 #ifdef DEBUG_IOCTL_INFO
 	printk(KERN_DEBUG
 	       "%s: wavelan_set_multicast_list(): setting Rx mode %02X to %d addresses.\n",
-	       dev->name, dev->flags, dev->mc_count);
+	       dev->name, dev->flags, dev->mc.count);
 #endif
 
 	/* Are we asking for promiscuous mode,
@@ -1375,7 +1375,7 @@  static void wavelan_set_multicast_list(s
 	 * or too many multicast addresses for the hardware filter? */
 	if ((dev->flags & IFF_PROMISC) ||
 	    (dev->flags & IFF_ALLMULTI) ||
-	    (dev->mc_count > I82586_MAX_MULTICAST_ADDRESSES)) {
+	    (dev->mc.count > I82586_MAX_MULTICAST_ADDRESSES)) {
 		/*
 		 * Enable promiscuous mode: receive all packets.
 		 */
@@ -1387,17 +1387,17 @@  static void wavelan_set_multicast_list(s
 		}
 	} else
 		/* Are there multicast addresses to send? */
-	if (dev->mc_list != (struct dev_mc_list *) NULL) {
+	if (dev->mc.list != (struct dev_mc_list *) NULL) {
 		/*
 		 * Disable promiscuous mode, but receive all packets
 		 * in multicast list
 		 */
 #ifdef MULTICAST_AVOID
-		if (lp->promiscuous || (dev->mc_count != lp->mc_count))
+		if (lp->promiscuous || (dev->mc.count != lp->mc_count))
 #endif
 		{
 			lp->promiscuous = 0;
-			lp->mc_count = dev->mc_count;
+			lp->mc_count = dev->mc.count;
 
 			wv_82586_reconfig(dev);
 		}
@@ -3534,7 +3534,7 @@  static void wv_82586_config(struct net_d
 
 	/* Any address to set? */
 	if (lp->mc_count) {
-		for (dmi = dev->mc_list; dmi; dmi = dmi->next)
+		for (dmi = dev->mc.list; dmi; dmi = dmi->next)
 			outsw(PIOP1(ioaddr), (u16 *) dmi->dmi_addr,
 			      WAVELAN_ADDR_SIZE >> 1);
 
@@ -3542,7 +3542,7 @@  static void wv_82586_config(struct net_d
 		printk(KERN_DEBUG
 		       "%s: wv_82586_config(): set %d multicast addresses:\n",
 		       dev->name, lp->mc_count);
-		for (dmi = dev->mc_list; dmi; dmi = dmi->next)
+		for (dmi = dev->mc.list; dmi; dmi = dmi->next)
 			printk(KERN_DEBUG " %pM\n", dmi->dmi_addr);
 #endif
 	}
--- wireless-testing.orig/drivers/net/wireless/wavelan_cs.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/wavelan_cs.c	2009-06-13 12:29:48.000000000 +0200
@@ -1373,7 +1373,7 @@  wavelan_set_multicast_list(struct net_de
 
 #ifdef DEBUG_IOCTL_INFO
   printk(KERN_DEBUG "%s: wavelan_set_multicast_list(): setting Rx mode %02X to %d addresses.\n",
-	 dev->name, dev->flags, dev->mc_count);
+	 dev->name, dev->flags, dev->mc.count);
 #endif
 
   if(dev->flags & IFF_PROMISC)
@@ -1394,7 +1394,7 @@  wavelan_set_multicast_list(struct net_de
     /* If all multicast addresses
      * or too much multicast addresses for the hardware filter */
     if((dev->flags & IFF_ALLMULTI) ||
-       (dev->mc_count > I82593_MAX_MULTICAST_ADDRESSES))
+       (dev->mc.count > I82593_MAX_MULTICAST_ADDRESSES))
       {
 	/*
 	 * Disable promiscuous mode, but active the all multicast mode
@@ -1410,7 +1410,7 @@  wavelan_set_multicast_list(struct net_de
       }
     else
       /* If there is some multicast addresses to send */
-      if(dev->mc_list != (struct dev_mc_list *) NULL)
+      if(dev->mc.list != (struct dev_mc_list *) NULL)
 	{
 	  /*
 	   * Disable promiscuous mode, but receive all packets
@@ -1418,12 +1418,12 @@  wavelan_set_multicast_list(struct net_de
 	   */
 #ifdef MULTICAST_AVOID
 	  if(lp->promiscuous || lp->allmulticast ||
-	     (dev->mc_count != lp->mc_count))
+	     (dev->mc.count != lp->mc_count))
 #endif
 	    {
 	      lp->promiscuous = 0;
 	      lp->allmulticast = 0;
-	      lp->mc_count = dev->mc_count;
+	      lp->mc_count = dev->mc.count;
 
 	      wv_82593_reconfig(dev);
 	    }
@@ -3618,7 +3618,7 @@  wv_82593_config(struct net_device *	dev)
 #ifdef DEBUG_CONFIG_INFO
       printk(KERN_DEBUG "%s: wv_hw_config(): set %d multicast addresses:\n",
 	     dev->name, lp->mc_count);
-      for(dmi=dev->mc_list; dmi; dmi=dmi->next)
+      for(dmi=dev->mc.list; dmi; dmi=dmi->next)
 	printk(KERN_DEBUG " %pM\n", dmi->dmi_addr);
 #endif
 
@@ -3627,7 +3627,7 @@  wv_82593_config(struct net_device *	dev)
       outb(((TX_BASE >> 8) & PIORH_MASK) | PIORH_SEL_TX, PIORH(base));
       outb(addrs_len & 0xff, PIOP(base));	/* byte count lsb */
       outb((addrs_len >> 8), PIOP(base));	/* byte count msb */
-      for(dmi=dev->mc_list; dmi; dmi=dmi->next)
+      for(dmi=dev->mc.list; dmi; dmi=dmi->next)
 	outsb(PIOP(base), dmi->dmi_addr, dmi->dmi_addrlen);
 
       /* reset transmit DMA pointer */
@@ -3636,7 +3636,7 @@  wv_82593_config(struct net_device *	dev)
       if(!wv_82593_cmd(dev, "wv_82593_config(): mc-setup",
 		       OP0_MC_SETUP, SR0_MC_SETUP_DONE))
 	ret = FALSE;
-      lp->mc_count = dev->mc_count;	/* remember to avoid repeated reset */
+      lp->mc_count = dev->mc.count;	/* remember to avoid repeated reset */
     }
 
   /* Job done, clear the flag */
--- wireless-testing.orig/drivers/net/wireless/zd1201.c	2009-04-09 10:00:22.000000000 +0200
+++ wireless-testing/drivers/net/wireless/zd1201.c	2009-06-13 12:29:48.000000000 +0200
@@ -871,19 +871,19 @@  static struct iw_statistics *zd1201_get_
 static void zd1201_set_multicast(struct net_device *dev)
 {
 	struct zd1201 *zd = netdev_priv(dev);
-	struct dev_mc_list *mc = dev->mc_list;
+	struct dev_mc_list *mc = dev->mc.list;
 	unsigned char reqbuf[ETH_ALEN*ZD1201_MAXMULTI];
 	int i;
 
-	if (dev->mc_count > ZD1201_MAXMULTI)
+	if (dev->mc.count > ZD1201_MAXMULTI)
 		return;
 
-	for (i=0; i<dev->mc_count; i++) {
+	for (i=0; i<dev->mc.count; i++) {
 		memcpy(reqbuf+i*ETH_ALEN, mc->dmi_addr, ETH_ALEN);
 		mc = mc->next;
 	}
 	zd1201_setconfig(zd, ZD1201_RID_CNFGROUPADDRESS, reqbuf,
-	    dev->mc_count*ETH_ALEN, 0);
+	    dev->mc.count*ETH_ALEN, 0);
 	
 }
 
--- wireless-testing.orig/drivers/net/yellowfin.c	2009-04-09 10:00:23.000000000 +0200
+++ wireless-testing/drivers/net/yellowfin.c	2009-06-13 12:29:48.000000000 +0200
@@ -1289,15 +1289,15 @@  static void set_rx_mode(struct net_devic
 	iowrite16(cfg_value & ~0x1000, ioaddr + Cnfg);
 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
 		iowrite16(0x000F, ioaddr + AddrMode);
-	} else if ((dev->mc_count > 64)  ||  (dev->flags & IFF_ALLMULTI)) {
+	} else if ((dev->mc.count > 64)  ||  (dev->flags & IFF_ALLMULTI)) {
 		/* Too many to filter well, or accept all multicasts. */
 		iowrite16(0x000B, ioaddr + AddrMode);
-	} else if (dev->mc_count > 0) { /* Must use the multicast hash table. */
+	} else if (dev->mc.count > 0) { /* Must use the multicast hash table. */
 		struct dev_mc_list *mclist;
 		u16 hash_table[4];
 		int i;
 		memset(hash_table, 0, sizeof(hash_table));
-		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
+		for (i = 0, mclist = dev->mc.list; mclist && i < dev->mc.count;
 			 i++, mclist = mclist->next) {
 			unsigned int bit;
 
--- wireless-testing.orig/drivers/net/znet.c	2009-04-09 10:00:23.000000000 +0200
+++ wireless-testing/drivers/net/znet.c	2009-06-13 12:29:48.000000000 +0200
@@ -321,7 +321,7 @@  static void znet_set_multicast_list (str
 	/* Byte D */
 	cfblk->dummy_1 = 1; 	/* set to 1 */
 	cfblk->tx_ifs_retrig = 3; /* Hmm... Disabled */
-	cfblk->mc_all = (dev->mc_list || (dev->flags&IFF_ALLMULTI));/* multicast all mode */
+	cfblk->mc_all = (dev->mc.list || (dev->flags&IFF_ALLMULTI));/* multicast all mode */
 	cfblk->rcv_mon = 0;	/* Monitor mode disabled */
 	cfblk->frag_acpt = 0;	/* Do not accept fragments */
 	cfblk->tstrttrs = 0;	/* No start transmission threshold */
--- wireless-testing.orig/drivers/s390/net/qeth_l2_main.c	2009-04-09 10:00:23.000000000 +0200
+++ wireless-testing/drivers/s390/net/qeth_l2_main.c	2009-06-13 12:29:48.000000000 +0200
@@ -626,10 +626,10 @@  static void qeth_l2_set_multicast_list(s
 		return;
 	qeth_l2_del_all_mc(card);
 	spin_lock_bh(&card->mclock);
-	for (dm = dev->mc_list; dm; dm = dm->next)
+	for (dm = dev->mc.list; dm; dm = dm->next)
 		qeth_l2_add_mc(card, dm->da_addr, 0);
 
-	for (dm = dev->uc_list; dm; dm = dm->next)
+	for (dm = dev->uc.list; dm; dm = dm->next)
 		qeth_l2_add_mc(card, dm->da_addr, 1);
 
 	spin_unlock_bh(&card->mclock);
--- wireless-testing.orig/drivers/staging/et131x/et131x_netdev.c	2009-04-23 00:20:58.000000000 +0200
+++ wireless-testing/drivers/staging/et131x/et131x_netdev.c	2009-06-13 12:29:48.000000000 +0200
@@ -465,7 +465,7 @@  void et131x_multicast(struct net_device 
 	uint32_t PacketFilter = 0;
 	uint32_t count;
 	unsigned long lockflags;
-	struct dev_mc_list *mclist = netdev->mc_list;
+	struct dev_mc_list *mclist = netdev->mc.list;
 
 	DBG_ENTER(et131x_dbginfo);
 
@@ -488,7 +488,7 @@  void et131x_multicast(struct net_device 
 	 * accordingly
 	 */
 	DBG_VERBOSE(et131x_dbginfo,
-		    "MULTICAST ADDR COUNT: %d\n", netdev->mc_count);
+		    "MULTICAST ADDR COUNT: %d\n", netdev->mc.count);
 
 	if (netdev->flags & IFF_PROMISC) {
 		DBG_VERBOSE(et131x_dbginfo, "Request: PROMISCUOUS MODE ON\n");
@@ -503,7 +503,7 @@  void et131x_multicast(struct net_device 
 		adapter->PacketFilter |= ET131X_PACKET_TYPE_ALL_MULTICAST;
 	}
 
-	if (netdev->mc_count > NIC_MAX_MCAST_LIST) {
+	if (netdev->mc.count > NIC_MAX_MCAST_LIST) {
 		DBG_WARNING(et131x_dbginfo,
 			    "ACCEPT ALL MULTICAST for now, as there's more Multicast "
 			    "addresses than the HW supports\n");
@@ -511,7 +511,7 @@  void et131x_multicast(struct net_device 
 		adapter->PacketFilter |= ET131X_PACKET_TYPE_ALL_MULTICAST;
 	}
 
-	if (netdev->mc_count < 1) {
+	if (netdev->mc.count < 1) {
 		DBG_VERBOSE(et131x_dbginfo, "Request: REJECT ALL MULTICAST\n");
 		adapter->PacketFilter &= ~ET131X_PACKET_TYPE_ALL_MULTICAST;
 		adapter->PacketFilter &= ~ET131X_PACKET_TYPE_MULTICAST;
@@ -522,14 +522,14 @@  void et131x_multicast(struct net_device 
 	}
 
 	/* Set values in the private adapter struct */
-	adapter->MCAddressCount = netdev->mc_count;
+	adapter->MCAddressCount = netdev->mc.count;
 
-	if (netdev->mc_count) {
+	if (netdev->mc.count) {
 		if (mclist->dmi_addrlen != ETH_ALEN) {
 			DBG_WARNING(et131x_dbginfo,
 				    "Multicast addrs are not ETH_ALEN in size\n");
 		} else {
-			count = netdev->mc_count - 1;
+			count = netdev->mc.count - 1;
 			memcpy(adapter->MCList[count], mclist->dmi_addr,
 			       ETH_ALEN);
 		}
--- wireless-testing.orig/drivers/staging/slicoss/slicoss.c	2009-04-23 00:20:59.000000000 +0200
+++ wireless-testing/drivers/staging/slicoss/slicoss.c	2009-06-13 12:29:48.000000000 +0200
@@ -1365,8 +1365,8 @@  static void slic_mcast_set_list(struct n
 	int status = STATUS_SUCCESS;
 	int i;
 	char *addresses;
-	struct dev_mc_list *mc_list = dev->mc_list;
-	int mc_count = dev->mc_count;
+	struct dev_mc_list *mc_list = dev->mc.list;
+	int mc_count = dev->mc.count;
 
 	ASSERT(adapter);
 
--- wireless-testing.orig/drivers/staging/sxg/sxg.c	2009-04-23 00:20:59.000000000 +0200
+++ wireless-testing/drivers/staging/sxg/sxg.c	2009-06-13 12:29:48.000000000 +0200
@@ -1984,7 +1984,7 @@  static bool sxg_mac_filter(struct adapte
 				return (TRUE);
 			}
 			if (adapter->MacFilter & MAC_MCAST) {
-				struct dev_mc_list *mclist = dev->mc_list;
+				struct dev_mc_list *mclist = dev->mc.list;
 				while (mclist) {
 					ETHER_EQ_ADDR(mclist->da_addr,
 						      EtherHdr->ether_dhost,
@@ -3611,7 +3611,7 @@  static void sxg_set_mcast_addr(struct ad
         int i;
 
         if (adapter->MacFilter & (MAC_ALLMCAST | MAC_MCAST)) {
-               for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
+               for (i = 0, mclist = dev->mc.list; i < dev->mc.count;
                              i++, mclist = mclist->next) {
                         sxg_mcast_set_bit(adapter,mclist->da_addr);
                 }
--- wireless-testing.orig/arch/xtensa/platforms/iss/network.c	2009-01-13 15:04:57.000000000 +0100
+++ wireless-testing/arch/xtensa/platforms/iss/network.c	2009-06-13 12:29:48.000000000 +0200
@@ -560,7 +560,7 @@  static void iss_net_set_multicast_list(s
 #if 0
 	if (dev->flags & IFF_PROMISC)
 		return;
-	else if (dev->mc_count)
+	else if (dev->mc.count)
 		dev->flags |= IFF_ALLMULTI;
 	else
 		dev->flags &= ~IFF_ALLMULTI;