From patchwork Thu Sep 6 16:08:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kuusisaari, Juhamatti (Infinera - FI/Espoo)" X-Patchwork-Id: 44329 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 38F91326D; Thu, 6 Sep 2018 18:09:14 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70085.outbound.protection.outlook.com [40.107.7.85]) by dpdk.org (Postfix) with ESMTP id 95A093256 for ; Thu, 6 Sep 2018 18:09:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=coriant.onmicrosoft.com; s=selector1-coriant-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ee6EKlh/NF7+x96tMXt97VnUT9v1jl9y+PMRAjegQuA=; b=SN9QR3DgTzpmZVVJTD+0X/qmZwzu4PwUyIVCdV/XcUwBI1THMvWPWEQHOKhOumxd6D4D7qWygw25CB2agmjmcGwyxggJCsWXGBdoFG1yg2Huxf/YYRMpKfzx0iOB62TU3wbqtZVyx2ifj1eBv/vSPCDCQ7C/wzdlW5swGujQDqI= Received: from VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26) by DB6PR0402MB2918.eurprd04.prod.outlook.com (2603:10a6:4:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.18; Thu, 6 Sep 2018 16:09:11 +0000 Received: from AM5EUR02FT055.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e1e::208) by VI1PR04CA0055.outlook.office365.com (2603:10a6:802:2::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1122.15 via Frontend Transport; Thu, 6 Sep 2018 16:09:11 +0000 Authentication-Results: spf=pass (sender IP is 204.154.131.209) smtp.mailfrom=coriant.com; coriant.com; dkim=none (message not signed) header.d=none;coriant.com; dmarc=bestguesspass action=none header.from=coriant.com; Received-SPF: Pass (protection.outlook.com: domain of coriant.com designates 204.154.131.209 as permitted sender) receiver=protection.outlook.com; client-ip=204.154.131.209; helo=usnapvlsmtp01.coriant.com; Received: from usnapvlsmtp01.coriant.com (204.154.131.209) by AM5EUR02FT055.mail.protection.outlook.com (10.152.9.191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.1101.10 via Frontend Transport; Thu, 6 Sep 2018 16:09:10 +0000 Received: from super-tessie-2.tellabs.fi (lb03 [172.23.229.177]) by usnapvlsmtp01.coriant.com (Postfix) with ESMTP id E4A8740262; Thu, 6 Sep 2018 11:09:08 -0500 (CDT) From: Juhamatti Kuusisaari To: CC: , Juhamatti Kuusisaari Date: Thu, 6 Sep 2018 19:08:50 +0300 Message-ID: <20180906160850.29231-1-juhamatti.kuusisaari@coriant.com> X-Mailer: git-send-email 2.17.1 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:204.154.131.209; IPV:CAL; SCL:-1; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(346002)(376002)(39860400002)(136003)(2980300002)(438002)(199004)(189003)(8936002)(104016004)(50226002)(81166006)(81156014)(8676002)(47776003)(54906003)(126002)(106002)(1076002)(476003)(97736004)(26826003)(6266002)(478600001)(4326008)(69596002)(6916009)(426003)(86362001)(53936002)(36756003)(336012)(6666003)(50466002)(48376002)(107886003)(14444005)(51416003)(356003)(26005)(106466001)(53416004)(68736007)(305945005)(2616005)(486006)(2351001)(2906002)(77096007)(16586007)(316002)(5660300001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0402MB2918; H:usnapvlsmtp01.coriant.com; FPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; AM5EUR02FT055; 1:1TiHtOztaUXo/PHJnwsOoc9NkiMZw4Y2n2/rErC7f3y+dlalOR2no0F/qiWqPWwow/SF1H2CYaECz/ecoo89OtBiQW/ppsCR0zZxGBP3yuqYQLXackjVL5Cd8uCg9wAi MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c9048759-1bc0-4701-9c77-08d6141314d7 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060); SRVR:DB6PR0402MB2918; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2918; 3:TgNQAqFU1PnyGyxXx7Y3pQbvKssPDV5Y+nXHa1YAePcGCNDOxIioAzXF1oxK39+AJXRaq4RdNiWkADsjRTnsVVFhNcsMhC3QvuohA5j3TjFLfVD5XaSRW/8QmWqlPuE3w0x/qZIs5u0pFnTimNJ7RADSF8NEwqhKZgwrnvagR6gABtDH52uo1bFkcu+EW1beYGeEnYlWXKXwpEZyJ6E7tk5xTzpZAo+1lg8vQ6dLCkHxdwbDrZp7UN+9g/rXGccT5R3FelBFkwuBjFXVkC1I5edtOOvJGr7pTO8+OxPKNAPVRRqKYiHepiHlV4GyUIkYibtvwT9Hs0KYeChDEjzhXpR+QboK4PaTkHUMMpQLMC8=; 25:r9rd4E4pClvVpoSShaz2vSiOXH4X9F6wG8bYqymVz5rYkCc2RfNfd+zL03rl5y4jNEAaOHCqSzyHAaYAMMxdL2/ccdQfZTh7lDxGY7NoQekZiyl2SiuUZubj7tYwkE4itMNKSaNa+frHkPLxs3yYsFy4lwtnXyfKbbxJ3z5sIqI3B7MZvficqyu7D1vMp/o+MSqGewBK9CXWr03+yyGbqWxe2tEW57jElIZd2r5qT1Q6mqTnIOYWLBD8JarxMI7chl5zylrd0VX3v06Fvno3PO9AKQP6SeRwmsjzFEe/SbEaMegGZe/BPOCVrW8O0uwnIRQLx8nTOWcNod/Y4t9xEw== X-MS-TrafficTypeDiagnostic: DB6PR0402MB2918: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2918; 31:Zy+z5AMpMNrQwOZkeI/iMBDNUw2kNxq7qMDrn8c3zVuSeEGIiE4y+bcEjJwQOi4FtnNJNEsiyviTFxDA6whrJEopdGq4G2COXsKTN9Ey1qBq/t1J39lAJIGv4Qwyn9apOC6sR27BZpvuj1SxlKZrsvP5E1Z/oIzRlMXZuLDMo5Oe1C/gRAu084Ka0oL7HvygGhz1pnv2K0rAX2T5YN1s+uQWyEWDprd6B82oxpQ0+ks=; 20:M7uGMYoAj/At7HigGki5wXNcPzsG8mrYUQS5oJklSL0HzmeHGdmcG1TPIWeACxgQfI4aLjqRQmHZCV48othv7au6DDSi7wHCSQOs7h95ob1cLrLQmzd5Vuk0xokGTvLV0Ld2sP0/o3V+aIxaHTcRhxW4KtY5Jqi7rfzHq5gwfgYlKQGFpSyDqPqT5sWzAuT2Zmv+u/C64c46hYCwrMimBqb+bsqvS3KSqjYAFAo1EzhDAjP9b4+ZeSoLo7hFihxfRkyOb+fwUpMuZ9PHu0p1uCbnTT4kybC5F4If/U+0Ym1a1ZWcEXbYgHQKN+K++YreXjqwrcvOgDh5DBJJKS/uDLhSaKhpRqv2/JtUR1d7CAo9NgRoN7OrFxBC+EAPyTSQHxRX/7GuiRxCkAovxlati3ZOcMzxtqbFjgPnEC17LpVd5JpGaamR/Y1utPLwsNEqyBFUR0XhRq9NZPa/dYq+BvzIEqHpA6Wh2qZdnbLX1tBmj68HClBQybSZQGPrPE51b6oOfo9APHKelsKZSAhOewF0A7RCMQLQnWjPqMBAWJRLmheDHM1XuK0C7MtXF9heiGvsoeNmEovXj/n5Gwahc4HIVqCflcnqUCzYlTSF2VU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(51653755401839); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3231311)(944501410)(52105095)(3002001)(10201501046)(93006095)(93004095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699016); SRVR:DB6PR0402MB2918; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0402MB2918; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2918; 4:LtZdOlS+IkAuQiS2/YlvLkQDr+H1ztVfLG9jKkSMjg2vIq0wf8Kbpj+IQnvPyRzJEXo0neB4RuVOiwEeh4MGX4hI5fdDkDnQdv7cVNJhE0JGk8afSQUBpLDtLrLtihObvIhNuWpU9Q6lUxdrF1Q8BedR+KgJJ93T6GBWdKVKYRIv9PrAtHo96//6HmOPNYlG16WxpFmD14Z8a/ak/KBVtbqxl4aq970yDZdskzItqygR1J51DbM/8XLYK1EkcSEpCIxvg7uoca9/h6xj11WUOFFAlFSNizNfWA8X8jd2BIIPWX67EeWoGdvlhkumQhua X-Forefront-PRVS: 0787459938 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0402MB2918; 23:nzUs49Ohe/63UZW2I95CybOR/dqAFw0QaEILbLh?= ss+HhmiaMyk8FrA7VPICSH7D5ZmM4xpaKssdDMS+6FBIbndPIs+h1roQhWcNcnaM4HaVsUNrpwBc8PlYUY4MpeVEhmXx7CrQImPR3W52WgH7wFbm8HUsckDEovj4eGQS69sX/hn3BSp93P0A6Blb1Ft2iaF+AiKjjO2qeFOl1NO2rKzgAEgcgcv8+xQ8GIFcbW9ib9FVQJyPCk1HyZKxZA2j6OZI/yizqgTiRL/+YMLz0An+oHhm5IvEPsNURwKOFo62xRZqtFpKEeahllSDOuDcDAmukbcnvhAU7tWunp7Cj+HAbIbgcKeWJK1vmP2yIMbITpu1ApUF+IhCw38J+u+miWPU1qog9o4JnnUEwd9hTiNzoy+MTA/uQLXQvTfKMoQASTlLy9NuGRZ5N6uFCtDhJcTwsiawLoH1pb6cjLyacErN59GIE2Z9rR1Ncec7whngRtor8A3eKBOHiIQMExCUfqwImA5l4Qj1vme0CQklrwMhZ+txpjFBQC5dKcHyttS0G2SjK3WYtwF3DMHF7xPY/pqAVgQdLR09gpI4dWDHV+0/Qsl+mGWTFgiSBcBJaYIHdeS0dZjnvtsmPrKTsfnRK1pgzzS6cnW1aO9j0J4U01Ww+79NhYZaySzhczGdS97d9MTAhCbrOskYCfoZ4twU2uK0HYUY9In6CKAWB9uWnJ1rkj7lKUggC36lajEr+eZ3B1oqPMwH3dg3Lv8YyDva46+TH2a5zNWcVHdOr5g7jPb3j86L6M3wuyJyNUKMkObjbXech3M7DGfHtxwfCLogSgR+piup2SWeLkR/0j/IVKgoIZk3NbkehbicKKUxn2ZCKac3TSMgVQxo8+isr5ZwLahg9XCzKTM+A8XfLK1Q6/20U0eYXeT0pFjxwGDeKy0iirphPCI+rQUrboOrgM0Qpvmg68kXQoe9knA97EpYHdY+oQ/MYlqOzmFdoi09X8/Px/nLg6f7LEUs2q+3LnzQBugWEenzk419rk0oX+EwNPN8kh42jXbHjjs1DkZVeakcbIe5BCNX7mX8+ZrV1xFXsUlhDbO5Ih6um1bALb9gMZgkmzKHbMS5rYQLjmVo20PzAz/D4J3J9l+s8ffHVi4hJzo8hE2n/eG78WfK8+TTJkmy6kVTolm7ielWaSblt6wE= X-Microsoft-Antispam-Message-Info: JXsYswAH6Oz1+DuPblomvmILxL4/x9lYdK29lb8+gW4kYEAGpqDFgiPoKLVWQDq2w+YApXjIqjyyKoZaZ31H2rZ3ZEFXAttmwyrwhnXXiXHswUjlRGxOtlXt+s86xUx45MjH/AD5lH74jOa8Kkb4V9+6sifQrHNEqWnp7pftWifECYgQWRq9xxwqazpPeuAu3tSooSibL1xzu7kAA6A0+CWJiHd/NRvYWnGx62KG7okx/IFpcdARMRQImUmQ1+1WyUomkN8stUQ6VyQ4AnGLWSpBZKzlNLZ74i4jxo6dowqbdFELjvrS0n/Iv9c49JFQg/XNvmeNethn/pU0QdPbxVaVSwwz+I/4eDSKH1LeOFMtIGBZ7Wmf+P7nihtr1oxvGi5s/1hHA79tX/pvfoFMpA== X-Microsoft-Exchange-Diagnostics: 1; DB6PR0402MB2918; 6:ZKO5+2iRgU1waj9ZhXVP7vFQarAvWOzdeFNACW0zv9dhcf26Xihpyzs9uxRCWdnkQ/BdRL39Bg02cxsg8fiB+QyPVaa6FJRg//2FTR7AzXyi73BBWwg8o1p34lDTu68AWYyYaUbh2nTOKll1chSy3fs5hTYlDhjtgQsaXAexXAgkrB6t8Ep6Fv+08o4RRXh29kqZNtUD4hoIVTyZl2ciajIu+GXGdarY0eXLaBU07jeuXmX2eaKiBn7U3nVanya3VW2AhtsWK0dxlbrfdUwLGqQe77fbN/glz0Q72iyRTWuXqG1UFykeO/O6jldMXJbPWKVN71umSQ8rLj6wyYJyjm+9rn+aFUXy+mpLDY+QLgdigYOTjdZ7XXRc2tlALPc9M2Xm5+PQTCCs06yraorAohiQMz46SwF0bNlwhbFk1h4BPtmUX32kwp0/6B79UpE8VZW85dUu0Zrtanc8F52cog==; 5:OTQVGnzavcLv7YorIWxcKvq2JgUp5GE01Ctf/msHhsMpv1cQkK5FDoB8mZgfe07IRNO2bm7B5xXcD4vnuIm2KOeJAtehuK+OxLhRl2uzS2OzBK1SEOdsvJT2pXqTpo89zP2O9smnie7KT5O7zelFDlw0mAyMo/SMSmpXzpQORms=; 7:wnLRIp3zAYoKxL369yNISr2cvsIX+n7WPVKeKAAYq6oFpdvlWh4C8qKy2Dji3Y+ZpEU3fpEpQb+oVGG/SJgKVUwnXP78+/qIprnlMJqjSgTUzhgeGgfWvQVUiitPjANjRG/SHSEL+aiUDVd3KvAIcgnMFUwiGl0HP5VrZkjlRYuVOg1MR8CZZQPYkqu22OsLiD3mzjmtaCBpZ6xQAVg9tFv8M4HsHKvlEFjhdu+d9QI60YMua7TF7nr/5yz4mT6I SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: coriant.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Sep 2018 16:09:10.3612 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c9048759-1bc0-4701-9c77-08d6141314d7 X-MS-Exchange-CrossTenant-Id: 76595477-907e-4695-988b-a6b39087332d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=76595477-907e-4695-988b-a6b39087332d; Ip=[204.154.131.209]; Helo=[usnapvlsmtp01.coriant.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0402MB2918 Subject: [dpdk-dev] [PATCH v2] net/pcap: physical interface MAC address 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Support for PCAP physical interface MAC with phy_mac=1 devarg. Signed-off-by: Juhamatti Kuusisaari --- doc/guides/rel_notes/release_18_11.rst | 4 + drivers/net/pcap/rte_eth_pcap.c | 119 +++++++++++++++++++++++-- 2 files changed, 118 insertions(+), 5 deletions(-) diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst index 3ae6b3f58..70966740a 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -54,6 +54,10 @@ New Features Also, make sure to start the actual text at the margin. ========================================================= +* **Added a devarg to use PCAP interface physical MAC address.** + A new devarg ``phy_mac`` was introduced to allow users to use physical + MAC address of the selected PCAP interface. + API Changes ----------- diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index e8810a171..1c3517eea 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -7,6 +7,14 @@ #include #include +#include +#include +#include + +#ifdef __FreeBSD__ +#include +#include +#endif #include @@ -17,6 +25,7 @@ #include #include #include +#include #define RTE_ETH_PCAP_SNAPSHOT_LEN 65535 #define RTE_ETH_PCAP_SNAPLEN ETHER_MAX_JUMBO_FRAME_LEN @@ -29,6 +38,7 @@ #define ETH_PCAP_RX_IFACE_IN_ARG "rx_iface_in" #define ETH_PCAP_TX_IFACE_ARG "tx_iface" #define ETH_PCAP_IFACE_ARG "iface" +#define ETH_PCAP_PHY_MAC_ARG "phy_mac" #define ETH_PCAP_ARG_MAXLEN 64 @@ -87,6 +97,7 @@ static const char *valid_arguments[] = { ETH_PCAP_RX_IFACE_IN_ARG, ETH_PCAP_TX_IFACE_ARG, ETH_PCAP_IFACE_ARG, + ETH_PCAP_PHY_MAC_ARG, NULL }; @@ -904,12 +915,79 @@ pmd_init_internals(struct rte_vdev_device *vdev, return 0; } +static void eth_pcap_update_mac(const char *if_name, struct rte_eth_dev **eth_dev, + const unsigned int numa_node) +{ + void *mac_addrs; + PMD_LOG(INFO, "Setting phy MAC for %s\n", + if_name); +#ifndef __FreeBSD__ + int if_fd = socket(AF_INET, SOCK_DGRAM, 0); + if (if_fd != -1) + { + struct ifreq ifr; + strlcpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name)); + if (!ioctl(if_fd, SIOCGIFHWADDR, &ifr)) { + mac_addrs = rte_zmalloc_socket(NULL, ETHER_ADDR_LEN, + 0, numa_node); + if(mac_addrs) { + (*eth_dev)->data->mac_addrs = mac_addrs; + rte_memcpy((*eth_dev)->data->mac_addrs, + ifr.ifr_addr.sa_data, + ETHER_ADDR_LEN); + } + } + close(if_fd); + } +#else + int mib[6], len = 0; + char *buf = NULL; + + mib[0] = CTL_NET; + mib[1] = AF_ROUTE; + mib[2] = 0; + mib[3] = AF_LINK; + mib[4] = NET_RT_IFLIST; + mib[5] = if_nametoindex(if_name); + + if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { + goto cleanup; + } + if (len > 0) { + struct if_msghdr *ifm; + struct sockaddr_dl *sdl; + + buf = rte_zmalloc_socket(NULL, len, + 0, numa_node); + if (buf) { + if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { + goto cleanup; + } + + ifm = (struct if_msghdr *)buf; + sdl = (struct sockaddr_dl *)(ifm + 1); + mac_addrs = rte_zmalloc_socket(NULL, ETHER_ADDR_LEN, + 0, numa_node); + if (mac_addrs) { + (*eth_dev)->data->mac_addrs = mac_addrs; + rte_memcpy((*eth_dev)->data->mac_addrs, + LLADDR(sdl), + ETHER_ADDR_LEN); + } + } + } +cleanup: + if (buf) + rte_free(buf); +#endif +} + static int eth_from_pcaps_common(struct rte_vdev_device *vdev, struct pmd_devargs *rx_queues, const unsigned int nb_rx_queues, struct pmd_devargs *tx_queues, const unsigned int nb_tx_queues, struct rte_kvargs *kvlist, struct pmd_internals **internals, - struct rte_eth_dev **eth_dev) + const int phy_mac, struct rte_eth_dev **eth_dev) { struct rte_kvargs_pair *pair = NULL; unsigned int k_idx; @@ -955,6 +1033,9 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev, else (*internals)->if_index = if_nametoindex(pair->value); + if (phy_mac && pair) + eth_pcap_update_mac(pair->value, eth_dev, vdev->device.numa_node); + return 0; } @@ -962,7 +1043,7 @@ static int eth_from_pcaps(struct rte_vdev_device *vdev, struct pmd_devargs *rx_queues, const unsigned int nb_rx_queues, struct pmd_devargs *tx_queues, const unsigned int nb_tx_queues, - struct rte_kvargs *kvlist, int single_iface, + struct rte_kvargs *kvlist, int single_iface, int phy_mac, unsigned int using_dumpers) { struct pmd_internals *internals = NULL; @@ -970,7 +1051,7 @@ eth_from_pcaps(struct rte_vdev_device *vdev, int ret; ret = eth_from_pcaps_common(vdev, rx_queues, nb_rx_queues, - tx_queues, nb_tx_queues, kvlist, &internals, ð_dev); + tx_queues, nb_tx_queues, kvlist, &internals, phy_mac, ð_dev); if (ret < 0) return ret; @@ -989,6 +1070,22 @@ eth_from_pcaps(struct rte_vdev_device *vdev, return 0; } +static int +select_phy_mac(const char *key, const char *value, void *extra_args) +{ + if (extra_args && strcmp(key, ETH_PCAP_PHY_MAC_ARG) == 0) { + const int phy_mac = atoi(value); + int *enable_phy_mac = extra_args; + + if (phy_mac != 0 && phy_mac != 1) + PMD_LOG(WARNING, "Value should be 0 or 1, set it as 1!"); + + if (phy_mac) + *enable_phy_mac = 1; + } + return 0; +} + static int pmd_pcap_probe(struct rte_vdev_device *dev) { @@ -999,6 +1096,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev) struct pmd_devargs dumpers = {0}; struct rte_eth_dev *eth_dev; int single_iface = 0; + int phy_mac = 0; int ret; name = rte_vdev_device_name(dev); @@ -1026,6 +1124,16 @@ pmd_pcap_probe(struct rte_vdev_device *dev) if (kvlist == NULL) return -1; + /* + * We check whether we want to use phy MAC of pcap interface. + */ + if (rte_kvargs_count(kvlist, ETH_PCAP_PHY_MAC_ARG)) { + ret = rte_kvargs_process(kvlist, ETH_PCAP_PHY_MAC_ARG, + &select_phy_mac, &phy_mac); + if (ret < 0) + goto free_kvlist; + } + /* * If iface argument is passed we open the NICs and use them for * reading / writing @@ -1084,7 +1192,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev) create_eth: ret = eth_from_pcaps(dev, &pcaps, pcaps.num_of_queue, &dumpers, - dumpers.num_of_queue, kvlist, single_iface, is_tx_pcap); + dumpers.num_of_queue, kvlist, single_iface, phy_mac, is_tx_pcap); free_kvlist: rte_kvargs_free(kvlist); @@ -1128,7 +1236,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_pcap, ETH_PCAP_RX_IFACE_ARG "= " ETH_PCAP_RX_IFACE_IN_ARG "= " ETH_PCAP_TX_IFACE_ARG "= " - ETH_PCAP_IFACE_ARG "="); + ETH_PCAP_IFACE_ARG "= " + ETH_PCAP_PHY_MAC_ARG "="); RTE_INIT(eth_pcap_init_log) {