From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Jerin.JacobKollanukkaran@cavium.com>
Received: from NAM03-CO1-obe.outbound.protection.outlook.com
 (mail-co1nam03on0080.outbound.protection.outlook.com [104.47.40.80])
 by dpdk.org (Postfix) with ESMTP id 8393758D1
 for <dev@dpdk.org>; Tue,  4 Jul 2017 06:54:20 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=hRaSb0sUGaPO4oylYP4Y9XA0IjWr/sKFuIY8IiGJzZ4=;
 b=RHgNEkwctMgoMtvXWDmkBAx6nOvtWRX4LQnPSbkQgI9WKgZGOCPbc6Ucm6cjNNH+Msadrb/KE/YgHz5aDy69CmsVga2T17FhRyohEShn9j0kIn3oD5dM8yIY2LVwhgRpAAWgvN2phC3J+XJ0PMGqvvhm0+kd7u8p5zmhsJJ045k=
Authentication-Results: dpdk.org; dkim=none (message not signed)
 header.d=none;dpdk.org; dmarc=none action=none
 header.from=caviumnetworks.com;
Received: from jerin.domain.name (106.200.206.49) by
 BLUPR0701MB1714.namprd07.prod.outlook.com (10.163.85.140) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id
 15.1.1220.11; Tue, 4 Jul 2017 04:54:15 +0000
From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
To: dev@dpdk.org
Cc: harry.van.haaren@intel.com, bruce.richardson@intel.com,
 hemant.agrawal@nxp.com, gage.eads@intel.com, nipun.gupta@nxp.com,
 narender.vangati@intel.com, nikhil.rao@intel.com,
 gprathyusha@caviumnetworks.com
Date: Tue,  4 Jul 2017 10:22:59 +0530
Message-Id: <20170704045329.24711-5-jerin.jacob@caviumnetworks.com>
X-Mailer: git-send-email 2.13.2
In-Reply-To: <20170704045329.24711-1-jerin.jacob@caviumnetworks.com>
References: <20170703191402.3638-1-jerin.jacob@caviumnetworks.com>
 <20170704045329.24711-1-jerin.jacob@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [106.200.206.49]
