mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 22:27:23 +07:00
net: hns: bug fix about broadcast/multicast packets
When the dsaf mode receives a broadcast packet, it will filter the packet by comparing the received queue number and destination queue number(get from forwarding table), if they are the same, the packet will be filtered. Otherwise, the packet will be loopback. So this patch select queue 0 to send broadcast and multicast packets. Signed-off-by: Daode Huang <huangdaode@hisilicon.com> Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
58035fd92d
commit
2162a4a1ed
@ -1597,6 +1597,21 @@ struct rtnl_link_stats64 *hns_nic_get_stats64(struct net_device *ndev,
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u16
|
||||||
|
hns_nic_select_queue(struct net_device *ndev, struct sk_buff *skb,
|
||||||
|
void *accel_priv, select_queue_fallback_t fallback)
|
||||||
|
{
|
||||||
|
struct ethhdr *eth_hdr = (struct ethhdr *)skb->data;
|
||||||
|
struct hns_nic_priv *priv = netdev_priv(ndev);
|
||||||
|
|
||||||
|
/* fix hardware broadcast/multicast packets queue loopback */
|
||||||
|
if (!AE_IS_VER1(priv->enet_ver) &&
|
||||||
|
is_multicast_ether_addr(eth_hdr->h_dest))
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return fallback(ndev, skb);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct net_device_ops hns_nic_netdev_ops = {
|
static const struct net_device_ops hns_nic_netdev_ops = {
|
||||||
.ndo_open = hns_nic_net_open,
|
.ndo_open = hns_nic_net_open,
|
||||||
.ndo_stop = hns_nic_net_stop,
|
.ndo_stop = hns_nic_net_stop,
|
||||||
@ -1612,6 +1627,7 @@ static const struct net_device_ops hns_nic_netdev_ops = {
|
|||||||
.ndo_poll_controller = hns_nic_poll_controller,
|
.ndo_poll_controller = hns_nic_poll_controller,
|
||||||
#endif
|
#endif
|
||||||
.ndo_set_rx_mode = hns_nic_set_rx_mode,
|
.ndo_set_rx_mode = hns_nic_set_rx_mode,
|
||||||
|
.ndo_select_queue = hns_nic_select_queue,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void hns_nic_update_link_status(struct net_device *netdev)
|
static void hns_nic_update_link_status(struct net_device *netdev)
|
||||||
|
Loading…
Reference in New Issue
Block a user