浏览代码

team: team should sync the port's uc/mc addrs when add a port

There is an issue when we use mavtap over team:
When we replug nic links from team0, the real nics's mc list will not
include the maddr for macvtap any more. then we can't receive pkts to
macvtap device, as they are filterred by mc list of nic.

In Bonding Driver, it syncs the uc/mc addrs in bond_enslave().

We will fix this issue on team by adding the port's uc/mc addrs sync in
team_port_add.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Xin Long 9 年之前
父节点
当前提交
cb41c997d4
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      drivers/net/team/team.c

+ 5 - 0
drivers/net/team/team.c

@@ -1198,6 +1198,9 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
 		goto err_dev_open;
 		goto err_dev_open;
 	}
 	}
 
 
+	dev_uc_sync_multiple(port_dev, dev);
+	dev_mc_sync_multiple(port_dev, dev);
+
 	err = vlan_vids_add_by_dev(port_dev, dev);
 	err = vlan_vids_add_by_dev(port_dev, dev);
 	if (err) {
 	if (err) {
 		netdev_err(dev, "Failed to add vlan ids to device %s\n",
 		netdev_err(dev, "Failed to add vlan ids to device %s\n",
@@ -1261,6 +1264,8 @@ err_enable_netpoll:
 	vlan_vids_del_by_dev(port_dev, dev);
 	vlan_vids_del_by_dev(port_dev, dev);
 
 
 err_vids_add:
 err_vids_add:
+	dev_uc_unsync(port_dev, dev);
+	dev_mc_unsync(port_dev, dev);
 	dev_close(port_dev);
 	dev_close(port_dev);
 
 
 err_dev_open:
 err_dev_open: