return stats;
}
-static int team_vlan_rx_add_vid(struct net_device *dev, uint16_t vid)
+static int team_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
{
struct team *team = netdev_priv(dev);
struct team_port *port;
*/
mutex_lock(&team->lock);
list_for_each_entry(port, &team->port_list, list) {
- err = vlan_vid_add(port->dev, vid);
+ err = vlan_vid_add(port->dev, proto, vid);
if (err)
goto unwind;
}
unwind:
list_for_each_entry_continue_reverse(port, &team->port_list, list)
- vlan_vid_del(port->dev, vid);
+ vlan_vid_del(port->dev, proto, vid);
mutex_unlock(&team->lock);
return err;
}
-static int team_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
+static int team_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)
{
struct team *team = netdev_priv(dev);
struct team_port *port;
rcu_read_lock();
list_for_each_entry_rcu(port, &team->port_list, list)
- vlan_vid_del(port->dev, vid);
+ vlan_vid_del(port->dev, proto, vid);
rcu_read_unlock();
return 0;
dev->features |= NETIF_F_LLTX;
dev->features |= NETIF_F_GRO;
dev->hw_features = TEAM_VLAN_FEATURES |
- NETIF_F_HW_VLAN_TX |
- NETIF_F_HW_VLAN_RX |
- NETIF_F_HW_VLAN_FILTER;
+ NETIF_F_HW_VLAN_CTAG_TX |
+ NETIF_F_HW_VLAN_CTAG_RX |
+ NETIF_F_HW_VLAN_CTAG_FILTER;
dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM);
dev->features |= dev->hw_features;