From patchwork Tue May 8 12:17:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wisam Jaddo X-Patchwork-Id: 39459 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1C61A7EBF; Tue, 8 May 2018 14:17:53 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0044.outbound.protection.outlook.com [104.47.0.44]) by dpdk.org (Postfix) with ESMTP id 5B20F7EB4 for ; Tue, 8 May 2018 14:17:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=G0zyt5n43cmMDC7bEdO1Yfa2aaZ99nX68EH/GKpi9Y0=; b=T9sSHlhzBDh5DaP+T3/yJYRDbJSmUVPu32sjrWih8ASBl/PnEEi/hQB/OQ80DFaDS6u2nknrgU4UARiAauMPi7IbeRkVgke+cuFGLD225iPrOECsvzOTY9Vg6TSYwiRP6jaMBDh12ED1jA83Hb98QktDIr9BbaFrcQ2shSN5mLk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=wisamm@mellanox.com; Received: from mellanox.com (37.142.13.130) by DB6PR05MB3430.eurprd05.prod.outlook.com (2603:10a6:6:1e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Tue, 8 May 2018 12:17:47 +0000 From: Wisam Jaddo To: jingjing.wu@intel.com, wenzhuo.lu@intel.com, thomas@monjalon.net Cc: rasland@mellanox.com, dev@dpdk.org, shahafs@mellanox.com, wisamm@mellanox.com Date: Tue, 8 May 2018 15:17:33 +0300 Message-Id: <1525781853-17243-1-git-send-email-wisamm@mellanox.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: VI1PR0601CA0031.eurprd06.prod.outlook.com (2603:10a6:800:1e::41) To DB6PR05MB3430.eurprd05.prod.outlook.com (2603:10a6:6:1e::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DB6PR05MB3430; X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3430; 3:yKSvyM5bnulWX26rOAwzS9MUn1skuUgcwT+rF1UEZo7q9gJtpAjsKTVRr8t3ixcQFoPYhZtETH/zL/lZQ+cqVgubqo6oZUwDB/u9jAR+TCRj2v5X6IqBmoYetbeO9My9cEBrXLA5egVd7KxbYQCB5a/RzD4c7JL+k0uuma/FYWvQiRIqbfhAf163DQyiNe0dijgTjminwKMHyENduUxfqF2qhS6noTO/5cioDyClrTdykQWRiqpZTOIt3GAEhUuq; 25:DeQJRjh7XSbcUranlaly6lkACUPX7SB5ltsjjdRsThJx+Fg+LxdkPh2SpCcNO/kZ0RWMhGrVNb346U5vJTyax+hEs4TJHV8aDkYVrJ+b4ClPZPizqaFpeFjkE6z1B7QLFnrtjx1+q+eNH2WznkkMOv9n2uHWT6d5gM4oc/zXknGWSBA17dX/4Mx436/4vG2vkgcgKuorDpgIUJ/DtxYQGIMC0GFvvGT+EhwpILSDEVVraTGD4VCDo2qHfmD1iJNGWiXVesMNn8MEmwI5W57gisKOQovY7ESUzNqGyTXDqiwYK2i9Lh8DxcGFAz47/FfvTR/dsPjWY6A/Gtmpjjd1JQ==; 31:UYHpQsFo74Fw9dhRaKOMNYsE01wPObGXfA5ElRdm8w75FeIBpfUV9/uzEC/zo8kSYkyXnDtsEwnqTbXBfZroF+Kirz2Tt/CQ9L4jLkxdZqULyKdYFAOgOPUkTSP+bV5LXya6uaNvwKr6GePwHkIlw84LAJsP2QMfTCAKv/VGwNen+s99Fn2heGuHG+5UOpjvnehLOfbthgKyC4Wf4JXeBQIjASuEQzPnmLY9fGDjBO4= X-MS-TrafficTypeDiagnostic: DB6PR05MB3430: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3430; 20:HBIBwkN9FTbQZBksl4mFckEQlQjPxkVM9mb2/bvEyPRnjmuPf+dmsR1s0EwAwfZbH7+2C1phXNm+GOCvRXYpchhGLWvhdX8CCSE8DazLGy/KWLPQueu4mwrFwtTQ5sROFiGUxteNc8gA3Y+XNsidBJPLYfatYIYgywRiOP+Hqo0I5IfMZmMMk81tIvr0cK9upFxN00Thpgw7GeBYbbn1qaiIASqmU7R1C5BDLZOOjxz2dfgdF2mm9rrGq+w5A1excxzjP3oCRRNrYZT/8015TdCZ9sr2pF9FKCdvyJmesKPa06cx2NwphdxXtqHrPnJ0HDCGi6ShLaQQhUbieOBBh64oxWALDRCf88WZ32sd2gYiPqcaIY/YSq/twWbeqeV3i/DkYd9QmEpB+Pg77ziITW9vYPW3VQd8t3jZb2o1Z3tNSNJR0CnE38ynhoGmZ5hpqUPxb5ZaaZ1dMkcpZRLwSyLWTFb04qNp0OsmoXYWNBgKNMsHUwy2ltK6cx0fjifL; 4:IBrhil5wrRENW724n97FJqO2uuncDa3z4VpF8hKBbhNpBnQ2TMMuaWbcQBjuAQw+wKaNQv9ZuyZIKW+FlKc2qRK+p3bZazC7nUd+4e+nV5+/tOeIarIv6ltq9pHZh56+3P8nFpYmYET4l2Tm4qmzWoZ0ZvXZQq4EMbqVNV50Bd6DNs1m3fCMMC7/lUJzWpgcVi4OXrZT6U/f5gKE3VwZF6p7rV1MuBgiyT4DpFu+EW1kzjedva+oK4AXPRkikVZPc5uRcrmedxOmGGBJgRC3/A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(3002001)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011); SRVR:DB6PR05MB3430; BCL:0; PCL:0; RULEID:; SRVR:DB6PR05MB3430; X-Forefront-PRVS: 0666E15D35 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(376002)(346002)(366004)(396003)(39860400002)(189003)(199004)(26005)(50466002)(25786009)(48376002)(59450400001)(52116002)(68736007)(105586002)(7696005)(51416003)(386003)(476003)(316002)(956004)(486006)(186003)(86362001)(16526019)(16586007)(2616005)(33026002)(3846002)(21086003)(6116002)(478600001)(107886003)(8936002)(81156014)(81166006)(7736002)(5660300001)(69596002)(47776003)(305945005)(66066001)(53936002)(1857600001)(8676002)(97736004)(36756003)(4326008)(6666003)(50226002)(2906002)(55016002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR05MB3430; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR05MB3430; 23:A/cnd05gTVKaw3hFALlNexPnBmrDGQJyf31BoE8z1?= KwptMIN+PSzWOHqEHvB4zH71ImtAHLtmhUnwFZ786Uw/5L7ydKtSiL3Wb7T/BdqHaQTKWBio+SEcaiJyU3AHlASLvzO5hvA1aAkyY5R1JsTVK7EPRaF2bF9iZ8NZ0PPjmscGoeCUyiL4D2U5KyQOnaub+l6UT0ftUybsil4JJuZD50fJBgeLy6U5tNpNw6efFoehrfwcCXNeIvkucn1yYRnGIhW9VeGOysgjct+3eqB3b25yV/JkwXNvRKYgKTzB4PnXsmHkfGhwoEdJxB0ozSpsRz+97bF3saYB7X+UHba382RgUOEoEYGpijfvazpwCWcyTy9PGdSm2XXopAwXnxcv63oQ+36yXwi1wQ3UhBZ2wmy9pxxZtANgpJYSWpkMLwHEkc7gV1tS0w6lQxgOhucFrp4uFwjFUxrfffcOduZkwBqMSyqZwhml+WfmC9xADoCZAIr/wQ3XxAsugZZep6WPPWbMuyhZ/kQV9CqbDzEw3f8/hzjV1yeSLU3g4yagnIuBzOwRiWcy7MlMD2m87YTGwOeYn3bMeNEe4f+kkbA6FpVUmaqdCCPZ3yNlS+ghc7NXdRLoH3FbfZ5AuTxx+uDVc4koEfmrnXbDjZPW11D/oTXXENggfVrDpfj6/itgU8rkH8coiMQm8eYiUDuqlqaHZTrYB0O9GVMZVbOc1K34YNgFz+iXAB1ASZnju+RgQlQCKoN1o0fTrTgUv9jmXsKxLoDcenGZ/NRVjEdsgwZpp/dsiMApWjsdYpxJmWsCu3I6YJ9xiydB0PTwsVceCRMpMN20udK7v69wXqItNC4S1tf+V0Za9Wn17Z77xiihCDfFoS2AOgfPKReUHNYn6bJ3/+6yPyfy5tAMMuRrKvs3vE2iHbBVja4HQqLIlgPcbaaANJZxGaqJCEwx0vkWrT3qztPVFWxv7siPJi4xgp4UDrs+J5QqOG7xW/AnmIAdfhbLz5/Mao0ZoXfjuxd4Sdu+vFVYZcMSUe+4KhNw0aljbtjScTT4ED6cp+ZUrv2nf6JyotZQWaunFBsX5V58ybr/gWGZjwhudrK1Ap2ET6shxQuKj0vDJ2uoExBRnF91PUz0GYp0P6lYtrqHX4XlKdMSH02hQpNBcAa6jT3yEPjVSoUxV67LgkuivqcVzgtXQGcOOGO2DdL0o9Tsh1ZXromjYy3971SYjplYLbTU0GP2w== X-Microsoft-Antispam-Message-Info: sIrIt7/IGmall1Dw8vYIMhGTJftHm6irwRBhzkIw0EnfrIXI+/NX4mrelzGSbi1lCgWThjGL6AjUVgWQ7+FC/228OWy+aSz95XS9fGqLIGRfTSJt/nlszxV9isPcKNuxNqlm3fji7+/9n1GCJ+ac5c6qWZUcDpjL/rfkSTYkbfFvdRZlMlxdI8KOo+EJbgBp X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3430; 6:nWBTtyIUxvfT+NMD7SwEcdXymBw/r9yZje1r9DGYSyY51FhGTMtKyb6SPSE2uCATV0C45hEOcgJw3zoQudJ/PEJ+pptnvqVnfssFyI+9FAn5XwFJTMLIsKaUFB+CStit9APv5o9ic0nUlpNuhs0RKL3MY3KJHFusv09QErLkHryqbo0vpQkQDX7wHlDnV2+Q/bjXWDwql4zWKNrLQh1jEdMsD43AvZPHfK6McWHGbxoO502Jc5FTRNDWyLCksh2yymuRenQHS9RL6AKU4Ze1dEq3TVMiqd0K6I5OUCZ0Ts79Ee4F9puvN8UZGYheVsAKoCKqMvHF7ZqSYBJsTP2aCSH4RuXjsQ7cQcZh/Qgl9TpCVPa7aLArQChrMubVYPoJY5Rap6qAMzlk95ceyr+mU7RH8x6tatehy5Gt5IzV7TAAQJVy5H7IS5MhLFTVPNpksEU70NHUCHTb/aF/U45KlA==; 5:VosoIkGuLT7r1QNdbRIpehDzNlCz5rfnWKqCufSfpX0UOs0G87wQ7TAqTYUYRJdGvRW7zjtO+2zepnv9CocJKUws0yKuPkeaT4MpNCQHtkqTEL8sIRoIbYUG2hVM/iS6yQxBlCsH6BRTITjoR9Y7cjs/KeOhSbNd+KN1YSjE5lk=; 24:IApuFiiANEP11WZ/wNfmDjz5CTY9VMDPvYU3XbEf+bkifqMgP8Vuu1e+7mZPlKbr1hcZ51U0Rc8klbjPnM5XVt6NnFmqmYAXWUz6lpYBEbE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3430; 7:Q3aJF3xkCpfh/ztRHVc82Trj2Ctw1ERuQedp1Yaiece7vzAeUdPnPn4oS8o5gJuq/4uDCuFLXQ5yORbNSyW2cfnlYBHJjm/TQlK9pcg5Y3zi3hJINWYd6RugXwVvc0lmPYG+fUMJEadhGBV0mdVqqT7pAI7cR0kpe4eTyIEV7dGs+ZZSph3xOdIXDdkzG0DfXL8nwMnR7qQ7IvwPaRGVmkFeGu9GT/1xy6ZtwVh4Cdqsx0u97cP3HR0cGDyjDuAF X-MS-Office365-Filtering-Correlation-Id: a767c623-9cfd-4e4a-f62d-08d5b4ddb6a1 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2018 12:17:47.5133 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a767c623-9cfd-4e4a-f62d-08d5b4ddb6a1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR05MB3430 Subject: [dpdk-dev] [PATCH] app/testpmd: add custom topology command 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" Set custom topology for forwading packets by making the given two ports as pair, in custom topology the active ports will be the defiend in custum-topo only. This command will be useful in testing, when special topology is needed. Signed-off-by: Wisam Jaddo --- app/test-pmd/cmdline.c | 49 +++++++++++++++++++++++++++++ app/test-pmd/config.c | 38 ++++++++++++++++++++++ app/test-pmd/testpmd.c | 1 + app/test-pmd/testpmd.h | 7 ++++- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 8 +++++ 5 files changed, 102 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 9615670..9d48048 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -466,6 +466,9 @@ static void cmd_help_long_parsed(void *parsed_result, "set eth-peer (port_id) (peer_addr)\n" " set the peer address for certain port.\n\n" + "set custom-topo (port_id_1) (port_id_2)\n" + " set custom topo.\n\n" + "set port (port_id) uta (mac_address|all) (on|off)\n" " Add/Remove a or all unicast hash filter(s)" "from port X.\n\n" @@ -7649,6 +7652,51 @@ cmdline_parse_inst_t cmd_set_fwd_eth_peer = { }, }; +/* *** SET CUSTOM TOPO FOR CERTAIN PORT *** */ +struct cmd_custom_topo_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t custom_topo; + portid_t port_id_1; + portid_t port_id_2; +}; + +static void cmd_set_custom_topo_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_custom_topo_result *res = parsed_result; + + if (test_done == 0) { + printf("Please stop forwarding first\n"); + return; + } + if (!strcmp(res->custom_topo, "custom-topo")) { + set_custom_topo(res->port_id_1, res->port_id_2); + fwd_config_setup(); + } +} +cmdline_parse_token_string_t cmd_set_custom_topo_set = + TOKEN_STRING_INITIALIZER(struct cmd_custom_topo_result, set, "set"); +cmdline_parse_token_string_t cmd_set_custom_topo_custom_topo = + TOKEN_STRING_INITIALIZER(struct cmd_custom_topo_result, custom_topo, "custom-topo"); +cmdline_parse_token_num_t cmd_set_custom_topo_port_id_1 = + TOKEN_NUM_INITIALIZER(struct cmd_custom_topo_result, port_id_1, UINT16); +cmdline_parse_token_num_t cmd_set_custom_topo_port_id_2 = + TOKEN_NUM_INITIALIZER(struct cmd_custom_topo_result, port_id_2, UINT16); + +cmdline_parse_inst_t cmd_set_custom_topo = { + .f = cmd_set_custom_topo_parsed, + .data = NULL, + .help_str = "set custom-topo (port_id_1) (port_id_2)", + .tokens = { + (void *)&cmd_set_custom_topo_set, + (void *)&cmd_set_custom_topo_custom_topo, + (void *)&cmd_set_custom_topo_port_id_1, + (void *)&cmd_set_custom_topo_port_id_2, + NULL, + }, +}; + /* *** CONFIGURE QUEUE STATS COUNTER MAPPINGS *** */ struct cmd_set_qmap_result { cmdline_fixed_string_t set; @@ -16540,6 +16588,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_stop, (cmdline_parse_inst_t *)&cmd_mac_addr, (cmdline_parse_inst_t *)&cmd_set_fwd_eth_peer, + (cmdline_parse_inst_t *)&cmd_set_custom_topo, (cmdline_parse_inst_t *)&cmd_set_qmap, (cmdline_parse_inst_t *)&cmd_set_xstats_hide_zero, (cmdline_parse_inst_t *)&cmd_operate_port, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 16fc481..c90e879 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -2045,6 +2045,9 @@ setup_fwd_config_of_each_lcore(struct fwd_config *cfg) static portid_t fwd_topology_tx_port_get(portid_t rxp) { + if (fwd_ports[rxp] == rxp) + return fwd_streams[rxp]->tx_port; + static int warning_once = 1; RTE_ASSERT(rxp < cur_fwd_config.nb_fwd_ports); @@ -2378,6 +2381,41 @@ set_fwd_eth_peer(portid_t port_id, char *peer_addr) new_peer_addr[c]; } +static void +print_ports_range(void) +{ + portid_t pid; + printf("Valid port range is ["); + RTE_ETH_FOREACH_DEV(pid) + printf(", %d", pid); + printf("]\n"); +} + +void +set_custom_topo(portid_t port_id_1, portid_t port_id_2) +{ + unsigned int portlist[RTE_MAX_ETHPORTS]; + unsigned int i; + unsigned int nb_pt = 0; + if (port_id_is_invalid(port_id_1, ENABLED_WARN)) { + print_ports_range(); + return; + } + if (port_id_is_invalid(port_id_2, ENABLED_WARN)) { + print_ports_range(); + return; + } + fwd_streams[port_id_1]->tx_port = port_id_2; + fwd_streams[port_id_2]->tx_port = port_id_1; + fwd_ports[port_id_1] = port_id_1; + fwd_ports[port_id_2] = port_id_2; + + for (i = 0; i < RTE_MAX_ETHPORTS; i++) + if (fwd_ports[i] == i) + portlist[nb_pt++] = i; + set_fwd_ports_list(portlist, nb_pt); +} + int set_fwd_lcores_list(unsigned int *lcorelist, unsigned int nb_lc) { diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index db23f23..7e51817 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2590,6 +2590,7 @@ main(int argc, char** argv) int diag; portid_t port_id; int ret; + fwd_ports[0] = 1; signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 1af87b8..510023b 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -363,6 +363,11 @@ extern uint8_t txring_numa[RTE_MAX_ETHPORTS]; extern uint8_t socket_num; /* + * Store the custom topo. + */ +portid_t fwd_ports[RTE_MAX_ETHPORTS]; + +/* * Configuration of logical cores: * nb_fwd_lcores <= nb_cfg_lcores <= nb_lcores */ @@ -598,7 +603,7 @@ void reconfig(portid_t new_port_id, unsigned socket_id); int init_fwd_streams(void); void set_fwd_eth_peer(portid_t port_id, char *peer_addr); - +void set_custom_topo(portid_t port_id_1, portid_t port_id_2); void port_mtu_set(portid_t port_id, uint16_t mtu); void port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_pos); void port_reg_bit_set(portid_t port_id, uint32_t reg_off, uint8_t bit_pos, diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 013a405..5edf210 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1090,6 +1090,14 @@ Set the forwarding peer address for certain port:: This is equivalent to the ``--eth-peer`` command-line option. +set custom-topo +~~~~~~~~~~~~~~ + +Set custom topology for forwading packets by making the given two ports as pair. +In custom topology the active ports will be the defiend in custum-topo only:: + + testpmd> set custom-topo (port_id_1) (port_id_2) + set port-uta ~~~~~~~~~~~~