Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31278e71 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

net: group address list and its count



This patch is inspired by patch recently posted by Johannes Berg. Basically what
my patch does is to group list and a count of addresses into newly introduced
structure netdev_hw_addr_list. This brings us two benefits:
1) struct net_device becames a bit nicer.
2) in the future there will be a possibility to operate with lists independently
   on netdevices (with exporting right functions).
I wanted to introduce this patch before I'll post a multicast lists conversion.

Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>

 drivers/net/bnx2.c              |    4 +-
 drivers/net/e1000/e1000_main.c  |    4 +-
 drivers/net/ixgbe/ixgbe_main.c  |    6 +-
 drivers/net/mv643xx_eth.c       |    2 +-
 drivers/net/niu.c               |    4 +-
 drivers/net/virtio_net.c        |   10 ++--
 drivers/s390/net/qeth_l2_main.c |    2 +-
 include/linux/netdevice.h       |   17 +++--
 net/core/dev.c                  |  130 ++++++++++++++++++--------------------
 9 files changed, 89 insertions(+), 90 deletions(-)
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7b85576d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3552,14 +3552,14 @@ bnx2_set_rx_mode(struct net_device *dev)
		sort_mode |= BNX2_RPM_SORT_USER0_MC_HSH_EN;
	}

	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)) {
		/* Add all entries into to the match filter list */
		i = 0;
		list_for_each_entry(ha, &dev->uc_list, list) {
		list_for_each_entry(ha, &dev->uc.list, list) {
			bnx2_set_mac_addr(bp, ha->addr,
					  i + BNX2_START_UNICAST_ADDRESS_INDEX);
			sort_mode |= (1 <<
+2 −2
Original line number Diff line number Diff line
@@ -2370,7 +2370,7 @@ static void e1000_set_rx_mode(struct net_device *netdev)
			rctl |= E1000_RCTL_VFE;
	}

	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;
@@ -2394,7 +2394,7 @@ static void e1000_set_rx_mode(struct net_device *netdev)
	 */
	i = 1;
	if (use_uc)
		list_for_each_entry(ha, &netdev->uc_list, list) {
		list_for_each_entry(ha, &netdev->uc.list, list) {
			if (i == rar_entries)
				break;
			e1000_rar_set(hw, ha->addr, i++);
+3 −3
Original line number Diff line number Diff line
@@ -2321,7 +2321,7 @@ static void ixgbe_set_rx_mode(struct net_device *netdev)
	IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl);

	/* reprogram secondary unicast list */
	hw->mac.ops.update_uc_addr_list(hw, &netdev->uc_list);
	hw->mac.ops.update_uc_addr_list(hw, &netdev->uc.list);

	/* reprogram multicast list */
	addr_count = netdev->mc_count;
@@ -5261,7 +5261,7 @@ static int ixgbe_ioctl(struct net_device *netdev, struct ifreq *req, int cmd)

/**
 * ixgbe_add_sanmac_netdev - Add the SAN MAC address to the corresponding
 * netdev->dev_addr_list
 * netdev->dev_addrs
 * @netdev: network interface device structure
 *
 * Returns non-zero on failure
@@ -5282,7 +5282,7 @@ static int ixgbe_add_sanmac_netdev(struct net_device *dev)

/**
 * ixgbe_del_sanmac_netdev - Removes the SAN MAC address to the corresponding
 * netdev->dev_addr_list
 * netdev->dev_addrs
 * @netdev: network interface device structure
 *
 * Returns non-zero on failure
+1 −1
Original line number Diff line number Diff line
@@ -1729,7 +1729,7 @@ static u32 uc_addr_filter_mask(struct net_device *dev)
		return 0;

	nibbles = 1 << (dev->dev_addr[5] & 0x0f);
	list_for_each_entry(ha, &dev->uc_list, list) {
	list_for_each_entry(ha, &dev->uc.list, list) {
		if (memcmp(dev->dev_addr, ha->addr, 5))
			return 0;
		if ((dev->dev_addr[5] ^ ha->addr[5]) & 0xf0)
+2 −2
Original line number Diff line number Diff line
@@ -6376,7 +6376,7 @@ static void niu_set_rx_mode(struct net_device *dev)
	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;
@@ -6385,7 +6385,7 @@ static void niu_set_rx_mode(struct net_device *dev)
	if (alt_cnt) {
		int index = 0;

		list_for_each_entry(ha, &dev->uc_list, list) {
		list_for_each_entry(ha, &dev->uc.list, list) {
			err = niu_set_alt_mac(np, index, ha->addr);
			if (err)
				printk(KERN_WARNING PFX "%s: Error %d "
Loading