mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
net/mlx5e: IPoIB, Drop multicast packets that this interface sent
After enabled loopback packets for IPoIB, we need to drop these packets
that this HCA has replicated and came back to the same interface that
sent them.
Fixes: 4c6c615e3f
("net/mlx5e: IPoIB, Add PKEY child interface nic profile")
Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
Reviewed-by: Alex Vesker <valex@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
80639b199c
commit
8b46d424a7
@ -1489,6 +1489,7 @@ out:
|
||||
|
||||
#ifdef CONFIG_MLX5_CORE_IPOIB
|
||||
|
||||
#define MLX5_IB_GRH_SGID_OFFSET 8
|
||||
#define MLX5_IB_GRH_DGID_OFFSET 24
|
||||
#define MLX5_GID_SIZE 16
|
||||
|
||||
@ -1502,6 +1503,7 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
|
||||
struct net_device *netdev;
|
||||
struct mlx5e_priv *priv;
|
||||
char *pseudo_header;
|
||||
u32 flags_rqpn;
|
||||
u32 qpn;
|
||||
u8 *dgid;
|
||||
u8 g;
|
||||
@ -1523,7 +1525,8 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
|
||||
tstamp = &priv->tstamp;
|
||||
stats = &priv->channel_stats[rq->ix].rq;
|
||||
|
||||
g = (be32_to_cpu(cqe->flags_rqpn) >> 28) & 3;
|
||||
flags_rqpn = be32_to_cpu(cqe->flags_rqpn);
|
||||
g = (flags_rqpn >> 28) & 3;
|
||||
dgid = skb->data + MLX5_IB_GRH_DGID_OFFSET;
|
||||
if ((!g) || dgid[0] != 0xff)
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
@ -1532,9 +1535,15 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
|
||||
else
|
||||
skb->pkt_type = PACKET_MULTICAST;
|
||||
|
||||
/* TODO: IB/ipoib: Allow mcast packets from other VFs
|
||||
* 68996a6e760e5c74654723eeb57bf65628ae87f4
|
||||
/* Drop packets that this interface sent, ie multicast packets
|
||||
* that the HCA has replicated.
|
||||
*/
|
||||
if (g && (qpn == (flags_rqpn & 0xffffff)) &&
|
||||
(memcmp(netdev->dev_addr + 4, skb->data + MLX5_IB_GRH_SGID_OFFSET,
|
||||
MLX5_GID_SIZE) == 0)) {
|
||||
skb->dev = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
skb_pull(skb, MLX5_IB_GRH_BYTES);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user