Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1912708pxf; Sat, 3 Apr 2021 04:50:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlzIzlZbMhL2xBTW905rcd3cCZnS2xZPOoNb/TAiQLlx16uETvlZhDmIbvF/u2vXagXiy+ X-Received: by 2002:a17:906:5450:: with SMTP id d16mr18663030ejp.274.1617450652142; Sat, 03 Apr 2021 04:50:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617450652; cv=none; d=google.com; s=arc-20160816; b=0MkmWMeJKLoIA8IxouCGEr03pgdJZN08xd914t5VtcF70kzwKC7mOHhC7jSgXw9H5E r/wjmSTLWvKJDI7hDU/JEjvV5Po75EYGnqGpX9pu21s/EBqsihbeskLNVnihlOEuFtBX GGIStyv8uwPxVLS7IgU+7bZXtCQIp4+WXNiWS0t1WawXiRtYcP41TGFXC+fJ9smuzjsI z4Bv127QFWd2OAOssjYCqHO7cZL1Hbx1acyQnkWzW8UwNF1IE+7iz8On8kX47IhNjXLp XL99WgcT9GA6FlM5H9ZxWYScMgdaDT8pxXtYRjlUjUpLY8O3vxL/MpephhG2e44oOuGZ Nl3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=kp/w+kwkuNxea3g59BLKPzRm1sDPse0esda2xFp8ooc=; b=EY2Zr+zaBvi3F6eUhNfuextCsHWox0joRWlI3EpG4PmZ9eCS1LfCAfatYXSg5/oUJg EYbUWwE0TzZVxDDfrJ0fRo521YC+5hc4i5W3133Bll9i/hxBb9ZzCDIihFiewtQAVgaA kejrFC7GRfuBoOpl88yi/S2n5Bn9Hp+nhPD92sOihHOHDz72JMOtXJX7gX5pIM8XyWJ+ 4V2yBnAkNSMSPjANQQBGP2x+y2RtrPaipx1CKBxQ0svdW8n/Fz7Kv30cYm2y+4FJuX4o oP1HlUn84QEZBzuO/jxxDl+PPqmIzbPSVT/FpYMoCVQdBh4etZgEhSUwjN6o7GZOFsKy FKeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id zg9si89671ejb.330.2021.04.03.04.50.05; Sat, 03 Apr 2021 04:50:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236697AbhDCLtM (ORCPT + 99 others); Sat, 3 Apr 2021 07:49:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236662AbhDCLtK (ORCPT ); Sat, 3 Apr 2021 07:49:10 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C88EC061788 for ; Sat, 3 Apr 2021 04:49:08 -0700 (PDT) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lSelp-0000eq-6s; Sat, 03 Apr 2021 13:48:53 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lSell-0007xX-ML; Sat, 03 Apr 2021 13:48:49 +0200 From: Oleksij Rempel To: Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , Russell King Cc: Oleksij Rempel , Pengutronix Kernel Team , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org Subject: [PATCH net-next v1 1/9] net: dsa: add rcv_post call back Date: Sat, 3 Apr 2021 13:48:40 +0200 Message-Id: <20210403114848.30528-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210403114848.30528-1-o.rempel@pengutronix.de> References: <20210403114848.30528-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some switches (for example ar9331) do not provide enough information about forwarded packets. If the switch decision was made based on IPv4 or IPv6 header, we need to analyze it and set proper flag. Potentially we can do it in existing rcv path, on other hand we can avoid part of duplicated work and let the dsa framework set skb header pointers and then use preprocessed skb one step later withing the rcv_post call back. This patch is needed for ar9331 switch. Signed-off-by: Oleksij Rempel --- include/net/dsa.h | 2 ++ net/dsa/dsa.c | 4 ++++ net/dsa/port.c | 1 + 3 files changed, 7 insertions(+) diff --git a/include/net/dsa.h b/include/net/dsa.h index 57b2c49f72f4..f1a7aa4303a7 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -84,6 +84,7 @@ struct dsa_device_ops { struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev); struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt); + void (*rcv_post)(struct sk_buff *skb); void (*flow_dissect)(const struct sk_buff *skb, __be16 *proto, int *offset); /* Used to determine which traffic should match the DSA filter in @@ -247,6 +248,7 @@ struct dsa_port { struct dsa_switch_tree *dst; struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt); + void (*rcv_post)(struct sk_buff *skb); bool (*filter)(const struct sk_buff *skb, struct net_device *dev); enum { diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 84cad1be9ce4..fa3e7201e760 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -249,6 +249,10 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev, skb->pkt_type = PACKET_HOST; skb->protocol = eth_type_trans(skb, skb->dev); + + if (cpu_dp->rcv_post) + cpu_dp->rcv_post(skb); + if (unlikely(!dsa_slave_dev_check(skb->dev))) { /* Packet is to be injected directly on an upper * device, e.g. a team/bond, so skip all DSA-port diff --git a/net/dsa/port.c b/net/dsa/port.c index 01e30264b25b..859957688c62 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -720,6 +720,7 @@ void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp, { cpu_dp->filter = tag_ops->filter; cpu_dp->rcv = tag_ops->rcv; + cpu_dp->rcv_post = tag_ops->rcv_post; cpu_dp->tag_ops = tag_ops; } -- 2.29.2