You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.2 KiB
92 lines
3.2 KiB
From e0043c18d6c5280d8dbc999700454fafee04baec Mon Sep 17 00:00:00 2001
|
|
From: Alaa Hleihel <ahleihel@redhat.com>
|
|
Date: Mon, 1 Jun 2020 15:40:45 -0400
|
|
Subject: [PATCH 292/312] [netdrv] net/mlx5e: IPoIB, Drop multicast packets
|
|
that this interface sent
|
|
|
|
Message-id: <20200601154102.25980-23-ahleihel@redhat.com>
|
|
Patchwork-id: 315726
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.3 BZ 1842258 22/39] net/mlx5e: IPoIB, Drop multicast packets that this interface sent
|
|
Bugzilla: 1842258
|
|
RH-Acked-by: Honggang Li <honli@redhat.com>
|
|
RH-Acked-by: Kamal Heib <kheib@redhat.com>
|
|
RH-Acked-by: Marcelo Leitner <mleitner@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1842258
|
|
Upstream: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git , branch: master
|
|
|
|
commit 8b46d424a743ddfef8056d5167f13ee7ebd1dcad
|
|
Author: Erez Shitrit <erezsh@mellanox.com>
|
|
Date: Mon May 4 11:46:25 2020 +0300
|
|
|
|
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: 4c6c615e3f30 ("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>
|
|
|
|
Signed-off-by: Alaa Hleihel <ahleihel@redhat.com>
|
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
|
---
|
|
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 15 ++++++++++++---
|
|
1 file changed, 12 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
|
|
index 7aad59376ff4..aee120af6e1f 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
|
|
@@ -1496,6 +1496,7 @@ int mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget)
|
|
|
|
#ifdef CONFIG_MLX5_CORE_IPOIB
|
|
|
|
+#define MLX5_IB_GRH_SGID_OFFSET 8
|
|
#define MLX5_IB_GRH_DGID_OFFSET 24
|
|
#define MLX5_GID_SIZE 16
|
|
|
|
@@ -1509,6 +1510,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;
|
|
@@ -1530,7 +1532,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;
|
|
@@ -1539,9 +1542,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);
|
|
|
|
--
|
|
2.13.6
|
|
|