From patchwork Thu Mar 3 18:15:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767886 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FC12C433F5 for ; Thu, 3 Mar 2022 18:16:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235656AbiCCSRN (ORCPT ); Thu, 3 Mar 2022 13:17:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230456AbiCCSRM (ORCPT ); Thu, 3 Mar 2022 13:17:12 -0500 Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2772A1A363B for ; Thu, 3 Mar 2022 10:16:27 -0800 (PST) Received: by mail-pf1-x433.google.com with SMTP id s11so5354680pfu.13 for ; Thu, 03 Mar 2022 10:16:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rdku8wN/DyyUY/n9gocDNJH4wx8eXfzLXshEVqbfILE=; b=n1Hf/bZGchm9wabHBlWxJ79qtT3HHE5QY6Xlpr+miZNbnLYI8EQQCfI+qu+yctt+Tf xCeqdVl09H6PMUiwEFqqCELyk6XfeLLMamfThKUsgud13A9tZI14Un0W9PYw3vSGQyZu 8/1MNm7r8ZYMiKG1EegeqDlGtBTSGvIS66WlBayWIt4JoVQdSlV8iGDUv1YFf45IsAVe 14X0/3rfTzu2uuEj0S9l4McwT/jmCOT75RzBekC2NGEl5tnS20MV2jjouWjJFlBjBzPl Xyjwqgqo8Cldc6IevsW/o29w4HoqaZ5+9dvtWcP0nclqwfqQPGmQDa/F3zqXm1TmMgUI JXgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rdku8wN/DyyUY/n9gocDNJH4wx8eXfzLXshEVqbfILE=; b=zbFSZh3exjlhSnLywfcMQPZ2bqKINd/RilWJhOyDArK8IYP8Q7bRThpa1otS35cbIc KdxVw+Tky6QGp1LSfYX62LZDyYYDqnxHS87Ntmt/atT3zA+zyoASY9vvNgjHhyB89o/l 6YARNoqenpxEVvaUExy7fU54AGyf5PQyiagkDEim/XinopwAZh9GugKJMuQsOPhlqszN M570lFHK1PpKC2d0oMHeWSwVJhey3cVAbegckQvkAbZTEBMrzZ+gQd4eu74a0Qxyv83v EkrhZ4OxhjHTlqXIk06zlBNZjbW8CE0bQ+IBg4MGqlE20wt8XNfnF7hRLk4skWRn3lhT mPXQ== X-Gm-Message-State: AOAM533guBMDMZPbn7KD2R/pLOwGpVBARoxUaWTRAabSB47lOH+C/x0h azvTn5qWw2TX2e/AUQn4GKw= X-Google-Smtp-Source: ABdhPJxbSI77OPieFivUL34oUsE/K1EdNI08cOQaUOcX2wgbhkAxbOhyKRHIT+RHiioQ3zQHAHD/lw== X-Received: by 2002:a63:90c4:0:b0:37c:7f96:8cdb with SMTP id a187-20020a6390c4000000b0037c7f968cdbmr1463109pge.24.1646331385621; Thu, 03 Mar 2022 10:16:25 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:25 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 01/14] net: add netdev->tso_ipv6_max_size attribute Date: Thu, 3 Mar 2022 10:15:54 -0800 Message-Id: <20220303181607.1094358-2-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Some NIC (or virtual devices) are LSOv2 compatible. BIG TCP plans using the large LSOv2 feature for IPv6. New netlink attribute IFLA_TSO_IPV6_MAX_SIZE is defined. Drivers should use netif_set_tso_ipv6_max_size() to advertize their limit. Unchanged drivers are not allowing big TSO packets to be sent. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 10 ++++++++++ include/uapi/linux/if_link.h | 1 + net/core/dev.c | 2 ++ net/core/rtnetlink.c | 3 +++ tools/include/uapi/linux/if_link.h | 1 + 5 files changed, 17 insertions(+) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 19a27ac361efb64068e2b9954eb85261283b3d60..3b59359b5e4d35f40fb90d594e78cb88befbbcbf 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1951,6 +1951,7 @@ enum netdev_ml_priv_type { * @dev_registered_tracker: tracker for reference held while * registered * @offload_xstats_l3: L3 HW stats for this netdevice. + * @tso_ipv6_max_size: Maximum size of IPv6 TSO packets (driver/NIC limit) * * FIXME: cleanup struct net_device such that network protocol info * moves out. @@ -2289,6 +2290,7 @@ struct net_device { netdevice_tracker watchdog_dev_tracker; netdevice_tracker dev_registered_tracker; struct rtnl_hw_stats64 *offload_xstats_l3; + unsigned int tso_ipv6_max_size; }; #define to_net_dev(d) container_of(d, struct net_device, dev) @@ -4898,6 +4900,14 @@ static inline void netif_set_gro_max_size(struct net_device *dev, WRITE_ONCE(dev->gro_max_size, size); } +/* Used by drivers to give their hardware/firmware limit for LSOv2 packets */ +static inline void netif_set_tso_ipv6_max_size(struct net_device *dev, + unsigned int size) +{ + dev->tso_ipv6_max_size = size; +} + + static inline void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol, int pulled_hlen, u16 mac_offset, int mac_len) diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index ddca20357e7e89b5f204b3117ff3838735535470..c8af031b692e52690a2760e9d79c9462185e2fc9 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -363,6 +363,7 @@ enum { IFLA_PARENT_DEV_NAME, IFLA_PARENT_DEV_BUS_NAME, IFLA_GRO_MAX_SIZE, + IFLA_TSO_IPV6_MAX_SIZE, __IFLA_MAX }; diff --git a/net/core/dev.c b/net/core/dev.c index 5db2443c237132946fd0f3dc095d29711cccec12..aa37d3f2ca1afe53b05b7d71be1dbdccaeca4f6b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10461,6 +10461,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, dev->gso_max_size = GSO_MAX_SIZE; dev->gso_max_segs = GSO_MAX_SEGS; dev->gro_max_size = GRO_MAX_SIZE; + dev->tso_ipv6_max_size = GSO_MAX_SIZE; + dev->upper_level = 1; dev->lower_level = 1; #ifdef CONFIG_LOCKDEP diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a66b6761b88b1c63c916fc085f4d9e8523bb0659..864c411c124040e2076289f8714f8b043563408c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1027,6 +1027,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */ + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */ + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */ + + nla_total_size(4) /* IFLA_TSO_IPV6_MAX_SIZE */ + nla_total_size(1) /* IFLA_OPERSTATE */ + nla_total_size(1) /* IFLA_LINKMODE */ + nla_total_size(4) /* IFLA_CARRIER_CHANGES */ @@ -1732,6 +1733,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, nla_put_u32(skb, IFLA_GSO_MAX_SEGS, dev->gso_max_segs) || nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) || nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) || + nla_put_u32(skb, IFLA_TSO_IPV6_MAX_SIZE, dev->tso_ipv6_max_size) || #ifdef CONFIG_RPS nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) || #endif @@ -1885,6 +1887,7 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_NEW_IFINDEX] = NLA_POLICY_MIN(NLA_S32, 1), [IFLA_PARENT_DEV_NAME] = { .type = NLA_NUL_STRING }, [IFLA_GRO_MAX_SIZE] = { .type = NLA_U32 }, + [IFLA_TSO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, }; static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { diff --git a/tools/include/uapi/linux/if_link.h b/tools/include/uapi/linux/if_link.h index e1ba2d51b717b7ac7f06e94ac9791cf4c8a5ab6f..441615c39f0a24eeeb6e27b4ca88031bcc234cf8 100644 --- a/tools/include/uapi/linux/if_link.h +++ b/tools/include/uapi/linux/if_link.h @@ -348,6 +348,7 @@ enum { IFLA_PARENT_DEV_NAME, IFLA_PARENT_DEV_BUS_NAME, IFLA_GRO_MAX_SIZE, + IFLA_TSO_IPV6_MAX_SIZE, __IFLA_MAX }; From patchwork Thu Mar 3 18:15:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767888 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96D28C433F5 for ; Thu, 3 Mar 2022 18:16:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235657AbiCCSRU (ORCPT ); Thu, 3 Mar 2022 13:17:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235660AbiCCSRR (ORCPT ); Thu, 3 Mar 2022 13:17:17 -0500 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16E671A3617 for ; Thu, 3 Mar 2022 10:16:29 -0800 (PST) Received: by mail-pl1-x62e.google.com with SMTP id p17so5317829plo.9 for ; Thu, 03 Mar 2022 10:16:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IX+M6tDVbg8jUl5LHYUbr6tm03uFa1bXyWjazq7LLo8=; b=GixwPq3e5UxljxBIjeQmahGwQWxkJrR7lbk0K+ivYAV256Px7DNVebSp46zDO0eCjz 6dLGc7ojMAwgAKCEU1XMn1v5A4oCk1eDNt0Vh/AcoD1AMILdSAPaKCPwTTf1tzQ7Hu7Z 8N9ts3cHGUsEOOLc7Fpb5xwZCnQVNSQMpOvWFI5uveHsHuombLHrZXyOL08ljw/NMyW0 WOrFa3eCqmK//+9njIMb8YDjRKpPwSR9xiyFJhRTVYqCc6URkqED7qrRDYM2IG9bI8nH xT9rxDEGCrvWko2PDDl1dqhlocZVlFYy0vl95cnjUtxwsoXJLy+kZS71VYT15eBx2Tl3 tSqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IX+M6tDVbg8jUl5LHYUbr6tm03uFa1bXyWjazq7LLo8=; b=UH9T5Iw0zV1MJa6SuSgvOkEObnJj9+pV5BltCMHJVnSDs4XMRNdw7TGg6GcYVKR3gv NLC2b6I/FC4XxvbXjjoZVlFWaHWsEI7uLMZBrwWWzEgHHkG7GIW6XnLTq3B6d1Sgja04 cjS9uxcwyxEEWxxCR2x+mOIvKnCUMzHyNDg7cF3iLHUnWa/Me1xVNDbs2XnzT4qbOfYa lmSM3s4gdvtLlJNOW7eiWIBqH8kXOHVp/1Jmr4Mr9jEOSeNwf69iCU1dLJqgwCSLyxDE +GybmnZavjZZtWEUmYZZ09m10IV20szzv3gcwH1hrIRnc0eVBiDkzB8sVEWk4CvVOaMS jExw== X-Gm-Message-State: AOAM533lahSuUIWb+nb6nTUrcKeSjXCmRmvdDmgXcKfciEO8Tn7xFl0i e3tYOk1He0DGp7Cd/8oyMVI= X-Google-Smtp-Source: ABdhPJwpdMYk0oNpt0JChS2BYjLZrGvAdS1ZxIc5yss6VBw5ppt19cB19tWXbMiE2EAYOUvtZK8pzw== X-Received: by 2002:a17:902:cf0e:b0:14f:8a60:475c with SMTP id i14-20020a170902cf0e00b0014f8a60475cmr37130912plg.146.1646331388555; Thu, 03 Mar 2022 10:16:28 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:28 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 02/14] ipv6: add dev->gso_ipv6_max_size Date: Thu, 3 Mar 2022 10:15:55 -0800 Message-Id: <20220303181607.1094358-3-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Coco Li This enable TCP stack to build TSO packets bigger than 64KB if the driver is LSOv2 compatible. This patch introduces new variable gso_ipv6_max_size that is modifiable through ip link. ip link set dev eth0 gso_ipv6_max_size 185000 User input is capped by driver limit (tso_ipv6_max_size) added in previous patch. Signed-off-by: Coco Li Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 12 ++++++++++++ include/uapi/linux/if_link.h | 1 + net/core/dev.c | 1 + net/core/rtnetlink.c | 15 +++++++++++++++ net/core/sock.c | 6 ++++++ tools/include/uapi/linux/if_link.h | 1 + 6 files changed, 36 insertions(+) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 3b59359b5e4d35f40fb90d594e78cb88befbbcbf..6d559a0c4abd7cd1f5ee90e0c303fe9331a27841 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1952,6 +1952,7 @@ enum netdev_ml_priv_type { * registered * @offload_xstats_l3: L3 HW stats for this netdevice. * @tso_ipv6_max_size: Maximum size of IPv6 TSO packets (driver/NIC limit) + * @gso_ipv6_max_size: Maximum size of IPv6 GSO packets (user/admin limit) * * FIXME: cleanup struct net_device such that network protocol info * moves out. @@ -2291,6 +2292,7 @@ struct net_device { netdevice_tracker dev_registered_tracker; struct rtnl_hw_stats64 *offload_xstats_l3; unsigned int tso_ipv6_max_size; + unsigned int gso_ipv6_max_size; }; #define to_net_dev(d) container_of(d, struct net_device, dev) @@ -4884,6 +4886,10 @@ static inline void netif_set_gso_max_size(struct net_device *dev, { /* dev->gso_max_size is read locklessly from sk_setup_caps() */ WRITE_ONCE(dev->gso_max_size, size); + + /* legacy drivers want to lower gso_max_size, regardless of family. */ + size = min(size, dev->gso_ipv6_max_size); + WRITE_ONCE(dev->gso_ipv6_max_size, size); } static inline void netif_set_gso_max_segs(struct net_device *dev, @@ -4907,6 +4913,12 @@ static inline void netif_set_tso_ipv6_max_size(struct net_device *dev, dev->tso_ipv6_max_size = size; } +static inline void netif_set_gso_ipv6_max_size(struct net_device *dev, + unsigned int size) +{ + size = min(size, dev->tso_ipv6_max_size); + WRITE_ONCE(dev->gso_ipv6_max_size, size); +} static inline void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol, int pulled_hlen, u16 mac_offset, diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index c8af031b692e52690a2760e9d79c9462185e2fc9..048a9c848a3a39596b6c3135553fdfb9a1fe37d2 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -364,6 +364,7 @@ enum { IFLA_PARENT_DEV_BUS_NAME, IFLA_GRO_MAX_SIZE, IFLA_TSO_IPV6_MAX_SIZE, + IFLA_GSO_IPV6_MAX_SIZE, __IFLA_MAX }; diff --git a/net/core/dev.c b/net/core/dev.c index aa37d3f2ca1afe53b05b7d71be1dbdccaeca4f6b..7dbedec0903279ece0cb1199969f732a4dc35cd2 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10462,6 +10462,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, dev->gso_max_segs = GSO_MAX_SEGS; dev->gro_max_size = GRO_MAX_SIZE; dev->tso_ipv6_max_size = GSO_MAX_SIZE; + dev->gso_ipv6_max_size = GSO_MAX_SIZE; dev->upper_level = 1; dev->lower_level = 1; diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 864c411c124040e2076289f8714f8b043563408c..a60efa6d0fac1b9ce209126bad946a3d2bd24ac3 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1028,6 +1028,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */ + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */ + nla_total_size(4) /* IFLA_TSO_IPV6_MAX_SIZE */ + + nla_total_size(4) /* IFLA_GSO_IPV6_MAX_SIZE */ + nla_total_size(1) /* IFLA_OPERSTATE */ + nla_total_size(1) /* IFLA_LINKMODE */ + nla_total_size(4) /* IFLA_CARRIER_CHANGES */ @@ -1734,6 +1735,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) || nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) || nla_put_u32(skb, IFLA_TSO_IPV6_MAX_SIZE, dev->tso_ipv6_max_size) || + nla_put_u32(skb, IFLA_GSO_IPV6_MAX_SIZE, dev->gso_ipv6_max_size) || #ifdef CONFIG_RPS nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) || #endif @@ -1888,6 +1890,7 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_PARENT_DEV_NAME] = { .type = NLA_NUL_STRING }, [IFLA_GRO_MAX_SIZE] = { .type = NLA_U32 }, [IFLA_TSO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, + [IFLA_GSO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, }; static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { @@ -2774,6 +2777,15 @@ static int do_setlink(const struct sk_buff *skb, } } + if (tb[IFLA_GSO_IPV6_MAX_SIZE]) { + u32 max_size = nla_get_u32(tb[IFLA_GSO_IPV6_MAX_SIZE]); + + if (dev->gso_ipv6_max_size ^ max_size) { + netif_set_gso_ipv6_max_size(dev, max_size); + status |= DO_SETLINK_MODIFIED; + } + } + if (tb[IFLA_GSO_MAX_SEGS]) { u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]); @@ -3249,6 +3261,9 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname, netif_set_gso_max_segs(dev, nla_get_u32(tb[IFLA_GSO_MAX_SEGS])); if (tb[IFLA_GRO_MAX_SIZE]) netif_set_gro_max_size(dev, nla_get_u32(tb[IFLA_GRO_MAX_SIZE])); + if (tb[IFLA_GSO_IPV6_MAX_SIZE]) + netif_set_gso_ipv6_max_size(dev, + nla_get_u32(tb[IFLA_GSO_IPV6_MAX_SIZE])); return dev; } diff --git a/net/core/sock.c b/net/core/sock.c index 784c92eaded89fdb55be0ad11dd2dadc8548814b..7cd83bea205849ba7c3ee420d5a5e54ceff9979a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2279,6 +2279,12 @@ void sk_setup_caps(struct sock *sk, struct dst_entry *dst) sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM; /* pairs with the WRITE_ONCE() in netif_set_gso_max_size() */ sk->sk_gso_max_size = READ_ONCE(dst->dev->gso_max_size); +#if IS_ENABLED(CONFIG_IPV6) + if (sk->sk_family == AF_INET6 && + sk_is_tcp(sk) && + !ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr)) + sk->sk_gso_max_size = READ_ONCE(dst->dev->gso_ipv6_max_size); +#endif sk->sk_gso_max_size -= (MAX_TCP_HEADER + 1); /* pairs with the WRITE_ONCE() in netif_set_gso_max_segs() */ max_segs = max_t(u32, READ_ONCE(dst->dev->gso_max_segs), 1); diff --git a/tools/include/uapi/linux/if_link.h b/tools/include/uapi/linux/if_link.h index 441615c39f0a24eeeb6e27b4ca88031bcc234cf8..e40cd575607872d3bff3bc1971df8c6426290562 100644 --- a/tools/include/uapi/linux/if_link.h +++ b/tools/include/uapi/linux/if_link.h @@ -349,6 +349,7 @@ enum { IFLA_PARENT_DEV_BUS_NAME, IFLA_GRO_MAX_SIZE, IFLA_TSO_IPV6_MAX_SIZE, + IFLA_GSO_IPV6_MAX_SIZE, __IFLA_MAX }; From patchwork Thu Mar 3 18:15:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767887 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6114C433FE for ; Thu, 3 Mar 2022 18:16:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235662AbiCCSRV (ORCPT ); Thu, 3 Mar 2022 13:17:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235663AbiCCSRT (ORCPT ); Thu, 3 Mar 2022 13:17:19 -0500 Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46FB71A39CD for ; Thu, 3 Mar 2022 10:16:31 -0800 (PST) Received: by mail-pg1-x52e.google.com with SMTP id 27so5230656pgk.10 for ; Thu, 03 Mar 2022 10:16:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KFD2Eu7ySwZixX0vecWolWD4u1kH+iPN2NO5nEy2DUo=; b=XEpC/E4h9OkZwK9gHHf4tAkCk/dS+zYsb0GoUKqomTb/WmtYs9HJfws24/WvYdFGsr /1N3iC9K2K0yc6UFG/VEfNY4TwbZeUaI/kBbXfMy3qi7IKXtWOIw0pl8FWni9nX9QPtV IsqiP2CZ/97frELkC4Di1VatvYgc/CtXq/H44A+ApznPOaH76lN3ilNzo+dvc7StrKBQ 9e0xuhKNbkbX4Emyr64FFQBXLYbR+qDRdhxSgMngss7rurdrBwzAI7K9WbvRCjsXCVmw rj4950SO8bOuaXP/trgs50u9RfJnLKlj2k2zSfy7mELbkfdaJrtToiZT2+IZSXbShcrF 6ZoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KFD2Eu7ySwZixX0vecWolWD4u1kH+iPN2NO5nEy2DUo=; b=r8qe4hoWqBpoEFQqR1AMmsK+I8JjeZIuZkrlyWY5TegD7WvJSqiPZaQ0sd70RFlXhl XyHSeN71eYtrqYfLadjiDE4FmSrDB9SSIFiwArKEvPgk8PpbLOtXU0DbKKfzXr5fAFDu HHEyHxXS5VhoPoAUYzHnujMD6CJHO0MUUiIczNx+c2dF9cNYLEcKv2GIf+LNNM5vO5U8 NRCjf/rexKCX4U3+2AvFL9t2iZ2XMBqbxTqK5jN2mmrOVoN0sSN90yhOs9aJe93mkX4M 5OGDJmXmV01/IUFlm0j7VqiFKay/aYkGEtqFmGQf04o3S+hfpw5BWotgIn3KEe0R++qv yTIw== X-Gm-Message-State: AOAM533ZY5oxPLtPomjcUhIkjhGFQj82FzLE1ZGHSxpd5u7t4e02ScUN 2h3beWopITg4Bbe1heSY1Hu5KQ+h3lY= X-Google-Smtp-Source: ABdhPJzGnhf9lfwB/A+jBBsDyM1x1jn8QwgviqkVnxmPON2AjIz4nGv9exIGAtVcEWdJrcKYZC6uWA== X-Received: by 2002:a05:6a00:1da3:b0:4e1:68a4:3f1f with SMTP id z35-20020a056a001da300b004e168a43f1fmr39487327pfw.64.1646331390825; Thu, 03 Mar 2022 10:16:30 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:30 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 03/14] tcp_cubic: make hystart_ack_delay() aware of BIG TCP Date: Thu, 3 Mar 2022 10:15:56 -0800 Message-Id: <20220303181607.1094358-4-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet hystart_ack_delay() had the assumption that a TSO packet would not be bigger than GSO_MAX_SIZE. This will no longer be true. We should use sk->sk_gso_max_size instead. This reduces chances of spurious Hystart ACK train detections. Signed-off-by: Eric Dumazet --- net/ipv4/tcp_cubic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index 24d562dd62254d6e50dd08236f8967400d81e1ea..dfc9dc951b7404776b2246c38273fbadf03c39fd 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c @@ -372,7 +372,7 @@ static void cubictcp_state(struct sock *sk, u8 new_state) * We apply another 100% factor because @rate is doubled at this point. * We cap the cushion to 1ms. */ -static u32 hystart_ack_delay(struct sock *sk) +static u32 hystart_ack_delay(const struct sock *sk) { unsigned long rate; @@ -380,7 +380,7 @@ static u32 hystart_ack_delay(struct sock *sk) if (!rate) return 0; return min_t(u64, USEC_PER_MSEC, - div64_ul((u64)GSO_MAX_SIZE * 4 * USEC_PER_SEC, rate)); + div64_ul((u64)sk->sk_gso_max_size * 4 * USEC_PER_SEC, rate)); } static void hystart_update(struct sock *sk, u32 delay) From patchwork Thu Mar 3 18:15:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767889 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B4A9C433EF for ; Thu, 3 Mar 2022 18:16:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235663AbiCCSRV (ORCPT ); Thu, 3 Mar 2022 13:17:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235670AbiCCSRT (ORCPT ); Thu, 3 Mar 2022 13:17:19 -0500 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E43C1A39C5 for ; Thu, 3 Mar 2022 10:16:33 -0800 (PST) Received: by mail-pg1-x534.google.com with SMTP id o26so5239989pgb.8 for ; Thu, 03 Mar 2022 10:16:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AzWpD7xNa7+zx0UcvxGkSN22TQN1GOmZtYxWLfXwVx4=; b=GjE8VK+esd2uJ5oJzRFNpWoBrtupkaOOIw/zK50PD8SC0g1OodXJMxAbEXO4usyZC6 M1FOiu8rIEHp7nxbF6d4yzM1eD0JVHKUw8yu4uPq//A0J0V2SxQ3FiZUCf6enzVgEVqi EqqXl7IEJr2im81U2H64uFi4jZjqWpWCSFIyOkTzaHE84kg7XX/Y3J79FE9H7IKv1IEU fwEMWcKu71UlTLqQ2iXFYQLd+o7Lch14Exj7BuOBpQ8zBVPxxmFpVgDfTXn2BVYStmf0 ikwDj/YzUMAEsVpwWBQY7CKagpLBcslwRl73ZP8D4YqIjK/7LBt03AcsfNIG0FJcNeH5 SErA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AzWpD7xNa7+zx0UcvxGkSN22TQN1GOmZtYxWLfXwVx4=; b=CputGwj8Y51feYHJDM00jrFLkfBHtnx9MHt+5ow2QTS85qGw0F7i8vG2pzw/8zVnav gODs3VlZXCzYSQSPFOpqylwujD8sjqWi9QYOKYZHhcYD3I53xVp+/kHjF8lDLqDYc1OF fiquIWD7Jl+NwffWzvXU9dzD1tiMEspVI02+4GBPWtwD9sPNkKj74stJrIq9+0PyHlFm 6KNViZ2CmmilVwSjjvvKwVVxwms+ig7Y+Za003mUMSrSHzNBZP3MHYw+xnPdmE7ImJNN xMOc5G3bR4j/ukwQDV3QnBVvoK36NZ+bcg+sb5GrudgNguGOXvTdRtfZJIGPrZ/qaKgn Va3w== X-Gm-Message-State: AOAM532Ra+GamaK6XsG9RLN55NZ9cO1hDzQTvUnz1qOc0y8Y9zNpmCsU sGPJMoBPRejjuDXS2qev8Nw= X-Google-Smtp-Source: ABdhPJxrYXDWb2s+FQLH0UXJelbHpPcCPqp57Yjeajm5m9m/RevXZ7gRQ6Fitp3F6xSbj/UhG3EKUg== X-Received: by 2002:a63:204d:0:b0:378:c9e5:bea6 with SMTP id r13-20020a63204d000000b00378c9e5bea6mr15316846pgm.573.1646331393105; Thu, 03 Mar 2022 10:16:33 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:32 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 04/14] ipv6: add struct hop_jumbo_hdr definition Date: Thu, 3 Mar 2022 10:15:57 -0800 Message-Id: <20220303181607.1094358-5-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Following patches will need to add and remove local IPv6 jumbogram options to enable BIG TCP. Signed-off-by: Eric Dumazet --- include/net/ipv6.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 213612f1680c7c39f4c07f0c05b4e6cf34a7878e..95f405cde9e539d7909b6b89af2b956655f38b94 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -151,6 +151,17 @@ struct frag_hdr { __be32 identification; }; +/* + * Jumbo payload option, as described in RFC 2676 2. + */ +struct hop_jumbo_hdr { + u8 nexthdr; + u8 hdrlen; + u8 tlv_type; /* IPV6_TLV_JUMBO, 0xC2 */ + u8 tlv_len; /* 4 */ + __be32 jumbo_payload_len; +}; + #define IP6_MF 0x0001 #define IP6_OFFSET 0xFFF8 From patchwork Thu Mar 3 18:15:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767890 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89870C433EF for ; Thu, 3 Mar 2022 18:16:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235664AbiCCSRY (ORCPT ); Thu, 3 Mar 2022 13:17:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235658AbiCCSRV (ORCPT ); Thu, 3 Mar 2022 13:17:21 -0500 Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5D911A3628 for ; Thu, 3 Mar 2022 10:16:35 -0800 (PST) Received: by mail-pl1-x630.google.com with SMTP id q11so5311549pln.11 for ; Thu, 03 Mar 2022 10:16:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+CSkEctJW7GjpAww/3igLK3CdQysYQhPQmjkKqHIjNs=; b=mZyR2EadcOUIHTaWhY3u+CiPwN9j8gIBObEy6N1BnEY5J8+BNgF4LFvx5TaLBKzMBG j0/4jzu0V6Mbm6kJfrTzTv27cJuxBxIUvNCUJ/48HOV2+oz8lnU8+MvgmdeEcoDK+edh faC7jiSrTKWiQdabRrOx9iK1LTXThpu7YlWrKWx6dOWm4G14xMvvJwYeesvsD6+Wpi2s AlPhLt8qGiTYD6sS8WfPoAXrz/DchIuIdGkP3miq3qEeyXycVdf8t7kwm3wrEoaDGhDV GFU+AN2HD8gnXLEynfgAWvKQhQI4/d2LK41IAShE9mgGZFmMhWzbX1jcCvM9yF99xSMT TmrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+CSkEctJW7GjpAww/3igLK3CdQysYQhPQmjkKqHIjNs=; b=1Bkx4pahSrpj9+f5PtXBFXKxbdHRQZIB0f7BQDUi08GK9n9H3E7Ztd7l3CANJ+67RM JtgffXt/q3fJt8JPyp+aKmJEVa8fpGJsx0lCbtJ3llyelY+hUIBV1ybPzEiHoa3tbUxK 7C/sZwRNco4lZTbsINBLtaW20z1WTAfESeiAqr8mA+AKzRx9XHUZMGPKj4poWMrsoMOb A7Hb+x5giVg7lilQ5oELaFU7C7w3ZeL2dhEyO/yolYPnZwsAtAiHUxEgB8C8VqLxDr2F wXXbn8ai57iMuyJbUYTZkDHD4gVsDcTamE10imVg8H60DNh/XZeoEMIe1y3kn0ADqjdB 70dg== X-Gm-Message-State: AOAM530dVeepFPmnGr1tFIc2HvOvrSA3Vodmr5+SkBBc9wciUQsgPPto FbCOlXFD16X8RqT5fPZ9dLA= X-Google-Smtp-Source: ABdhPJx5far9y2kRX00O1YKDpCMmpV/NPN1YggHkmY4sBULN0E/IcO+9xNFN+IjFwTIk9wZEfCtIWg== X-Received: by 2002:a17:90a:7c09:b0:1bc:a2fd:d4d8 with SMTP id v9-20020a17090a7c0900b001bca2fdd4d8mr6731942pjf.73.1646331395353; Thu, 03 Mar 2022 10:16:35 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:34 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 05/14] ipv6/gso: remove temporary HBH/jumbo header Date: Thu, 3 Mar 2022 10:15:58 -0800 Message-Id: <20220303181607.1094358-6-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet ipv6 tcp and gro stacks will soon be able to build big TCP packets, with an added temporary Hop By Hop header. If GSO is involved for these large packets, we need to remove the temporary HBH header before segmentation happens. v2: perform HBH removal from ipv6_gso_segment() instead of skb_segment() (Alexander feedback) Signed-off-by: Eric Dumazet --- include/net/ipv6.h | 33 +++++++++++++++++++++++++++++++++ net/ipv6/ip6_offload.c | 24 +++++++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 95f405cde9e539d7909b6b89af2b956655f38b94..efe0025bdbb9668ceb01989705ce8bccbf592350 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -467,6 +467,39 @@ bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb, struct ipv6_txoptions *ipv6_update_options(struct sock *sk, struct ipv6_txoptions *opt); +/* This helper is specialized for BIG TCP needs. + * It assumes the hop_jumbo_hdr will immediately follow the IPV6 header. + * It assumes headers are already in skb->head. + * Returns 0, or IPPROTO_TCP if a BIG TCP packet is there. + */ +static inline int ipv6_has_hopopt_jumbo(const struct sk_buff *skb) +{ + const struct hop_jumbo_hdr *jhdr; + const struct ipv6hdr *nhdr; + + if (likely(skb->len <= GRO_MAX_SIZE)) + return 0; + + if (skb->protocol != htons(ETH_P_IPV6)) + return 0; + + if (skb_network_offset(skb) + + sizeof(struct ipv6hdr) + + sizeof(struct hop_jumbo_hdr) > skb_headlen(skb)) + return 0; + + nhdr = ipv6_hdr(skb); + + if (nhdr->nexthdr != NEXTHDR_HOP) + return 0; + + jhdr = (const struct hop_jumbo_hdr *) (nhdr + 1); + if (jhdr->tlv_type != IPV6_TLV_JUMBO || jhdr->hdrlen != 0 || + jhdr->nexthdr != IPPROTO_TCP) + return 0; + return jhdr->nexthdr; +} + static inline bool ipv6_accept_ra(struct inet6_dev *idev) { /* If forwarding is enabled, RA are not accepted unless the special diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c index c4fc03c1ac99dbecd92e2b47b2db65374197434d..a6a6c1539c28d242ef8c35fcd5ce900512ce912d 100644 --- a/net/ipv6/ip6_offload.c +++ b/net/ipv6/ip6_offload.c @@ -77,7 +77,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, struct sk_buff *segs = ERR_PTR(-EINVAL); struct ipv6hdr *ipv6h; const struct net_offload *ops; - int proto; + int proto, nexthdr; struct frag_hdr *fptr; unsigned int payload_len; u8 *prevhdr; @@ -87,6 +87,28 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, bool gso_partial; skb_reset_network_header(skb); + nexthdr = ipv6_has_hopopt_jumbo(skb); + if (nexthdr) { + const int hophdr_len = sizeof(struct hop_jumbo_hdr); + int err; + + err = skb_cow_head(skb, 0); + if (err < 0) + return ERR_PTR(err); + + /* remove the HBH header. + * Layout: [Ethernet header][IPv6 header][HBH][TCP header] + */ + memmove(skb_mac_header(skb) + hophdr_len, + skb_mac_header(skb), + ETH_HLEN + sizeof(struct ipv6hdr)); + skb->data += hophdr_len; + skb->len -= hophdr_len; + skb->network_header += hophdr_len; + skb->mac_header += hophdr_len; + ipv6h = (struct ipv6hdr *)skb->data; + ipv6h->nexthdr = nexthdr; + } nhoff = skb_network_header(skb) - skb_mac_header(skb); if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) goto out; From patchwork Thu Mar 3 18:15:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767891 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DB4CC433EF for ; Thu, 3 Mar 2022 18:16:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235678AbiCCSRd (ORCPT ); Thu, 3 Mar 2022 13:17:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235680AbiCCSRb (ORCPT ); Thu, 3 Mar 2022 13:17:31 -0500 Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A2331A39FD for ; Thu, 3 Mar 2022 10:16:38 -0800 (PST) Received: by mail-pj1-x102c.google.com with SMTP id g7-20020a17090a708700b001bb78857ccdso8419525pjk.1 for ; Thu, 03 Mar 2022 10:16:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bhvBzCoyUH5Q2UW9eaBJZ/pUOhsdMx7Q/qA4TYp9tCg=; b=Rb/Z85wD8xH6SCxRoJH6bcKsIOsfBxMH6ZebEdHV2YlCiACLAr9XZwVmXKQsS8bEEO xTITZEd7qGUw/5o9uHobDo7R6hqEemWCZrijNJy/pt97zmjkK2XBXcIzmWLgG9uZhSLX wRPqp5KDNteFVrcgF+KVu23kksLuujGfmYuCsVWHPpvRlqRa6BE4fV7htkPixgg1SibX 8x4wCYlmwgIPXtlLc9iG/5l/yyYwkUyJMKquaqu/lc2W6ytVmNfpNXBeNOucoTS862n7 I1iDpRYPG3CcL1m9EiKESyz/Z+YKL2aHl6M3+/0aQvZRYo2D2mwAhDYE4IbtIAd3cMvu OKPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bhvBzCoyUH5Q2UW9eaBJZ/pUOhsdMx7Q/qA4TYp9tCg=; b=v6r9yNgghAv7fVMNBG4VosLJuEU1HUaWPfoeaySFNdBm5ABFBcoJHqqUMZUEOVOl8z WlJWpJQi+4iwNF36AjVphJchPb55+9dU1sLgdR62z0RQYRhV9XCvDGh+diez/sDHqbSj mCGRsFbeWILBdMkBgx4CCjMkSwFur6+vk7TPUbOsVBOkgedxBoFFt5WlccBFtSEq0Sk3 re+Z9+qqhQkXtRtWuICXxX6H49CZjtMDsw4qG9FYuBzrrg0dHgrXpVubtJQ1pD7f2bGb qX6iobPalNcQI9HrWLTaU2r4Gts2bOg7OwzUGAPOutZT7PPSDDt8jlqUzzOwxiaQ7v7z ljSQ== X-Gm-Message-State: AOAM531vgLgpj2+0h1/+bESlAMfhRADhQc+TGa4YyjK7yuyrZz6gq1JX qm49GQ49kXpI5S4NcmSvMNY= X-Google-Smtp-Source: ABdhPJzFTF2P/zneiE7vBW2ZTXTBenAk0TaJ4VEqsUsb/v/92sTYDK9NUjKmXIQ575db0jouoQB+YQ== X-Received: by 2002:a17:90b:4a49:b0:1be:e5e1:3a9c with SMTP id lb9-20020a17090b4a4900b001bee5e13a9cmr6558582pjb.211.1646331397570; Thu, 03 Mar 2022 10:16:37 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:37 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 06/14] ipv6/gro: insert temporary HBH/jumbo header Date: Thu, 3 Mar 2022 10:15:59 -0800 Message-Id: <20220303181607.1094358-7-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Following patch will add GRO_IPV6_MAX_SIZE, allowing gro to build BIG TCP ipv6 packets (bigger than 64K). This patch changes ipv6_gro_complete() to insert a HBH/jumbo header so that resulting packet can go through IPv6/TCP stacks. Signed-off-by: Eric Dumazet --- net/ipv6/ip6_offload.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c index a6a6c1539c28d242ef8c35fcd5ce900512ce912d..d12dba2dd5354dbb79bb80df4038dec2544cddeb 100644 --- a/net/ipv6/ip6_offload.c +++ b/net/ipv6/ip6_offload.c @@ -342,15 +342,43 @@ static struct sk_buff *ip4ip6_gro_receive(struct list_head *head, INDIRECT_CALLABLE_SCOPE int ipv6_gro_complete(struct sk_buff *skb, int nhoff) { const struct net_offload *ops; - struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + nhoff); + struct ipv6hdr *iph; int err = -ENOSYS; + u32 payload_len; if (skb->encapsulation) { skb_set_inner_protocol(skb, cpu_to_be16(ETH_P_IPV6)); skb_set_inner_network_header(skb, nhoff); } - iph->payload_len = htons(skb->len - nhoff - sizeof(*iph)); + payload_len = skb->len - nhoff - sizeof(*iph); + if (unlikely(payload_len > IPV6_MAXPLEN)) { + struct hop_jumbo_hdr *hop_jumbo; + int hoplen = sizeof(*hop_jumbo); + + /* Move network header left */ + memmove(skb_mac_header(skb) - hoplen, skb_mac_header(skb), + skb->transport_header - skb->mac_header); + skb->data -= hoplen; + skb->len += hoplen; + skb->mac_header -= hoplen; + skb->network_header -= hoplen; + iph = (struct ipv6hdr *)(skb->data + nhoff); + hop_jumbo = (struct hop_jumbo_hdr *)(iph + 1); + + /* Build hop-by-hop options */ + hop_jumbo->nexthdr = iph->nexthdr; + hop_jumbo->hdrlen = 0; + hop_jumbo->tlv_type = IPV6_TLV_JUMBO; + hop_jumbo->tlv_len = 4; + hop_jumbo->jumbo_payload_len = htonl(payload_len + hoplen); + + iph->nexthdr = NEXTHDR_HOP; + iph->payload_len = 0; + } else { + iph = (struct ipv6hdr *)(skb->data + nhoff); + iph->payload_len = htons(payload_len); + } nhoff += sizeof(*iph) + ipv6_exthdrs_len(iph, &ops); if (WARN_ON(!ops || !ops->callbacks.gro_complete)) From patchwork Thu Mar 3 18:16:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767892 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96727C433EF for ; Thu, 3 Mar 2022 18:16:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232143AbiCCSRf (ORCPT ); Thu, 3 Mar 2022 13:17:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235700AbiCCSRc (ORCPT ); Thu, 3 Mar 2022 13:17:32 -0500 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1788F1A363B for ; Thu, 3 Mar 2022 10:16:40 -0800 (PST) Received: by mail-pj1-x102f.google.com with SMTP id p3-20020a17090a680300b001bbfb9d760eso8408813pjj.2 for ; Thu, 03 Mar 2022 10:16:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uaNdChJGal16lor2sYYPx5gzirLknqoRgFPN2JvwQGY=; b=U7FdhHVDvwe0kuozXILwjvBhwIosbNwUbTCgX/HowGUgESdguMsKV6XKDnHvk9OPb7 ha+5bzTu3vfcgbG7v7zj3/Ex99FV7DFIumrEC092xTPmnywEPWoofDZj9jZP8iKAInNL +Silh4aCN7JEPA24KtRzc/6XTRpi/BCEz1PQsaLkkzoX0IacC4RjwIHzqPSyYcRae9pe QYFnjQ9Jbt3RgXAqGzt0RvYtK0JuMhSI0iepYVKexNzfOevM2xrtaVW55aYkeSDwuJK6 NB5Rv1B1/xyWqDHAybDxzWhEkYaS68daO2l6lvN3gCXNtxAVK8pSyIL/D0UZCXVD41Ax 7kMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uaNdChJGal16lor2sYYPx5gzirLknqoRgFPN2JvwQGY=; b=ThMhQjOXW6tTX3KinburWRyKtt13P3f7VDxPeN1kCHectPHwtTIWVbhma9bSy6ZxC8 tlcjoCBhgchseZ0GKVAQ4y1n06AgQ3w6grkCKGF5XDUNOqcVqJ/NR09QuuoDkVBI5++b a/yAQOYkQNLF/zhSDrQWNpOUVm7FleTDgE0QIb8EDR8j1iwseGp4jfgQdBJy0nW8QSOE /Pl75epk3oU8VMtOuTyTvbO1LobPNZ6qJFIeqA0WQsKYUe2YYI5mA2yBqjFUhzK6f9Nr hDm8ClqPIrwzqh4ZclC28H9amYfms8lji9A3eO0lb3Aa27WodcbirQ8OP2OfAhj94VxQ aajQ== X-Gm-Message-State: AOAM530StXCBjaxx2Fj0REts++T+DqZpco0N6pY2v03mYBqwqbGUso1w r3xYdY6USI77DVdAadBVHPc= X-Google-Smtp-Source: ABdhPJwPJb+554R1na6ECCvWvbmXvpDHfAtiElni17sMUCPihNBuvvixNhtbyypJSJ3CNKoWFU+spw== X-Received: by 2002:a17:902:aa08:b0:151:a5ff:eca3 with SMTP id be8-20020a170902aa0800b00151a5ffeca3mr5721524plb.19.1646331400155; Thu, 03 Mar 2022 10:16:40 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:39 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 07/14] ipv6: add GRO_IPV6_MAX_SIZE Date: Thu, 3 Mar 2022 10:16:00 -0800 Message-Id: <20220303181607.1094358-8-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Coco Li Enable GRO to have IPv6 specific limit for max packet size. This patch introduces new dev->gro_ipv6_max_size that is modifiable through ip link. ip link set dev eth0 gro_ipv6_max_size 185000 Note that this value is only considered if bigger than gro_max_size, and for non encapsulated TCP/ipv6 packets. Signed-off-by: Coco Li Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 10 ++++++++++ include/uapi/linux/if_link.h | 1 + net/core/dev.c | 1 + net/core/gro.c | 20 ++++++++++++++++++-- net/core/rtnetlink.c | 15 +++++++++++++++ tools/include/uapi/linux/if_link.h | 1 + 6 files changed, 46 insertions(+), 2 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 6d559a0c4abd7cd1f5ee90e0c303fe9331a27841..30c9c6a4f51c364a0178bbb4ed8c2a57ede51d47 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1944,6 +1944,8 @@ enum netdev_ml_priv_type { * keep a list of interfaces to be deleted. * @gro_max_size: Maximum size of aggregated packet in generic * receive offload (GRO) + * @gro_ipv6_max_size: Maximum size of aggregated packet in generic + * receive offload (GRO), for IPv6 * * @dev_addr_shadow: Copy of @dev_addr to catch direct writes. * @linkwatch_dev_tracker: refcount tracker used by linkwatch. @@ -2140,6 +2142,7 @@ struct net_device { int napi_defer_hard_irqs; #define GRO_MAX_SIZE 65536 unsigned int gro_max_size; + unsigned int gro_ipv6_max_size; rx_handler_func_t __rcu *rx_handler; void __rcu *rx_handler_data; @@ -4920,6 +4923,13 @@ static inline void netif_set_gso_ipv6_max_size(struct net_device *dev, WRITE_ONCE(dev->gso_ipv6_max_size, size); } +static inline void netif_set_gro_ipv6_max_size(struct net_device *dev, + unsigned int size) +{ + /* This pairs with the READ_ONCE() in skb_gro_receive() */ + WRITE_ONCE(dev->gro_ipv6_max_size, size); +} + static inline void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol, int pulled_hlen, u16 mac_offset, int mac_len) diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index 048a9c848a3a39596b6c3135553fdfb9a1fe37d2..9baa084fe2c6762b05029c4692cfd9c4646bb916 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -365,6 +365,7 @@ enum { IFLA_GRO_MAX_SIZE, IFLA_TSO_IPV6_MAX_SIZE, IFLA_GSO_IPV6_MAX_SIZE, + IFLA_GRO_IPV6_MAX_SIZE, __IFLA_MAX }; diff --git a/net/core/dev.c b/net/core/dev.c index 7dbedec0903279ece0cb1199969f732a4dc35cd2..64ec72e5fdec9a642226e3efdefb93ad2c1d134d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10463,6 +10463,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, dev->gro_max_size = GRO_MAX_SIZE; dev->tso_ipv6_max_size = GSO_MAX_SIZE; dev->gso_ipv6_max_size = GSO_MAX_SIZE; + dev->gro_ipv6_max_size = GRO_MAX_SIZE; dev->upper_level = 1; dev->lower_level = 1; diff --git a/net/core/gro.c b/net/core/gro.c index ee5e7e889d8bdd8db18715afc7bb6c1c759c9c23..f795393a883b08d71bfcfbd2d897e1ddcddf6fce 100644 --- a/net/core/gro.c +++ b/net/core/gro.c @@ -136,11 +136,27 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb) unsigned int new_truesize; struct sk_buff *lp; + if (unlikely(NAPI_GRO_CB(skb)->flush)) + return -E2BIG; + /* pairs with WRITE_ONCE() in netif_set_gro_max_size() */ gro_max_size = READ_ONCE(p->dev->gro_max_size); - if (unlikely(p->len + len >= gro_max_size || NAPI_GRO_CB(skb)->flush)) - return -E2BIG; + if (unlikely(p->len + len >= gro_max_size)) { + /* pairs with WRITE_ONCE() in netif_set_gro_ipv6_max_size() */ + unsigned int gro6_max_size = READ_ONCE(p->dev->gro_ipv6_max_size); + + if (gro6_max_size > gro_max_size && + p->protocol == htons(ETH_P_IPV6) && + skb_headroom(p) >= sizeof(struct hop_jumbo_hdr) && + ipv6_hdr(p)->nexthdr == IPPROTO_TCP && + !p->encapsulation) + gro_max_size = gro6_max_size; + + if (p->len + len >= gro_max_size) + return -E2BIG; + } + lp = NAPI_GRO_CB(p)->last; pinfo = skb_shinfo(lp); diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a60efa6d0fac1b9ce209126bad946a3d2bd24ac3..48158119c6d24ef3d16b1cff80c49525bd51678c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1029,6 +1029,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */ + nla_total_size(4) /* IFLA_TSO_IPV6_MAX_SIZE */ + nla_total_size(4) /* IFLA_GSO_IPV6_MAX_SIZE */ + + nla_total_size(4) /* IFLA_GRO_IPV6_MAX_SIZE */ + nla_total_size(1) /* IFLA_OPERSTATE */ + nla_total_size(1) /* IFLA_LINKMODE */ + nla_total_size(4) /* IFLA_CARRIER_CHANGES */ @@ -1736,6 +1737,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) || nla_put_u32(skb, IFLA_TSO_IPV6_MAX_SIZE, dev->tso_ipv6_max_size) || nla_put_u32(skb, IFLA_GSO_IPV6_MAX_SIZE, dev->gso_ipv6_max_size) || + nla_put_u32(skb, IFLA_GRO_IPV6_MAX_SIZE, dev->gro_ipv6_max_size) || #ifdef CONFIG_RPS nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) || #endif @@ -1891,6 +1893,7 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_GRO_MAX_SIZE] = { .type = NLA_U32 }, [IFLA_TSO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, [IFLA_GSO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, + [IFLA_GRO_IPV6_MAX_SIZE] = { .type = NLA_U32 }, }; static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { @@ -2786,6 +2789,15 @@ static int do_setlink(const struct sk_buff *skb, } } + if (tb[IFLA_GRO_IPV6_MAX_SIZE]) { + u32 max_size = nla_get_u32(tb[IFLA_GRO_IPV6_MAX_SIZE]); + + if (dev->gro_ipv6_max_size ^ max_size) { + netif_set_gro_ipv6_max_size(dev, max_size); + status |= DO_SETLINK_MODIFIED; + } + } + if (tb[IFLA_GSO_MAX_SEGS]) { u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]); @@ -3264,6 +3276,9 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname, if (tb[IFLA_GSO_IPV6_MAX_SIZE]) netif_set_gso_ipv6_max_size(dev, nla_get_u32(tb[IFLA_GSO_IPV6_MAX_SIZE])); + if (tb[IFLA_GRO_IPV6_MAX_SIZE]) + netif_set_gro_ipv6_max_size(dev, + nla_get_u32(tb[IFLA_GRO_IPV6_MAX_SIZE])); return dev; } diff --git a/tools/include/uapi/linux/if_link.h b/tools/include/uapi/linux/if_link.h index e40cd575607872d3bff3bc1971df8c6426290562..567008925a8be6900aa048c7ebb12684b2eebb4b 100644 --- a/tools/include/uapi/linux/if_link.h +++ b/tools/include/uapi/linux/if_link.h @@ -350,6 +350,7 @@ enum { IFLA_GRO_MAX_SIZE, IFLA_TSO_IPV6_MAX_SIZE, IFLA_GSO_IPV6_MAX_SIZE, + IFLA_GRO_IPV6_MAX_SIZE, __IFLA_MAX }; From patchwork Thu Mar 3 18:16:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767893 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8805C433FE for ; Thu, 3 Mar 2022 18:16:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235688AbiCCSRh (ORCPT ); Thu, 3 Mar 2022 13:17:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235710AbiCCSRc (ORCPT ); Thu, 3 Mar 2022 13:17:32 -0500 Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A3811A41E4 for ; Thu, 3 Mar 2022 10:16:43 -0800 (PST) Received: by mail-pg1-x530.google.com with SMTP id z4so5229143pgh.12 for ; Thu, 03 Mar 2022 10:16:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0UfD3Ua2RY/WS6DVGHr48mrEqKJbqecpmqNnN15gzRs=; b=j39y1LY/Q21Evxi58RhBZgQtCgiYNeWJcDGtiiKfzA04FkAaxpecNsq8taoHqsjgrE 969x9qXlQ0faMU7tBPoeBgL+Zj+0KmKaO/lnYp0AilaWoE8UEUVsVaw23OQILtJOGL9/ 4z2VJIS0wJ+cPveJVX8nLXjtIwaLpu2rxyumMFXd1naOr7X3wYVB8vwlApLPjSw1zrJG Rbs/JYFY61rE0nbMILap5AZfKslF7spdyFTzFxyYDAmFtUmzgMkaxrg065qBVuutV5+Q qb3oI/9/EjAq5gClQAlEaAdakjQKmuQSuJ5MeH56HLoWbHNneqzMlL1lmcJ3qunfVB1W 6CSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0UfD3Ua2RY/WS6DVGHr48mrEqKJbqecpmqNnN15gzRs=; b=sEEK/YeNuIaa2Fha82vcoundukEMdmPL9xvZBs4RyjgWK73XI230YL1DmAmdfaOHbx AY0bmU+uI00JWQtZ0I7bsczoJtX8PvQleosH+WGeK/qO7UUUaNl83ziimu3/PAiPSfR+ hsQg0FfJoI9GHJ0r0FbOQDJtGpkReXw+Ed82Z1VRnrF2++fjGsLSBFgs47wpk2vwuiM7 AYdYTmRSd7gIxkYXT6JJDviiK4SmnK2yklqhHqwbsNZ9BHltKpyQo/tAJn513QjTQj0D 6LkrACxLe6s8rjYDAizK9dnkyY4iik7Say6tNRXE+MVrKDJoWCVEeaytQuhoh1YUpRo9 RuCw== X-Gm-Message-State: AOAM531w17e8vfdSStfu6RzSmbCnTR61ZnarUZmWRsKrvengVZKrjBEj tsqP3AfeVXnl9LJkb9nCM7s= X-Google-Smtp-Source: ABdhPJyjPXcRR/Je0lEIdh8z07iurzHVh0jW+PYsr99nZuqWC0FCM606Kon6Ezw0VCFMk2leZj22yA== X-Received: by 2002:a05:6a00:1307:b0:4b0:b1c:6fd9 with SMTP id j7-20020a056a00130700b004b00b1c6fd9mr39456477pfu.27.1646331402729; Thu, 03 Mar 2022 10:16:42 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:42 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 08/14] ipv6: Add hop-by-hop header to jumbograms in ip6_output Date: Thu, 3 Mar 2022 10:16:01 -0800 Message-Id: <20220303181607.1094358-9-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Coco Li Instead of simply forcing a 0 payload_len in IPv6 header, implement RFC 2675 and insert a custom extension header. Note that only TCP stack is currently potentially generating jumbograms, and that this extension header is purely local, it wont be sent on a physical link. This is needed so that packet capture (tcpdump and friends) can properly dissect these large packets. Signed-off-by: Coco Li Signed-off-by: Eric Dumazet --- include/linux/ipv6.h | 1 + net/ipv6/ip6_output.c | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 16870f86c74d3d1f5dfb7edac1e7db85f1ef6755..93b273db1c9926aba4199f486ce90778311916f5 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -144,6 +144,7 @@ struct inet6_skb_parm { #define IP6SKB_L3SLAVE 64 #define IP6SKB_JUMBOGRAM 128 #define IP6SKB_SEG6 256 +#define IP6SKB_FAKEJUMBO 512 }; #if defined(CONFIG_NET_L3_MASTER_DEV) diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 50db9b20d746bc59c7ef7114492db8b9585c575b..38a8e1c9894cd99ecbec5968fcc97549ea0c7508 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -180,7 +180,9 @@ static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff #endif mtu = ip6_skb_dst_mtu(skb); - if (skb_is_gso(skb) && !skb_gso_validate_network_len(skb, mtu)) + if (skb_is_gso(skb) && + !(IP6CB(skb)->flags & IP6SKB_FAKEJUMBO) && + !skb_gso_validate_network_len(skb, mtu)) return ip6_finish_output_gso_slowpath_drop(net, sk, skb, mtu); if ((skb->len > mtu && !skb_is_gso(skb)) || @@ -251,6 +253,8 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6, struct dst_entry *dst = skb_dst(skb); struct net_device *dev = dst->dev; struct inet6_dev *idev = ip6_dst_idev(dst); + struct hop_jumbo_hdr *hop_jumbo; + int hoplen = sizeof(*hop_jumbo); unsigned int head_room; struct ipv6hdr *hdr; u8 proto = fl6->flowi6_proto; @@ -258,7 +262,7 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6, int hlimit = -1; u32 mtu; - head_room = sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dev); + head_room = sizeof(struct ipv6hdr) + hoplen + LL_RESERVED_SPACE(dev); if (opt) head_room += opt->opt_nflen + opt->opt_flen; @@ -281,6 +285,20 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6, &fl6->saddr); } + if (unlikely(seg_len > IPV6_MAXPLEN)) { + hop_jumbo = skb_push(skb, hoplen); + + hop_jumbo->nexthdr = proto; + hop_jumbo->hdrlen = 0; + hop_jumbo->tlv_type = IPV6_TLV_JUMBO; + hop_jumbo->tlv_len = 4; + hop_jumbo->jumbo_payload_len = htonl(seg_len + hoplen); + + proto = IPPROTO_HOPOPTS; + seg_len = 0; + IP6CB(skb)->flags |= IP6SKB_FAKEJUMBO; + } + skb_push(skb, sizeof(struct ipv6hdr)); skb_reset_network_header(skb); hdr = ipv6_hdr(skb); From patchwork Thu Mar 3 18:16:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767895 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C13CC433EF for ; Thu, 3 Mar 2022 18:16:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235666AbiCCSRj (ORCPT ); Thu, 3 Mar 2022 13:17:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235673AbiCCSRd (ORCPT ); Thu, 3 Mar 2022 13:17:33 -0500 Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 773651A41EC for ; Thu, 3 Mar 2022 10:16:45 -0800 (PST) Received: by mail-pg1-x52f.google.com with SMTP id 132so5246893pga.5 for ; Thu, 03 Mar 2022 10:16:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=m3R0BhiqPxOZEoq0u9oSqVsOJdu8BSFsUrtrIwkGaQ4=; b=oKtbaLz5QKuWnWU3PxkDEB15D3R1sAbAI5AD+CumwGA/Q1vUt+eLP1jT7rbBs7Tbwf vo2O76HmTqRsegBXV9pCE/EHF46ooDhm+y61Vc7lu0dP8d+W+Sd/G3tsMlppHKoQmyCC 71USNrkq7EEFxxga+GOrIG+wtPqJRhGUZoSy5OXFn64clXho0+ZOkI4sFGuWg2ptMGFy M9UHnBkQRVhFN8apa+dcYQcJ1zLyHBqa7h1RN1NEAC/wP4FOBpxgVESdy3U9PIrkq1z3 wnF/xWwceJ1IexaM5zYYOfIoSDM9J6+BrZltPgACXboz9H8qVZJiWsJ+KOR6F75lKeA0 xa9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=m3R0BhiqPxOZEoq0u9oSqVsOJdu8BSFsUrtrIwkGaQ4=; b=6C5l0MMb9TAbxkCpNgIIyvW1dL22QfSvBnfnhdcCmajsOVvr3U2KzyHkGtjhjbVh7n XPHuLaYAp48uq/2V8JT0dRAwtR2Zvp8xpScPyO+OrzdNKpNl7gEg/fMW0RXdOQs7M9TQ XFIzT6UZKonuE8XpjlqFLGrxPDFleEyTAA33q6gm/MeMP/agP9UHGDLq7O1NIKcPFaoQ g84dHZRP/lDuUk+vJcuGuammh0GHTyPWNXd996KvUkX2XuYC6U7yM32ApHtCUJzerRWL xfC5iHnebWZWsuK87qn76sANu/TwlAUKc6ubgFOW/L4jRpA6K4/tTCNBtt57si9khwOJ utLg== X-Gm-Message-State: AOAM531cFWm8APLSTp2n/Nqpg/nBGXqGN3OaX7zPYfWqabrZkkUAZ5do xyZ2mumNjaEYYkNBzz+e1eE= X-Google-Smtp-Source: ABdhPJwmFeTdz1zJLdRSLA1+3IgLc6hew4SKRtMMIV+hzx1LCfpZtnW/HIvS4SNsPY2ojv07w2ASaA== X-Received: by 2002:a05:6a00:23d4:b0:4c9:f1b6:8e97 with SMTP id g20-20020a056a0023d400b004c9f1b68e97mr39166470pfc.27.1646331404984; Thu, 03 Mar 2022 10:16:44 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:44 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 09/14] net: loopback: enable BIG TCP packets Date: Thu, 3 Mar 2022 10:16:02 -0800 Message-Id: <20220303181607.1094358-10-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Set the driver limit to 512 KB per TSO ipv6 packet. This allows the admin/user to set a GSO ipv6 limit up to this value. Tested: ip link set dev lo gso_ipv6_max_size 200000 netperf -H ::1 -t TCP_RR -l 100 -- -r 80000,80000 & tcpdump shows : 18:28:42.962116 IP6 ::1 > ::1: HBH 40051 > 63780: Flags [P.], seq 3626480001:3626560001, ack 3626560001, win 17743, options [nop,nop,TS val 3771179265 ecr 3771179265], length 80000 18:28:42.962138 IP6 ::1.63780 > ::1.40051: Flags [.], ack 3626560001, win 17743, options [nop,nop,TS val 3771179265 ecr 3771179265], length 0 18:28:42.962152 IP6 ::1 > ::1: HBH 63780 > 40051: Flags [P.], seq 3626560001:3626640001, ack 3626560001, win 17743, options [nop,nop,TS val 3771179265 ecr 3771179265], length 80000 18:28:42.962157 IP6 ::1.40051 > ::1.63780: Flags [.], ack 3626640001, win 17743, options [nop,nop,TS val 3771179265 ecr 3771179265], length 0 18:28:42.962180 IP6 ::1 > ::1: HBH 40051 > 63780: Flags [P.], seq 3626560001:3626640001, ack 3626640001, win 17743, options [nop,nop,TS val 3771179265 ecr 3771179265], length 80000 18:28:42.962214 IP6 ::1.63780 > ::1.40051: Flags [.], ack 3626640001, win 17743, options [nop,nop,TS val 3771179266 ecr 3771179265], length 0 18:28:42.962228 IP6 ::1 > ::1: HBH 63780 > 40051: Flags [P.], seq 3626640001:3626720001, ack 3626640001, win 17743, options [nop,nop,TS val 3771179266 ecr 3771179265], length 80000 18:28:42.962233 IP6 ::1.40051 > ::1.63780: Flags [.], ack 3626720001, win 17743, options [nop,nop,TS val 3771179266 ecr 3771179266], length 0 Signed-off-by: Eric Dumazet --- drivers/net/loopback.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 720394c0639b20a2fd6262e4ee9d5813c02802f1..9c21d18f0aa75a310ac600081b450f6312ff16fc 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -191,6 +191,8 @@ static void gen_lo_setup(struct net_device *dev, dev->netdev_ops = dev_ops; dev->needs_free_netdev = true; dev->priv_destructor = dev_destructor; + + netif_set_tso_ipv6_max_size(dev, 512 * 1024); } /* The loopback device is special. There is only one instance From patchwork Thu Mar 3 18:16:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767894 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E847C433F5 for ; Thu, 3 Mar 2022 18:16:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233871AbiCCSRi (ORCPT ); Thu, 3 Mar 2022 13:17:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235681AbiCCSRe (ORCPT ); Thu, 3 Mar 2022 13:17:34 -0500 Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B5D91A39E2 for ; Thu, 3 Mar 2022 10:16:48 -0800 (PST) Received: by mail-pl1-x635.google.com with SMTP id p17so5319217plo.9 for ; Thu, 03 Mar 2022 10:16:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5aBQM8wNOxbvrRsNnfmdlVwJl6wi5pr+JOyZvAg1e78=; b=CmmQoHKkd7R1qYbvWj9EBEKTzS5g48bOc0U87tmu8Pi/Qqx1YTbqxZfbFWOqamHJeo A+DXiAn3Kd11jFExEm4lJRNe4rvtDHpheKn3UwffPG9HpmSH2RW4KFFt9QKEdlu8tZa+ ZfSHyPcidSOqQZab5AUceUsrv6RVe2D+2HC2Sx9hoZU3fW9EuItzdb1FEDllmzhDjsdt jOVjgVzKJVt/dKkPObKY+zJo44QldzXxR/jt3KlE5hap5rjA5Bp8Ik7yWsWKyBxiKQw4 0fWS8LKearRkhQjyUqY9bEovHeDSwxKQFXRBlIotEQrVXs1HXW9QpROvjm1STuZjM1fO /0eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5aBQM8wNOxbvrRsNnfmdlVwJl6wi5pr+JOyZvAg1e78=; b=i/88GTbwBF+iO3HvYiw4K5TswBNnsKs5OBY3C9QN+pshNQpcnm8xwX/sLkrAIviHTy RiG6nnuY9XSkk3qP5P9IPnylGYxzQojBgkGEDeuHPGXXt7y/Gw6BOpoNtydB+KuXrRzR a/aE+qppREk4uuZ670azwdQQTRxmf9+h6W3DHFKXMYABTRnAhwpuMsOQ2bPBgzYEyXGT 12SWK6Vcw4l1iLD1OZt9XwETLl+hdblCAAYKEqKfwtVZS5eJFjw4COKKLzRsAafhtv62 oZtJ6GcDX3YVH8i8y6ZrUSLv9kqXhE25wDu39VwwGhyNxVc3Mka6r6IZ6XmjQFuxpcH7 UluA== X-Gm-Message-State: AOAM531kvlLuORMs6n7QiCR4GzRbT76Ba4g5vJhcmmjMhwFxbKBbohDb 8dnyi1dTGYoGZG3VDjkAiVU= X-Google-Smtp-Source: ABdhPJw9t+tUOeOLe/Uvw1q+XZ6c7JbgyP69AtpICY9Pk6s+ShZH8nxM2fOgykF6DqFuVN7e503qMQ== X-Received: by 2002:a17:90b:4d0f:b0:1bf:6a2:5637 with SMTP id mw15-20020a17090b4d0f00b001bf06a25637mr6697066pjb.106.1646331407807; Thu, 03 Mar 2022 10:16:47 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:47 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 10/14] bonding: update dev->tso_ipv6_max_size Date: Thu, 3 Mar 2022 10:16:03 -0800 Message-Id: <20220303181607.1094358-11-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Use the minimal value found in the set of lower devices. Signed-off-by: Eric Dumazet --- drivers/net/bonding/bond_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 55e0ba2a163d0d9c17fdaf47a49d7a2190959651..357188c1f00e6e3919740adb6369d75712fc4e64 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1420,6 +1420,7 @@ static void bond_compute_features(struct bonding *bond) struct slave *slave; unsigned short max_hard_header_len = ETH_HLEN; unsigned int gso_max_size = GSO_MAX_SIZE; + unsigned int tso_ipv6_max_size = ~0U; u16 gso_max_segs = GSO_MAX_SEGS; if (!bond_has_slaves(bond)) @@ -1450,6 +1451,7 @@ static void bond_compute_features(struct bonding *bond) max_hard_header_len = slave->dev->hard_header_len; gso_max_size = min(gso_max_size, slave->dev->gso_max_size); + tso_ipv6_max_size = min(tso_ipv6_max_size, slave->dev->tso_ipv6_max_size); gso_max_segs = min(gso_max_segs, slave->dev->gso_max_segs); } bond_dev->hard_header_len = max_hard_header_len; @@ -1465,6 +1467,7 @@ static void bond_compute_features(struct bonding *bond) bond_dev->mpls_features = mpls_features; netif_set_gso_max_segs(bond_dev, gso_max_segs); netif_set_gso_max_size(bond_dev, gso_max_size); + netif_set_tso_ipv6_max_size(bond_dev, tso_ipv6_max_size); bond_dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; if ((bond_dev->priv_flags & IFF_XMIT_DST_RELEASE_PERM) && From patchwork Thu Mar 3 18:16:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767896 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E753C433FE for ; Thu, 3 Mar 2022 18:16:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235683AbiCCSRl (ORCPT ); Thu, 3 Mar 2022 13:17:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235672AbiCCSRg (ORCPT ); Thu, 3 Mar 2022 13:17:36 -0500 Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A51C41A39DA for ; Thu, 3 Mar 2022 10:16:50 -0800 (PST) Received: by mail-pj1-x1031.google.com with SMTP id m11-20020a17090a7f8b00b001beef6143a8so5644664pjl.4 for ; Thu, 03 Mar 2022 10:16:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jPmr3gnK1AlLQRyI/oWCnKd6ewHGXGMist7/1+3ySOk=; b=NsfITdRLM4D6e5az1M1E0ToHuep7BoevrlZYglz1rhz68mzk6Y7Pw5Y0MpjmyehSC5 xCAly3sM/gKLZCP51sMKlByScJoMtZZpkHWX5bCpI+lbRfIWfWCP7E2S71OijDAUBnVx UHwfWrfRJqTV0cnvWd0TH62vg9yJ/cApHwmkqp/i9DhXLGhPddWq4G7PKYeA9k1rUg5d 4rpGSb8YWAXiqkYCLzRrc7ByYosyDXcw2J2096I28LEs/ZSOlYLDnjTzHbHkA/FgRx64 +Xuq+BI88mXyjVkJdDBsfO4WuwoYRDocJromktsZa4ZxdFvLy0o1gmB53vNX2sutFNlq N+NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jPmr3gnK1AlLQRyI/oWCnKd6ewHGXGMist7/1+3ySOk=; b=hXlbprV3SQYnCFF++kDq9W7vELUx4qEyWNAZiNt1Oh3N4SNqQ0cubYD2X7Gge/wF9F Gg/AneoO7PnZU4wqQ1wXaiPgox8Q4Pz9QuAUfxq0cUXyK2BrBN0DKIIMyDgduE3AdmVM PRP+K3vb2ovH7XruHkX3wrImykd9gfxnCV8TDQMnLIVeOy2F9jzKzUOQ4QcXF2U2XdxT Ngh8hXFEtwHtVmVSZUn/4K9DP8TJpMzLiU/xlALqCN6mtP3LK1peP0mOdHmO9vVz0hWe /Bsej2AFZF5dh5yyolX3Rfgcn/RpZ3lwVBhCI33qxvBi7py4guvLtlboH5GtxB8NDoY/ 8IMw== X-Gm-Message-State: AOAM530rpKna5Gq5czp7HJN62+o3ux0kn1SFu/FEez8v8TsM7kg2sCVc HgdB1BAvkofa+cHM5ehudUw= X-Google-Smtp-Source: ABdhPJzmgqfy8W/uR+sRU70gHdKOjxZDC7Lo8SIo78tp5BYRErc5zS6OSRaQpk67KkQB/PvEo3Rucg== X-Received: by 2002:a17:90b:228a:b0:1bc:7ca4:efaf with SMTP id kx10-20020a17090b228a00b001bc7ca4efafmr6668205pjb.245.1646331410263; Thu, 03 Mar 2022 10:16:50 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:49 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 11/14] macvlan: enable BIG TCP Packets Date: Thu, 3 Mar 2022 10:16:04 -0800 Message-Id: <20220303181607.1094358-12-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Inherit tso_ipv6_max_size from lower device. Signed-off-by: Eric Dumazet --- drivers/net/macvlan.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index d87c06c317ede4d757b10722a258668d24a25f1d..d921cd84b23818c3d4ea88134c77a2365e6d9caa 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -902,6 +902,7 @@ static int macvlan_init(struct net_device *dev) dev->hw_enc_features |= dev->features; netif_set_gso_max_size(dev, lowerdev->gso_max_size); netif_set_gso_max_segs(dev, lowerdev->gso_max_segs); + netif_set_tso_ipv6_max_size(dev, lowerdev->tso_ipv6_max_size); dev->hard_header_len = lowerdev->hard_header_len; macvlan_set_lockdep_class(dev); From patchwork Thu Mar 3 18:16:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767897 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC29DC433FE for ; Thu, 3 Mar 2022 18:17:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235687AbiCCSSA (ORCPT ); Thu, 3 Mar 2022 13:18:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235677AbiCCSRk (ORCPT ); Thu, 3 Mar 2022 13:17:40 -0500 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 734091A39D1 for ; Thu, 3 Mar 2022 10:16:53 -0800 (PST) Received: by mail-pl1-x631.google.com with SMTP id z2so5325791plg.8 for ; Thu, 03 Mar 2022 10:16:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=34jEWn3KlsSJ9jeDwhLaeV4mw//NGL1b1oh39nIT+68=; b=O+nMG8a/fbwkaYmsA9XfR6a1yR4ds21kWx70i5Fs2DPkxd0SLxgGMVo+K/9JLL1I+p 0WIZmcVaEra0T+tRXrI4sSB9WL/GURRlOFLN+uxPchSo8ISgbeuG1wKFfBdR+Mtkyxwh WXwTNrou8PrVZeVW4X1BedjLwPf2awcvt7Ly8apfdd3d9l5Xd0WzKjOVgKCUs6nf51yV +IOu3UXpjTHB7K+Z+7//0YJtJ0fpOEpbHnrfUJM4TQjATNm8k49NTP5FNmQiU4B0gEOz lR0gs+UJKIWc47uu2kwehUXHEyMMUVuc+GDsmJIjD8q1Rdi6TbYkz9fI4www1PtsSFl4 G2Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=34jEWn3KlsSJ9jeDwhLaeV4mw//NGL1b1oh39nIT+68=; b=B4KuTtkZEdVCWltGENw3zZgTx55aPl8CMXfPqO+lLGWDuVmBy/K0vzbeDvsPMHgIKD WLHoHXLBIA9FDAwU55lKsU6Y8t2YGC6J7wyqC2iNZje+p8eHtUFop2yEOvAvj2EuwccV CzbqTRLnVgI+mtnQu4rf4BDehwWf30mLtyz93wode0fTSNuDhKYobbcdly0nQFpDPRAl hJPNntFFYLLfWeiiB8vFJodi4hVIm0pOSXvEAWCPXjAVoIdvBaYDPrvACqA/t1Z3TBX1 omIUgK93k28ThVlydS3LXgBDkXVKmH+lj/BskZoBiY/nwpRyk4kEEuczVK0lLQ+a13tB 4a9Q== X-Gm-Message-State: AOAM531tqv6hU5Yc+UEAP1AtoTMm9ljtgcH7uh2ha9aTFugJwM3l0T0i Mv3m9DOy3n1WKqHFTJ7xCbA= X-Google-Smtp-Source: ABdhPJx/XuLoO+3Q+l/yNxZALhVnQi3ypTl6XV6Y9kDc1UX62roGZDoE3/eQhz3IOCvGnc9cTB6FuQ== X-Received: by 2002:a17:902:e742:b0:14f:fd2f:c8bb with SMTP id p2-20020a170902e74200b0014ffd2fc8bbmr36467487plf.43.1646331412999; Thu, 03 Mar 2022 10:16:52 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:52 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet Subject: [PATCH v2 net-next 12/14] ipvlan: enable BIG TCP Packets Date: Thu, 3 Mar 2022 10:16:05 -0800 Message-Id: <20220303181607.1094358-13-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Coco Li Inherit tso_ipv6_max_size from physical device. Tested: eth0 tso_ipv6_max_size is set to 524288 ip link add link eth0 name ipvl1 type ipvlan ip -d link show ipvl1 10: ipvl1@eth0:... ipvlan mode l3 bridge addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 gro_max_size 65536 gso_ipv6_max_size 65535 tso_ipv6_max_size 524288 gro_ipv6_max_size 65536 Signed-off-by: Coco Li Signed-off-by: Eric Dumazet --- drivers/net/ipvlan/ipvlan_main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 696e245f6d009d4d5d4a9c3523e4aa1e5d0f8bb6..4de30df25f19b32a78a06d18c99e94662307b7fb 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -141,6 +141,7 @@ static int ipvlan_init(struct net_device *dev) dev->hw_enc_features |= dev->features; netif_set_gso_max_size(dev, phy_dev->gso_max_size); netif_set_gso_max_segs(dev, phy_dev->gso_max_segs); + netif_set_tso_ipv6_max_size(dev, phy_dev->tso_ipv6_max_size); dev->hard_header_len = phy_dev->hard_header_len; netdev_lockdep_set_classes(dev); From patchwork Thu Mar 3 18:16:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767899 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 956F2C433F5 for ; Thu, 3 Mar 2022 18:17:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235700AbiCCSSC (ORCPT ); Thu, 3 Mar 2022 13:18:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39058 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235681AbiCCSRn (ORCPT ); Thu, 3 Mar 2022 13:17:43 -0500 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC0971A39C9 for ; Thu, 3 Mar 2022 10:16:56 -0800 (PST) Received: by mail-pj1-x102b.google.com with SMTP id ge19-20020a17090b0e1300b001bcca16e2e7so8403918pjb.3 for ; Thu, 03 Mar 2022 10:16:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ChwnZas8ZIG1k0tr2lJzRm+HnVvKuvhEO1Cu8gPKlGQ=; b=CkCICj4r8pyHJxC7w6jNTJXXhLvbh8yEm8EItyxsIINLl++sNG7MvTo2+5m9GGsdyk BQHel7ou5IL1CF14iYKkpkepmHt9smBbSuAN54/U/SlPezD6cBtKdf0mgr16kzs1ysJU 7rVR1dgIDDXA/gWwR4+8C7qR4tG0R3oWdhY62YjeU7vlhUge0vUZesbg7iG0B1ZMSYW5 pDyDjdZcvdXbT2eHjMdmjhIc/eUssHj9wfJhd8gUGcrw+7tWzYwaDxm5tdr562YE7iN3 oYVuTo3tE3l1XUVSaUufd4zeQmhcUUp8C2Fof5HZAom4ZxY2RICwJR+HKxFqy8ghpBzQ 126Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ChwnZas8ZIG1k0tr2lJzRm+HnVvKuvhEO1Cu8gPKlGQ=; b=RdM8dmBPwkC/tBWwennw7jZk4BU0EawjuCpAXoL6PkmpBbxcHejSFKABPkur2sdZlD sZP092SEly0JdRS+nlFv9Kj4B6lItFrvChIcN66dQBCmtV6xsoR6Adl8AAoZYdHFHads 8whBtf4PluU3hrQwWFIcKEP94YxJU9BCk6+P3GZvJJU8u+VAavMopq+IpbYWBxYBqeTb 1QpDd3KeFY3x2m6CG5entqxbIFTgJA061AFtbf4ICHh3aXq4B/O046454BPQxDdxTc0G mmgtJNQyY4piuiKr9xeQwVxoJKTmhk1NFyEn5WXquj6nSubSNAXE6KZzlSX5PWT/l7Du s3jg== X-Gm-Message-State: AOAM533Du/nzOxGyraRzbpn9gnx6VlZaMk4dmsMzFGj3gY9GzG27wfU3 1bAnCs2xWWdUat5T26heK6E= X-Google-Smtp-Source: ABdhPJwKSRK6jTo26K3sjSkzBHSRirhy4/NHei9ZFlFTRO0AbR6OhgLVIdsWoaL3oFYgeEpBws2bEQ== X-Received: by 2002:a17:902:d706:b0:14d:5b6f:5421 with SMTP id w6-20020a170902d70600b0014d5b6f5421mr36988450ply.96.1646331416073; Thu, 03 Mar 2022 10:16:56 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:55 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet , Tariq Toukan Subject: [PATCH v2 net-next 13/14] mlx4: support BIG TCP packets Date: Thu, 3 Mar 2022 10:16:06 -0800 Message-Id: <20220303181607.1094358-14-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet mlx4 supports LSOv2 just fine. IPv6 stack inserts a temporary Hop-by-Hop header with JUMBO TLV for big packets. We need to ignore the HBH header when populating TX descriptor. Tested: Before: (not enabling bigger TSO/GRO packets) ip link set dev eth0 gso_ipv6_max_size 65536 gro_ipv6_max_size 65536 netperf -H lpaa18 -t TCP_RR -T2,2 -l 10 -Cc -- -r 70000,70000 MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to lpaa18.prod.google.com () port 0 AF_INET6 : first burst 0 : cpu bind Local /Remote Socket Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem Send Recv Size Size Time Rate local remote local remote bytes bytes bytes bytes secs. per sec % S % S us/Tr us/Tr 262144 540000 70000 70000 10.00 6591.45 0.86 1.34 62.490 97.446 262144 540000 After: (enabling bigger TSO/GRO packets) ip link set dev eth0 gso_ipv6_max_size 185000 gro_ipv6_max_size 185000 netperf -H lpaa18 -t TCP_RR -T2,2 -l 10 -Cc -- -r 70000,70000 MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to lpaa18.prod.google.com () port 0 AF_INET6 : first burst 0 : cpu bind Local /Remote Socket Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem Send Recv Size Size Time Rate local remote local remote bytes bytes bytes bytes secs. per sec % S % S us/Tr us/Tr 262144 540000 70000 70000 10.00 8383.95 0.95 1.01 54.432 57.584 262144 540000 Signed-off-by: Eric Dumazet Cc: Tariq Toukan Reviewed-by: Tariq Toukan --- .../net/ethernet/mellanox/mlx4/en_netdev.c | 3 ++ drivers/net/ethernet/mellanox/mlx4/en_tx.c | 47 +++++++++++++++---- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index c61dc7ae0c056a4dbcf24297549f6b1b5cc25d92..76cb93f5e5240c54f6f4c57e39739376206b4f34 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c @@ -3417,6 +3417,9 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, dev->min_mtu = ETH_MIN_MTU; dev->max_mtu = priv->max_mtu; + /* supports LSOv2 packets, 512KB limit has been tested. */ + netif_set_tso_ipv6_max_size(dev, 512 * 1024); + mdev->pndev[port] = dev; mdev->upper[port] = NULL; diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 817f4154b86d599cd593876ec83529051d95fe2f..c89b3e8094e7d8cfb11aaa6cc4ad63bf3ad5934e 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c @@ -44,6 +44,7 @@ #include #include #include +#include #include "mlx4_en.h" @@ -635,19 +636,28 @@ static int get_real_size(const struct sk_buff *skb, struct net_device *dev, int *lso_header_size, bool *inline_ok, - void **pfrag) + void **pfrag, + int *hopbyhop) { struct mlx4_en_priv *priv = netdev_priv(dev); int real_size; if (shinfo->gso_size) { *inline_ok = false; - if (skb->encapsulation) + *hopbyhop = 0; + if (skb->encapsulation) { *lso_header_size = (skb_inner_transport_header(skb) - skb->data) + inner_tcp_hdrlen(skb); - else + } else { + /* Detects large IPV6 TCP packets and prepares for removal of + * HBH header that has been pushed by ip6_xmit(), + * mainly so that tcpdump can dissect them. + */ + if (ipv6_has_hopopt_jumbo(skb)) + *hopbyhop = sizeof(struct hop_jumbo_hdr); *lso_header_size = skb_transport_offset(skb) + tcp_hdrlen(skb); + } real_size = CTRL_SIZE + shinfo->nr_frags * DS_SIZE + - ALIGN(*lso_header_size + 4, DS_SIZE); + ALIGN(*lso_header_size - *hopbyhop + 4, DS_SIZE); if (unlikely(*lso_header_size != skb_headlen(skb))) { /* We add a segment for the skb linear buffer only if * it contains data */ @@ -874,6 +884,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) int desc_size; int real_size; u32 index, bf_index; + struct ipv6hdr *h6; __be32 op_own; int lso_header_size; void *fragptr = NULL; @@ -882,6 +893,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) bool stop_queue; bool inline_ok; u8 data_offset; + int hopbyhop; bool bf_ok; tx_ind = skb_get_queue_mapping(skb); @@ -891,7 +903,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) goto tx_drop; real_size = get_real_size(skb, shinfo, dev, &lso_header_size, - &inline_ok, &fragptr); + &inline_ok, &fragptr, &hopbyhop); if (unlikely(!real_size)) goto tx_drop_count; @@ -944,7 +956,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) data = &tx_desc->data; data_offset = offsetof(struct mlx4_en_tx_desc, data); } else { - int lso_align = ALIGN(lso_header_size + 4, DS_SIZE); + int lso_align = ALIGN(lso_header_size - hopbyhop + 4, DS_SIZE); data = (void *)&tx_desc->lso + lso_align; data_offset = offsetof(struct mlx4_en_tx_desc, lso) + lso_align; @@ -1009,14 +1021,31 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) ((ring->prod & ring->size) ? cpu_to_be32(MLX4_EN_BIT_DESC_OWN) : 0); + lso_header_size -= hopbyhop; /* Fill in the LSO prefix */ tx_desc->lso.mss_hdr_size = cpu_to_be32( shinfo->gso_size << 16 | lso_header_size); - /* Copy headers; - * note that we already verified that it is linear */ - memcpy(tx_desc->lso.header, skb->data, lso_header_size); + if (unlikely(hopbyhop)) { + /* remove the HBH header. + * Layout: [Ethernet header][IPv6 header][HBH][TCP header] + */ + memcpy(tx_desc->lso.header, skb->data, ETH_HLEN + sizeof(*h6)); + h6 = (struct ipv6hdr *)((char *)tx_desc->lso.header + ETH_HLEN); + h6->nexthdr = IPPROTO_TCP; + /* Copy the TCP header after the IPv6 one */ + memcpy(h6 + 1, + skb->data + ETH_HLEN + sizeof(*h6) + + sizeof(struct hop_jumbo_hdr), + tcp_hdrlen(skb)); + /* Leave ipv6 payload_len set to 0, as LSO v2 specs request. */ + } else { + /* Copy headers; + * note that we already verified that it is linear + */ + memcpy(tx_desc->lso.header, skb->data, lso_header_size); + } ring->tso_packets++; i = shinfo->gso_segs; From patchwork Thu Mar 3 18:16:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12767898 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E06E1C433F5 for ; Thu, 3 Mar 2022 18:17:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234985AbiCCSR7 (ORCPT ); Thu, 3 Mar 2022 13:17:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235709AbiCCSRv (ORCPT ); Thu, 3 Mar 2022 13:17:51 -0500 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DEDA1A363B for ; Thu, 3 Mar 2022 10:17:00 -0800 (PST) Received: by mail-pl1-x62e.google.com with SMTP id n15so5335525plf.4 for ; Thu, 03 Mar 2022 10:17:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8sy97rxAcTr94xSSJvxZy956qfMSIPCFamSYo46WDo8=; b=JrANn5UtC/pSX/2Ob87mHy9HXCSbF6k0/MglkUfGD+F4tMK50Q/ZeWjzQtdrP+Lvuc P85HM3wYl9dByOWdkg3CPN9m8gaePkKST1cMjBVqj2i6PwiHvSHUtNbwYBO4wFM59ttB aPELGpfLkkUTRZzO3tnrf3eEC1DUC/dGM6jkCq55gIUkh2zxsA2vER410N4iyRajJcqs EivPmOuOs8FMT3OTFEK2cokCHA7xtMvXp4QbfQnZRrIU7sT0dqgaPNimXZWh4d/f7JfG Kdw9w86KZaKVm4/aAjLXvZp8NZBYhALOt9Ohz1BefP51xA978EgslRndKaykz8i+ps3F wJrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8sy97rxAcTr94xSSJvxZy956qfMSIPCFamSYo46WDo8=; b=bC2kLJVqdodCs1DhdvwX+O0wyBBlMu9rHZBxk1Qs49+QkG4uZF5xlrCWg+rc6ScaQ1 tsHzGhooenzZWfplvzzt2gV5eVYLPGDIQFtuLT2jB+mIFMmJdLbBcLOVjMV12gHRm9Cl jK7jOqDgmhyPzwPePJ+uc/ebAXKmTxWgZiha8mlteQwtrKUPopmoM0UtuOE8K06Fxd1S IShXFf8Xp1ESTx0uA18WYNq/vnwcsOH14y7W4K2O2XL9xNBqHUrK/8LBFfCzr/KIUfLi 2sU53f+WBPalRftEcPA3CCox0GKesno2MRVLAEbkFrLZ+miJim2hFFpTvQLdQKgkl2Qc tUPQ== X-Gm-Message-State: AOAM531tvI47b/O5dpz71mWefbIOFowmNHO4Zt1uRdpqXmQddVgTihkM E3qPaWg0yloqbRQ8bIuswAU= X-Google-Smtp-Source: ABdhPJy3+jcwDauZKXPTE+xA5EXf8MLgkgjuNyhZYI0hZW5Bwecb4OoZ2LMBuBREUIqvugM5lm34Jw== X-Received: by 2002:a17:902:6b8b:b0:14d:66c4:f704 with SMTP id p11-20020a1709026b8b00b0014d66c4f704mr38007808plk.53.1646331419946; Thu, 03 Mar 2022 10:16:59 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:5388:c313:5e37:a261]) by smtp.gmail.com with ESMTPSA id u14-20020a17090adb4e00b001bee5dd39basm7611016pjx.1.2022.03.03.10.16.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 10:16:59 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Coco Li , David Ahern , Alexander Duyck , Eric Dumazet , Saeed Mahameed , Leon Romanovsky Subject: [PATCH v2 net-next 14/14] mlx5: support BIG TCP packets Date: Thu, 3 Mar 2022 10:16:07 -0800 Message-Id: <20220303181607.1094358-15-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220303181607.1094358-1-eric.dumazet@gmail.com> References: <20220303181607.1094358-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Coco Li mlx5 supports LSOv2. IPv6 gro/tcp stacks insert a temporary Hop-by-Hop header with JUMBO TLV for big packets. We need to ignore/skip this HBH header when populating TX descriptor. Note that ipv6_has_hopopt_jumbo() only recognizes very specific packet layout, thus mlx5e_sq_xmit_wqe() is taking care of this layout only. v2: clear hopbyhop in mlx5e_tx_get_gso_ihs() Signed-off-by: Coco Li Signed-off-by: Eric Dumazet Cc: Saeed Mahameed Cc: Leon Romanovsky Reviewed-by: Tariq Toukan --- .../net/ethernet/mellanox/mlx5/core/en_main.c | 1 + .../net/ethernet/mellanox/mlx5/core/en_tx.c | 82 +++++++++++++++---- 2 files changed, 67 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index b2ed2f6d4a9208aebfd17fd0c503cd1e37c39ee1..1e51ce1d74486392a26568852c5068fe9047296d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -4910,6 +4910,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev) netdev->priv_flags |= IFF_UNICAST_FLT; + netif_set_tso_ipv6_max_size(netdev, 512 * 1024); mlx5e_set_netdev_dev_addr(netdev); mlx5e_ipsec_build_netdev(priv); mlx5e_tls_build_netdev(priv); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c index 2dc48406cd08d21ff94f665cd61ab9227f351215..c6f6ca2d216692e1d3fd99e540198b11145788cd 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c @@ -40,6 +40,7 @@ #include "en_accel/en_accel.h" #include "en_accel/ipsec_rxtx.h" #include "en/ptp.h" +#include static void mlx5e_dma_unmap_wqe_err(struct mlx5e_txqsq *sq, u8 num_dma) { @@ -130,23 +131,32 @@ mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, sq->stats->csum_none++; } +/* Returns the number of header bytes that we plan + * to inline later in the transmit descriptor + */ static inline u16 -mlx5e_tx_get_gso_ihs(struct mlx5e_txqsq *sq, struct sk_buff *skb) +mlx5e_tx_get_gso_ihs(struct mlx5e_txqsq *sq, struct sk_buff *skb, int *hopbyhop) { struct mlx5e_sq_stats *stats = sq->stats; u16 ihs; + *hopbyhop = 0; if (skb->encapsulation) { ihs = skb_inner_transport_offset(skb) + inner_tcp_hdrlen(skb); stats->tso_inner_packets++; stats->tso_inner_bytes += skb->len - ihs; } else { - if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) + if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) { ihs = skb_transport_offset(skb) + sizeof(struct udphdr); - else + } else { ihs = skb_transport_offset(skb) + tcp_hdrlen(skb); + if (ipv6_has_hopopt_jumbo(skb)) { + *hopbyhop = sizeof(struct hop_jumbo_hdr); + ihs -= sizeof(struct hop_jumbo_hdr); + } + } stats->tso_packets++; - stats->tso_bytes += skb->len - ihs; + stats->tso_bytes += skb->len - ihs - *hopbyhop; } return ihs; @@ -208,6 +218,7 @@ struct mlx5e_tx_attr { __be16 mss; u16 insz; u8 opcode; + u8 hopbyhop; }; struct mlx5e_tx_wqe_attr { @@ -244,14 +255,16 @@ static void mlx5e_sq_xmit_prepare(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct mlx5e_sq_stats *stats = sq->stats; if (skb_is_gso(skb)) { - u16 ihs = mlx5e_tx_get_gso_ihs(sq, skb); + int hopbyhop; + u16 ihs = mlx5e_tx_get_gso_ihs(sq, skb, &hopbyhop); *attr = (struct mlx5e_tx_attr) { .opcode = MLX5_OPCODE_LSO, .mss = cpu_to_be16(skb_shinfo(skb)->gso_size), .ihs = ihs, .num_bytes = skb->len + (skb_shinfo(skb)->gso_segs - 1) * ihs, - .headlen = skb_headlen(skb) - ihs, + .headlen = skb_headlen(skb) - ihs - hopbyhop, + .hopbyhop = hopbyhop, }; stats->packets += skb_shinfo(skb)->gso_segs; @@ -365,7 +378,8 @@ mlx5e_sq_xmit_wqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg; struct mlx5_wqe_data_seg *dseg; struct mlx5e_tx_wqe_info *wi; - + u16 ihs = attr->ihs; + struct ipv6hdr *h6; struct mlx5e_sq_stats *stats = sq->stats; int num_dma; @@ -379,15 +393,36 @@ mlx5e_sq_xmit_wqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, eseg->mss = attr->mss; - if (attr->ihs) { - if (skb_vlan_tag_present(skb)) { - eseg->inline_hdr.sz |= cpu_to_be16(attr->ihs + VLAN_HLEN); - mlx5e_insert_vlan(eseg->inline_hdr.start, skb, attr->ihs); + if (ihs) { + u8 *start = eseg->inline_hdr.start; + + if (unlikely(attr->hopbyhop)) { + /* remove the HBH header. + * Layout: [Ethernet header][IPv6 header][HBH][TCP header] + */ + if (skb_vlan_tag_present(skb)) { + mlx5e_insert_vlan(start, skb, ETH_HLEN + sizeof(*h6)); + ihs += VLAN_HLEN; + h6 = (struct ipv6hdr *)(start + sizeof(struct vlan_ethhdr)); + } else { + memcpy(start, skb->data, ETH_HLEN + sizeof(*h6)); + h6 = (struct ipv6hdr *)(start + ETH_HLEN); + } + h6->nexthdr = IPPROTO_TCP; + /* Copy the TCP header after the IPv6 one */ + memcpy(h6 + 1, + skb->data + ETH_HLEN + sizeof(*h6) + + sizeof(struct hop_jumbo_hdr), + tcp_hdrlen(skb)); + /* Leave ipv6 payload_len set to 0, as LSO v2 specs request. */ + } else if (skb_vlan_tag_present(skb)) { + mlx5e_insert_vlan(start, skb, ihs); + ihs += VLAN_HLEN; stats->added_vlan_packets++; } else { - eseg->inline_hdr.sz |= cpu_to_be16(attr->ihs); - memcpy(eseg->inline_hdr.start, skb->data, attr->ihs); + memcpy(start, skb->data, ihs); } + eseg->inline_hdr.sz |= cpu_to_be16(ihs); dseg += wqe_attr->ds_cnt_inl; } else if (skb_vlan_tag_present(skb)) { eseg->insert.type = cpu_to_be16(MLX5_ETH_WQE_INSERT_VLAN); @@ -398,7 +433,7 @@ mlx5e_sq_xmit_wqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, } dseg += wqe_attr->ds_cnt_ids; - num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + attr->ihs, + num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + attr->ihs + attr->hopbyhop, attr->headlen, dseg); if (unlikely(num_dma < 0)) goto err_drop; @@ -918,12 +953,27 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, eseg->mss = attr.mss; if (attr.ihs) { - memcpy(eseg->inline_hdr.start, skb->data, attr.ihs); + if (unlikely(attr.hopbyhop)) { + /* remove the HBH header. + * Layout: [Ethernet header][IPv6 header][HBH][TCP header] + */ + memcpy(eseg->inline_hdr.start, skb->data, ETH_HLEN + sizeof(*h6)); + h6 = (struct ipv6hdr *)((char *)eseg->inline_hdr.start + ETH_HLEN); + h6->nexthdr = IPPROTO_TCP; + /* Copy the TCP header after the IPv6 one */ + memcpy(h6 + 1, + skb->data + ETH_HLEN + sizeof(*h6) + + sizeof(struct hop_jumbo_hdr), + tcp_hdrlen(skb)); + /* Leave ipv6 payload_len set to 0, as LSO v2 specs request. */ + } else { + memcpy(eseg->inline_hdr.start, skb->data, attr.ihs); + } eseg->inline_hdr.sz = cpu_to_be16(attr.ihs); dseg += wqe_attr.ds_cnt_inl; } - num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + attr.ihs, + num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb->data + attr.ihs + attr.hopbyhop, attr.headlen, dseg); if (unlikely(num_dma < 0)) goto err_drop;