mirror of
https://github.com/torvalds/linux.git
synced 2024-12-17 00:21:32 +00:00
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:
parent
7f01648aa3
commit
62538d2490
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user