From: Christian Marangi Date: Wed, 5 Feb 2025 21:23:21 +0000 (+0100) Subject: generic: backport some flow offload helper patch X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fopenwrt-24.10;p=thirdparty%2Fopenwrt.git generic: backport some flow offload helper patch Backport some flow offload helper patch in preparation for Airoha Flow Offload support. Link: https://github.com/openwrt/openwrt/pull/18166 (cherry picked from commit 34ba7e8a8ab10900a3ca80fc40e7cafd1e7edb50) [ drop merged patch 705-v6.12-netdevice-add-netdev... ] Signed-off-by: Christian Marangi --- diff --git a/target/linux/generic/backport-6.6/703-v6.10-flow_offload-add-control-flag-checking-helpers.patch b/target/linux/generic/backport-6.6/703-v6.10-flow_offload-add-control-flag-checking-helpers.patch new file mode 100644 index 00000000000..457dac16d43 --- /dev/null +++ b/target/linux/generic/backport-6.6/703-v6.10-flow_offload-add-control-flag-checking-helpers.patch @@ -0,0 +1,101 @@ +From d11e63119432bdb55065d094cb6fd37e9147c70d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= +Date: Thu, 11 Apr 2024 10:52:54 +0000 +Subject: [PATCH] flow_offload: add control flag checking helpers +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These helpers aim to help drivers, with checking +for the presence of unsupported control flags. + +For drivers supporting at least one control flag: + flow_rule_is_supp_control_flags() + +For drivers using flow_rule_match_control(), but not using flags: + flow_rule_has_control_flags() + +For drivers not using flow_rule_match_control(): + flow_rule_match_has_control_flags() + +While primarily aimed at FLOW_DISSECTOR_KEY_CONTROL +and flow_rule_match_control(), then the first two +can also be used with FLOW_DISSECTOR_KEY_ENC_CONTROL +and flow_rule_match_enc_control(). + +These helpers mirrors the existing check done in sfc: + drivers/net/ethernet/sfc/tc.c +276 + +Only compile-tested. + +Signed-off-by: Asbjørn Sloth Tønnesen +Reviewed-by: Louis Peens +Signed-off-by: David S. Miller +--- + include/net/flow_offload.h | 55 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +--- a/include/net/flow_offload.h ++++ b/include/net/flow_offload.h +@@ -449,6 +449,61 @@ static inline bool flow_rule_match_key(c + return dissector_uses_key(rule->match.dissector, key); + } + ++/** ++ * flow_rule_is_supp_control_flags() - check for supported control flags ++ * @supp_flags: control flags supported by driver ++ * @ctrl_flags: control flags present in rule ++ * @extack: The netlink extended ACK for reporting errors. ++ * ++ * Return: true if only supported control flags are set, false otherwise. ++ */ ++static inline bool flow_rule_is_supp_control_flags(const u32 supp_flags, ++ const u32 ctrl_flags, ++ struct netlink_ext_ack *extack) ++{ ++ if (likely((ctrl_flags & ~supp_flags) == 0)) ++ return true; ++ ++ NL_SET_ERR_MSG_FMT_MOD(extack, ++ "Unsupported match on control.flags %#x", ++ ctrl_flags); ++ ++ return false; ++} ++ ++/** ++ * flow_rule_has_control_flags() - check for presence of any control flags ++ * @ctrl_flags: control flags present in rule ++ * @extack: The netlink extended ACK for reporting errors. ++ * ++ * Return: true if control flags are set, false otherwise. ++ */ ++static inline bool flow_rule_has_control_flags(const u32 ctrl_flags, ++ struct netlink_ext_ack *extack) ++{ ++ return !flow_rule_is_supp_control_flags(0, ctrl_flags, extack); ++} ++ ++/** ++ * flow_rule_match_has_control_flags() - match and check for any control flags ++ * @rule: The flow_rule under evaluation. ++ * @extack: The netlink extended ACK for reporting errors. ++ * ++ * Return: true if control flags are set, false otherwise. ++ */ ++static inline bool flow_rule_match_has_control_flags(struct flow_rule *rule, ++ struct netlink_ext_ack *extack) ++{ ++ struct flow_match_control match; ++ ++ if (!flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CONTROL)) ++ return false; ++ ++ flow_rule_match_control(rule, &match); ++ ++ return flow_rule_has_control_flags(match.mask->flags, extack); ++} ++ + struct flow_stats { + u64 pkts; + u64 bytes; diff --git a/target/linux/generic/backport-6.6/704-v6.12-ipv6-Add-ipv6_addr_-cpu_to_be32-be32_to_cpu-helpers.patch b/target/linux/generic/backport-6.6/704-v6.12-ipv6-Add-ipv6_addr_-cpu_to_be32-be32_to_cpu-helpers.patch new file mode 100644 index 00000000000..2f4eec6953f --- /dev/null +++ b/target/linux/generic/backport-6.6/704-v6.12-ipv6-Add-ipv6_addr_-cpu_to_be32-be32_to_cpu-helpers.patch @@ -0,0 +1,40 @@ +From f40a455d01f80c6638be382d75cb1c4e7748d8af Mon Sep 17 00:00:00 2001 +From: Simon Horman +Date: Tue, 13 Aug 2024 14:33:47 +0100 +Subject: [PATCH] ipv6: Add ipv6_addr_{cpu_to_be32,be32_to_cpu} helpers + +Add helpers to convert an ipv6 addr, expressed as an array +of words, from CPU to big-endian byte order, and vice versa. + +No functional change intended. +Compile tested only. + +Suggested-by: Andrew Lunn +Link: https://lore.kernel.org/netdev/c7684349-535c-45a4-9a74-d47479a50020@lunn.ch/ +Reviewed-by: Andrew Lunn +Signed-off-by: Simon Horman +Link: https://patch.msgid.link/20240813-ipv6_addr-helpers-v2-1-5c974f8cca3e@kernel.org +Signed-off-by: Jakub Kicinski +--- + include/net/ipv6.h | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/include/net/ipv6.h ++++ b/include/net/ipv6.h +@@ -1382,4 +1382,16 @@ static inline void ip6_sock_set_recvpkti + release_sock(sk); + } + ++#define IPV6_ADDR_WORDS 4 ++ ++static inline void ipv6_addr_cpu_to_be32(__be32 *dst, const u32 *src) ++{ ++ cpu_to_be32_array(dst, src, IPV6_ADDR_WORDS); ++} ++ ++static inline void ipv6_addr_be32_to_cpu(u32 *dst, const __be32 *src) ++{ ++ be32_to_cpu_array(dst, src, IPV6_ADDR_WORDS); ++} ++ + #endif /* _NET_IPV6_H */