Hello. In article <[EMAIL PROTECTED]> (at Tue, 17 Jul 2007 00:49:02 +0800), Bryan Wu <[EMAIL PROTECTED]> says:
> +static void bf537mac_set_multicast_list(struct net_device *dev) > +{ > + u32 sysctl; > + > + if (dev->flags & IFF_PROMISC) { > + printk(KERN_INFO "%s: set to promisc mode\n", dev->name); > + sysctl = bfin_read_EMAC_OPMODE(); > + sysctl |= RAF; > + bfin_write_EMAC_OPMODE(sysctl); > + } else if (dev->flags & IFF_ALLMULTI || dev->mc_count > 16) { > + /* accept all multicast */ > + sysctl = bfin_read_EMAC_OPMODE(); > + sysctl |= PAM; > + bfin_write_EMAC_OPMODE(sysctl); > + } else if (dev->mc_count) { > + /* set multicast */ > + } else { > + /* clear promisc or multicast mode */ > + sysctl = bfin_read_EMAC_OPMODE(); > + sysctl &= ~(RAF | PAM); > + bfin_write_EMAC_OPMODE(sysctl); > + } > +} > + Is this function really correct? Please make sure to set up multicast list on device, or set "all multi" on device if you do not know what to do; e.g. static void bf537mac_set_multicast_list(struct net_device *dev) { u32 sysctl; if (dev->flags & IFF_PROMISC) { printk(KERN_INFO "%s: set to promisc mode\n", dev->name); sysctl = bfin_read_EMAC_OPMODE(); sysctl |= RAF; bfin_write_EMAC_OPMODE(sysctl); } else if (dev->flags & IFF_ALLMULTI || dev->mc_count) { /* accept all multicast */ sysctl = bfin_read_EMAC_OPMODE(); sysctl |= PAM; bfin_write_EMAC_OPMODE(sysctl); } else { /* clear promisc or multicast mode */ sysctl = bfin_read_EMAC_OPMODE(); sysctl &= ~(RAF | PAM); bfin_write_EMAC_OPMODE(sysctl); } } --yoshfuji - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html