From patchwork Mon Sep 28 21:50:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79059 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C996BA04C0; Mon, 28 Sep 2020 23:51:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 96D4A1D6C6; Mon, 28 Sep 2020 23:51:37 +0200 (CEST) Received: from mail-lf1-f67.google.com (mail-lf1-f67.google.com [209.85.167.67]) by dpdk.org (Postfix) with ESMTP id 419E71BDDF for ; Mon, 28 Sep 2020 23:51:34 +0200 (CEST) Received: by mail-lf1-f67.google.com with SMTP id u8so3111550lff.1 for ; Mon, 28 Sep 2020 14:51:34 -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=izn5ojfvd3xrmNkBs/FoETtcPitzg7i9lCk0A4ZR9vI=; b=N8bvDdFqd/YKoyIOsI6oBuDhvrVXqYPAvcZt0UA/hHrxlWDx+4uZhaJHRDBRZ2TiVe SLpZ+0Wltjjsvu8TGVvIZrSs1InvUfitgx3875dvMOvvhqcfnOrBjbs1IUi6A4pTuahU nWZDJlCJSaVddVwK/sfgUFBcAOgWAsnCF5bY2ub2zx/e7buYWnknXkf89Hk6XDX9xzr1 nbz5f4Cl2Tdw3mAWDDoROWtP+JD8xLQkXDZ3V0arZ9u/hgC2ppqmMtHuw4HRLmEp5spR XL2bT9PQfdtRvQxIfkZuE1JybZ7Kc/1kShLxBuE0idxy1ozR+d3UHjS5NhI7YO2PMyex G7Jg== 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=izn5ojfvd3xrmNkBs/FoETtcPitzg7i9lCk0A4ZR9vI=; b=B6ETTz/L42fkclchOHzbHBN6/IG/MYn/DBegU3wKu6XKU7Ub9MWK5R5+CxW7g3Kz9d r0+pJ+pR4B6+a6Zj9w8o9Y6i9B2SDpytn3PzKYi+ZSgfLfic3UsOAG/ghDaxCZSigl2M Xa2+czJoV6frqDdqH3ytqoYMUuDfdsPIMbsNuLNNUqt3kB0O9EZcHAOPUUpYdmvGXjSp mLBbje4JCiKXcBJB6y4crWkwx37kGCrHSKa/yQRDsNE3SmTyC3tdH3sguSNpfpCWqAjl /We/6fU7N6cRjD0oD2C9c794HMpYO29PTgIsFXgMIA2Xu0apzWx0O482TbRupgbUoXx5 QWQg== X-Gm-Message-State: AOAM533EsFxG9yzrEskrKto39X0wW0Bx4nAlSXCtWoQejDt8LjPS9P2Y C9zLnLR2YpyznPDWrNQP2qGBKnTWHtocE880 X-Google-Smtp-Source: ABdhPJyHS5s2PQrhoLy/pye0kiNi4zdSJLq78Rboj9SVBpqMbZyxwe+tXYru6DmzoBs+or+vjNZLZQ== X-Received: by 2002:ac2:5627:: with SMTP id b7mr90783lff.27.1601329892491; Mon, 28 Sep 2020 14:51:32 -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 l11sm2954893lfk.113.2020.09.28.14.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:31 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Olivier Matz , Neil Horman Date: Tue, 29 Sep 2020 00:50:46 +0300 Message-Id: <20200928215052.23627-2-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 1/7] cmdline: make implementation logically opaque X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" struct cmdline exposes platform-specific members it contains, most notably struct termios that is only available on Unix. While ABI considerations prevent from hinding the definition on already supported platforms, struct cmdline is considered logically opaque from now on. Add a deprecation notice targeted at 20.11. * Remove tests checking struct cmdline content as meaningless. * Fix missing cmdline_free() in unit test. * Add cmdline_get_rdline() to access history buffer indirectly. The new function is currently used only in tests. Signed-off-by: Dmitry Kozlyuk Suggested-by: Olivier Matz Acked-by: Ray Kinsella --- app/test-cmdline/commands.c | 8 +++- app/test/test_cmdline_lib.c | 44 +++++++++------------- doc/guides/rel_notes/deprecation.rst | 4 ++ lib/librte_cmdline/cmdline.c | 9 +++-- lib/librte_cmdline/cmdline.h | 18 ++++++++- lib/librte_cmdline/cmdline_parse.c | 3 -- lib/librte_cmdline/cmdline_socket.c | 5 +-- lib/librte_cmdline/rte_cmdline_version.map | 8 ++++ 8 files changed, 60 insertions(+), 39 deletions(-) diff --git a/app/test-cmdline/commands.c b/app/test-cmdline/commands.c index d67c0ca6a..ff7ac973e 100644 --- a/app/test-cmdline/commands.c +++ b/app/test-cmdline/commands.c @@ -294,8 +294,10 @@ cmd_get_history_bufsize_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { + struct rdline *rdl = cmdline_get_rdline(cl); + cmdline_printf(cl, "History buffer size: %zu\n", - sizeof(cl->rdl.history_buf)); + sizeof(rdl->history_buf)); } cmdline_parse_token_string_t cmd_get_history_bufsize_tok = @@ -326,7 +328,9 @@ cmd_clear_history_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { - rdline_clear_history(&cl->rdl); + struct rdline *rdl = cmdline_get_rdline(cl); + + rdline_clear_history(rdl); } cmdline_parse_token_string_t cmd_clear_history_tok = diff --git a/app/test/test_cmdline_lib.c b/app/test/test_cmdline_lib.c index dec465da5..bd72df0da 100644 --- a/app/test/test_cmdline_lib.c +++ b/app/test/test_cmdline_lib.c @@ -46,22 +46,29 @@ complete_buffer(__rte_unused struct rdline *rdl, static int test_cmdline_parse_fns(void) { - struct cmdline cl; + struct cmdline *cl; + cmdline_parse_ctx_t ctx; int i = 0; char dst[CMDLINE_TEST_BUFSIZE]; + cl = cmdline_new(&ctx, "prompt", -1, -1); + if (cl == NULL) { + printf("Error: cannot create cmdline to test parse fns!\n"); + return -1; + } + if (cmdline_parse(NULL, "buffer") >= 0) goto error; - if (cmdline_parse(&cl, NULL) >= 0) + if (cmdline_parse(cl, NULL) >= 0) goto error; if (cmdline_complete(NULL, "buffer", &i, dst, sizeof(dst)) >= 0) goto error; - if (cmdline_complete(&cl, NULL, &i, dst, sizeof(dst)) >= 0) + if (cmdline_complete(cl, NULL, &i, dst, sizeof(dst)) >= 0) goto error; - if (cmdline_complete(&cl, "buffer", NULL, dst, sizeof(dst)) >= 0) + if (cmdline_complete(cl, "buffer", NULL, dst, sizeof(dst)) >= 0) goto error; - if (cmdline_complete(&cl, "buffer", &i, NULL, sizeof(dst)) >= 0) + if (cmdline_complete(cl, "buffer", &i, NULL, sizeof(dst)) >= 0) goto error; return 0; @@ -166,11 +173,11 @@ static int test_cmdline_fns(void) { cmdline_parse_ctx_t ctx; - struct cmdline cl, *tmp; + struct cmdline *cl; memset(&ctx, 0, sizeof(ctx)); - tmp = cmdline_new(&ctx, "test", -1, -1); - if (tmp == NULL) + cl = cmdline_new(&ctx, "test", -1, -1); + if (cl == NULL) goto error; if (cmdline_new(NULL, "prompt", 0, 0) != NULL) @@ -179,7 +186,7 @@ test_cmdline_fns(void) goto error; if (cmdline_in(NULL, "buffer", CMDLINE_TEST_BUFSIZE) >= 0) goto error; - if (cmdline_in(&cl, NULL, CMDLINE_TEST_BUFSIZE) >= 0) + if (cmdline_in(cl, NULL, CMDLINE_TEST_BUFSIZE) >= 0) goto error; if (cmdline_write_char(NULL, 0) >= 0) goto error; @@ -188,30 +195,15 @@ test_cmdline_fns(void) cmdline_set_prompt(NULL, "prompt"); cmdline_free(NULL); cmdline_printf(NULL, "format"); - /* this should fail as stream handles are invalid */ - cmdline_printf(tmp, "format"); cmdline_interact(NULL); cmdline_quit(NULL); - /* check if void calls change anything when they should fail */ - cl = *tmp; - - cmdline_printf(&cl, NULL); - if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch; - cmdline_set_prompt(&cl, NULL); - if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch; - cmdline_in(&cl, NULL, CMDLINE_TEST_BUFSIZE); - if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch; - - cmdline_free(tmp); - return 0; error: printf("Error: function accepted null parameter!\n"); - return -1; -mismatch: - printf("Error: data changed!\n"); + if (cl != NULL) + cmdline_free(cl); return -1; } diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 9691f2c57..7ae013c27 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -255,3 +255,7 @@ Deprecation Notices ``make``. Given environments are too much variables for such a simple script, it will be removed in DPDK 20.11. Some useful parts may be converted into specific scripts. + +* cmdline: ``cmdline`` structure will be made opaque to hide platform-specific + content. On Linux and FreeBSD, supported prior to DPDK 20.11, + original structure will be kept until DPDK 21.11. \ No newline at end of file diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index cfd703e5b..41f50cc56 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -13,13 +13,10 @@ #include #include #include -#include #include #include -#include "cmdline_parse.h" -#include "cmdline_rdline.h" #include "cmdline.h" static void @@ -103,6 +100,12 @@ cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out) return cl; } +struct rdline* +cmdline_get_rdline(struct cmdline *cl) +{ + return &cl->rdl; +} + void cmdline_free(struct cmdline *cl) { diff --git a/lib/librte_cmdline/cmdline.h b/lib/librte_cmdline/cmdline.h index 243f99d20..c29762dda 100644 --- a/lib/librte_cmdline/cmdline.h +++ b/lib/librte_cmdline/cmdline.h @@ -7,9 +7,13 @@ #ifndef _CMDLINE_H_ #define _CMDLINE_H_ +#ifndef RTE_EXEC_ENV_WINDOWS +#include +#endif + #include +#include -#include #include #include @@ -23,6 +27,8 @@ extern "C" { #endif +#ifndef RTE_EXEC_ENV_WINDOWS + struct cmdline { int s_in; int s_out; @@ -32,6 +38,12 @@ struct cmdline { struct termios oldterm; }; +#else + +struct cmdline; + +#endif /* RTE_EXEC_ENV_WINDOWS */ + struct cmdline *cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out); void cmdline_set_prompt(struct cmdline *cl, const char *prompt); void cmdline_free(struct cmdline *cl); @@ -40,6 +52,10 @@ void cmdline_printf(const struct cmdline *cl, const char *fmt, ...) int cmdline_in(struct cmdline *cl, const char *buf, int size); int cmdline_write_char(struct rdline *rdl, char c); +__rte_experimental +struct rdline * +cmdline_get_rdline(struct cmdline *cl); + /** * This function is nonblocking equivalent of ``cmdline_interact()``. It polls * *cl* for one character and interpret it. If return value is *RDLINE_EXITED* diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c index b57b30e8f..f120f19dd 100644 --- a/lib/librte_cmdline/cmdline_parse.c +++ b/lib/librte_cmdline/cmdline_parse.c @@ -10,14 +10,11 @@ #include #include #include -#include #include #include -#include "cmdline_rdline.h" -#include "cmdline_parse.h" #include "cmdline.h" #ifdef RTE_LIBRTE_CMDLINE_DEBUG diff --git a/lib/librte_cmdline/cmdline_socket.c b/lib/librte_cmdline/cmdline_socket.c index ecb3d82b6..6c89d2171 100644 --- a/lib/librte_cmdline/cmdline_socket.c +++ b/lib/librte_cmdline/cmdline_socket.c @@ -11,12 +11,9 @@ #include #include #include -#include -#include "cmdline_parse.h" -#include "cmdline_rdline.h" -#include "cmdline_socket.h" #include "cmdline.h" +#include "cmdline_socket.h" struct cmdline * cmdline_file_new(cmdline_parse_ctx_t *ctx, const char *prompt, const char *path) diff --git a/lib/librte_cmdline/rte_cmdline_version.map b/lib/librte_cmdline/rte_cmdline_version.map index a99104457..9df027215 100644 --- a/lib/librte_cmdline/rte_cmdline_version.map +++ b/lib/librte_cmdline/rte_cmdline_version.map @@ -69,3 +69,11 @@ DPDK_21 { local: *; }; + +EXPERIMENTAL { + global: + + cmdline_get_rdline; + + local: *; +}; From patchwork Mon Sep 28 21:50:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79060 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 47FB8A04C0; Mon, 28 Sep 2020 23:52:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8FFA11D6DF; Mon, 28 Sep 2020 23:51:39 +0200 (CEST) Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by dpdk.org (Postfix) with ESMTP id 815071D6BF for ; Mon, 28 Sep 2020 23:51:35 +0200 (CEST) Received: by mail-lj1-f196.google.com with SMTP id u4so2268735ljd.10 for ; Mon, 28 Sep 2020 14:51:35 -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=MCsgmi+B1iYyuYfYEGUH8jUBju8b4BGi/vJmbVVi3P8=; b=PdAdJsABAZjP95ZIT4kHu50yVbd0QCzbIwq6lHA1lGq6cTeu2PZT4h69HmHjSY73Ft KTh1CwvfuHKmI7H9BC1hDI22w1XZmEim29/vQs6tq53E1Ut5xL0jnpegneoXT0MpZrUj 2gUdBEm+Ji2m5EpoxJHH1H983wqmAcBtrCxFak2Gz5iYViW5FrUdYIlG3MMOhlYLW1W4 wv70qtl6Np7EWmOVk0WUlUBHOAbG30f8nov3k82HLuWHwYR1TKL/KGeC3RqBeyzFiQrM eKRJy/KZy/ZqQqvmgkGVcxjiYTvw0bK0fig5+3BxnqcDKKnaypO7rJDnNvQ3y1DTv0fl eICA== 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=MCsgmi+B1iYyuYfYEGUH8jUBju8b4BGi/vJmbVVi3P8=; b=eIPu4w/Oypnk5VAriHbrI7OHGAmY6lzPwjoRJ8HE4Cem2B0PoeEL2/O5KBXnqSAE8s fmmJVaFjNN5IG5Fz+yY97JQ/mlFgM+XX1MH2AUIb5K4QqBm+pAVh9boiQ20jMXuEuHsU Mhnmx9SvueWxnfN5ZF+tRiKA9Wg7erU4lx7tu/GssbHU5BxbcruqDIIBtfZbG4guMuE7 jxvumMEBqHH3jsx4CqeJ/j/ddmJ/aFEPyv5JwoYfkofGPCE3Jxk8yy2pSbpREaAcbF4g aRm+Mo9AKcvHhRaZWi/XClulPPvIlTsO1XUjs7FmbtjBqrc6W3ckr5klHizFQnosR5Wr mdYQ== X-Gm-Message-State: AOAM5302CbW8EVXYtdwIAN93+kiYdzWGQ5rpmpVMzsCqSV1GQwGhCQhd GQFnULxF+P8Rsz1OgAVps9j069kSYmCzs4dv X-Google-Smtp-Source: ABdhPJyo+uyfQJ0exCmP72DQZoPx8swYlHY/Na74BBNt58L2yfyGtJ8kAHhqPTuY03I2v6nuABVawA== X-Received: by 2002:a2e:9089:: with SMTP id l9mr178015ljg.118.1601329893718; Mon, 28 Sep 2020 14:51:33 -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 l11sm2954893lfk.113.2020.09.28.14.51.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:33 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Olivier Matz Date: Tue, 29 Sep 2020 00:50:47 +0300 Message-Id: <20200928215052.23627-3-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 2/7] cmdline: add internal wrappers for terminal handling X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Add functions that set up, save, and restore terminal parameters. Use existing code as Unix implementation. Signed-off-by: Dmitry Kozlyuk --- lib/librte_cmdline/cmdline_os_unix.c | 27 +++++++++++++++++++++++++++ lib/librte_cmdline/cmdline_private.h | 16 ++++++++++++++++ lib/librte_cmdline/cmdline_socket.c | 16 +++++----------- lib/librte_cmdline/cmdline_vt100.c | 1 - lib/librte_cmdline/meson.build | 4 ++++ 5 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 lib/librte_cmdline/cmdline_os_unix.c create mode 100644 lib/librte_cmdline/cmdline_private.h diff --git a/lib/librte_cmdline/cmdline_os_unix.c b/lib/librte_cmdline/cmdline_os_unix.c new file mode 100644 index 000000000..d50eb1c65 --- /dev/null +++ b/lib/librte_cmdline/cmdline_os_unix.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2020 Dmitry Kozlyuk + */ + +#include + +#include "cmdline_private.h" + +void +terminal_adjust(struct cmdline *cl) +{ + struct termios term; + + tcgetattr(0, &cl->oldterm); + + memcpy(&term, &cl->oldterm, sizeof(term)); + term.c_lflag &= ~(ICANON | ECHO | ISIG); + tcsetattr(0, TCSANOW, &term); + + setbuf(stdin, NULL); +} + +void +terminal_restore(const struct cmdline *cl) +{ + tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm); +} diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h new file mode 100644 index 000000000..50326e8a4 --- /dev/null +++ b/lib/librte_cmdline/cmdline_private.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2020 Dmitry Kozlyuk + */ + +#ifndef _CMDLINE_PRIVATE_H_ +#define _CMDLINE_PRIVATE_H_ + +#include + +/* Disable buffering and echoing, save previous settings to oldterm. */ +void terminal_adjust(struct cmdline *cl); + +/* Restore terminal settings form oldterm. */ +void terminal_restore(const struct cmdline *cl); + +#endif diff --git a/lib/librte_cmdline/cmdline_socket.c b/lib/librte_cmdline/cmdline_socket.c index 6c89d2171..998e8ade2 100644 --- a/lib/librte_cmdline/cmdline_socket.c +++ b/lib/librte_cmdline/cmdline_socket.c @@ -13,6 +13,7 @@ #include #include "cmdline.h" +#include "cmdline_private.h" #include "cmdline_socket.h" struct cmdline * @@ -36,18 +37,11 @@ struct cmdline * cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt) { struct cmdline *cl; - struct termios oldterm, term; - - tcgetattr(0, &oldterm); - memcpy(&term, &oldterm, sizeof(term)); - term.c_lflag &= ~(ICANON | ECHO | ISIG); - tcsetattr(0, TCSANOW, &term); - setbuf(stdin, NULL); cl = cmdline_new(ctx, prompt, 0, 1); - if (cl) - memcpy(&cl->oldterm, &oldterm, sizeof(term)); + if (cl != NULL) + terminal_adjust(cl); return cl; } @@ -55,8 +49,8 @@ cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt) void cmdline_stdin_exit(struct cmdline *cl) { - if (!cl) + if (cl == NULL) return; - tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm); + terminal_restore(cl); } diff --git a/lib/librte_cmdline/cmdline_vt100.c b/lib/librte_cmdline/cmdline_vt100.c index 662fc7345..bb968dd5f 100644 --- a/lib/librte_cmdline/cmdline_vt100.c +++ b/lib/librte_cmdline/cmdline_vt100.c @@ -10,7 +10,6 @@ #include #include #include -#include #include "cmdline_vt100.h" diff --git a/lib/librte_cmdline/meson.build b/lib/librte_cmdline/meson.build index 7fc54ff1a..5c9e8886d 100644 --- a/lib/librte_cmdline/meson.build +++ b/lib/librte_cmdline/meson.build @@ -25,4 +25,8 @@ headers = files('cmdline.h', 'cmdline_cirbuf.h', 'cmdline_parse_portlist.h') +if not is_windows + sources += files('cmdline_os_unix.c') +endif + deps += ['net'] From patchwork Mon Sep 28 21:50:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79061 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B7EFFA04C0; Mon, 28 Sep 2020 23:52:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 832281D6F4; Mon, 28 Sep 2020 23:51:41 +0200 (CEST) Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by dpdk.org (Postfix) with ESMTP id B34451D6C1 for ; Mon, 28 Sep 2020 23:51:36 +0200 (CEST) Received: by mail-lj1-f196.google.com with SMTP id k25so2273663ljg.9 for ; Mon, 28 Sep 2020 14:51:36 -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=VmpLHY3OgQ2bT1wqBFsKhBn9NSHfo1iyMAswym/4w9s=; b=N1rq/Gy7hOU9SldYUxuXCv8bmhfQyJbvBTPbeVs3DFwHqIfIGfK11WSMmunFTOVZDq JOXrGu2SpLdr5oVOhSuXlm1Goz0PnM47rCBGak03y0xhktwbtHaHW4lFkkWbI4T8Hmbs npHlTWa69PIDh47g2FSu1Gn+kA+rbB27/4XkQzkx635L1bxhbbNqLncYWTMl9SYJuExM 92iD6l5FXfU/T1w2PclGaczWwaUU1SagoatIbCqzLsy1Kjp1cXB+ARQ5ag8TfbpbmUda Z4sGvEW4BeUeeVYfxsYl1wY/Mvj89o1zjN0eHghHNIx+DBU6CiDX5/dgyYXf7jl7S/4c hW1g== 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=VmpLHY3OgQ2bT1wqBFsKhBn9NSHfo1iyMAswym/4w9s=; b=t5zyp0xREVcqRSiV0DBv8eHep+4m77LWgRIhKxdAOe7K4ZuDEc2g4o+TFnthjNiaui i9LFouEF8AXvJwtleKns3WxbPE16hWbdGu2oYENL2ODG7dv5hhM1G2bisHj6Z0pJUENa SrMe41cr5ijnVOsMoSBxMOHFuFLwgsJ01ScdWg3SizFuzCqU9v/kCgdP4gIBzdDZlK2B exO3yawzp1heKFqpSPgKEkcCr9lyeutQzAyM8QWauAHt5Xnk0lU+mDFUR6oGFsnNWfjH gS1DJUhdaND9IogVigDeTb2w5kR2OEXZ5CUVsN5qCoWEyJFhL0xAbpkgYel0fTVyae0y FDqA== X-Gm-Message-State: AOAM533cAchIQZRgq9pKRaM9GWyfYcraTjZOweEVjKoaJ/Nswpjs/Go+ SKxCBHc5ymWLW24Jy3Ta+Vu1M91Le4A4E/qa X-Google-Smtp-Source: ABdhPJxberBCda1cEq40baSzNlw4b5EYS1afCc0c4HolaQDRaCOlGzGu4j8KARCRcUKYTa+ySMQ8kQ== X-Received: by 2002:a2e:99c1:: with SMTP id l1mr173764ljj.95.1601329894905; Mon, 28 Sep 2020 14:51:34 -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 l11sm2954893lfk.113.2020.09.28.14.51.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:34 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Olivier Matz Date: Tue, 29 Sep 2020 00:50:48 +0300 Message-Id: <20200928215052.23627-4-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 3/7] cmdline: add internal wrappers for character input X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" poll(3) is a purely Unix facility, so it cannot be directly used by common code. read(2) is limited in device support outside of Unix. Create wrapper functions and implement them for Unix. Signed-off-by: Dmitry Kozlyuk --- lib/librte_cmdline/cmdline.c | 14 ++++---------- lib/librte_cmdline/cmdline_os_unix.c | 20 ++++++++++++++++++++ lib/librte_cmdline/cmdline_private.h | 6 ++++++ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 41f50cc56..0b2e1e30b 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -11,13 +11,12 @@ #include #include #include -#include #include #include #include -#include "cmdline.h" +#include "cmdline_private.h" static void cmdline_valid_buffer(struct rdline *rdl, const char *buf, @@ -184,7 +183,6 @@ cmdline_quit(struct cmdline *cl) int cmdline_poll(struct cmdline *cl) { - struct pollfd pfd; int status; ssize_t read_status; char c; @@ -194,16 +192,12 @@ cmdline_poll(struct cmdline *cl) else if (cl->rdl.status == RDLINE_EXITED) return RDLINE_EXITED; - pfd.fd = cl->s_in; - pfd.events = POLLIN; - pfd.revents = 0; - - status = poll(&pfd, 1, 0); + status = cmdline_poll_char(cl); if (status < 0) return status; else if (status > 0) { c = -1; - read_status = read(cl->s_in, &c, 1); + read_status = cmdline_read_char(cl, &c); if (read_status < 0) return read_status; @@ -225,7 +219,7 @@ cmdline_interact(struct cmdline *cl) c = -1; while (1) { - if (read(cl->s_in, &c, 1) <= 0) + if (cmdline_read_char(cl, &c) <= 0) break; if (cmdline_in(cl, &c, 1) < 0) break; diff --git a/lib/librte_cmdline/cmdline_os_unix.c b/lib/librte_cmdline/cmdline_os_unix.c index d50eb1c65..a4916c197 100644 --- a/lib/librte_cmdline/cmdline_os_unix.c +++ b/lib/librte_cmdline/cmdline_os_unix.c @@ -2,7 +2,9 @@ * Copyright (c) 2020 Dmitry Kozlyuk */ +#include #include +#include #include "cmdline_private.h" @@ -25,3 +27,21 @@ terminal_restore(const struct cmdline *cl) { tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm); } + +int +cmdline_poll_char(struct cmdline *cl) +{ + struct pollfd pfd; + + pfd.fd = cl->s_in; + pfd.events = POLLIN; + pfd.revents = 0; + + return poll(&pfd, 1, 0); +} + +ssize_t +cmdline_read_char(struct cmdline *cl, char *c) +{ + return read(cl->s_in, c, 1); +} diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h index 50326e8a4..ac10de4f8 100644 --- a/lib/librte_cmdline/cmdline_private.h +++ b/lib/librte_cmdline/cmdline_private.h @@ -13,4 +13,10 @@ void terminal_adjust(struct cmdline *cl); /* Restore terminal settings form oldterm. */ void terminal_restore(const struct cmdline *cl); +/* Check if a single character can be read from input. */ +int cmdline_poll_char(struct cmdline *cl); + +/* Read one character from input. */ +ssize_t cmdline_read_char(struct cmdline *cl, char *c); + #endif From patchwork Mon Sep 28 21:50:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79062 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9FE03A04C0; Mon, 28 Sep 2020 23:52:52 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 245231BBFD; Mon, 28 Sep 2020 23:51:45 +0200 (CEST) Received: from mail-lf1-f68.google.com (mail-lf1-f68.google.com [209.85.167.68]) by dpdk.org (Postfix) with ESMTP id 7F5021D6BF for ; Mon, 28 Sep 2020 23:51:37 +0200 (CEST) Received: by mail-lf1-f68.google.com with SMTP id w11so3108841lfn.2 for ; Mon, 28 Sep 2020 14:51:37 -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=P0uoi6f92oyKfLz+Ug/C55wcAxwGLUdlQjXwBAS+h1c=; b=aBcWE4xMV2PXl6XjvYNOKdvXTzXZ32FNU70+a/IYpsf6zP8/diPRPRl8yy+COIVu7E u/HV8rhXsNyV+f7K9Z8rT/zxicmBp6kLZGpBdJ/8MBQp/d9qnppdLe2bzdt7GYIq1iMS yRqXa0Eo9FZC5GIC2bmlhsWRy8xX5cjp4CSDx6DDonUPwJGA6efZEhrH8kF6w6kyErKf SFTx3L2nq+baTP/0sB68T3suitq/AwFDI0baqvD0WWfmgZ0Em2zkK6LriOgHyZEXxVww u6/z3yiqCzl2EXtGsSeeoeNjgdz3GXHGZxIiTp8xfJK/O/0ksc12bZJB7IjKzTxf0mcG a0Rw== 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=P0uoi6f92oyKfLz+Ug/C55wcAxwGLUdlQjXwBAS+h1c=; b=HONNTujhFPxO6mtbJGGwfKrtpK7lGdIpo5lfjjD0h5wYU2FhZUusiYdKqKcziusoSW rEos46c3ycPq+C00h7PhfpRAatkgfDfqTvEcNr5YmgyYDX1Na8jMq7FXyEfbBUEAie3j bQEVTsxhTkVIIZ/70PZzlHgnYEGZ7knQrSIjSv1wGNQYUndNFf8iZx40zoP5Gyy6D63o X0cXJyZ0zSy49hah38pcxeXtOHaV9zpDDbzkdYzYlmmzRICPsgoAL3/D6HxMEdq8m0pM e0g8k+pW5PEaC8NZ+5d9HisQ5W9+dEEKLm0gF/u3FZ2+E64LSD0pAIdlkjAfk1ndcPzO Tfpw== X-Gm-Message-State: AOAM530ew+8P0VuolwtZHC0XRGyc2RwfQecQkYlu04iUnhAHP6Lgb8HX RVilYMmHw/wg0yXkWmx93KT2nu2MNo+fz3XI X-Google-Smtp-Source: ABdhPJxb+6iS11wr5J59gJF5q1iUpAOiPyHAvfvCH1zsNKjZ6vGz2UFNIT/23loPn2DWD/5tqapGoQ== X-Received: by 2002:a19:402:: with SMTP id 2mr76520lfe.279.1601329895856; Mon, 28 Sep 2020 14:51:35 -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 l11sm2954893lfk.113.2020.09.28.14.51.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:35 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Olivier Matz Date: Tue, 29 Sep 2020 00:50:49 +0300 Message-Id: <20200928215052.23627-5-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 4/7] cmdline: add internal wrapper for vdprintf X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Add internal wrapper for vdprintf(3) that is only available on Unix. Signed-off-by: Dmitry Kozlyuk --- lib/librte_cmdline/cmdline.c | 2 +- lib/librte_cmdline/cmdline_os_unix.c | 6 ++++++ lib/librte_cmdline/cmdline_private.h | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 0b2e1e30b..49770869b 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -131,7 +131,7 @@ cmdline_printf(const struct cmdline *cl, const char *fmt, ...) if (cl->s_out < 0) return; va_start(ap, fmt); - vdprintf(cl->s_out, fmt, ap); + cmdline_vdprintf(cl->s_out, fmt, ap); va_end(ap); } diff --git a/lib/librte_cmdline/cmdline_os_unix.c b/lib/librte_cmdline/cmdline_os_unix.c index a4916c197..64a945a34 100644 --- a/lib/librte_cmdline/cmdline_os_unix.c +++ b/lib/librte_cmdline/cmdline_os_unix.c @@ -45,3 +45,9 @@ cmdline_read_char(struct cmdline *cl, char *c) { return read(cl->s_in, c, 1); } + +int +cmdline_vdprintf(int fd, const char *format, va_list op) +{ + return vdprintf(fd, format, op); +} diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h index ac10de4f8..4d9ea33f0 100644 --- a/lib/librte_cmdline/cmdline_private.h +++ b/lib/librte_cmdline/cmdline_private.h @@ -5,6 +5,10 @@ #ifndef _CMDLINE_PRIVATE_H_ #define _CMDLINE_PRIVATE_H_ +#include + +#include + #include /* Disable buffering and echoing, save previous settings to oldterm. */ @@ -19,4 +23,8 @@ int cmdline_poll_char(struct cmdline *cl); /* Read one character from input. */ ssize_t cmdline_read_char(struct cmdline *cl, char *c); +/* vdprintf(3) */ +__rte_format_printf(2, 0) +int cmdline_vdprintf(int fd, const char *format, va_list op); + #endif From patchwork Mon Sep 28 21:50:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79063 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 52A8DA04C0; Mon, 28 Sep 2020 23:53:08 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2517C1BED1; Mon, 28 Sep 2020 23:51:47 +0200 (CEST) Received: from mail-lj1-f195.google.com (mail-lj1-f195.google.com [209.85.208.195]) by dpdk.org (Postfix) with ESMTP id 9CD551D6E3 for ; Mon, 28 Sep 2020 23:51:38 +0200 (CEST) Received: by mail-lj1-f195.google.com with SMTP id s205so2281671lja.7 for ; Mon, 28 Sep 2020 14:51:38 -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=kqY2ax0QRVQUWIsVEaWJ0WJgbyhvRR00tqHtVbS6VTk=; b=T0lT5pFDjaTlusR2iXCsBwA25492pjfzDk9TUUyaxLavSHQJcoOoaCtwyxkl9RlJAU gy4bxB48HLHvRAcdDWxazkb79Ug0e3Gn4DK9gMACRoxE/zQYV0CxlK74IJs3kXBsOnFm 6RK7+yqsBeJXBM4gns6Z/GWE4U6YaDRlnWVC+hZyOAmVaQcvkSq/1ie79nR/PJUv2j0u IyfIH+DxHDXvNg+A7E8ZO8gb+8moxgnKoI+LgyCz3U0lBnehvPAFDfYY9IvnJsHn3Woc mYKm1h/ISqDEOHS4ByJ6v2Snd8Tok6hChg3LU06LYHfMvg0mdgmLnlBfxzJtUxHz6928 EQYg== 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=kqY2ax0QRVQUWIsVEaWJ0WJgbyhvRR00tqHtVbS6VTk=; b=FTE1kApl1EXz0dUF6WWTJR+yYO1zXpc4790Twg5NLEbS5Y7YuXgFlkSpyp5JvD4GAV nulAAG88O7aHwEFtzVWKx6bsunu/0r1yQSW/bzKi4ojjmOGIGE9wcaMRtOlsiPy1wC6s 5R4nPeroYH4i1JRRpmVmj9MYyymKcJyAaxGzvDX2O6Aomvl+ncm9WfPsTdBje7OqQ377 kgJ1aRy0JDaC2qWs19j+6qOaDdEI2YjesoAy1GTHl07cmolp33GR5iSS1pFiw8ow3whA Olp2otMdBnd5sRT4iTRtYPXlyeN6/g+mL5fgFWJL9S27Z+e1MRFy8sPsl4CtVUTlP7Qt Mz3Q== X-Gm-Message-State: AOAM532Xjd+98KyofiQfvO8Kc9fRSZD8HQ1HtbmtRzeAD09Eg/2qo+BU 395UAaSMsBwfJcSiGsunSF86KDzyfKcc06Zf X-Google-Smtp-Source: ABdhPJybV0ssUy7FRBjWDWX1Py+bta88T4leEKO/FjkqMT6tem7ScpvdWUl8be0PNwPSdjsj+wOuDw== X-Received: by 2002:a2e:9784:: with SMTP id y4mr172052lji.247.1601329896887; Mon, 28 Sep 2020 14:51:36 -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 l11sm2954893lfk.113.2020.09.28.14.51.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:36 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Tue, 29 Sep 2020 00:50:50 +0300 Message-Id: <20200928215052.23627-6-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 5/7] eal/windows: improve compatibility networking headers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Extend compatibility header system to support librte_cmdline. pthread.h has to include windows.h, which exposes struct in_addr, etc. conflicting with compatibility headers. WIN32_LEAN_AND_MEAN macro is required to disable this behavior. Use rte_windows.h to define WIN32_LEAN_AND_MEAN for pthread library. Signed-off-by: Dmitry Kozlyuk --- lib/librte_eal/windows/include/arpa/inet.h | 30 +++++++++++++++++++++ lib/librte_eal/windows/include/netinet/in.h | 12 +++++++++ lib/librte_eal/windows/include/sys/socket.h | 24 +++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 lib/librte_eal/windows/include/arpa/inet.h create mode 100644 lib/librte_eal/windows/include/sys/socket.h diff --git a/lib/librte_eal/windows/include/arpa/inet.h b/lib/librte_eal/windows/include/arpa/inet.h new file mode 100644 index 000000000..96b698438 --- /dev/null +++ b/lib/librte_eal/windows/include/arpa/inet.h @@ -0,0 +1,30 @@ +/* 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 index 534a2d99a..be1469ec1 100644 --- a/lib/librte_eal/windows/include/netinet/in.h +++ b/lib/librte_eal/windows/include/netinet/in.h @@ -5,6 +5,8 @@ #ifndef _IN_H_ #define _IN_H_ +#include + #define IPPROTO_IP 0 #define IPPROTO_HOPOPTS 0 #define IPPROTO_ICMP 1 @@ -22,4 +24,14 @@ #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/sys/socket.h b/lib/librte_eal/windows/include/sys/socket.h new file mode 100644 index 000000000..9536cf8e6 --- /dev/null +++ b/lib/librte_eal/windows/include/sys/socket.h @@ -0,0 +1,24 @@ +/* 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_ */ From patchwork Mon Sep 28 21:50:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79064 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D7773A04C0; Mon, 28 Sep 2020 23:53:29 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F10B11C125; Mon, 28 Sep 2020 23:51:48 +0200 (CEST) Received: from mail-lf1-f65.google.com (mail-lf1-f65.google.com [209.85.167.65]) by dpdk.org (Postfix) with ESMTP id 1C94F1D6F0 for ; Mon, 28 Sep 2020 23:51:39 +0200 (CEST) Received: by mail-lf1-f65.google.com with SMTP id x69so3095233lff.3 for ; Mon, 28 Sep 2020 14:51: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=gJsvihyRYlQxFWK5X665Nth8+B0RVz6AwTC0bcoTQBw=; b=EmIi5WkKTGF2tX9Felh/wfZEBotCQvuisMWxHQHf7Qh0xYgZQY3NOBUdQcDHjG8AiK RDq8OFR/JA+/nzHl2L7HGVFMYWqKPnVQkz15glCdJOZdIzeMM4wkW04euynsHgab2IF+ I9vTAMlx6coNyDxZ7mh2KNUUYpwzL1By0z0B2jHvmMqfmhDdhxrCg0wOuI3+vy6Q5xh+ qvzHF8Sq+7q1R85xTs75e/CHKF0hG/ZcQAqr0V611djQ6qy3w3MnQrc37MDx4yTx82ct Ynhncw0IQ0qk9lr0Jj2t53XU6SzE3bq7P5vWEn8bCFHp2qvmvlf5WKi3BM2/S8BaEKOE NiEw== 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=gJsvihyRYlQxFWK5X665Nth8+B0RVz6AwTC0bcoTQBw=; b=e97qIkOh2YgRJ4SxdxttvkV1ZBrJkkGqMhAElsSXhC5oFr59udA9bbmaHcKgT6IxGi KE2xy0aAXz90nnXjrHUXxfpaFSzx/4Bct5CPFbLYg90pNH2oNnJFpvgUEZChg/LeKX6l 84oD/gFwd65WHhX08kGn2GlSoQ5He9/kG5Q2HxEKC0QexO41S8KmMd9j01WWQeooyuZj cPaQT+8A8OhU6+T+ymfq/E0ZjCuSHUMeNTCO6ea7TQLjNRs7nLmPZTQpyfcv2ZA1hSvQ y5ri+11wFOva55+wlMOSa/jHHMLJzHT7ScF1uidFjxXOQ5oYJ367VjHH7x5sRmQLhO3E 8deg== X-Gm-Message-State: AOAM530qqrWoj3oqzktX85XnTmLRk72fzXIUAlq8DV2BHJuIQekU/Yqq I9aU0V3LvI2jroXSe7GqhP3S2OWumOGRc2pW X-Google-Smtp-Source: ABdhPJw2BlORms+iGITCOgEfZPbMmSNKYWZrVXX91lZLWPbkcnoM2VpUoaCnrQ8hWIOhRrdBhUO3Mw== X-Received: by 2002:ac2:4d05:: with SMTP id r5mr72433lfi.267.1601329898221; Mon, 28 Sep 2020 14:51: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 l11sm2954893lfk.113.2020.09.28.14.51.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:37 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Bruce Richardson , Olivier Matz Date: Tue, 29 Sep 2020 00:50:51 +0300 Message-Id: <20200928215052.23627-7-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 6/7] cmdline: support Windows X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Implement terminal handling, input polling, and vdprintf() for Windows. Because Windows I/O model differs fundamentally from Unix and there is no concept of character device, polling is simulated depending on the underlying input device. Supporting non-terminal input is useful for automated testing. Windows emulation of VT100 uses "ESC [ E" for newline instead of standard "ESC E", so add a workaround. Signed-off-by: Dmitry Kozlyuk --- config/meson.build | 2 + lib/librte_cmdline/cmdline.c | 5 + lib/librte_cmdline/cmdline_os_windows.c | 207 ++++++++++++++++++++++++ lib/librte_cmdline/cmdline_parse.c | 2 +- lib/librte_cmdline/cmdline_private.h | 23 +++ lib/librte_cmdline/cmdline_socket.c | 4 + lib/librte_cmdline/cmdline_vt100.h | 4 + lib/librte_cmdline/meson.build | 4 +- lib/meson.build | 1 + 9 files changed, 250 insertions(+), 2 deletions(-) create mode 100644 lib/librte_cmdline/cmdline_os_windows.c diff --git a/config/meson.build b/config/meson.build index 69f2aeb60..bd382bd7b 100644 --- a/config/meson.build +++ b/config/meson.build @@ -276,6 +276,8 @@ if is_windows add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c') endif + add_project_link_arguments('-lws2_32', language: 'c') + # Contrary to docs, VirtualAlloc2() is exported by mincore.lib # in Windows SDK, while MinGW exports it by advapi32.a. if is_ms_linker diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 49770869b..dd6229b56 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -13,11 +13,16 @@ #include #include #include +#include #include #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 new file mode 100644 index 000000000..e9585c9ee --- /dev/null +++ b/lib/librte_cmdline/cmdline_os_windows.c @@ -0,0 +1,207 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2020 Dmitry Kozlyuk + */ + +#include + +#include + +#include "cmdline_private.h" + +/* Missing from some MinGW-w64 distributions. */ +#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#endif + +#ifndef ENABLE_VIRTUAL_TERMINAL_INPUT +#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 +#endif + +void +terminal_adjust(struct cmdline *cl) +{ + HANDLE handle; + DWORD mode; + + ZeroMemory(&cl->oldterm, sizeof(cl->oldterm)); + + /* Detect console input, set it up and make it emulate VT100. */ + handle = GetStdHandle(STD_INPUT_HANDLE); + if (GetConsoleMode(handle, &mode)) { + cl->oldterm.is_console_input = 1; + cl->oldterm.input_mode = mode; + + mode &= ~( + ENABLE_LINE_INPUT | /* no line buffering */ + ENABLE_ECHO_INPUT | /* no echo */ + ENABLE_PROCESSED_INPUT | /* pass Ctrl+C to program */ + ENABLE_MOUSE_INPUT | /* no mouse events */ + ENABLE_WINDOW_INPUT); /* no window resize events */ + mode |= ENABLE_VIRTUAL_TERMINAL_INPUT; + SetConsoleMode(handle, mode); + } + + /* Detect console output and make it emulate VT100. */ + handle = GetStdHandle(STD_OUTPUT_HANDLE); + if (GetConsoleMode(handle, &mode)) { + cl->oldterm.is_console_output = 1; + cl->oldterm.output_mode = mode; + + mode &= ~ENABLE_WRAP_AT_EOL_OUTPUT; + mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + SetConsoleMode(handle, mode); + } +} + +void +terminal_restore(const struct cmdline *cl) +{ + if (cl->oldterm.is_console_input) { + HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); + SetConsoleMode(handle, cl->oldterm.input_mode); + } + + if (cl->oldterm.is_console_output) { + HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleMode(handle, cl->oldterm.output_mode); + } +} + +static int +cmdline_is_key_down(const INPUT_RECORD *record) +{ + return (record->EventType == KEY_EVENT) && + record->Event.KeyEvent.bKeyDown; +} + +static int +cmdline_poll_char_console(HANDLE handle) +{ + INPUT_RECORD record; + DWORD events; + + if (!PeekConsoleInput(handle, &record, 1, &events)) { + /* Simulate poll(3) behavior on EOF. */ + return (GetLastError() == ERROR_HANDLE_EOF) ? 1 : -1; + } + + if ((events == 0) || !cmdline_is_key_down(&record)) + return 0; + + return 1; +} + +static int +cmdline_poll_char_file(struct cmdline *cl, HANDLE handle) +{ + DWORD type = GetFileType(handle); + + /* Since console is handled by cmdline_poll_char_console(), + * this is either a serial port or input handle had been replaced. + */ + if (type == FILE_TYPE_CHAR) + return cmdline_poll_char_console(handle); + + /* PeekNamedPipe() can handle all pipes and also sockets. */ + if (type == FILE_TYPE_PIPE) { + DWORD bytes_avail; + if (!PeekNamedPipe(handle, NULL, 0, NULL, &bytes_avail, NULL)) + return (GetLastError() == ERROR_BROKEN_PIPE) ? 1 : -1; + return bytes_avail ? 1 : 0; + } + + /* There is no straightforward way to peek a file in Windows + * I/O model. Read the byte, if it is not the end of file, + * buffer it for subsequent read. This will not work with + * a file being appended and probably some other edge cases. + */ + if (type == FILE_TYPE_DISK) { + char c; + int ret; + + ret = _read(cl->s_in, &c, sizeof(c)); + if (ret == 1) { + cl->repeat_count = 1; + cl->repeated_char = c; + } + return ret; + } + + /* GetFileType() failed or file of unknown type, + * which we do not know how to peek anyway. + */ + return -1; +} + +int +cmdline_poll_char(struct cmdline *cl) +{ + HANDLE handle = (HANDLE)_get_osfhandle(cl->s_in); + return cl->oldterm.is_console_input ? + cmdline_poll_char_console(handle) : + cmdline_poll_char_file(cl, handle); +} + +ssize_t +cmdline_read_char(struct cmdline *cl, char *c) +{ + HANDLE handle; + INPUT_RECORD record; + KEY_EVENT_RECORD *key; + DWORD events; + + if (!cl->oldterm.is_console_input) + return _read(cl->s_in, c, 1); + + /* Return repeated strokes from previous event. */ + if (cl->repeat_count > 0) { + *c = cl->repeated_char; + cl->repeat_count--; + return 1; + } + + handle = (HANDLE)_get_osfhandle(cl->s_in); + key = &record.Event.KeyEvent; + do { + if (!ReadConsoleInput(handle, &record, 1, &events)) { + if (GetLastError() == ERROR_HANDLE_EOF) { + *c = EOF; + return 0; + } + return -1; + } + } while (!cmdline_is_key_down(&record)); + + *c = key->uChar.AsciiChar; + + /* Save repeated strokes from a single event. */ + if (key->wRepeatCount > 1) { + cl->repeated_char = *c; + cl->repeat_count = key->wRepeatCount - 1; + } + + return 1; +} + +int +cmdline_vdprintf(int fd, const char *format, va_list op) +{ + int copy, ret; + FILE *file; + + copy = _dup(fd); + if (copy < 0) + return -1; + + file = _fdopen(copy, "a"); + if (file == NULL) { + _close(copy); + return -1; + } + + ret = vfprintf(file, format, op); + + fclose(file); /* also closes copy */ + + return ret; +} diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c index f120f19dd..fe366841c 100644 --- a/lib/librte_cmdline/cmdline_parse.c +++ b/lib/librte_cmdline/cmdline_parse.c @@ -15,7 +15,7 @@ #include -#include "cmdline.h" +#include "cmdline_private.h" #ifdef RTE_LIBRTE_CMDLINE_DEBUG #define debug_printf printf diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/librte_cmdline/cmdline_private.h index 4d9ea33f0..a8a6ee9e6 100644 --- a/lib/librte_cmdline/cmdline_private.h +++ b/lib/librte_cmdline/cmdline_private.h @@ -8,9 +8,32 @@ #include #include +#ifdef RTE_EXEC_ENV_WINDOWS +#include +#endif #include +#ifdef RTE_EXEC_ENV_WINDOWS +struct terminal { + DWORD input_mode; + DWORD output_mode; + int is_console_input; + int is_console_output; +}; + +struct cmdline { + int s_in; + int s_out; + cmdline_parse_ctx_t *ctx; + struct rdline rdl; + char prompt[RDLINE_PROMPT_SIZE]; + struct terminal oldterm; + char repeated_char; + WORD repeat_count; +}; +#endif + /* Disable buffering and echoing, save previous settings to oldterm. */ void terminal_adjust(struct cmdline *cl); diff --git a/lib/librte_cmdline/cmdline_socket.c b/lib/librte_cmdline/cmdline_socket.c index 998e8ade2..0fe149700 100644 --- a/lib/librte_cmdline/cmdline_socket.c +++ b/lib/librte_cmdline/cmdline_socket.c @@ -16,6 +16,10 @@ #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_cmdline/cmdline_vt100.h b/lib/librte_cmdline/cmdline_vt100.h index e33e67ed8..be9ae8e1c 100644 --- a/lib/librte_cmdline/cmdline_vt100.h +++ b/lib/librte_cmdline/cmdline_vt100.h @@ -31,7 +31,11 @@ extern "C" { #define vt100_multi_right "\033\133%uC" #define vt100_multi_left "\033\133%uD" #define vt100_suppr "\033\133\063\176" +#ifndef RTE_EXEC_ENV_WINDOWS #define vt100_home "\033M\033E" +#else +#define vt100_home "\033M\033[E" +#endif #define vt100_word_left "\033\142" #define vt100_word_right "\033\146" diff --git a/lib/librte_cmdline/meson.build b/lib/librte_cmdline/meson.build index 5c9e8886d..5009b3354 100644 --- a/lib/librte_cmdline/meson.build +++ b/lib/librte_cmdline/meson.build @@ -25,7 +25,9 @@ headers = files('cmdline.h', 'cmdline_cirbuf.h', 'cmdline_parse_portlist.h') -if not is_windows +if is_windows + sources += files('cmdline_os_windows.c') +else sources += files('cmdline_os_unix.c') endif diff --git a/lib/meson.build b/lib/meson.build index d8b358e5f..ed66590a7 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -42,6 +42,7 @@ if is_windows 'eal', 'ring', 'mempool', 'mbuf', 'net', 'meter', 'ethdev', 'pci', + 'cmdline', ] # only supported libraries for windows endif From patchwork Mon Sep 28 21:50:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 79065 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 44EE1A04C0; Mon, 28 Sep 2020 23:53:45 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BFD8E1C238; Mon, 28 Sep 2020 23:51:50 +0200 (CEST) Received: from mail-lf1-f66.google.com (mail-lf1-f66.google.com [209.85.167.66]) by dpdk.org (Postfix) with ESMTP id DD2591D6F8 for ; Mon, 28 Sep 2020 23:51:40 +0200 (CEST) Received: by mail-lf1-f66.google.com with SMTP id q8so3077871lfb.6 for ; Mon, 28 Sep 2020 14:51:40 -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=gVHh4e1rv7kkUti5IJKW3G9YA0LjtnYjqK4i/gxn2hE=; b=B6216Q+jKIyPERF7PlqVv1U1SN3cnwzGCr0faiKQ4FobD2cKnzpu9OWFJOGxPF2MRn QQVFZ34lDgv6Ow2whvBdonVX5rvuevEdAwZ0fg65Sohqu/1aYmNZPL9kFGaeil2GmSUA fMDEf9oqIBdVAx8xFiRPezLe8kUCdfPKQQa7SzvYkDdYIpgQD9/mxisbUJg0Hd/Ufwqj jsww8PDW9He/c0deqZCVpmeKpbUZ95qvO9NycNuYnabozPp/Rrx3F3NjjL+VyuGmOEjv 9VwtYSFUGP7Fp9upz+iOuXS1tjogsLay3UDjU75PqPgD4eIOLr43VZ+h3UqHchaBfKPF xAcg== 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=gVHh4e1rv7kkUti5IJKW3G9YA0LjtnYjqK4i/gxn2hE=; b=dN4ezYITxImvRcc94Gd9ni3+cpbAztzWRIydaQBriY2iR+pNggtDsBTkqx7YTH1e9Y z8VYuc1OOyUgazMJOde0jqt3DJ1IyNw2gBZoj1B5k6hu8gAaoHX2WVQdwW6fhRSqC7Kj d4rk1ZkzCnf3yEx145Au345lp4uu9vlGn90DU/9Tar/i2+XUoonZK3coeQmVridDiMjL SkQ/PtKiyA91sfuNvl7EPb6tEMGmaoxrOoF11wNf5IlxXLB1TvrL/weMS4Qj/D9LrGYM p2d0FWSJy9eXeZHbzJsclldZeSsYROV0pgjhuC+B0+MWHm5UJ/X8XZDs7m1NDrePapaI tYqQ== X-Gm-Message-State: AOAM530sSFhV+P93nw72bXwlabKLIefMOVTaVbzKie5eMp6UHnMb8ihx MjAxnUS1GWvhLqglwKxWGwwPRyVSnh9vVqjv X-Google-Smtp-Source: ABdhPJzb6IawRLlS5wcVzSj2GggFjr+eaKJYYEnqbEY7DPMRsm4o4uCMQ47/KlpdXUFvTj6TOB9X4Q== X-Received: by 2002:a19:7f47:: with SMTP id a68mr88690lfd.264.1601329899300; Mon, 28 Sep 2020 14:51: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 l11sm2954893lfk.113.2020.09.28.14.51.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Sep 2020 14:51:38 -0700 (PDT) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: "Kinsella, Ray" , Khoa To , Stephen Hemminger , Ferruh Yigit , Dmitry Kozlyuk , Olivier Matz Date: Tue, 29 Sep 2020 00:50:52 +0300 Message-Id: <20200928215052.23627-8-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200928215052.23627-1-dmitry.kozliuk@gmail.com> References: <20200730210652.14568-1-dmitry.kozliuk@gmail.com> <20200928215052.23627-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 7/7] examples/cmdline: build on Windows X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Enable cmdline sample application as all dependencies are met. Signed-off-by: Dmitry Kozlyuk --- examples/cmdline/commands.c | 1 - examples/cmdline/main.c | 1 - examples/meson.build | 6 +++--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/examples/cmdline/commands.c b/examples/cmdline/commands.c index 0e2232f03..f43eacfba 100644 --- a/examples/cmdline/commands.c +++ b/examples/cmdline/commands.c @@ -11,7 +11,6 @@ #include #include #include -#include #ifdef RTE_EXEC_ENV_FREEBSD #include #endif diff --git a/examples/cmdline/main.c b/examples/cmdline/main.c index f2f2e5a2f..bb7954245 100644 --- a/examples/cmdline/main.c +++ b/examples/cmdline/main.c @@ -8,7 +8,6 @@ #include #include #include -#include #include #include diff --git a/examples/meson.build b/examples/meson.build index eb13e8210..2b8ebce3b 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -79,9 +79,9 @@ foreach example: examples ext_deps = [execinfo] includes = [include_directories(example)] - deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline'] - if is_windows - deps = ['eal'] # only supported lib on Windows currently + deps = ['eal', 'mempool', 'net', 'mbuf', 'cmdline'] + if not is_windows + deps += ['ethdev'] # not currently supported endif subdir(example)