lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 193/376] net/mlx5e: IPoIB, Drop multicast packets that this interface sent
    Date
    From: Erez Shitrit <erezsh@mellanox.com>

    [ Upstream commit 8b46d424a743ddfef8056d5167f13ee7ebd1dcad ]

    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: Sasha Levin <sashal@kernel.org>
    ---
    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 e2beb89c1832..b69957be653a 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
    @@ -1501,6 +1501,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

    @@ -1514,6 +1515,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;
    @@ -1535,7 +1537,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;
    @@ -1544,9 +1547,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.25.1


    \
     
     \ /
      Last update: 2020-06-19 17:28    [W:4.099 / U:0.460 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site