X-ClientProxiedBy: BM1PR01CA0106.INDPRD01.PROD.OUTLOOK.COM (10.174.208.22) To
 BLUPR0701MB1714.namprd07.prod.outlook.com (10.163.85.140)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8763fffc-7baf-400f-3a3d-08d4c298ba68
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);
 SRVR:BLUPR0701MB1714; 
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 3:xIhCTq5XeSXItrAnSqAI6VH0OzBy3tVaYYZpN5Z0rIDEMIF2SkdRkbDceX6w84Ue/GQTfQJWs/cd2D901Lg/QcmVAJ1TdlcJHIqdWW9OwdO/KRfzVMUvRsCT5V2rGoI/lJkJf77ITFgMeeN5vgLhK1UFxsjnnV5O6Ts7/Av5SntebU5waAwb9KWTITM2oPjFmlEa6Uu5Db776BsnQnc0nvRae/7+0q+iRi5xO4vZzC5oFZuC6fjTZP3ytX3S96vsCuwqEEm3+bvXEZ/LGpLuuiOOFrAwJ8AF6NVd0vDhfGZK1VVdHwtzOPpdQd62r2srhKcGJ7nyPEWFFaR0sb7T3rrcsJmbtVtND0bXHaOy/44SWwGZMTPPL9r7/jjHh6jaiujASl/XnNvxM3lxy8iEZ9x0c5BMKRLTMPI6sTBQLRCAjnrU++yIX6Ji9VD1Lbk7/VAhpjelmSGd/SM92jOMwxVV4Rni21/0XotdJ6Nt0TfLEN2/eUathgJKnCTBUrXwI9vDUky3sRyU+g5DDqUXQ9Aw4kapqNP53AiDgWa/RnGLDMpMehjaqsSdkbzQltTZjM4gF7RLQyBzJDskK4zIndtsSRooYyoyVgzOk5oHa/a267ZS92aYUUTGrr1EjevblehUrb3m3q7PbAKIoZXJe7EdOJg61YAehYfY80Oq8sKxtw6qMGmJ7bcIWLJzaO1wdzZQ26Qu95PUStxtvtlwSa/npqDY6fCOI1SUF3di2ZwAJku8+U/lnAI0z57bt2C6
X-MS-TrafficTypeDiagnostic: BLUPR0701MB1714:
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 25:r+ju83MXlox6/Q1Y3gX5+7z8uLfWSJ7IKwV6hp8iU4fM60S6/mCrhUCdD2VdRNiEUk80xtSUSBXUuUM+8CdwR4/BtKlIb3Fb2xb4NSK+US2qnuMD4pk+sWGvR5JZndoCbXWDgYdaZy2uAXeDdgImH/6bGRX3uf+cxBze526+dxq/F0G5AO5uTpoiILID5Q0KfhHKehdx4XsSph1fQm3PDA5NBQzmLatQobgo/FzQw+x7iJbpmGbtNB2qjxtdCwkJkPtATm5wQDhOmNoxrjFpRJon+8L6bFIMwSF4uq8XghrXN0YussgNcx+tABv6McJAk7ItV4SK3SRTN/Wy8LcUAavFlNXHQT6qTnjEUGRZNGJQYjq5HcBp98yQ5tSDtQDB+YK/9NmDJl3e0arZ+Dp2rxXqQL8oyTr57qBBCYqdHvSRoKY1p00YAoVrTt9MZC0T8k7Mbo/q0cvLFEtsmrBRcH8im2kpWdTu5E9f+9zBsEerHAI10Dec5UCB/5NgF+uDYSY7uVgzmPkx/P25cebVSylJ0rCriqkBamFCX7aITWGtZBjpYGXUQx9FU5Bg85Lkc2Ou5y2i8M2oKlvpeFKwTLuEfBFWGocBHh67frKgu9RDSuzk5OxcljIzIYvOSUKg767rqq+Fd5eYRdapsVsInjDUJ4tJbVZi9ophJ4iLwx854XzdQzG/KSqe5xzOv1w+m6mMastGa2JPWWzQgt/GnUOpUczxbw2eC1ERDeTYsB7/4KzmcXGDP5EUqWCWnjEtr561CfdnmYF68g78mx3rulSw3Cybi+q8PIHN659oabnDXbVOPaG5O1tm0vMtQNNLoSVdn0WvNcD6R5IkQQ3PRAkHBiKS7a/e3Q8R5KtA9pjXR9ZiFSdFuBj7c4RuCAL3SmPZEGXDGlXO3DdXEXnkh2lR7getmUxs1hFR3N8ph1o=
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 31:DLA6QBhweUxxKFTTiKt1b2UyIt1tf+T9IeAHacUj7L9neL0ZUUFvhDBPp76erDZJ8tYPRBSf7Xhw0ZzbEiRabOziaczXQXi1fxwxAoI/FgYM1KZMRqqZ7uAoP8E6Wjk5yR+nMrF7XrtAEwKyApsnULZd/+N0jn4S7tDMQGVrfGThRONvA4ef5BYO1yD9ol9rwB0xdzK2gDAAPwaprk6bEi3+oJ0BjavsQBt8uoXxbbh6pVkRH1fpjPyoD14yipPcXFq8i1rcDFD2byWcyZ85cqkXV0xsGazygldihsaVufNl7m6UDPd2v0BReOd6VOuK+Gs4G9GAO7owl5j+VNLDNRHqJy7bAj1QqVhMHdhCGb5qnSNcoLzeHF+0OX/4ppHjTspfA8ta0Is9iNeKUD+gfWx2k4FDe+3Mm9gthQSUV3JcjFW5yRy1M14yj9Kh9lRfip36xYt16wRcP+u2LmVZzDtzBufQg7PyBXfN/iPE8WofOTjguL53E8eaqRtlKeb+1Cxo+kXw5umpU7RFLPw+ttffa7yHKOiSO11JRUzdem6V/+VQa1q6OeqhMFaNyJT85P51cSgDXSJA4UNyXm0DYO1b1YsqHrzIf7vse3BST6aQsRIMWHBTL6BA0X4H/jO265XA917zwUMgsJ855q/kcIS4bH9r1yuqHwZzQdlgBRk=
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 20:sII7Tpp7gqZ7as1nd6jTPsf2dCi3s3tIhpEsRB+sx0VS+ZJN1WqCihsvz/2RFjUFNrORuIabAW/jOPSZaQPxGIti/nGTfLH125AtOZQM5xatAM5n5Do3yky6YDCVZdOJoCjBIWhl+mpU7Hgo3GvLCrkhI6ioh0uHVqiErG84zbisEjslg8D3SRxSrMtIORARenCcNVB0vAHJRPFUHfwYafT/LqFLT8i+2KflOC1GsrvOs3TLJqxB60FxFoIXEdS+oodFxllSubV6/Nt/3B+3SkP+/q5hpK2jHRYpsilHo9p7emr4FqcODTOrOyFNxVXA6nIZCTMx6lqZWOfc/Yn7knZctO5QYfPSpknM+vWvv5C5bVhpeyEbrJTu+/xnEHGbNxwcEa88o1XWqCpMsXHYXkezcGes72aWIUVDDmuOrLa5nyZW1X57F4L4uwGBy/QqI5ipV4JVj53fkjg0PGPp+LlQTOzI12gFLj3/oNCWA1ON3wMfg49iyAkvZWsfjS45GfKnFxZlEjyQRUPD8DF2BUfQNrgSktgib5h9Kdgczji4lCZl5Aly2aVYeZes5bcoJOuIVN2ECtfOa2GP+RRF5wWvZ1GdJn8Cxe9uXoHBqXo=
X-Microsoft-Antispam-PRVS: <BLUPR0701MB17144E7943E32C686D7BADB9E3D70@BLUPR0701MB1714.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(148574349560750)(158140799945019)(228905959029699); 
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(20161123564025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);
 SRVR:BLUPR0701MB1714; BCL:0; PCL:0;
 RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);
 SRVR:BLUPR0701MB1714; 
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1714;
 4:qdr67ptRzR680jAnhTHgxhqKbbZj7o1Pu7/FFqx9?=
 =?us-ascii?Q?W79hemBJ34KQYIeypvZEpTyVmLuW0OMamxvq50Ah37SfPUZp2hXhjA7Lu9eK?=
 =?us-ascii?Q?w7DidmlN5kW+Iql0f6v/K/r7saUJyli6RS9tmhxbSn2tIdAE58xcFCrKW+TV?=
 =?us-ascii?Q?Xl6t4d10ovAHHdPSQv4hFdxzy+tixDfRF8W42g8tTdaQKVPqdlvA8LEyWOgi?=
 =?us-ascii?Q?NjztdIyMT8qniRn8bVT3IF0JFJohW5Pr77ajy9Z+aixYvpyp8l5gJVc23i0g?=
 =?us-ascii?Q?m5OVr+C/2iuHOyh4JBqUE7WykrWWRgGpvhkTiIEGwaLdfY8xGmF+QYx1l/2A?=
 =?us-ascii?Q?1zOMqxCypIxTqPiaoI64anB6Y0O79/Op4xiX29hgLFumUpy+EpkC2mFtllJj?=
 =?us-ascii?Q?iIWfmGXiYgkdW/vWV+yqQT6pQbKso8DF+jMRN5aToTOB9mOoIu1Eri6WB1ua?=
 =?us-ascii?Q?J/jKBS7q4unnAWADv+1UPN0DJCiQ36B0khfKpU95dZWigTVNbE9VVdD2Oy+K?=
 =?us-ascii?Q?W99dQnbcyuXZBum48HTTpSfOGP1d9Au019uF0FMR+RteS6J9iwCeqKFBWneA?=
 =?us-ascii?Q?biz5jCAWxGRKWqVUbxKXPrYnET3XzXIcgV4Cx2pCJmTvIKyBr3odAiJTaVkB?=
 =?us-ascii?Q?XVczz3vexdK8D27qvJJRxmLPoDVRDNC1l4uglDpL1hg76Q9zzgCdo5/LukUB?=
 =?us-ascii?Q?cBJBeUEMs5Jw41oxSSXcjzANQnjZPoC7OtSG0zWjz7zm0IBEksmMDifY8PWa?=
 =?us-ascii?Q?SSGyEvFVC6J9rkzsVVnUn9sgyV5f59u+KUejqn/NQQAxQqO4HnDBNlwKipgI?=
 =?us-ascii?Q?arFjIloNz1Q0Eb6G5Dskiod3sLRhWinsboQyRI5ynUgso3OSlz264DDN6aav?=
 =?us-ascii?Q?n7jDXsuejobSFZPQd+OfwviWNy5L3KSV1cu+TzQKAG4uWkEYD8miZYPDPOdE?=
 =?us-ascii?Q?cjgRtkMWM8f36BFhP23ZW9dzROPV7h2q6UrJ09tQCE2S+Ipk2YkJiZgT9nMK?=
 =?us-ascii?Q?yp4cL74NOjmeV7Rpvt8WBkla61ewweJXi/lQJjuex3YO8LmzxaQ84rtQKKLQ?=
 =?us-ascii?Q?hREUJmmpFkWQJAftmRxrzAU+pMM3RrCmMq5L098XtMIkLJjR8ulVUOs9x8h+?=
 =?us-ascii?Q?UM1CVxHvqEvi/3AC7xRTs3XCnBNi4OFEg2EPw+eDO60zKKxqboWiRxUHdywz?=
 =?us-ascii?Q?QSEO38dH7VaDQHHk+CSLBfPDoEaZVhr5yvIjPi2tkOwfciqoFsBB6I36bX2J?=
 =?us-ascii?Q?2GRIDdSqOvkfs2LBBghZYNg18rqTnOH0uyvuDEcm?=
