Message ID | 20220415103320.90657-1-kurt@linutronix.de (mailing list archive) |
---|---|
State | Accepted |
Commit | 0763120b090418a5257402754e22a34227ae5f12 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: dsa: hellcreek: Calculate checksums in tagger | expand |
On 4/15/2022 3:33 AM, Kurt Kanzenbach wrote: > In case the checksum calculation is offloaded to the DSA master network > interface, it will include the switch trailing tag. As soon as the switch strips > that tag on egress, the calculated checksum is wrong. > > Therefore, add the checksum calculation to the tagger (if required) before > adding the switch tag. This way, the hellcreek code works with all DSA master > interfaces regardless of their declared feature set. > > Fixes: 01ef09caad66 ("net: dsa: Add tag handling for Hirschmann Hellcreek switches") > Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Hello: This patch was applied to netdev/net.git (master) by Paolo Abeni <pabeni@redhat.com>: On Fri, 15 Apr 2022 12:33:20 +0200 you wrote: > In case the checksum calculation is offloaded to the DSA master network > interface, it will include the switch trailing tag. As soon as the switch strips > that tag on egress, the calculated checksum is wrong. > > Therefore, add the checksum calculation to the tagger (if required) before > adding the switch tag. This way, the hellcreek code works with all DSA master > interfaces regardless of their declared feature set. > > [...] Here is the summary with links: - [net] net: dsa: hellcreek: Calculate checksums in tagger https://git.kernel.org/netdev/net/c/0763120b0904 You are awesome, thank you!
diff --git a/net/dsa/tag_hellcreek.c b/net/dsa/tag_hellcreek.c index f64b805303cd..eb204ad36eee 100644 --- a/net/dsa/tag_hellcreek.c +++ b/net/dsa/tag_hellcreek.c @@ -21,6 +21,14 @@ static struct sk_buff *hellcreek_xmit(struct sk_buff *skb, struct dsa_port *dp = dsa_slave_to_port(dev); u8 *tag; + /* Calculate checksums (if required) before adding the trailer tag to + * avoid including it in calculations. That would lead to wrong + * checksums after the switch strips the tag. + */ + if (skb->ip_summed == CHECKSUM_PARTIAL && + skb_checksum_help(skb)) + return NULL; + /* Tag encoding */ tag = skb_put(skb, HELLCREEK_TAG_LEN); *tag = BIT(dp->index);
In case the checksum calculation is offloaded to the DSA master network interface, it will include the switch trailing tag. As soon as the switch strips that tag on egress, the calculated checksum is wrong. Therefore, add the checksum calculation to the tagger (if required) before adding the switch tag. This way, the hellcreek code works with all DSA master interfaces regardless of their declared feature set. Fixes: 01ef09caad66 ("net: dsa: Add tag handling for Hirschmann Hellcreek switches") Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> --- net/dsa/tag_hellcreek.c | 8 ++++++++ 1 file changed, 8 insertions(+)