From patchwork Sun Jan 27 11:06:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 1031540 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="sfdJ0gZe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43nVMD6Zxtz9s9G for ; Sun, 27 Jan 2019 22:06:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726585AbfA0LGq (ORCPT ); Sun, 27 Jan 2019 06:06:46 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:39576 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726453AbfA0LGq (ORCPT ); Sun, 27 Jan 2019 06:06:46 -0500 Received: by mail-pl1-f193.google.com with SMTP id 101so6491193pld.6 for ; Sun, 27 Jan 2019 03:06:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=r2V46+GOCWU8y6KKCzf3heZHYZVbmMjvLyAi1Jt4FKc=; b=sfdJ0gZeeyjpKgtaQxYUD7jRdTy1af9zDzs0Ht5UCaxBvdJAmBBERXBi92CyWsrtp0 M+mo0yR4PVWSDTF0LJiKFIn12xLm6nGLNxUZd7zVWi3wj/1H4nk/0uFx8Qo8Cc8eoyDo D/U3ofXCbIDDCez6M2Ew0xeVgOY8B84orc/8uobKpWVjv9QrnzLc0qPBdapb0tei44Fd qBd9mjtPgVVqMAbAkyfyaar/li5xSahk8SHEE+z6hGpiDGbcvtxgQqgUIizufbOTMQcl V1ixZgdjzpNIJo2d+rqt0OhJzv06vA51Gc2qPSU5PZ4paEsU2HmjKaXbcaachVnXo7HK +ITA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=r2V46+GOCWU8y6KKCzf3heZHYZVbmMjvLyAi1Jt4FKc=; b=WdzWy4Aib3ie7GFPRlFiS8RCjdzlSV7o+3hKYPyvqZysnYM2QLjIptdnmfB+6oCpsI ZJmjuW+04X5RSnfERsTXta7xdFIkBWGviJ/ofscZeZUKOZHk+q6U2au7my1DzqHmT1vL 5wSvhVUwmG5PqqtLQM1dRyUc4icFG4v3+eKuj3DNgoIeFZwuhb1j2DLP6XHIeZKvvvjq my56kCQgbWHkQn9z1M8iSaq/Eu+voT4ClysLWrxzlyADvqh/589aYxHtUeE67TU3kwYw xjEpTk2zn32WR1eufFotsX5v3Ai8PGQVjPM5f75r+0k8PVGYAAC8qpvZrAOB/vcM/WGm sdMg== X-Gm-Message-State: AJcUukfTCodJJ39XSDOOP8ojFf8bgQJP9f8TlQKG9jafIotCTzyaSlQB 6o4pbcJBGWf3dOt4Y5161v4= X-Google-Smtp-Source: ALg8bN5s7al1FXaBJUqZjPrzp7WLdDC/TeuHne9qjzETdqfsiyDPIlwfLfSk+RFEfv/Krv40PCmPoA== X-Received: by 2002:a17:902:1d4a:: with SMTP id u10mr17131307plu.122.1548587205525; Sun, 27 Jan 2019 03:06:45 -0800 (PST) Received: from local.opencloud.tech.localdomain ([106.120.33.223]) by smtp.gmail.com with ESMTPSA id x12sm30663989pgr.55.2019.01.27.03.06.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 27 Jan 2019 03:06:44 -0800 (PST) From: xiangxia.m.yue@gmail.com To: saeedm@mellanox.com, gerlitz.or@gmail.com Cc: netdev@vger.kernel.org, Tonghao Zhang , Hadar Hen Zion Subject: [PATCH net v4 1/2] net/mlx5e: Update hw flows when encap source mac changed Date: Sun, 27 Jan 2019 03:06:35 -0800 Message-Id: <1548587196-10746-1-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tonghao Zhang When we offload tc filters to hardware, hardware flows can be updated when mac of encap destination ip is changed. But we ignore one case, that the mac of local encap ip can be changed too, so we should also update them. To fix it, add route_dev in mlx5e_encap_entry struct to save the local encap netdevice, and when mac changed, kernel will flush all the neighbour on the netdevice and send NETEVENT_NEIGH_UPDATE event. The mlx5 driver will delete the flows and add them when neighbour available again. Fixes: 232c001398ae ("net/mlx5e: Add support to neighbour update flow") Cc: Hadar Hen Zion Signed-off-by: Tonghao Zhang Reviewed-by: Or Gerlitz --- drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c | 2 ++ drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 4 ++++ drivers/net/ethernet/mellanox/mlx5/core/en_rep.h | 1 + 3 files changed, 7 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c index 046948e..114e0a2 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c @@ -256,6 +256,7 @@ int mlx5e_tc_tun_create_header_ipv4(struct mlx5e_priv *priv, e->m_neigh.family = n->ops->family; memcpy(&e->m_neigh.dst_ip, n->primary_key, n->tbl->key_len); e->out_dev = out_dev; + e->route_dev = route_dev; /* It's important to add the neigh to the hash table before checking * the neigh validity state. So if we'll get a notification, in case the @@ -369,6 +370,7 @@ int mlx5e_tc_tun_create_header_ipv6(struct mlx5e_priv *priv, e->m_neigh.family = n->ops->family; memcpy(&e->m_neigh.dst_ip, n->primary_key, n->tbl->key_len); e->out_dev = out_dev; + e->route_dev = route_dev; /* It's importent to add the neigh to the hash table before checking * the neigh validity state. So if we'll get a notification, in case the diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c index 96cc0c6..c4b9073 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c @@ -594,6 +594,10 @@ static void mlx5e_rep_update_flows(struct mlx5e_priv *priv, if (neigh_connected && !(e->flags & MLX5_ENCAP_ENTRY_VALID)) { ether_addr_copy(e->h_dest, ha); ether_addr_copy(eth->h_dest, ha); + /* Update the encap source mac, in case that we delete + * the flows when encap source mac changed. + */ + ether_addr_copy(eth->h_source, e->route_dev->dev_addr); mlx5e_tc_encap_flows_add(priv, e); } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h index edd7228..36eafc8 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.h @@ -148,6 +148,7 @@ struct mlx5e_encap_entry { unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ struct net_device *out_dev; + struct net_device *route_dev; int tunnel_type; int tunnel_hlen; int reformat_type;