netdev: octeon_mgmt: Use proper MAC addresses.

The original implementation incorrectly uses netdev->dev_addrs.

Use netdev->uc instead.  Also use netdev_for_each_uc_addr to iterate
over the addresses.  Fix comment.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David Daney 2010-05-05 13:03:08 +00:00 committed by David S. Miller
parent 7f01648aa3
commit 62538d2490

View File

@ -475,12 +475,11 @@ static void octeon_mgmt_set_rx_filtering(struct net_device *netdev)
unsigned int multicast_mode = 1; /* 1 - Reject all multicast. */ unsigned int multicast_mode = 1; /* 1 - Reject all multicast. */
struct octeon_mgmt_cam_state cam_state; struct octeon_mgmt_cam_state cam_state;
struct netdev_hw_addr *ha; struct netdev_hw_addr *ha;
struct list_head *pos;
int available_cam_entries; int available_cam_entries;
memset(&cam_state, 0, sizeof(cam_state)); memset(&cam_state, 0, sizeof(cam_state));
if ((netdev->flags & IFF_PROMISC) || netdev->dev_addrs.count > 7) { if ((netdev->flags & IFF_PROMISC) || netdev->uc.count > 7) {
cam_mode = 0; cam_mode = 0;
available_cam_entries = 8; available_cam_entries = 8;
} else { } else {
@ -488,13 +487,13 @@ static void octeon_mgmt_set_rx_filtering(struct net_device *netdev)
* One CAM entry for the primary address, leaves seven * One CAM entry for the primary address, leaves seven
* for the secondary addresses. * for the secondary addresses.
*/ */
available_cam_entries = 7 - netdev->dev_addrs.count; available_cam_entries = 7 - netdev->uc.count;
} }
if (netdev->flags & IFF_MULTICAST) { if (netdev->flags & IFF_MULTICAST) {
if (cam_mode == 0 || (netdev->flags & IFF_ALLMULTI) || if (cam_mode == 0 || (netdev->flags & IFF_ALLMULTI) ||
netdev_mc_count(netdev) > available_cam_entries) netdev_mc_count(netdev) > available_cam_entries)
multicast_mode = 2; /* 1 - Accept all multicast. */ multicast_mode = 2; /* 2 - Accept all multicast. */
else else
multicast_mode = 0; /* 0 - Use CAM. */ multicast_mode = 0; /* 0 - Use CAM. */
} }
@ -502,12 +501,8 @@ static void octeon_mgmt_set_rx_filtering(struct net_device *netdev)
if (cam_mode == 1) { if (cam_mode == 1) {
/* Add primary address. */ /* Add primary address. */
octeon_mgmt_cam_state_add(&cam_state, netdev->dev_addr); octeon_mgmt_cam_state_add(&cam_state, netdev->dev_addr);
list_for_each(pos, &netdev->dev_addrs.list) { netdev_for_each_uc_addr(ha, netdev)
struct netdev_hw_addr *hw_addr; octeon_mgmt_cam_state_add(&cam_state, ha->addr);
hw_addr = list_entry(pos, struct netdev_hw_addr, list);
octeon_mgmt_cam_state_add(&cam_state, hw_addr->addr);
list = list->next;
}
} }
if (multicast_mode == 0) { if (multicast_mode == 0) {
netdev_for_each_mc_addr(ha, netdev) netdev_for_each_mc_addr(ha, netdev)