From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0086.outbound.protection.outlook.com [104.47.32.86]) by dpdk.org (Postfix) with ESMTP id EC3852BAE for ; Thu, 20 Apr 2017 09:18:22 +0200 (CEST) Received: from BN3PR03CA0115.namprd03.prod.outlook.com (10.174.66.33) by BY1PR0301MB1189.namprd03.prod.outlook.com (10.160.195.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.10; Thu, 20 Apr 2017 07:18:21 +0000 Received: from BN1AFFO11FD005.protection.gbl (2a01:111:f400:7c10::102) by BN3PR03CA0115.outlook.office365.com (2603:10b6:400:4::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.10 via Frontend Transport; Thu, 20 Apr 2017 07:18:21 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD005.mail.protection.outlook.com (10.58.52.65) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1019.14 via Frontend Transport; Thu, 20 Apr 2017 07:18:20 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v3K7IImG027932; Thu, 20 Apr 2017 00:18:18 -0700 From: Ashish Jain To: , Date: Thu, 20 Apr 2017 12:48:08 +0530 Message-ID: <1492672688-3571-1-git-send-email-ashish.jain@nxp.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131371463008133057; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39840400002)(39400400002)(39410400002)(39850400002)(39860400002)(39380400002)(39450400003)(2980300002)(1110001)(1109001)(3190300001)(339900001)(199003)(189002)(9170700003)(50466002)(48376002)(38730400002)(8676002)(53936002)(33646002)(5660300001)(47776003)(305945005)(81166006)(85426001)(189998001)(77096006)(356003)(50986999)(36756003)(5003940100001)(8936002)(2906002)(50226002)(6666003)(86362001)(104016004)(106466001)(105606002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0301MB1189; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD005; 1:roRjna+5YzOA36IceComaYplMy+j6BPpvHOJNi9ddt3E7m+WVic/yeriTraNLP8T0sIp9JXDMTAq4cdRk80HIiV6CqTCkjpCh1patsvuURPh6uWB9ebQIXQyjoRApWBsn2z23JuzMXLuBKwblPoIFNH+1YvMAkyTViSFUuL2iNjyj9K4Za8lmhlm5++YhyEIcG74lDqpY19e88j/eGh1Yc+uV3Fl/MEukdPrTszUEjIsxggORuR0TGEIRdhflFbLIBVWvF5wz0VzpJunMBGq5h+DC1fucxeo67bYb0RL+Rhl/PU7nmHVm9lYC+G4JPhFB4xr06Bxj64VK+Yx+KPIRS8bUFKgPQw26nc3bbqTzoJOq8QdB3B+00hQRCW8SwF1ofhEIgXyNbTEFa0vOHn0JFvTAojHbqrPVo66Jjr/xsxoSnDY6qgXUGffuZovXVg1rolBOKHGDmN1UuvrfgE2bWizO2nmkRhFW0bpQB+HRq9rlWx05XpA8zmLyaRI23qsManUg1jew6c7f3Z4+16qoeG3uhQU7hZC3AWTgMPA0pH6QlTI3jbbljqADqVvUc1TPdRX85hXQshsCBDXd+cG2c09xmmhxR0LcZs6HyB3Lz16ZTI7YIYlUF5FGPgJX+Ekpc1W3w1fh20ngDLEWECURbQ/wqGS+Xp7FRY77aiOJuCDXJde6vTvtgkGnnm46Ja3 MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: afa5f60a-b888-4842-1fc1-08d487bd6cb0 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY1PR0301MB1189; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1189; 3:mVUTqD1As5yzOL0QSqsyg4QdG/VFqb6qAwD9Oz5BQug5XH4Mx8Gb1odLuFfRvfjGfuZC4cCQTbcrMdf31/0mDmrpE7BKneqPFPOKhzNwZAygPwAdtIMMJvyx5xNPgo1DzEOYZ9gua5Ujzb2+kpj6dMwUTsFzb/NV0rb/Z6iNQaMLrXhRKaof/uLTZx4KWMJMX6K3zN6nbfjIkcyqsrFNQ3Bghy7wpK5INuo1FIoFbXfaVftOzpRJuP244CZy/oHHXS5x9A1c5JFa6Af8euLhVSMBOa6MVwUZa29uU/lYk4KHvss4/XZKNzKH2hnpW0reLYu2QM7XL5PUyb3yeVpVqhqdB1gGjFXojj+hqQzQIWBPgo5jcDB5GRqzDW1sEPg6YYW9/hEkNVrmmF9qMMSwHmLSYzAXAv7a6ZK6KtEVcOMRtq+q44/aUw7YdMkmp3H8; 25:ixcr7+4C2cPIJoNMPD6ewg2KBHjZmvkP90qmRTjPC4Rqwn9RI3m/CEwKyaqhRQVcggy2ApTHMaSRauKMN9gRqmQIKVqsS76nfh2HM4Z4zViG9DLM3yv+H6LbDObQDWHLj1WlMQsJcVQ4jG6OTjkj+JU7Z0fePSHNpZSMe2hlbeQYJ7NRBXd2on2r0tW9drX12NeVnbaNcyTcK0uV5AVu/nF2gfJELBbv0ggT7ab/ETq6uou8nvkQ8+0Zpq5gz0Augn08J8xZqp7o3JswVS+Mfv4wZQdytlkhtmp++3H2vzF8FaaGQRaiUsJGj6DakWUMYDC4veL7VgBe7qnhDfK9pWmBqkOhrrp1BvlZpZ+eZkOnvyQIyRg6GTKUqvfmBeEh+GIovOi7bOU9VRFKYGOORl9BGWJkfI/LushXzonB4o3Xt/ozb3O2bbqIhpqTc4ZA6FaVKKVlpzt6RK9LvkgBLg== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1189; 31:uwonU7pS+0Z7/S779uCPEREgUJalDft9rKGZFjmXGsr08/618ilqiwSgBqXIdmOBNhNH/tdTlOd1UDk/azJlNiYrQlnQ7T2ov4Sapf2LGgTQQYUgcPeoUemY1G2NcOPW2C+d6PZWvXfMraWVx/3qzCFxxHSHNvB7OL+cv3vtM6PGjN5/du58U9yQVNDZEffVZK8QszFGvyy0Vul2VMWJQf+4ILXSttl0wKXUyaLU4s2PO/vVYgQNE7X63pxFlHpv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13015025)(13017025)(8121501046)(5005006)(13024025)(13023025)(13018025)(93006095)(93001095)(3002001)(10201501046)(6055026)(6096035)(20161123563025)(20161123556025)(20161123561025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123565025); SRVR:BY1PR0301MB1189; BCL:0; PCL:0; RULEID:(400006); SRVR:BY1PR0301MB1189; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1189; 4:c4jQrZshB8sz05BYW1OocSRctP13yenX0nhxWd0P2M15CMU/xMy0NjE0yPD3Z1U2sln2082vxd9B4cNTKpt3fGXV2bQBKUTtiKYebrEeGqiwe2dMtLLgsxC3Tt32TZVXgmbDgqEkKdfvs+7XhWyiCk/uqGRf7iljBhtst5F7YqfnzP6Xs6eII9PH/OMWCxb5AGp+icq7yS8Licg+/JlyhUMvni/EOW5aDV+gefSgFPSUiyqKHut0H5ZP/WZtMOiwyU6HmA3BKOIdeowO039Hx1/e33roLeG6x/VHg+Wy8R3ZKoXG71/K7MFmUlsYMtQWOVuKJJdfK1bpgCBQIBEH7IyroRre/FDy12wdr/Xueg5nYTwEjiTBw/Gi654N+pDkC4241L8SCQKB9LfqH66Enz2YMk0vvbkTLQDFK1BvfQWUML25xQAKDfI6OhbzK19NrzVxOC9OskoGcknXpSP/B4WcQ8ZAYhEAKf/Sc1N/CvDGeb55PeMRl5unZZTsu+qxXCJxxWymyRR/YUV8P0aZz1lJ+WGpZuFyR++tnSqZUvJNKSN81OudkFJpCA7mZ4lqDC3xRtqLgW1FJtOps3ABJPb/BO9M9JT0pPs+n1Jn9EcdlAUIQg+rNdW5SRD9Nf/oF21VdbfsJGkOOjT4Eng3P1XPb7AVB3+ym/3R4aJU8LZVMcFsbaLTyn+darzutH45lpiPYgO5SBF7r8aisF8nOMzHX65Qu2etKF6fuCRFjruakkmp6aMk8C+mZ1Q6+lkkrdb4q03KH018JQFQXlJY3dnlHnP5msRPatHk5UTJmPu82LHKkl6oWYRhRwkgevGl7awXgysQls6fbjdkS0V0pPFwZ4bduKsqVic4C3Dd4A7wQ9vuD8Akvi7/YHxAS9a80RcdFG/rOXmeFXwhapCowJocIKjDdylJGHu56q+uJp4= X-Forefront-PRVS: 02830F0362 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB1189; 23:9RRq1qtif7mkHopyxetQYXrxTfVu//FjwzTn3NC?= =?us-ascii?Q?y81l0QnvDBTG7YEz8ISxVxREu690B4MtWdKTIsRwOC9M/AdDNdlyHK7Ry7vR?= =?us-ascii?Q?ccaFiwS3NmDpCBVRZ0DOQxDNxW/JWIpKCkwTUdVz+7sYePBWS4fKDVVllHnC?= =?us-ascii?Q?4m3mkWH7SEvNJ1p4dFbSsVXlyAmIe5hP/ivbYVCE8XNpf5+rnUn2Ea4DOacg?= =?us-ascii?Q?08El8RSD+q93KPFCLyKBeRTFakfIZpSMXaLVTPndoZw0bbXG2X2G/4HhZttn?= =?us-ascii?Q?1CoVbgqr7ceXQPpOpFxJjMMQ4vpQbfNr73jCqBawhupiHbmSpho26Z2XViHR?= =?us-ascii?Q?Y2tzYmQv0wIP5mVbainEp2dR/lwOXZAmUt7XJwI5ql32tDR/rNUM9soOGg0H?= =?us-ascii?Q?yibqtIDxSYyPX0Y/JSrKoqSIgborAz+SeJ73hondOF5rHlqdnG4GyzwGq7eS?= =?us-ascii?Q?cf2YMWHQtGYNWDIr3GKiU61RiNH8H7c6kzwpxv3jLcnFoV2TQ+E8e2fr3RlV?= =?us-ascii?Q?5yaTXLS0T9F32blYBXx1ojmuliIp43EvKw4Oh0CUAEWnYPpfmhJWnzy7vC05?= =?us-ascii?Q?UG0oH0ikCFgySrl6Qzb0qDaYWlNNrn4jSwY45cjrOjEc2rH9Ma0kr/Gfd3Gy?= =?us-ascii?Q?0+3dtIyY8jRHifyVWb80giIGtantckSjYGG/SnJ2+lbjCp6etGe7C5iTEi00?= =?us-ascii?Q?aZgR/WCUzidwGN78t4lNfArTD9p9LRexi/FqqBzDuvkS8sqVI00ja7/hGkTX?= =?us-ascii?Q?lwl9+l1KPRU2KQK1k0oHtNbtzhSHP9GjJoz7l12y+B60gMalapbXVRXfHNCb?= =?us-ascii?Q?3O+C7T8dSZLnKGuLpt4tsEILLmec+ze9EvFclFw+2nFoJUDmrn/Fe3StOgX6?= =?us-ascii?Q?0zcDfq1pwxU4uxKeS/8JT5NUuwDbM4kG1l9txgKV2kYpQU/xEL99mCNnwpf/?= =?us-ascii?Q?Rt4/hNVrLDpx3hjfwsovc+mNfQZfH+E4AlefJvKib94UEAr9Ebe99kdc5pRy?= =?us-ascii?Q?X6g/aO66jSRcC6kxXSU1JxJQ1acCFgQXGYzwdZtSr0kD6ir6a0A1KP/LyDUM?= =?us-ascii?Q?xSzGU0XSWjuUuMLu8tzTRZKTlqqlO?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1189; 6:u/lkkab0zKRXIUXhwlPX1+MmsR4PgUge40F8l6Wy2V6s40A/y8IFWjmRISf/maaNDiYqIV6sZ8Gpyd6i+PzbqLEmuXy7PGyWesq5eSFjWjmQFMx9Na6cNUtdbgniaO+ymqLQUKgHfdTQMf2JqFnH88vVLe6hmgF0k5JoCumeFruyBJPhuHhGC3ZTEhEs0Z0rRZoPQA1u5CyMx8LNN57A1VtBx0FsDHtwaKIHBLF7sf8eLpw7r8mGCabfASCcUGOXjwHvV9bJiC387mmCJr/J3USk50RZn8DF3b6Z99c0Q8Vf8Rl39k4y9WQzl6y+14KoKwimY6C0xdHVk/CpBeriHU/GY5zALDAqBVKZ6dBqbNauU2j9YuO/FpOy0dGG3ZHe2Bzv3JWQTlhK9sJKCmsGtwRLbr/1VB/EKsw8ynSmZUWA5QD4qYKM0Vf5CXn/x18be7dBqGIAlbLdI8lzRFou78hDWE6SwvT1DdtnJ12xOdbM8g7QsjMP1jkXlnqXDKDPhn44bYWcZhsoRYCIlL2Ieg==; 5:hU2xXRJHdcpekVjN1nih/7mX6LlHU25LfMV5SrWBtIv2RzeB/AQU3GFSvPRRE0QPuRClLuMrjme1Tr1wAzbtNrnUeijoFp1bnkvGh7kfeP2lfHGhZq9J6DIkHwgIJctTPkQij7Ib369Gnn884f0TvLXgIVYggnWKPNds2geXEzSYhi8RkGeloYTDHJ1o0wLT; 24:sIXImCu8bYw/onApnduY/w/BfIdmYruqvrcBLLGPUdisi9HpGqtgfAw+u0GNBRh9JjmpO83zhtFltKq+rhus/wMYxPs5GiVbZbu//10jdoQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1189; 7:0iK9WQDY0iAlAPamfAVAB1NZRf7UyYQ/rdEDf2sMdGs4APoSjkEW4GYbNksaXWsn6fJQkDBUYCVS5nocoVHnRN+OU69uAqd8j/mbYpuOuWslrqUgm2Dtr7MaHxytDDOg033JVq8QbuMOChsIksYfVSe2fYeSWjU0WPpDhaLswPdr0FPYfKxgAYk/IZMnElRsDkNcQCOBjxLFuleGK2rw/leItWk/GWjWr0UnEIF6ezhhV5BjrY4kEs4H+Z3A7eXHUfVUOhQ0S16rdVHg8uuRPvwhZCHiM0go650E0a8XSMv0xRgph8bWr2YRgaQ5uZEf57BBLDewSOOT+gxr9p9xyA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2017 07:18:20.6417 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0301MB1189 Subject: [dpdk-dev] [PATCH] examples/ip_fragmentation: add fragmentation size support 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: , X-List-Received-Date: Thu, 20 Apr 2017 07:18:23 -0000 Adding support for determining fragmentation size for both ipv4 and ipv6 traffic dynamically through command line. It is helpful in testing to configure different fragmentation sizes and validate the packets. Signed-off-by: Ashish Jain Signed-off-by: Hemant Agrawal --- examples/ip_fragmentation/main.c | 89 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 8 deletions(-) diff --git a/examples/ip_fragmentation/main.c b/examples/ip_fragmentation/main.c index 815b225..436755b 100644 --- a/examples/ip_fragmentation/main.c +++ b/examples/ip_fragmentation/main.c @@ -94,6 +94,16 @@ #define IPV6_DEFAULT_PAYLOAD (IPV6_MTU_DEFAULT - sizeof(struct ipv6_hdr)) /* + * Configure fragmentation size for IPv4 and IPv6 packets + */ +static uint32_t frag_size_v4 = IPV4_MTU_DEFAULT; +static uint32_t frag_size_v6 = IPV6_MTU_DEFAULT; +#define MIN_IPV4_FRAG_SIZE 64 +#define MAX_IPV4_FRAG_SIZE 9600 +#define MIN_IPV6_FRAG_SIZE 1280 +#define MAX_IPV6_FRAG_SIZE 9600 + +/* * Max number of fragments per packet expected - defined by config file. */ #define MAX_PACKET_FRAG RTE_LIBRTE_IP_FRAG_MAX_FRAG @@ -299,14 +309,14 @@ struct rte_lpm6_config lpm6_config = { } /* if we don't need to do any fragmentation */ - if (likely (IPV4_MTU_DEFAULT >= m->pkt_len)) { + if (likely (frag_size_v4 >= m->pkt_len)) { qconf->tx_mbufs[port_out].m_table[len] = m; len2 = 1; } else { len2 = rte_ipv4_fragment_packet(m, &qconf->tx_mbufs[port_out].m_table[len], (uint16_t)(MBUF_TABLE_SIZE - len), - IPV4_MTU_DEFAULT, + frag_size_v4, rxq->direct_pool, rxq->indirect_pool); /* Free input packet */ @@ -336,14 +346,14 @@ struct rte_lpm6_config lpm6_config = { } /* if we don't need to do any fragmentation */ - if (likely (IPV6_MTU_DEFAULT >= m->pkt_len)) { + if (likely (frag_size_v6 >= m->pkt_len)) { qconf->tx_mbufs[port_out].m_table[len] = m; len2 = 1; } else { len2 = rte_ipv6_fragment_packet(m, &qconf->tx_mbufs[port_out].m_table[len], (uint16_t)(MBUF_TABLE_SIZE - len), - IPV6_MTU_DEFAULT, + frag_size_v6, rxq->direct_pool, rxq->indirect_pool); /* Free input packet */ @@ -489,8 +499,14 @@ struct rte_lpm6_config lpm6_config = { { printf("%s [EAL options] -- -p PORTMASK [-q NQ]\n" " -p PORTMASK: hexadecimal bitmask of ports to configure\n" - " -q NQ: number of queue (=ports) per lcore (default is 1)\n", - prgname); + " -q NQ: number of queue (=ports) per lcore (default is 1)\n" + " --frag_size_v4=:optional,IPv4 fragment size in decimal" + ",Condition:(frag_size_v4 - 20) should be a multiple of 8," + " default is %d \n" + " --frag_size_v6=:optional,IPv6 fragment size in decimal" + ",Condition:(frag_size_v6 - 40) should be a multiple of 8," + " default is %d\n", + prgname, frag_size_v4, frag_size_v6); } static int @@ -528,6 +544,29 @@ struct rte_lpm6_config lpm6_config = { return n; } +static int +parse_frag_size(const char *str, uint32_t min, uint32_t max, + uint8_t hdr_size, uint32_t *val) +{ + char *end; + uint64_t v; + + /* parse decimal string */ + errno = 0; + v = strtoul(str, &end, 10); + if (errno != 0 || *end != '\0') + return -EINVAL; + + if (v < min || v > max) + return -EINVAL; + + if ((v - hdr_size) % 8) + return -EINVAL; + + *val = (uint32_t)v; + return 0; +} + /* Parse the argument given in the command line of the application */ static int parse_args(int argc, char **argv) @@ -537,6 +576,8 @@ struct rte_lpm6_config lpm6_config = { int option_index; char *prgname = argv[0]; static struct option lgopts[] = { + {"frag_size_v4", 1, 0, 0}, + {"frag_size_v6", 1, 0, 0}, {NULL, 0, 0, 0} }; @@ -568,8 +609,40 @@ struct rte_lpm6_config lpm6_config = { /* long options */ case 0: - print_usage(prgname); - return -1; + if (!strncmp(lgopts[option_index].name, + "frag_size_v4", 12)) { + ret = parse_frag_size(optarg, + MIN_IPV4_FRAG_SIZE, + MAX_IPV4_FRAG_SIZE, + sizeof(struct ipv4_hdr), + &frag_size_v4); + if (ret) { + printf("invalid value: \"%s\" for " + "parameter %s\n", + optarg, + lgopts[option_index].name); + print_usage(prgname); + return ret; + } + } + if (!strncmp(lgopts[option_index].name, + "frag_size_v6", 12)) { + ret = parse_frag_size(optarg, + MIN_IPV6_FRAG_SIZE, + MAX_IPV6_FRAG_SIZE, + sizeof(struct ipv6_hdr), + &frag_size_v6); + if (ret) { + printf("invalid value: \"%s\" for " + "parameter %s\n", + optarg, + lgopts[option_index].name); + print_usage(prgname); + return ret; + } + } + + break; default: print_usage(prgname); -- 1.9.1