[PATCH v3 01/16] gso: remove logtype
Hu, Jiayu
jiayu.hu at intel.com
Fri Feb 10 03:29:44 CET 2023
Hi Stephen,
> -----Original Message-----
> From: Stephen Hemminger <stephen at networkplumber.org>
> Sent: Friday, February 10, 2023 9:07 AM
> To: dev at dpdk.org
> Cc: Stephen Hemminger <stephen at networkplumber.org>; Hu, Jiayu
> <jiayu.hu at intel.com>; Konstantin Ananyev
> <konstantin.v.ananyev at yandex.ru>; Mark Kavanagh
> <mark.b.kavanagh at intel.com>
> Subject: [PATCH v3 01/16] gso: remove logtype
>
> If a large packet is passed into GSO routines of unknown protocol then library
> would log a message and pass it through. This is incorrect behaviour on many
> levels:
> - it allows oversize packet to get passed on to NIC driver
Applications use SW GSO only if NIC segmentation is not
supported. For a burst of packets mixed with different packet
types, GSO doesn't process the packet with unsupported types,
and the oversize packets go to NIC and get dropped finally.
I presume this case frequently happen in real cases.
> - no direct return is visible to applications
> - if it happens once, many more will follow and log will fill.
> - bonus it is only log message with GSO type.
>
> The fix is to just return -EINVAL which is what this library does in many other
> places when looking at headers.
>
> Fixes: 119583797b6a ("gso: support TCP/IPv4 GSO")
> Cc: jiayu.hu at intel.com
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
> lib/eal/common/eal_common_log.c | 2 +-
> lib/eal/include/rte_log.h | 1 -
> lib/gso/rte_gso.c | 3 +--
> 3 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/lib/eal/common/eal_common_log.c
> b/lib/eal/common/eal_common_log.c index bd7b188ceb4a..c369154cb1ea
> 100644
> --- a/lib/eal/common/eal_common_log.c
> +++ b/lib/eal/common/eal_common_log.c
> @@ -368,7 +368,7 @@ static const struct logtype logtype_strings[] = {
> {RTE_LOGTYPE_CRYPTODEV, "lib.cryptodev"},
> {RTE_LOGTYPE_EFD, "lib.efd"},
> {RTE_LOGTYPE_EVENTDEV, "lib.eventdev"},
> - {RTE_LOGTYPE_GSO, "lib.gso"},
> +
> {RTE_LOGTYPE_USER1, "user1"},
> {RTE_LOGTYPE_USER2, "user2"},
> {RTE_LOGTYPE_USER3, "user3"},
> diff --git a/lib/eal/include/rte_log.h b/lib/eal/include/rte_log.h index
> 6d2b0856a565..97d6b26a9967 100644
> --- a/lib/eal/include/rte_log.h
> +++ b/lib/eal/include/rte_log.h
> @@ -46,7 +46,6 @@ extern "C" {
> #define RTE_LOGTYPE_CRYPTODEV 17 /**< Log related to cryptodev. */
> #define RTE_LOGTYPE_EFD 18 /**< Log related to EFD. */
> #define RTE_LOGTYPE_EVENTDEV 19 /**< Log related to eventdev. */
> -#define RTE_LOGTYPE_GSO 20 /**< Log related to GSO. */
>
> /* these log types can be used in an application */
> #define RTE_LOGTYPE_USER1 24 /**< User-defined log type 1. */
> diff --git a/lib/gso/rte_gso.c b/lib/gso/rte_gso.c index
> 4b59217c16ee..19c351769fcc 100644
> --- a/lib/gso/rte_gso.c
> +++ b/lib/gso/rte_gso.c
> @@ -81,8 +81,7 @@ rte_gso_segment(struct rte_mbuf *pkt,
> indirect_pool, pkts_out, nb_pkts_out);
> } else {
> /* unsupported packet, skip */
> - RTE_LOG(DEBUG, GSO, "Unsupported packet type\n");
> - ret = 0;
> + ret = -EINVAL;
If applications want to know that the packet is failed on SW GSO,
I think ENOTSUP is better than EINVAL, as it is not invalid input
from users.
Thanks,
Jiayu
> }
>
> if (ret < 0) {
> --
> 2.39.1
More information about the dev
mailing list