X-Forefront-PRVS: 0358535363
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(4630300001)(6009001)(39850400002)(39400400002)(39840400002)(39410400002)(39450400003)(4326008)(107886003)(38730400002)(6512007)(42186005)(6486002)(8656002)(6506006)(33646002)(53936002)(25786009)(6116002)(6916009)(1076002)(5003940100001)(3846002)(42882006)(47776003)(2950100002)(478600001)(2906002)(6666003)(66066001)(8676002)(50226002)(48376002)(81166006)(7736002)(110136004)(2361001)(2351001)(5009440100003)(189998001)(5660300001)(305945005)(72206003)(53416004)(50986999)(76176999)(50466002)(36756003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1714; H:jerin.domain.name; FPR:;
 SPF:None; MLV:sfv; LANG:en; 
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1714;
 23:rn+P7IInX4JFgjqXBMUFnn3BStxrf7EN9kZLeVP?=
 =?us-ascii?Q?AAcwqPGZ1LFvtFPPRqcwkp87C00ITMYuo0R4cBW3rvoYjWM0LbXEVeYeRve4?=
 =?us-ascii?Q?XBR8YRp4f4Htn7Cte4LsKy9bqWvWizpmagu97C+uMJeKuEBK+OddmrYtVkE1?=
 =?us-ascii?Q?pjwXfLatn7kJKoPg1DmQpqaYxppQyPVUcT9ur3Y1N89q1DXx8oQNn/sfX7Je?=
 =?us-ascii?Q?9Dz/nGN7u2/uI6944KR44BBzMhf+ro8Njiu4v+JL3lRH1u/nW7WcxpVZiQDa?=
 =?us-ascii?Q?Qd/CwCjldvqJBZMmjQLJsUAsJ7gJZESdH0WSCrauUg3oGfEb0Fh4mYSNU//H?=
 =?us-ascii?Q?oFW8z0Cm49tEJSvRY+jqLamnsYTeeZxiIUIswd5gi2vb1FCuqeQ1xr7IMjbv?=
 =?us-ascii?Q?J/iDorOYotYCVRLJMCtQXyWFHPz+CWg/OBGrdKnzKwbZIHhXZijVME1MZkWh?=
 =?us-ascii?Q?mNaTTYT9+cWZ2JBwXN6EReStN9O7WaB/0LgM5AEIUF33W/xDCf99UGcG2Vrn?=
 =?us-ascii?Q?x3ljJlJCyX+w1a/RE+bZSZ7zjZ7KX5IMHL0fTcfq+iQR1RhClsaarDlc4gbK?=
 =?us-ascii?Q?5wxIuwjEhYo0KJW9mxxzpofcEJ3X1sKDIPe1AGz0tsW//+SzdL8Uhqx432ej?=
 =?us-ascii?Q?k/me+c3mq9QJxFZU8Uvt9pm5DZjXOUoJvrimGLSrS6pWOfPJ3gUVyC2Ovidc?=
 =?us-ascii?Q?CX4lmoHlYZcouh1y8LpWOGH4cyt9gNWAeVdrJb142QKCc/AH0rJPf8fX9GW3?=
 =?us-ascii?Q?xPpFSHoeoM6nam9unEYrklsBFaHfqzomrcKF9StMz0t7O++bPVJ1/1Jbvqu+?=
 =?us-ascii?Q?oexLJYHr07raJfGyDh12LvkkUMzcmNRU2RhslbsMscMLKOsrQXSba4M6Vo7k?=
 =?us-ascii?Q?9jHwBCcm+XZdPhCLuDH+0R32f8r6lEttbpdgG/mLmq6IohvZ/EwOVI1mTjXO?=
 =?us-ascii?Q?DGkQyehOww0b9x4Rr52V2KTJdp1CqlQIC/2XnYgefkqEDXZcN01XS9tAHa28?=
 =?us-ascii?Q?UK744j2Bl3Pa0R80O11txvS6T+PpzyBZg516QhqniyeI7AsjAYXwLKLKTtNP?=
 =?us-ascii?Q?bAqTRznN1jmIuL130jV8SXR/WUEuTtIsGUdEGuztzSLJoAVmoThQBQdFp9Uj?=
 =?us-ascii?Q?0ktPaM09AXUGJY2EdN7xeD9UpcYP9SJU0LeAGJZdXAjfq4gvb8F3ycpx3xII?=
 =?us-ascii?Q?ADSpUOSbkKzHx+TnPV/aAy+fWRUrRbL4+xoIa?=
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1714;
 6:85esfsxVJwuJ6OdZIvUV6VOVJDsLnHjWbUGH/4o8?=
 =?us-ascii?Q?/WgDqGjkX8zs3qc7q70CgWNNxp02jl0IjduttClwa1G3KfMfmMurQg1vfOGx?=
 =?us-ascii?Q?G4jVxOUgDEFJ4GyMjS8i8syrGu48R3HGlm3+rcnUXHId4x1R0RxRF+1OK04j?=
 =?us-ascii?Q?GxtKPdqEEZUHUr4CGBh0bgTqc4efKchExXzoV5yWxFqBGgV6KCxZl+5FLuXT?=
 =?us-ascii?Q?zXYMLYkZLnznL3XLramG4eKZHiPI/oJZZCbjgQW9emUw4c0CrRINJPeZJfs4?=
 =?us-ascii?Q?Ol/YDpjvaqbc5RPkUuz29gUzjtNwlnbV58fsHMxdFfop1sXSfSwD8jbAgGpn?=
 =?us-ascii?Q?POhXkZAAWG74Mk5CeQGz4lqeEiKdaPHMtCrBDnx+/D+qhQ42Fzlqh68DTCYg?=
 =?us-ascii?Q?PFnPuG8qNAmh1Sjhb3VqdKsNuMtdHq+AXUF+blVCVaWu5mopBtabguII5O77?=
 =?us-ascii?Q?r1ABDVzpS4lkZzaA82XH8JDyKeV2G+unkgiWgYTa9vBDZYCrLMzqwBfDLCMu?=
 =?us-ascii?Q?xs0XjMhNygcsTDDRHzCaJ7nUzonwuxgrYRh8IF2nthQZJOTy4xfk/u3yjXNE?=
 =?us-ascii?Q?/KXoAEZU56iO6WjUJ6PYQJkSvxaebO+rzo2lH7EjHZ8HENK0iU9c3N3Y/fS3?=
 =?us-ascii?Q?3uXzqh4/3Mi/Dll6kf18EhMk4A2YxzL+tjoezgNdQCgf4dg3z9EBFQt24upj?=
 =?us-ascii?Q?BGif8trk4HU+zfemA+Nc/dwaOhuQ/dA7QBrnc/2YxqHLL+afY8holeooFDXY?=
 =?us-ascii?Q?CJDNxfzqaMhGmp5DDihrv5MmuuCxkii+e1VAG/dRMXj/TKb5DA80Mm4bgYpk?=
 =?us-ascii?Q?d97ZWYtjcFwTMtpEgwPjurS8/EGeZsBsKMDUFEBPfHh4myEOfCK2CzLuuXcl?=
 =?us-ascii?Q?pVDi+RJOHJy8L6YBVKZUQzUSrb4KwNwM84T8Jb7kCZgMW60Bch5+jZ5stALq?=
 =?us-ascii?Q?TxraKA4yBTYmZxndKJtEjjm5pfXZtJ/zNkCuGnhhTUpqsPPZOBPvKRkYmE/9?=
 =?us-ascii?Q?Mp4=3D?=
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 5:qX2FVs3ZjzKyvsbrmv/IuOTeTrK/WM6tOi9h2/7EmY3CacOZZmkuqDzkWwHFPMRw8v78jJdZ1Bp3MAaYwjChDsUkNY6YxHKScxam2BeOn7F8CPpo5cqkk/lFSJxWA3+11HbbRgbIX0A5dDP3nM9Wi6lOI/71nf14Pr+f8xIfcKGE0QzMSDE5A3HAnXWLLOlIJ75aKKNhg9tq1CXpxoTiSn3i4u6OlZ81yFrp22kUSP4Iu2raSkoYhR76HDjaBH6JCI9h3fsmoRAIIO3U/EMau07yr+s8bWKEawlLzkpuD0rii0C+K5IU+GcKix7uQOKVTM4P7kASJ/XiUfQak3e7hemn4hn4Xt+VR8+mh15biboko+m+oMQZHcoJBc0g4dgSXw6ZHq6N9nRaDAfzcSPMZdXFKet/kG7SSF7aXqx1pLJgc1/+PZVnz0uDUTKoFW+zlLv4j/Dcm8Kyp3+9UhUVomoO6O+dC+u0ewcNloU0lUSzOknq/rCRSUCeiE9eSM53;
 24:hvLsVZ6AboCbd0M1YA4oZbLtQzC9Teo9icMNSO0WsCjCWBO1JRSaUjeYQopscPpAWFHivxsoVshn+C5qjuUpt5SykATZKavC8bbx+CWmFAs=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1714;
 7:qhQZy5tmq88qfAGdBfhUCu6xw/pBGiO1H1saNeiAa+43T2exY/WNkXONklnb2LQY/z+d8u36yZzI0MkdUiD148riOX9jd1QLOIYsqwpXIA9jAjcxaline3L9JLrMedGYK9vipkfCr5xe1FqR/Bo8H4Apk39/qw/cR8pn3ezNX9rMYlJZemVoxeJU5l7pU1aoPmDuyHtx00xf1QjVM6lCa6Bt84Bgd7bQ4b+l1vuqryLhA3VU0TZsPS4CXCeGISDK1rEXMciJGcqbnWfU/hRSJ9puNp8N4ILfgKU7BF409B9Y7B4aLrGUwqzgAOwh7jjtGpYOXv3qhQ4TD8VPmq8pSEx6Wgl4SYKDeygGDLA/qWBkGaulzOcfA6TO9i3SYKMtNUNpWfpddLX71uQFHJQ1Ipf7+BRaPI+jBRDEWjDKH8s4p+AVmWtvKriuifbrsH8N7XLd3vmhy3PxX9jS5DiINxQdEJFUJX19eF03/Px8sByT2zHay99iSGaW4YoBD/zEO5w0KfHTUwmb/JYR1TV/KLN79VrvyFtB/QdHV95+TyDtkO4lSzSUqmPgtVIso2X57jsDCoEsWk4+HCCt7mTXsY8jKeFjLy+tsBgJEPk19D9Meis6xonjaGRDpiHgTfdcPjEUz7SwYj0zuF4HoepJ1p/HdBUAPhX2hPQ9vJIhqjBsTSGERh+u4DYi0INr1y1BqR7IzLoEcL92oXyCUtv+2uOikj7cICJMrgASVGDJoRl1Jx15IxhmmKliOJBUNKBi0t0dZQv+0YE1n3TJx/LvYWEvJM+Kt4Kp/mASNAXsX8g=
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2017 04:54:15.6878 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1714
Subject: [dpdk-dev] [PATCH v3 04/34] app/testeventdev: add string parsing
	helpers
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 04 Jul 2017 04:54:21 -0000

From: Guduri Prathyusha <gprathyusha@caviumnetworks.com>

Add a couple of help functions that will allow parsing many types of
input parameters, i.e.: bool, 16, 32, 64 bits, hex and list of cores etc.

Derived from examples/ip_pipeline/parser.h

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 app/test-eventdev/Makefile |   1 +
 app/test-eventdev/parser.c | 388 +++++++++++++++++++++++++++++++++++++++++++++
 app/test-eventdev/parser.h |  79 +++++++++
 3 files changed, 468 insertions(+)
 create mode 100644 app/test-eventdev/parser.c
 create mode 100644 app/test-eventdev/parser.h

diff --git a/app/test-eventdev/Makefile b/app/test-eventdev/Makefile
index 8f4fc5f45..2e552a084 100644
--- a/app/test-eventdev/Makefile
+++ b/app/test-eventdev/Makefile
@@ -40,5 +40,6 @@ CFLAGS += $(WERROR_FLAGS)
 #
 SRCS-y := evt_main.c
 SRCS-y += evt_test.c
+SRCS-y += parser.c
 
 include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-eventdev/parser.c b/app/test-eventdev/parser.c
new file mode 100644
index 000000000..4925e196f
--- /dev/null
+++ b/app/test-eventdev/parser.c
@@ -0,0 +1,388 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2016 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2017 Cavium Networks Ltd. All rights reserved.
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Intel Corporation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+#include <libgen.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <stdbool.h>
+
+#include <rte_errno.h>
+#include <rte_string_fns.h>
+
+#include "parser.h"
+
+static uint32_t
+get_hex_val(char c)
+{
+	switch (c) {
+	case '0': case '1': case '2': case '3': case '4': case '5':
+	case '6': case '7': case '8': case '9':
+		return c - '0';
+	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+		return c - 'A' + 10;
+	case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+		return c - 'a' + 10;
+	default:
+		return 0;
+	}
+}
+
+int
+parser_read_arg_bool(const char *p)
+{
+	p = skip_white_spaces(p);
+	int result = -EINVAL;
+
+	if (((p[0] == 'y') && (p[1] == 'e') && (p[2] == 's')) ||
+		((p[0] == 'Y') && (p[1] == 'E') && (p[2] == 'S'))) {
+		p += 3;
+		result = 1;
+	}
+
+	if (((p[0] == 'o') && (p[1] == 'n')) ||
+		((p[0] == 'O') && (p[1] == 'N'))) {
+		p += 2;
+		result = 1;
+	}
+
+	if (((p[0] == 'n') && (p[1] == 'o')) ||
+		((p[0] == 'N') && (p[1] == 'O'))) {
+		p += 2;
+		result = 0;
+	}
+
+	if (((p[0] == 'o') && (p[1] == 'f') && (p[2] == 'f')) ||
+		((p[0] == 'O') && (p[1] == 'F') && (p[2] == 'F'))) {
+		p += 3;
+		result = 0;
+	}
+
+	p = skip_white_spaces(p);
+
+	if (p[0] != '\0')
+		return -EINVAL;
+
+	return result;
+}
+
+int
+parser_read_uint64(uint64_t *value, const char *p)
+{
+	char *next;
+	uint64_t val;
+
+	p = skip_white_spaces(p);
+	if (!isdigit(*p))
+		return -EINVAL;
+
+	val = strtoul(p, &next, 10);
+	if (p == next)
+		return -EINVAL;
+
+	p = next;
+	switch (*p) {
+	case 'T':
+		val *= 1024ULL;
+		/* fall through */
+	case 'G':
+		val *= 1024ULL;
+		/* fall through */
+	case 'M':
+		val *= 1024ULL;
+		/* fall through */
+	case 'k':
+	case 'K':
+		val *= 1024ULL;
+		p++;
+		break;
+	}
+
+	p = skip_white_spaces(p);
+	if (*p != '\0')
+		return -EINVAL;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_int32(int32_t *value, const char *p)
+{
+	char *next;
+	int32_t val;
+
+	p = skip_white_spaces(p);
+	if (!isdigit(*p))
+		return -EINVAL;
+
+	val = strtol(p, &next, 10);
+	if (p == next)
+		return -EINVAL;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint64_hex(uint64_t *value, const char *p)
+{
+	char *next;
+	uint64_t val;
+
+	p = skip_white_spaces(p);
+
+	val = strtoul(p, &next, 16);
+	if (p == next)
+		return -EINVAL;
+
+	p = skip_white_spaces(next);
+	if (*p != '\0')
+		return -EINVAL;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint32(uint32_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT32_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint32_hex(uint32_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64_hex(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT32_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint16(uint16_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT16_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint16_hex(uint16_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64_hex(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT16_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint8(uint8_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT8_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parser_read_uint8_hex(uint8_t *value, const char *p)
+{
+	uint64_t val = 0;
+	int ret = parser_read_uint64_hex(&val, p);
+
+	if (ret < 0)
+		return ret;
+
+	if (val > UINT8_MAX)
+		return -ERANGE;
+
+	*value = val;
+	return 0;
+}
+
+int
+parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)
+{
+	uint32_t i;
+
+	if ((string == NULL) ||
+		(tokens == NULL) ||
+		(*n_tokens < 1))
+		return -EINVAL;
+
+	for (i = 0; i < *n_tokens; i++) {
+		tokens[i] = strtok_r(string, PARSE_DELIMITER, &string);
+		if (tokens[i] == NULL)
+			break;
+	}
+
+	if ((i == *n_tokens) &&
+		(strtok_r(string, PARSE_DELIMITER, &string) != NULL))
+		return -E2BIG;
+
+	*n_tokens = i;
+	return 0;
+}
+
+int
+parse_hex_string(char *src, uint8_t *dst, uint32_t *size)
+{
+	char *c;
+	uint32_t len, i;
+
+	/* Check input parameters */
+	if ((src == NULL) ||
+		(dst == NULL) ||
+		(size == NULL) ||
+		(*size == 0))
+		return -1;
+
+	len = strlen(src);
+	if (((len & 3) != 0) ||
+		(len > (*size) * 2))
+		return -1;
+	*size = len / 2;
+
+	for (c = src; *c != 0; c++) {
+		if ((((*c) >= '0') && ((*c) <= '9')) ||
+			(((*c) >= 'A') && ((*c) <= 'F')) ||
+			(((*c) >= 'a') && ((*c) <= 'f')))
+			continue;
+
+		return -1;
+	}
+
+	/* Convert chars to bytes */
+	for (i = 0; i < *size; i++)
+		dst[i] = get_hex_val(src[2 * i]) * 16 +
+			get_hex_val(src[2 * i + 1]);
+
+	return 0;
+}
+
+int
+parse_lcores_list(bool lcores[], const char *corelist)
+{
+	int i, idx = 0;
+	int min, max;
+	char *end = NULL;
+
+	if (corelist == NULL)
+		return -1;
+	while (isblank(*corelist))
+		corelist++;
+	i = strlen(corelist);
+	while ((i > 0) && isblank(corelist[i - 1]))
+		i--;
+
+	/* Get list of lcores */
+	min = RTE_MAX_LCORE;
+	do {
+		while (isblank(*corelist))
+			corelist++;
+		if (*corelist == '\0')
+			return -1;
+		idx = strtoul(corelist, &end, 10);
+
+		if (end == NULL)
+			return -1;
+		while (isblank(*end))
+			end++;
+		if (*end == '-') {
+			min = idx;
+		} else if ((*end == ',') || (*end == '\0')) {
+			max = idx;
+			if (min == RTE_MAX_LCORE)
+				min = idx;
+			for (idx = min; idx <= max; idx++) {
+				if (lcores[idx] == 1)
+					return -E2BIG;
+				lcores[idx] = 1;
+			}
+
+			min = RTE_MAX_LCORE;
+		} else
+			return -1;
+		corelist = end + 1;
+	} while (*end != '\0');
+
+	return 0;
+}
diff --git a/app/test-eventdev/parser.h b/app/test-eventdev/parser.h
new file mode 100644
index 000000000..75a5a3b45
--- /dev/null
+++ b/app/test-eventdev/parser.h
@@ -0,0 +1,79 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Intel Corporation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __INCLUDE_PARSER_H__
+#define __INCLUDE_PARSER_H__
+
+#include <stdint.h>
+
+#define PARSE_DELIMITER				" \f\n\r\t\v"
+
+#define skip_white_spaces(pos)			\
+({						\
+	__typeof__(pos) _p = (pos);		\
+	for ( ; isspace(*_p); _p++)		\
+		;				\
+	_p;					\
+})
+
+static inline size_t
+skip_digits(const char *src)
+{
+	size_t i;
+
+	for (i = 0; isdigit(src[i]); i++)
+		;
+
+	return i;
+}
+
+int parser_read_arg_bool(const char *p);
+
+int parser_read_uint64(uint64_t *value, const char *p);
+int parser_read_uint32(uint32_t *value, const char *p);
+int parser_read_uint16(uint16_t *value, const char *p);
+int parser_read_uint8(uint8_t *value, const char *p);
+
+int parser_read_uint64_hex(uint64_t *value, const char *p);
+int parser_read_uint32_hex(uint32_t *value, const char *p);
+int parser_read_uint16_hex(uint16_t *value, const char *p);
+int parser_read_uint8_hex(uint8_t *value, const char *p);
+
+int parser_read_int32(int32_t *value, const char *p);
+
+int parse_hex_string(char *src, uint8_t *dst, uint32_t *size);
+
+int parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens);
+
+int parse_lcores_list(bool lcores[], const char *corelist);
+#endif
-- 
2.13.2