From patchwork Sat Apr 3 23:41:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 90532 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A3B9BA0548; Sun, 4 Apr 2021 01:41:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A970C140E1D; Sun, 4 Apr 2021 01:41:40 +0200 (CEST) Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) by mails.dpdk.org (Postfix) with ESMTP id 0E25840041 for ; Sun, 4 Apr 2021 01:41:39 +0200 (CEST) Received: by mail-lf1-f52.google.com with SMTP id d12so12392645lfv.11 for ; Sat, 03 Apr 2021 16:41:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ppuA1LCctO+2AmWw7urwHxYJl6hzdyHkeK6KilKLXjI=; b=Y7dExYmSiGfTdJB/uXd9f9AKRomrfr0iIvqvZ/6CIlQUx/+qFBpGVAk+acPDgUeMku 1PWE0ONGHRRoqXJaAQA6R/F+Q0On3+v6KIn9kYokOnBJ4Revhoop1I+Dx25EKNhHd/Bl ZetRkIqDcnGe5PgYR3/dm4veJpTq9XPxkiSv1dC7+6s5SNgA85xLwQfqQb3rPrVrsrri /6Wu4iUmkIx+TocHPSUrNlMyoy74+OPL0Qj+qtJk22dD0vxMvgQSHxuyPYqS/5T2Go4s 8blePUhZO+f9j8kcl1vE/Kk4gMKkm7qXwo7JvwMkXwPkfaKBGJAcwXPkNc8eeE3gfq0B lU+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ppuA1LCctO+2AmWw7urwHxYJl6hzdyHkeK6KilKLXjI=; b=plU4wfgNINpgPnGcnNY2VsvWqCmLb5Lt/u4PWUliz8x5HUF8bSOUhrVyIMUsBa9gZI V+MH7nYFnB+BMJmRUZ1vmH8qbGzilXJWaXJxBGFJvigTSpmxgZopUH8i4AeN4DkjOWFG AL0wQPcJ44fTF2UtpckzjKgPhzC5bgi9lSowqa52CbmMgWMXqBJrpBCor735FZh0GJ2r LQW8nLy7rcqG2Z4mI6+53Uq/jRpujgTBD2sIkrLr0okDwCkdMQ9MSDlEtiuQB215aj0V zIm6hSBi/+ZWYYidMdKVFSq8gN4LJPipNv4pWT8jgBwsZH6GKlRMi4PjR1IDC88Hd3cs O9WQ== X-Gm-Message-State: AOAM531qNxDYYkIAQAkSXiy/32LUgi4FKjddO19uh3Qn96epoJz4Buer bWGkITmyuEsHzZjFLA0I+NMKgwUZcECUvQse X-Google-Smtp-Source: ABdhPJw/UMLKjSQ10BUR/SkS21zOVYffxq7r43lLD/O5NRJMPJnhnC6QIuI77mw/4+ay+Ar/uYkpEw== X-Received: by 2002:a19:c309:: with SMTP id t9mr12669058lff.348.1617493298411; Sat, 03 Apr 2021 16:41:38 -0700 (PDT) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f23sm1374927lja.43.2021.04.03.16.41.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Apr 2021 16:41:38 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Jie Zhou , Nick Connolly , Dmitry Kozlyuk , Khoa To , Ray Kinsella , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Neil Horman Date: Sun, 4 Apr 2021 02:41:25 +0300 Message-Id: <20210403234129.20296-2-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20210403234129.20296-1-dmitry.kozliuk@gmail.com> References: <20210320130525.16452-1-dmitry.kozliuk@gmail.com> <20210403234129.20296-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 1/5] eal: add sleep API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" POSIX sleep(3) is missing from Windows. Add generic rte_thread_sleep() to suspend current OS thread. Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To Acked-by: Ray Kinsella --- lib/librte_eal/common/eal_common_timer.c | 5 +++-- lib/librte_eal/include/rte_thread.h | 11 +++++++++++ lib/librte_eal/rte_eal_exports.def | 2 ++ lib/librte_eal/unix/rte_thread.c | 10 +++++++++- lib/librte_eal/version.map | 1 + lib/librte_eal/windows/eal_thread.c | 9 ++++++++- 6 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c index 71e0bd035a..0e89a4f7df 100644 --- a/lib/librte_eal/common/eal_common_timer.c +++ b/lib/librte_eal/common/eal_common_timer.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "eal_private.h" #include "eal_memcfg.h" @@ -47,9 +48,9 @@ estimate_tsc_freq(void) #define CYC_PER_10MHZ 1E7 RTE_LOG(WARNING, EAL, "WARNING: TSC frequency estimated roughly" " - clock timings may be less accurate.\n"); - /* assume that the sleep(1) will sleep for 1 second */ + /* assume that the rte_thread_sleep(1) will sleep for 1 second */ uint64_t start = rte_rdtsc(); - sleep(1); + rte_thread_sleep(1); /* Round up to 10Mhz. 1E7 ~ 10Mhz */ return RTE_ALIGN_MUL_NEAR(rte_rdtsc() - start, CYC_PER_10MHZ); } diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h index 8be8ed8f36..450d72a2fc 100644 --- a/lib/librte_eal/include/rte_thread.h +++ b/lib/librte_eal/include/rte_thread.h @@ -119,6 +119,17 @@ int rte_thread_value_set(rte_thread_key key, const void *value); __rte_experimental void *rte_thread_value_get(rte_thread_key key); +/** + * Suspend current OS thread for the specified time, yielding CPU to scheduler. + * + * @param sec + * Number of seconds to sleep. The system may return control later, + * but not earlier. Zero value always yields the CPU, but control may be + * returned immediately. + */ +__rte_experimental +void rte_thread_sleep(unsigned int sec); + #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def index c320077547..300c86eb3f 100644 --- a/lib/librte_eal/rte_eal_exports.def +++ b/lib/librte_eal/rte_eal_exports.def @@ -334,3 +334,5 @@ EXPORTS rte_mem_map rte_mem_page_size rte_mem_unmap + + rte_thread_sleep diff --git a/lib/librte_eal/unix/rte_thread.c b/lib/librte_eal/unix/rte_thread.c index c72d619ec1..a7130b5870 100644 --- a/lib/librte_eal/unix/rte_thread.c +++ b/lib/librte_eal/unix/rte_thread.c @@ -3,10 +3,12 @@ */ #include -#include #include #include +#include +#include + #include #include #include @@ -90,3 +92,9 @@ rte_thread_value_get(rte_thread_key key) } return pthread_getspecific(key->thread_index); } + +void +rte_thread_sleep(unsigned int sec) +{ + sleep(sec); +} diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map index e23745ae6e..cd35b67a9a 100644 --- a/lib/librte_eal/version.map +++ b/lib/librte_eal/version.map @@ -413,6 +413,7 @@ EXPERIMENTAL { # added in 21.05 rte_thread_key_create; rte_thread_key_delete; + rte_thread_sleep; rte_thread_value_get; rte_thread_value_set; rte_version_minor; diff --git a/lib/librte_eal/windows/eal_thread.c b/lib/librte_eal/windows/eal_thread.c index 9c3f6d69fd..c84e67009c 100644 --- a/lib/librte_eal/windows/eal_thread.c +++ b/lib/librte_eal/windows/eal_thread.c @@ -11,9 +11,10 @@ #include #include #include -#include +#include #include "eal_private.h" +#include "eal_thread.h" #include "eal_windows.h" /* @@ -154,3 +155,9 @@ rte_thread_setname(__rte_unused pthread_t id, __rte_unused const char *name) /* This is a stub, not the expected result */ return 0; } + +void +rte_thread_sleep(unsigned int sec) +{ + return Sleep(MS_PER_S * sec); +} From patchwork Sat Apr 3 23:41:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 90533 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 69CFCA0548; Sun, 4 Apr 2021 01:41:55 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3CF33140E3D; Sun, 4 Apr 2021 01:41:42 +0200 (CEST) Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) by mails.dpdk.org (Postfix) with ESMTP id F0BF7140E0C for ; Sun, 4 Apr 2021 01:41:39 +0200 (CEST) Received: by mail-lf1-f41.google.com with SMTP id 12so12334968lfq.13 for ; Sat, 03 Apr 2021 16:41:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RtorkMybMXGXOW0X5DNzOp1pbVPKmkvt51lm4C1nVBA=; b=gyrZ0efwpSvqdohuyhZB4eygKZ2oflPvdSwv0WAzvMY6llUTWYlGbpq2oG4yCxPrmA tvcEf8n4jPRKklS2Uom/Pa9nEDlZgK0YibV3M9hwiZDh3Ea6N7CWl+cfKZmeHRxDb2pe PIJ8YIjPzzDHFIjb0kZpnqorlSNw6Cf/nJHmGgajT7rHg/c5G+DK640+efvzspxmzyiG cRVYVAXHYS6jZCJi371cU8GZB7XMZwKEavOr7WXWvhW72yaZVvO4fN+LgZgaJYFZhTlu 83aBZkahfewyG5G0d+jalHPaBM5iemAj6ZgALK8R2rfBnB3rlGlKSqpNE0q2t4ixhuVj TRVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RtorkMybMXGXOW0X5DNzOp1pbVPKmkvt51lm4C1nVBA=; b=jFhqsq2loMIqTqlhfbO0U1o0oi/aYQKhbPXMrG9WeRwlBdDxsMTqqp5oAlOrEwv13P +/mXaAHze7jp8erG2fiewJnY1DLRI+k9jxXwHT2Nln+8GAitDkcNpX5Qrw+EBokUhvh2 UdjXGkQ6gCYL2zcTNqrh6ia4IoSr+pMGQ3v4guvJx/f4GzDvQK4MjEf9GloZ+S5OWf2t DfPDzzT44Pr0RovVvMfNBvLRbX0TqQ5pAJ0RuPp5xH8PuyY39Q8b6eUIFHkuQR3ycZ60 0YLX6Qywo45Mn+UKE1gaFNO0dBCAB61LXqj9PGq47y0GCR6fska/h9QRPUqzprZufYxY v9Tg== X-Gm-Message-State: AOAM532UrjDQoAujkktKfAISCdMBbzVkegUdaD+aDy2fW7er1+WpMoQr xOUh9ox6XdTkPFyOSfxPA7aU7QNrjoJW5ioK X-Google-Smtp-Source: ABdhPJx47kOyhR20IQ+SJ3rZEefRYxheY49PNR3QE2BRil1P66Z4RTLWArSi77j6BRo0U5MAEmdeRA== X-Received: by 2002:a19:c0f:: with SMTP id 15mr13360415lfm.580.1617493299319; Sat, 03 Apr 2021 16:41:39 -0700 (PDT) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f23sm1374927lja.43.2021.04.03.16.41.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Apr 2021 16:41:38 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Jie Zhou , Nick Connolly , Dmitry Kozlyuk , Khoa To , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 4 Apr 2021 02:41:26 +0300 Message-Id: <20210403234129.20296-3-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20210403234129.20296-1-dmitry.kozliuk@gmail.com> References: <20210320130525.16452-1-dmitry.kozliuk@gmail.com> <20210403234129.20296-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 2/5] eal/windows: hide asprintf() shim X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Make asprintf(3) implementation for Windows private to EAL, so that it's hidden from external consumers. It is not exposed to internal consumers either, because they don't need asprintf() and also because callers from other modules would have no reliable way to free allocated memory. Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To Acked-by: Nick Connolly --- lib/librte_eal/common/eal_private.h | 11 +++++++++ lib/librte_eal/windows/eal.c | 30 +++++++++++++++++++++++++ lib/librte_eal/windows/include/rte_os.h | 30 ------------------------- 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index b8a0d20021..31eda4d2da 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -745,4 +745,15 @@ void __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset); */ void __rte_thread_uninit(void); +/** + * asprintf(3) replacement for Windows. + */ +#ifdef RTE_EXEC_ENV_WINDOWS +__rte_format_printf(2, 3) +int eal_asprintf(char **buffer, const char *format, ...); + +#define asprintf(buffer, format, ...) \ + eal_asprintf(buffer, format, ##__VA_ARGS__) +#endif + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 2fc3d6141c..162671f9ce 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -2,6 +2,8 @@ * Copyright(c) 2019 Intel Corporation */ +#include + #include #include #include @@ -411,6 +413,34 @@ rte_eal_init(int argc, char **argv) return fctret; } +/* Don't use MinGW asprintf() to have identical code with all toolchains. */ +int +eal_asprintf(char **buffer, const char *format, ...) +{ + int size, ret; + va_list arg; + + va_start(arg, format); + size = vsnprintf(NULL, 0, format, arg); + va_end(arg); + if (size < 0) + return -1; + size++; + + *buffer = malloc(size); + if (*buffer == NULL) + return -1; + + va_start(arg, format); + ret = vsnprintf(*buffer, size, format, arg); + va_end(arg); + if (ret != size - 1) { + free(*buffer); + return -1; + } + return ret; +} + int rte_vfio_container_dma_map(__rte_unused int container_fd, __rte_unused uint64_t vaddr, diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index f0512f20a6..1afe49f35e 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -10,7 +10,6 @@ * which is not supported natively or named differently in Windows. */ -#include #include #include #include @@ -71,34 +70,6 @@ extern "C" { typedef long long ssize_t; #ifndef RTE_TOOLCHAIN_GCC - -static inline int -asprintf(char **buffer, const char *format, ...) -{ - int size, ret; - va_list arg; - - va_start(arg, format); - size = vsnprintf(NULL, 0, format, arg); - va_end(arg); - if (size < 0) - return -1; - size++; - - *buffer = (char *)malloc(size); - if (*buffer == NULL) - return -1; - - va_start(arg, format); - ret = vsnprintf(*buffer, size, format, arg); - va_end(arg); - if (ret != size - 1) { - free(*buffer); - return -1; - } - return ret; -} - static inline const char * eal_strerror(int code) { @@ -111,7 +82,6 @@ eal_strerror(int code) #ifndef strerror #define strerror eal_strerror #endif - #endif /* RTE_TOOLCHAIN_GCC */ #ifdef __cplusplus From patchwork Sat Apr 3 23:41:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 90534 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D6F6FA0548; Sun, 4 Apr 2021 01:42:01 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6B321140E4E; Sun, 4 Apr 2021 01:41:43 +0200 (CEST) Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) by mails.dpdk.org (Postfix) with ESMTP id 4EF73140E25 for ; Sun, 4 Apr 2021 01:41:41 +0200 (CEST) Received: by mail-lf1-f49.google.com with SMTP id d13so12425900lfg.7 for ; Sat, 03 Apr 2021 16:41:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bLEW8Qa4R5RFYjJT4Yc51vlXDpDpMLN5Zi4hMOVBrCs=; b=u18H5OgoxUmOz+Cso47xFBnHprCk0oGsJpXpOzNgYsWLDbzkiZSF/2UHL5pRdaoB6T dzoGph9iJl24NVzFqgSbLEl96HCg5d3RlXyoJZzDLB8xdL0CqEqUQRKmh+GmADdbesUA XPwz2oZvQwPIA5eq6+ZYsWEnopS7++EkALyO76ti7mrGCnbzH1c41Gm9bKZ2iHMZIC5i s739pkRbAp5oCZQsfHznFNOeaan90WHRlghtwodjbP4/7l9kjLOH+ZoRIqJ1jRKVyAUz YNpyGXHpJA4j0J7Wij2jBAt2TcHCJ3cRTmAWZjtSpUj+si/uHQaJc5Tbil6ATbKxF4lS wIjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bLEW8Qa4R5RFYjJT4Yc51vlXDpDpMLN5Zi4hMOVBrCs=; b=UvdBANvDZI+qfBxcoEuRSlEKhnA3Wy6eQKFCGtV+g8lBDhqxldkhSTBtUCWLOACd5g 6y80ZgX4/t/t6FrcGaLKsZhJa44SpuCC6RfJmcTuD5zjnw/gjtT4HgLIhrR2FqPEGIXn naoHxI3a9cxcm55vF1ObVFsnn4dikNffPi9AP+6lEdjbGqYpJ9NBwWEqxX8xiHc3BYoo SsGrnfFsXrcHg98EU7fX9vFpdn3yKa4eeQUFTX4ssifnVBD1WVfdN1WU6i9sH1ML4ub7 IO8Mkamp/rMRz0Y4ZocLfLFB8j45UGPa0V3sC7RgqYOQCtnz+8HvifeZupQsY5YiIFfd D8TA== X-Gm-Message-State: AOAM532Meb7O3xjsxh2cc/rncpY9q1ZoZkDL8oZm3cgvMrevuPD4uz2A tgdcdyuyK77n1Zn3poKBrrU7k4R9RlDa6a4k X-Google-Smtp-Source: ABdhPJzzBYU+e8D3Z9iUcueLzQHXsIQHKIxwRzmxUGZAhHVACC4W2A5Bo1jjppdfUbH8kWIiZe7JPQ== X-Received: by 2002:a19:c3ca:: with SMTP id t193mr13011144lff.331.1617493300544; Sat, 03 Apr 2021 16:41:40 -0700 (PDT) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f23sm1374927lja.43.2021.04.03.16.41.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Apr 2021 16:41:40 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Jie Zhou , Nick Connolly , Dmitry Kozlyuk , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Beilei Xing , Jeff Guo , Olivier Matz , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Sun, 4 Apr 2021 02:41:27 +0300 Message-Id: <20210403234129.20296-4-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20210403234129.20296-1-dmitry.kozliuk@gmail.com> References: <20210320130525.16452-1-dmitry.kozliuk@gmail.com> <20210403234129.20296-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 3/5] eal: make OS shims internal X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DPDK code often relies on functions and macros that are not standard C, but are found on all platforms, even if by slightly different names. Windows provided macros or inline definitions for such symbols. However, when placed in public header, these symbols were unnecessarily exposed, breaking consumer POSIX compatibility code. Move all shims to , a header to be used instead of by internal code. Include it in libraries and PMDs that previously imported shims from . Signed-off-by: Dmitry Kozlyuk --- drivers/bus/pci/private.h | 4 +- drivers/bus/vdev/vdev_private.h | 2 + drivers/common/mlx5/mlx5_common.h | 1 + drivers/net/i40e/i40e_ethdev.c | 1 + lib/librte_cmdline/cmdline.c | 4 -- lib/librte_cmdline/cmdline_os_windows.c | 2 - lib/librte_cmdline/cmdline_private.h | 1 + lib/librte_cmdline/cmdline_socket.c | 4 -- lib/librte_eal/common/eal_common_config.c | 1 - lib/librte_eal/common/eal_common_errno.c | 4 ++ lib/librte_eal/common/eal_common_options.c | 2 +- lib/librte_eal/common/eal_internal_cfg.h | 1 + lib/librte_eal/freebsd/include/rte_os_shim.h | 14 +++++ lib/librte_eal/linux/include/rte_os_shim.h | 14 +++++ lib/librte_eal/windows/eal_hugepages.c | 1 - lib/librte_eal/windows/eal_lcore.c | 1 - lib/librte_eal/windows/eal_memalloc.c | 1 - lib/librte_eal/windows/include/rte_os.h | 62 ++------------------ lib/librte_eal/windows/include/rte_os_shim.h | 28 +++++++++ lib/librte_ethdev/ethdev_private.h | 2 + lib/librte_kvargs/rte_kvargs.c | 1 + 21 files changed, 77 insertions(+), 74 deletions(-) create mode 100644 lib/librte_eal/freebsd/include/rte_os_shim.h create mode 100644 lib/librte_eal/linux/include/rte_os_shim.h create mode 100644 lib/librte_eal/windows/include/rte_os_shim.h diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index f566943f5e..4cd9d14ec7 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -7,8 +7,10 @@ #include #include -#include + #include +#include +#include extern struct rte_pci_bus rte_pci_bus; diff --git a/drivers/bus/vdev/vdev_private.h b/drivers/bus/vdev/vdev_private.h index ba6dc48ff3..e683f5f133 100644 --- a/drivers/bus/vdev/vdev_private.h +++ b/drivers/bus/vdev/vdev_private.h @@ -5,6 +5,8 @@ #ifndef _VDEV_PRIVATE_H_ #define _VDEV_PRIVATE_H_ +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h index 8eda6749b4..211e330178 100644 --- a/drivers/common/mlx5/mlx5_common.h +++ b/drivers/common/mlx5/mlx5_common.h @@ -14,6 +14,7 @@ #include #include #include +#include #include "mlx5_prm.h" #include "mlx5_devx_cmds.h" diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index fcf150e127..cf9e996ca5 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "i40e_logs.h" #include "base/i40e_prototype.h" diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 79ea5f98c8..49770869bb 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -18,10 +18,6 @@ #include "cmdline_private.h" -#ifdef RTE_EXEC_ENV_WINDOWS -#define write _write -#endif - static void cmdline_valid_buffer(struct rdline *rdl, const char *buf, __rte_unused unsigned int size) diff --git a/lib/librte_cmdline/cmdline_os_windows.c b/lib/librte_cmdline/cmdline_os_windows.c index e9585c9eea..73ed9ba290 100644 --- a/lib/librte_cmdline/cmdline_os_windows.c +++ b/lib/librte_cmdline/cmdline_os_windows.c @@ -4,8 +4,6 @@ #include -#include - #include "cmdline_private.h" /* Missing from some MinGW-w64 distributions. */ diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h index a8a6ee9e69..a87c45275c 100644 --- a/lib/librte_cmdline/cmdline_private.h +++ b/lib/librte_cmdline/cmdline_private.h @@ -8,6 +8,7 @@ #include #include +#include #ifdef RTE_EXEC_ENV_WINDOWS #include #endif diff --git a/lib/librte_cmdline/cmdline_socket.c b/lib/librte_cmdline/cmdline_socket.c index 0fe1497008..998e8ade25 100644 --- a/lib/librte_cmdline/cmdline_socket.c +++ b/lib/librte_cmdline/cmdline_socket.c @@ -16,10 +16,6 @@ #include "cmdline_private.h" #include "cmdline_socket.h" -#ifdef RTE_EXEC_ENV_WINDOWS -#define open _open -#endif - struct cmdline * cmdline_file_new(cmdline_parse_ctx_t *ctx, const char *prompt, const char *path) { diff --git a/lib/librte_eal/common/eal_common_config.c b/lib/librte_eal/common/eal_common_config.c index 56d09dda7f..1c4c4dd585 100644 --- a/lib/librte_eal/common/eal_common_config.c +++ b/lib/librte_eal/common/eal_common_config.c @@ -3,7 +3,6 @@ */ #include -#include #include #include "eal_private.h" diff --git a/lib/librte_eal/common/eal_common_errno.c b/lib/librte_eal/common/eal_common_errno.c index 2a10fb823f..f86802705a 100644 --- a/lib/librte_eal/common/eal_common_errno.c +++ b/lib/librte_eal/common/eal_common_errno.c @@ -15,6 +15,10 @@ #include #include +#ifdef RTE_EXEC_ENV_WINDOWS +#define strerror_r(errnum, buf, buflen) strerror_s(buf, buflen, errnum) +#endif + RTE_DEFINE_PER_LCORE(int, _rte_errno); const char * diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 622c7bc429..28da464fc9 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -1936,7 +1936,7 @@ eal_check_common_options(struct internal_config *internal_cfg) RTE_LOG(ERR, EAL, "Invalid length of --" OPT_MBUF_POOL_OPS_NAME" option\n"); return -1; } - if (index(eal_get_hugefile_prefix(), '%') != NULL) { + if (strchr(eal_get_hugefile_prefix(), '%') != NULL) { RTE_LOG(ERR, EAL, "Invalid char, '%%', in --"OPT_FILE_PREFIX" " "option\n"); return -1; diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h index 51dbe86e2b..d6c0470eb8 100644 --- a/lib/librte_eal/common/eal_internal_cfg.h +++ b/lib/librte_eal/common/eal_internal_cfg.h @@ -11,6 +11,7 @@ #define EAL_INTERNAL_CFG_H #include +#include #include #include "eal_thread.h" diff --git a/lib/librte_eal/freebsd/include/rte_os_shim.h b/lib/librte_eal/freebsd/include/rte_os_shim.h new file mode 100644 index 0000000000..1e85229ca9 --- /dev/null +++ b/lib/librte_eal/freebsd/include/rte_os_shim.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef _RTE_OS_SHIM_ +#define _RTE_OS_SHIM_ + +#include + +/** + * @file + * @internal + * Provides semi-standard OS facilities by convenient names. + */ + +#endif /* _RTE_OS_SHIM_ */ diff --git a/lib/librte_eal/linux/include/rte_os_shim.h b/lib/librte_eal/linux/include/rte_os_shim.h new file mode 100644 index 0000000000..1e85229ca9 --- /dev/null +++ b/lib/librte_eal/linux/include/rte_os_shim.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef _RTE_OS_SHIM_ +#define _RTE_OS_SHIM_ + +#include + +/** + * @file + * @internal + * Provides semi-standard OS facilities by convenient names. + */ + +#endif /* _RTE_OS_SHIM_ */ diff --git a/lib/librte_eal/windows/eal_hugepages.c b/lib/librte_eal/windows/eal_hugepages.c index 83a3d0ffc6..b007dceb39 100644 --- a/lib/librte_eal/windows/eal_hugepages.c +++ b/lib/librte_eal/windows/eal_hugepages.c @@ -6,7 +6,6 @@ #include #include #include -#include #include "eal_private.h" #include "eal_filesystem.h" diff --git a/lib/librte_eal/windows/eal_lcore.c b/lib/librte_eal/windows/eal_lcore.c index a85149be95..476c2d2bdf 100644 --- a/lib/librte_eal/windows/eal_lcore.c +++ b/lib/librte_eal/windows/eal_lcore.c @@ -9,7 +9,6 @@ #include #include #include -#include #include "eal_private.h" #include "eal_thread.h" diff --git a/lib/librte_eal/windows/eal_memalloc.c b/lib/librte_eal/windows/eal_memalloc.c index 85a9712cea..4459d59b1a 100644 --- a/lib/librte_eal/windows/eal_memalloc.c +++ b/lib/librte_eal/windows/eal_memalloc.c @@ -3,7 +3,6 @@ */ #include -#include #include "eal_internal_cfg.h" #include "eal_memalloc.h" diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index 1afe49f35e..66c711d458 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -18,72 +18,18 @@ extern "C" { #endif -/* limits.h replacement, value as in */ -#ifndef PATH_MAX -#define PATH_MAX _MAX_PATH -#endif - -#ifndef sleep -#define sleep(x) Sleep(1000 * (x)) -#endif - -#ifndef strerror_r -#define strerror_r(a, b, c) strerror_s(b, c, a) -#endif - -#ifndef strdup -/* strdup is deprecated in Microsoft libc and _strdup is preferred */ -#define strdup(str) _strdup(str) -#endif - -#ifndef strtok_r -#define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr) -#endif - -#ifndef index -#define index(a, b) strchr(a, b) -#endif - -#ifndef rindex -#define rindex(a, b) strrchr(a, b) -#endif - -#ifndef strncasecmp -#define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count) -#endif - -#ifndef close -#define close _close -#endif - -#ifndef unlink -#define unlink _unlink -#endif - /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2) #define RTE_CPU_FILL(set) CPU_FILL(set) #define RTE_CPU_NOT(dst, src) CPU_NOT(dst, src) -/* as in */ +/* This is an exception without "rte_" prefix, because Windows does have + * ssize_t, but it's defined in which we avoid to expose. + * If ssize_t is defined in user code, it necessarily has the same type. + */ typedef long long ssize_t; -#ifndef RTE_TOOLCHAIN_GCC -static inline const char * -eal_strerror(int code) -{ - static char buffer[128]; - - strerror_s(buffer, sizeof(buffer), code); - return buffer; -} - -#ifndef strerror -#define strerror eal_strerror -#endif -#endif /* RTE_TOOLCHAIN_GCC */ - #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/windows/include/rte_os_shim.h b/lib/librte_eal/windows/include/rte_os_shim.h new file mode 100644 index 0000000000..edd9a1082c --- /dev/null +++ b/lib/librte_eal/windows/include/rte_os_shim.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef _RTE_OS_SHIM_ +#define _RTE_OS_SHIM_ + +#include + +/** + * @file + * @internal + * Provides semi-standard OS facilities by convenient names. + */ + +#ifndef PATH_MAX +#define PATH_MAX _MAX_PATH +#endif + +#define strdup(str) _strdup(str) +#define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr) +#define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count) + +#define open(path, flags, ...) _open(path, flags, ##__VA_ARGS__) +#define read(fd, buf, n) _read(fd, buf, n) +#define write(fd, buf, n) _write(fd, buf, n) +#define close(fd) _close(fd) +#define unlink(path) _unlink(path) + +#endif /* _RTE_OS_SHIM_ */ diff --git a/lib/librte_ethdev/ethdev_private.h b/lib/librte_ethdev/ethdev_private.h index 220ddd4408..9bb0879538 100644 --- a/lib/librte_ethdev/ethdev_private.h +++ b/lib/librte_ethdev/ethdev_private.h @@ -5,6 +5,8 @@ #ifndef _ETH_PRIVATE_H_ #define _ETH_PRIVATE_H_ +#include + #include "rte_ethdev.h" #ifdef __cplusplus diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c index ffae8914cf..4c1f7dc2c1 100644 --- a/lib/librte_kvargs/rte_kvargs.c +++ b/lib/librte_kvargs/rte_kvargs.c @@ -7,6 +7,7 @@ #include #include +#include #include #include "rte_kvargs.h" From patchwork Sat Apr 3 23:41:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 90535 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E41FFA0548; Sun, 4 Apr 2021 01:42:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 91F98140E59; Sun, 4 Apr 2021 01:41:44 +0200 (CEST) Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by mails.dpdk.org (Postfix) with ESMTP id 3C8BD140E3B for ; Sun, 4 Apr 2021 01:41:42 +0200 (CEST) Received: by mail-lj1-f170.google.com with SMTP id u10so9140997lju.7 for ; Sat, 03 Apr 2021 16:41:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RVMkF7yTN6CjFo8o+yAjaTX5ihWMsqzlSo3HRJD7omk=; b=JN0bCkUPVkW6Rmc+BsSgORSRBZnkAF5nKOqXPX/D7A43mgzpnDrSUerqa9EtmRh+o6 MogN0m6xi98Xn5Kh/DE/1f3FWpQdTnlb2nfv4OqzVde1hkRXKH8qVqgMozWZjJfxQ4lA /Zc+Ca4ipD/mK88IxRvVVxdIqhWynb6oUrzyxHPySaX1HYE83udb5UduRRyrJ4SJq6yh 1JAJLHU7OC8pJvHmyHqID4nV5QPZIKBohJCfVZDYjLHC8RTiqgscQfeYpGnPpzNd75PT Twa0YKwLzV2T/JI5y5ioygSgpNLRcA2kFZyphlywe3Hdk3ogvyUkpfLSoPfOCg7mXBlj IcOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RVMkF7yTN6CjFo8o+yAjaTX5ihWMsqzlSo3HRJD7omk=; b=FNn687A+63SL1G0pD/4gu3vkrjFFpGcSJcyMtlRmoPm8XYeHSl4Rhi0ElTaOeYl3Xz 2SF0kR05bfz9gxlOk1LMVZP09nir4AGNcAf6gLcO6m53VIQgRoQ1MmqMyL/5KUJu0mVO DB313Jq0bpUdeYL4LqU76rWwP5/rwmoIe7LB9WkDiVrbHYYCOEd5sygR79zRyHLvK54G +zSjlhWVvu2wL/wQ5JLq++G7RR5SJzFtx8fAyv6qz1Zfnk8d51V70yxB3zD++/H/WaNa Z4COabYBJF8dV5xJPIIqZEgXKi0gLRM8UP2fKLVceKHFx8Rgl+sa7/tyd+x6Q6w6XCD1 Tqaw== X-Gm-Message-State: AOAM5327YOofPu5fUP23Tf5+lsY1MwdhZpPx8aemyXnD1VeQ0F91ia83 kGzo7Y1hd6p9rgEn4XvcYZjDIjKKzyFSuU/P X-Google-Smtp-Source: ABdhPJx/q7B+x2yZldC5mQ5UVbuCmimlYZVF44e4v6tRKEUAz97ao99G0NzerGju0Lt7v73G7GxoaA== X-Received: by 2002:a2e:a554:: with SMTP id e20mr10634087ljn.286.1617493301412; Sat, 03 Apr 2021 16:41:41 -0700 (PDT) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f23sm1374927lja.43.2021.04.03.16.41.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Apr 2021 16:41:41 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Jie Zhou , Nick Connolly , Dmitry Kozlyuk , Ranjit Menon , Olivier Matz Date: Sun, 4 Apr 2021 02:41:28 +0300 Message-Id: <20210403234129.20296-5-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20210403234129.20296-1-dmitry.kozliuk@gmail.com> References: <20210320130525.16452-1-dmitry.kozliuk@gmail.com> <20210403234129.20296-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 4/5] net: work around s_addr macro on Windows X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Windows Sockets headers contain `#define s_addr S_un.S_addr`, which conflicts with definition of `s_addr` field of `struct rte_ether_hdr`. Prieviously `s_addr` was undefined in , which had been breaking access to `s_addr` field of `struct in_addr`, so some DPDK and Windows headers could not be included in one file. Renaming of `struct rte_ether_hdr` is planned: https://mails.dpdk.org/archives/dev/2021-March/201444.html Temporarily disable `s_addr` macro around `struct rte_ether_hdr` definition to avoid conflict. Place source MAC address in both `s_addr` and `S_un.S_addr` fields, so that access works either directly or through the macro as defined in Windows headers. Signed-off-by: Dmitry Kozlyuk Acked-by: Ranjit Menon --- lib/librte_net/rte_ether.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index 060b63fc9b..a303c24a8c 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -23,10 +23,6 @@ extern "C" { #include #include -#ifdef RTE_EXEC_ENV_WINDOWS /* Workaround conflict with rte_ether_hdr. */ -#undef s_addr /* Defined in winsock2.h included in windows.h. */ -#endif - #define RTE_ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */ #define RTE_ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */ #define RTE_ETHER_CRC_LEN 4 /**< Length of Ethernet CRC. */ @@ -257,16 +253,34 @@ __rte_experimental int rte_ether_unformat_addr(const char *str, struct rte_ether_addr *eth_addr); +/* Windows Sockets headers contain `#define s_addr S_un.S_addr`. + * Temporarily disable this macro to avoid conflict at definition. + * Place source MAC address in both `s_addr` and `S_un.S_addr` fields, + * so that access works either directly or through the macro. + */ +#pragma push_macro("s_addr") +#ifdef s_addr +#undef s_addr +#endif + /** * Ethernet header: Contains the destination address, source address * and frame type. */ struct rte_ether_hdr { struct rte_ether_addr d_addr; /**< Destination address. */ - struct rte_ether_addr s_addr; /**< Source address. */ - uint16_t ether_type; /**< Frame type. */ + RTE_STD_C11 + union { + struct rte_ether_addr s_addr; /**< Source address. */ + struct { + struct rte_ether_addr S_addr; + } S_un; /**< Do not use directly; use s_addr instead.*/ + }; + uint16_t ether_type; /**< Frame type. */ } __rte_aligned(2); +#pragma pop_macro("s_addr") + /** * Ethernet VLAN Header. * Contains the 16-bit VLAN Tag Control Identifier and the Ethernet type From patchwork Sat Apr 3 23:41:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 90536 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 25E97A0548; Sun, 4 Apr 2021 01:42:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CC9A1140E80; Sun, 4 Apr 2021 01:41:45 +0200 (CEST) Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by mails.dpdk.org (Postfix) with ESMTP id 5F617140E4D for ; Sun, 4 Apr 2021 01:41:43 +0200 (CEST) Received: by mail-lf1-f45.google.com with SMTP id q29so12393027lfb.4 for ; Sat, 03 Apr 2021 16:41:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ly+Z+HFne+oyeN7xktRgUpT03Frp7ZM3Ra3AV0yxE+w=; b=sEZuVsZdVMJeU5QZJiuHAoDAYq0BA74WquWBecy6qTg3uXEbOo981otpTjLeDlqHS8 n3cFLJhhuTAtGcEqSwOIBNZi2Tfdkn+uhDNEq/0E4LXLIr/BUZfA56SWzGdWArVYPYZR igqn06aiaO/IjovhiHm54fVuyYyqNK543zzfG7T3pNTRUNSuLCcXd2QyLpPvfTAxmkEa 89VDMjhTfCcI13nTKLEwP0fSt2GGd8LxXz0kmNhDGLOk790x37C4ZHLAV5SWk6bOAQPC Rdk6PifqQADR152jd91J4qgcurGPE3xKNnfZg+HL8xC84w6CkZa/iZg6fGfuYDyf1T5E lwSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ly+Z+HFne+oyeN7xktRgUpT03Frp7ZM3Ra3AV0yxE+w=; b=uElVazB7UUByBR1KY9zc+1mac0xikA9f6k527AYwVBx/EARUxFjm7gD9UxLFi2QinT 2LJAMPPM99x3MYLcc7aJkzy4yges+8WjUP5YneKJmTjgP1RkrujAAC28cUqdyk4hgS/t Ey111CKKea4C/kPyBaAKYRhmOXjnbqIxi9JxuysUEMlBHd5PuCOQ7GT/ud6luJDc/aTn 1auA8ODASViyWuve/RJCUowdBZrlAH7NMADHDA//ahFB8haIj/g1na6gXFNSrNUEAf7I BC8oLwFggyxt/JfDlvoOZnf+om1y5bgdgZ5hbNVj5+RSbsd2JwVszi6rKbcN0ZY3jY9B W/4Q== X-Gm-Message-State: AOAM5310hFeGSNSzgrFTI6AbaR6RarE5LNg5O82lBcm8QhloIcNcA11o W6osvVt50tij/U2GHuXnzIpZ37LUxFWCUu2A X-Google-Smtp-Source: ABdhPJxfPZcSPwmGbdsZgCrAH5vdWzBJmFYf0KpJbWVdx1lfjo8FI2yu+54LLCRvrHPawnekhYh42A== X-Received: by 2002:a19:946:: with SMTP id 67mr13749713lfj.74.1617493302678; Sat, 03 Apr 2021 16:41:42 -0700 (PDT) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f23sm1374927lja.43.2021.04.03.16.41.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Apr 2021 16:41:42 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Jie Zhou , Nick Connolly , Dmitry Kozlyuk , Beilei Xing , Jeff Guo , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Olivier Matz , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Sun, 4 Apr 2021 02:41:29 +0300 Message-Id: <20210403234129.20296-6-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20210403234129.20296-1-dmitry.kozliuk@gmail.com> References: <20210320130525.16452-1-dmitry.kozliuk@gmail.com> <20210403234129.20296-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 5/5] net: provide IP-related API on any OS X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Users of relied on it to provide IP-related defines, like IPPROTO_* constants, but still had to include POSIX headers for inet_pton() and other standard IP-related facilities. Extend so that it is a single header to gain access to IP-related facilities on any OS. Use it to replace POSIX includes in components enabled on Windows. Move missing constants from Windows networking shim to OS shim header and include it where needed. Remove Windows networking shim that is no longer needed. Signed-off-by: Dmitry Kozlyuk --- drivers/net/i40e/i40e_fdir.c | 1 + drivers/net/mlx5/mlx5.h | 1 - drivers/net/mlx5/mlx5_flow.c | 4 +-- drivers/net/mlx5/mlx5_flow.h | 3 +- drivers/net/mlx5/mlx5_mac.c | 1 - examples/cmdline/commands.c | 5 --- examples/cmdline/parse_obj_list.c | 2 -- lib/librte_cmdline/cmdline.c | 1 - lib/librte_cmdline/cmdline_parse.c | 2 -- lib/librte_cmdline/cmdline_parse_etheraddr.c | 6 ---- lib/librte_cmdline/cmdline_parse_ipaddr.c | 6 ---- lib/librte_cmdline/cmdline_parse_ipaddr.h | 2 +- lib/librte_eal/windows/include/arpa/inet.h | 30 ---------------- lib/librte_eal/windows/include/netinet/in.h | 38 -------------------- lib/librte_eal/windows/include/netinet/ip.h | 10 ------ lib/librte_eal/windows/include/rte_os_shim.h | 8 +++++ lib/librte_eal/windows/include/sys/socket.h | 24 ------------- lib/librte_ethdev/rte_ethdev.c | 12 +++---- lib/librte_ethdev/rte_ethdev_core.h | 1 - lib/librte_net/rte_ip.h | 7 ++++ lib/librte_net/rte_net.c | 1 + 21 files changed, 24 insertions(+), 141 deletions(-) delete mode 100644 lib/librte_eal/windows/include/arpa/inet.h delete mode 100644 lib/librte_eal/windows/include/netinet/in.h delete mode 100644 lib/librte_eal/windows/include/netinet/ip.h delete mode 100644 lib/librte_eal/windows/include/sys/socket.h diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index c572d003cb..e7361bf520 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "i40e_logs.h" #include "base/i40e_type.h" diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 6faba4fbb1..392e89d3f5 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -10,7 +10,6 @@ #include #include #include -#include #include #include diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index c347f8130e..0f1a9c5ed9 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -3,12 +3,11 @@ * Copyright 2016 Mellanox Technologies, Ltd */ -#include -#include #include #include #include #include +#include #include #include @@ -8241,4 +8240,3 @@ mlx5_release_tunnel_hub(__rte_unused struct mlx5_dev_ctx_shared *sh, { } #endif /* HAVE_IBV_FLOW_DV_SUPPORT */ - diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 8324e188e1..d03eb0a7a7 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -5,11 +5,10 @@ #ifndef RTE_PMD_MLX5_FLOW_H_ #define RTE_PMD_MLX5_FLOW_H_ -#include -#include #include #include #include +#include #include #include diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c index a7946f7756..19981d26d8 100644 --- a/drivers/net/mlx5/mlx5_mac.c +++ b/drivers/net/mlx5/mlx5_mac.c @@ -8,7 +8,6 @@ #include #include #include -#include #include #include diff --git a/examples/cmdline/commands.c b/examples/cmdline/commands.c index f43eacfbad..9ce8ef389f 100644 --- a/examples/cmdline/commands.c +++ b/examples/cmdline/commands.c @@ -8,12 +8,7 @@ #include #include #include -#include #include -#include -#ifdef RTE_EXEC_ENV_FREEBSD -#include -#endif #include #include diff --git a/examples/cmdline/parse_obj_list.c b/examples/cmdline/parse_obj_list.c index b04adbea58..959bcd1452 100644 --- a/examples/cmdline/parse_obj_list.c +++ b/examples/cmdline/parse_obj_list.c @@ -6,11 +6,9 @@ #include #include -#include #include #include #include -#include #include #include diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 49770869bb..a176d15130 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -12,7 +12,6 @@ #include #include #include -#include #include diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c index fe366841cd..f5cc934782 100644 --- a/lib/librte_cmdline/cmdline_parse.c +++ b/lib/librte_cmdline/cmdline_parse.c @@ -11,8 +11,6 @@ #include #include -#include - #include #include "cmdline_private.h" diff --git a/lib/librte_cmdline/cmdline_parse_etheraddr.c b/lib/librte_cmdline/cmdline_parse_etheraddr.c index 5cb10de321..433b828a72 100644 --- a/lib/librte_cmdline/cmdline_parse_etheraddr.c +++ b/lib/librte_cmdline/cmdline_parse_etheraddr.c @@ -5,13 +5,7 @@ */ #include -#include -#include -#include -#include -#include #include -#include #include #include diff --git a/lib/librte_cmdline/cmdline_parse_ipaddr.c b/lib/librte_cmdline/cmdline_parse_ipaddr.c index f8dbdf204c..5e278c963f 100644 --- a/lib/librte_cmdline/cmdline_parse_ipaddr.c +++ b/lib/librte_cmdline/cmdline_parse_ipaddr.c @@ -6,14 +6,8 @@ #include #include -#include -#include -#include #include #include -#include -#include -#include #include diff --git a/lib/librte_cmdline/cmdline_parse_ipaddr.h b/lib/librte_cmdline/cmdline_parse_ipaddr.h index 0ba81647bc..0118c31d44 100644 --- a/lib/librte_cmdline/cmdline_parse_ipaddr.h +++ b/lib/librte_cmdline/cmdline_parse_ipaddr.h @@ -8,7 +8,7 @@ #define _PARSE_IPADDR_H_ #include -#include +#include #ifdef __cplusplus extern "C" { diff --git a/lib/librte_eal/windows/include/arpa/inet.h b/lib/librte_eal/windows/include/arpa/inet.h deleted file mode 100644 index 96b6984383..0000000000 --- a/lib/librte_eal/windows/include/arpa/inet.h +++ /dev/null @@ -1,30 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2020 Dmitry Kozlyuk - */ - -#ifndef _ARPA_INET_H_ -#define _ARPA_INET_H_ - -/** - * @file - * - * Compatibility header - * - * Although symbols declared here are present on Windows, - * including would expose too much macros breaking common code. - */ - -#include -#include - -/* defined in ws2_32.dll */ -__attribute__((stdcall)) -int -inet_pton(int af, const char *src, void *dst); - -/* defined in ws2_32.dll */ -__attribute__((stdcall)) -const char * -inet_ntop(int af, const void *src, char *dst, socklen_t size); - -#endif /* _ARPA_INET_H_ */ diff --git a/lib/librte_eal/windows/include/netinet/in.h b/lib/librte_eal/windows/include/netinet/in.h deleted file mode 100644 index 6455b9ba51..0000000000 --- a/lib/librte_eal/windows/include/netinet/in.h +++ /dev/null @@ -1,38 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2020 Mellanox Technologies, Ltd - */ - -#ifndef _IN_H_ -#define _IN_H_ - -#include -#include - -#define IPPROTO_IP 0 -#define IPPROTO_HOPOPTS 0 -#define IPPROTO_ICMP 1 -#define IPPROTO_IPIP 4 -#define IPPROTO_TCP 6 -#define IPPROTO_UDP 17 -#define IPPROTO_IPV6 41 -#define IPPROTO_ROUTING 43 -#define IPPROTO_FRAGMENT 44 -#define IPPROTO_GRE 47 -#define IPPROTO_ESP 50 -#define IPPROTO_AH 51 -#define IPPROTO_ICMPV6 58 -#define IPPROTO_NONE 59 -#define IPPROTO_DSTOPTS 60 -#define IPPROTO_SCTP 132 - -#define INET6_ADDRSTRLEN 46 - -struct in_addr { - uint32_t s_addr; -}; - -struct in6_addr { - uint8_t s6_addr[16]; -}; - -#endif diff --git a/lib/librte_eal/windows/include/netinet/ip.h b/lib/librte_eal/windows/include/netinet/ip.h deleted file mode 100644 index 2126498797..0000000000 --- a/lib/librte_eal/windows/include/netinet/ip.h +++ /dev/null @@ -1,10 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2020 Mellanox Technologies, Ltd - */ - -#ifndef _IP_H_ -#define _IP_H_ - -#define IPVERSION 4 - -#endif diff --git a/lib/librte_eal/windows/include/rte_os_shim.h b/lib/librte_eal/windows/include/rte_os_shim.h index edd9a1082c..f40fb62d1d 100644 --- a/lib/librte_eal/windows/include/rte_os_shim.h +++ b/lib/librte_eal/windows/include/rte_os_shim.h @@ -25,4 +25,12 @@ #define close(fd) _close(fd) #define unlink(path) _unlink(path) +#define IPVERSION 4 + +#define IPPROTO_IPIP 4 +#define IPPROTO_GRE 47 +#ifdef RTE_TOOLCHAIN_GCC +#define IPPROTO_SCTP 132 +#endif + #endif /* _RTE_OS_SHIM_ */ diff --git a/lib/librte_eal/windows/include/sys/socket.h b/lib/librte_eal/windows/include/sys/socket.h deleted file mode 100644 index 9536cf8e62..0000000000 --- a/lib/librte_eal/windows/include/sys/socket.h +++ /dev/null @@ -1,24 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright (c) 2020 Dmitry Kozlyuk - */ - -#ifndef _SYS_SOCKET_H_ -#define _SYS_SOCKET_H_ - -/** - * @file - * - * Compatibility header - * - * Although symbols declared here are present on Windows, - * including would expose too much macros breaking common code. - */ - -#include - -#define AF_INET 2 -#define AF_INET6 23 - -typedef size_t socklen_t; - -#endif /* _SYS_SOCKET_H_ */ diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 3059aa55b3..441f01df53 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -2,18 +2,14 @@ * Copyright(c) 2010-2017 Intel Corporation */ -#include -#include #include -#include -#include -#include -#include #include +#include #include #include -#include -#include +#include +#include +#include #include #include diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/librte_ethdev/rte_ethdev_core.h index 918a34ed1f..4679d948fa 100644 --- a/lib/librte_ethdev/rte_ethdev_core.h +++ b/lib/librte_ethdev/rte_ethdev_core.h @@ -6,7 +6,6 @@ #define _RTE_ETHDEV_CORE_H_ #include -#include /** * @file diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h index b59c4d67a3..8c189009b0 100644 --- a/lib/librte_net/rte_ip.h +++ b/lib/librte_net/rte_ip.h @@ -16,9 +16,16 @@ */ #include + +#ifdef RTE_EXEC_ENV_WINDOWS +#include +#else +#include #include +#include #include #include +#endif #include #include diff --git a/lib/librte_net/rte_net.c b/lib/librte_net/rte_net.c index bfe5003976..d680accc16 100644 --- a/lib/librte_net/rte_net.c +++ b/lib/librte_net/rte_net.c @@ -15,6 +15,7 @@ #include #include #include +#include /* get l3 packet type from ip6 next protocol */ static uint32_t