From patchwork Mon Jul 17 12:07:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 789411 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xB29p3zgqz9ryk for ; Mon, 17 Jul 2017 22:07:58 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="tds4qB2S"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751480AbdGQMHp (ORCPT ); Mon, 17 Jul 2017 08:07:45 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:34444 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751320AbdGQMHm (ORCPT ); Mon, 17 Jul 2017 08:07:42 -0400 Received: by mail-wm0-f68.google.com with SMTP id p204so22722725wmg.1 for ; Mon, 17 Jul 2017 05:07:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yErGeCs0NMyXYLjTSyMQehVDHbMKCa4wb835HJJKaGk=; b=tds4qB2SYni2CoibLAuxYQrYdLlxr6ZokHuMAxyU50t/Hm03AgJGpfT9AsV99yNjkP pZEVnR596/Tma9MgjTvgfOW02Axs/55mboyzk011BsUo/GLTJLOfMcQR5m2sdqYT/S1g 5BykZ1fD4sI7+fRIr4xoZmmxld7AUTenSPgbNhWZMTzkujnTHnZDSIE49OkyqtS52chM G+Eq0ZTzfodZLZwNFdFbBiau5u6/0CIgAAxXDBAR5H643AOIKW0Ttrq7PNQVBWg5GaEk s1RMO+NT3okXe6wVksFeMi2/ZXYMmE7S0ezLPqsZqwdzl39pEDTsPRnkhbvPWo6eBBsv 75pg== 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:in-reply-to :references; bh=yErGeCs0NMyXYLjTSyMQehVDHbMKCa4wb835HJJKaGk=; b=et90egk0EiBdvv0+fz1eo8yEamL94/RwXRinvqjRhSlzgLLSPlVjcGT0GxRdc/Wnol U9J4fZcV+zsliwpWGO2OxL+wxMamKUYGl3N05pJtzwYmif42TtxP2nr2UjRXmQakE/xU XFtgp0ZQD3y0dlCgI2g4dNwjlLSs6vQXd2Xlq30vAigOU9iy1pL74yShM1EITjQ2Q6pH ZjaMeePp81q4Rgv20xrt51TLLErN8JaHPzlXJejN6z9yMEXgS61p0su3Rqd9wioQ+F25 1H7Qc9BMCCpqAAqEcWPEpcn0QVLpj0N5N9HaK9a/hFEPl+8nEriwus4vW39eFGkcWzjW 9E6g== X-Gm-Message-State: AIVw1130h2guVrdQHiEBceHmYwS1AzHbaZOWF9m0+wwbON/4Cfdj5+BG 1EUaG3Rr3hX5Ke5080U= X-Received: by 10.28.238.5 with SMTP id m5mr4185859wmh.86.1500293260068; Mon, 17 Jul 2017 05:07:40 -0700 (PDT) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id 63sm12795874wmi.8.2017.07.17.05.07.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Jul 2017 05:07:39 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, ogerlitz@mellanox.com, idosch@mellanox.com, mlxsw@mellanox.com Subject: [patch net-next 3/6] mlxsw: spectrum_flower: Add support for ip ttl Date: Mon, 17 Jul 2017 14:07:28 +0200 Message-Id: <20170717120731.3875-4-jiri@resnulli.us> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170717120731.3875-1-jiri@resnulli.us> References: <20170717120731.3875-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Or Gerlitz Support offloading rules that match on ip ttl. Signed-off-by: Or Gerlitz Signed-off-by: Jiri Pirko --- .../net/ethernet/mellanox/mlxsw/spectrum_flower.c | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c index 21bb2bf..84fe33c 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c @@ -212,11 +212,39 @@ static int mlxsw_sp_flower_parse_tcp(struct mlxsw_sp *mlxsw_sp, return 0; } +static int mlxsw_sp_flower_parse_ip(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_rule_info *rulei, + struct tc_cls_flower_offload *f, + u16 n_proto) +{ + struct flow_dissector_key_ip *key, *mask; + + if (!dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_IP)) + return 0; + + if (n_proto != ETH_P_IP && n_proto != ETH_P_IPV6) { + dev_err(mlxsw_sp->bus_info->dev, "IP keys supported only for IPv4/6\n"); + return -EINVAL; + } + + key = skb_flow_dissector_target(f->dissector, + FLOW_DISSECTOR_KEY_IP, + f->key); + mask = skb_flow_dissector_target(f->dissector, + FLOW_DISSECTOR_KEY_IP, + f->mask); + mlxsw_sp_acl_rulei_keymask_u32(rulei, MLXSW_AFK_ELEMENT_IP_TTL_, + key->ttl, mask->ttl); + return 0; +} + static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp, struct net_device *dev, struct mlxsw_sp_acl_rule_info *rulei, struct tc_cls_flower_offload *f) { + u16 n_proto_mask = 0; + u16 n_proto_key = 0; u16 addr_type = 0; u8 ip_proto = 0; int err; @@ -229,6 +257,7 @@ static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp, BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | BIT(FLOW_DISSECTOR_KEY_PORTS) | BIT(FLOW_DISSECTOR_KEY_TCP) | + BIT(FLOW_DISSECTOR_KEY_IP) | BIT(FLOW_DISSECTOR_KEY_VLAN))) { dev_err(mlxsw_sp->bus_info->dev, "Unsupported key\n"); return -EOPNOTSUPP; @@ -253,8 +282,8 @@ static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp, skb_flow_dissector_target(f->dissector, FLOW_DISSECTOR_KEY_BASIC, f->mask); - u16 n_proto_key = ntohs(key->n_proto); - u16 n_proto_mask = ntohs(mask->n_proto); + n_proto_key = ntohs(key->n_proto); + n_proto_mask = ntohs(mask->n_proto); if (n_proto_key == ETH_P_ALL) { n_proto_key = 0; @@ -324,6 +353,10 @@ static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp, if (err) return err; + err = mlxsw_sp_flower_parse_ip(mlxsw_sp, rulei, f, n_proto_key & n_proto_mask); + if (err) + return err; + return mlxsw_sp_flower_parse_actions(mlxsw_sp, dev, rulei, f->exts); }