From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72]) by dpdk.org (Postfix) with ESMTP id BF0CB3256 for ; Thu, 6 Sep 2018 18:17:50 +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=4YjPSv1MUOV8IrSc+YZtKXndwKkjjBpIFtPjGja6r9E=; b=RnrKTbRuHDi3h/l4vHVdk/fU/XLz6I2gOHRVPxPMjMTuPxMS/3nOYuWIj6eeLUNZGYr4SU0rQ2hkwLlk45bd98ql3KpByV/je5mCo3lsbFs03HiBgxISlCmjZZBbGy17qpcbyWkEDNWXjrFOT0CXR5bIxppuDFu00YxN/Gs37A8= Received: from DB7PR04CA0006.eurprd04.prod.outlook.com (2603:10a6:10:12::19) by VI1PR0402MB2928.eurprd04.prod.outlook.com (2603:10a6:800:b7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.17; Thu, 6 Sep 2018 16:17:49 +0000 Received: from HE1EUR02FT021.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e05::202) by DB7PR04CA0006.outlook.office365.com (2603:10a6:10:12::19) 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:17:48 +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 HE1EUR02FT021.mail.protection.outlook.com (10.152.10.85) 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:17:47 +0000 Received: from super-tessie-2.tellabs.fi (lb03 [172.23.229.177]) by usnapvlsmtp01.coriant.com (Postfix) with ESMTP id 3E4C2401FE; Thu, 6 Sep 2018 11:17:45 -0500 (CDT) From: Juhamatti Kuusisaari To: CC: , Juhamatti Kuusisaari Date: Thu, 6 Sep 2018 19:17:41 +0300 Message-ID: <20180906161741.29327-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)(39860400002)(396003)(346002)(376002)(136003)(2980300002)(438002)(189003)(199004)(426003)(336012)(51416003)(5660300001)(126002)(2616005)(356003)(48376002)(8936002)(4326008)(486006)(69596002)(14444005)(8676002)(316002)(6266002)(36756003)(26005)(97736004)(6916009)(77096007)(6666003)(104016004)(2906002)(107886003)(86362001)(305945005)(476003)(16586007)(1076002)(478600001)(26826003)(68736007)(54906003)(53936002)(106466001)(53416004)(50466002)(50226002)(47776003)(2351001)(106002)(81166006)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0402MB2928; H:usnapvlsmtp01.coriant.com; FPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; HE1EUR02FT021; 1:oW0hndaW5sfy1y+j9aSHxzi4Cj1MO7XWFWv9XRucfLBPSUv2nNv//ge+cPGvYvKxJ+EVzjvrVwpbrLmVPt42KFmZI2k0ccdpfyEbBgSnVjXcXWTvrjKKeftZEW+3ZCpm MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fcfc21bb-1b92-4ba5-0da2-08d614144993 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060); SRVR:VI1PR0402MB2928; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0402MB2928; 3:TUvfUUKOqEQeV19RaLgA6I0cJJsskigPrx0PIPIJAnYvyBfmfUuxGyCI+4rwl8LQt5IFgHU/FD64PjkE8m/T+KlYlv8/nLjE8wZAxgx2KnUOOZgIbJV10OeUCgRiAuX1vu7cHmIqb+QrEl/Al03JckFNWZO2Fqg6lAifsYnyKYWFmg3vX5YvFUvdojByrIw4jIMyhM1gpglSE8kWihyTuciT3z6SD4hwzYFW4jrRsLsmlyGCgUdyBUV0Cv2cIrjB7yt7F8WH9bnNthCOGpc1FITbSdPR8wiBmfmZuDh8P5jqy38QWoLVtZ0S7qjn3Bh+nJ2HY/YCYuvbUKLovBcN39sO40SArmqqxg039ch4KTI=; 25:RTWbdw/KCgGO4GfEV+nvf+pxTCO1LB5s1PFeYRt4vuKGoijTRLojo6Dxi+wQKC1KrUxatnK9GCs9IeI03M6xjt8rFCl5ClWaiF++mjAagQmjF1y2jaeRJq12FuDgLcUitjFc2bUFEO8hPp4pN1QCWFfZRcVDpr1hJA07ZDXhqt/bnO027wjuQux06E6jIpMfzlivMGUWKhEcq3zQ6qxazsNFgmyHj5lrwlR4udObmyLAiKRCIS/PQbeJlGcxMjU+IRlCj4721JUoZ0vhoy6kXLw1sEB+AnQyRbz9W8U0YFztel5/cNeH0fJt3/UppdvyfgKN9scq5zzmOr5EMWUjPw== X-MS-TrafficTypeDiagnostic: VI1PR0402MB2928: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0402MB2928; 31:W5oZxktdGeYzP0cQshGtdnqhM0MGGolPVeF/I2lxr+vT+hU0ifRYp1JULHz4COXL8PjOBhBLLjU1trZGuDCnmXgeeyJrUM0V7aQL4qV+ZTugwK/Rpv0f5Lmn3LCnFtjD6lOK/lGj+FlIoOGq4S2GtdI2E0CMIxeLom69z+3sS4D7sAKMbHcslPXvx1xZQM41C/H7dcYEcDn0zDMxyfU9r15P6VUzxfmdhvd2mAjoZ5g=; 20:Cd3CLTG+M7GILl/qR3OyUkbOBWXaftaN0gVQjKhMavozfqKJZRhVEs0Rf2WhA75bKkyJWbMgQe7WkCue1hH4+wO+8/oVGVBBsSMJ0IQtPcRvl90px5BOPQvytMRBTTaw78BRYinm1xb4s27JxyZ7iHyWr5fzU0e2/yn4/v0AMeLg1LTRqESziHeZcXNpe3rm7hW9acaaOHFhX3tVHnzKcBkfcveOaaX6QsxSjalmpRjzIwX4IYAFRVRynfokbamOY8c3o63xoXRmaTLWY0pHupBIsmdCccWrwYtacq7lC2UVRYS/2iSRlO4/h4ZByXP9mixVzAx85Jkb92c+EPC6EVrhk6PavcsBT44Sov0UHjGbhcPesvIJYJJvy1b4E26rtLFyEammkl9hfcu19Hmsk2NEU3qqfzELXCf/H/LHt/QgU1fLxnW8qMB0FaCQfhvGNrMBGvDcqGXWWBZD8CKdpIFaX+ehkfqZ4RA93qF0nrfu2AhkTcrQNN98VCCllZu8Z9iuHEH8ZepJM7hixLsGxTfpDXQUWv7YHV448tO07v8EmHDF6hnW721mcz4E46GCn+GdPG24y+MuswPYZdH/Wq1JG/MzJTHN37h29Wcwh5g= 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)(5005006)(8121501046)(93006095)(93004095)(3002001)(10201501046)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016); SRVR:VI1PR0402MB2928; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0402MB2928; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0402MB2928; 4:OP8zX23OLup5D2fFguW2Lu+wutogN7XGdWTJxOVa3NqBwRk412loTb3WVuHCjvzfyqMRu4LDDoy7sY1hk30MpzXFiRhMkd890k9vyGZZRcmEUxd9/RXkZr2dXsIqWt2wbNjfDYzMZIN4MShxcTYQJEuhd/FERhjzQ2aoNeyipUsHRYTfLHiRqWdS/cDg0kT8qtvWJhg1UWsdu8rubQy3yTOGd/12NSRx/Bt/DQAdUEX2v/Xunk7cv2S7iHpg9Wjyu+b6WP2euE5fq3wM1xhAtn4Rg1hgUFUOmwFNUqQ+T8mgnKnlb6dlFTtllpweHaqg X-Forefront-PRVS: 0787459938 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0402MB2928; 23:jX6WZtDYlt8MTI6tcPBxSm2wwAJaQH4v8boqadt?= =?us-ascii?Q?JwUq7Yjfm7crEhmctW7I9VPMjWilfon6WAyFPZi/t2cZqC7zln1DhdRst6Kr?= =?us-ascii?Q?z+skaJm7u1X8clWqggF7hy6MMIrrfdKR+zy4GNutoq1fs5Xk7WA18SfP6sHK?= =?us-ascii?Q?D6TyL/736VIUX0Q3PLDC+V1rgMHMQEpnXF5hXL+MtiiDP6RxnfsRmLMyUKng?= =?us-ascii?Q?MCXXRXYGeQA1qAc307q8YVgMGV1TV/LBqY+bJbWCNHdfsxDbe3XMwzcEVsEU?= =?us-ascii?Q?0Zld2DWQR47H68g9MXfYCDZ8F6liC9c9k6RZ//BQDCQAReLZu7P0UqWCAntA?= =?us-ascii?Q?PY7E5p/rCBVM+AIUZ2snPNb9rLFgRT418FFJxbPzrprDhtRytZjSiPq4ONga?= =?us-ascii?Q?FqTVexXrurs5ZpHo6Hv4vXD4WJZ4h37b8rUrZJB4+XZB83B786kJe5jS6jgE?= =?us-ascii?Q?KY7h0CCHbEBwgL1J60lYJSVlzghy4LAwVs1UorAXSF5bYNehaY/33nkBROD0?= =?us-ascii?Q?8TAr7H5ujCQEE3v4ioyDCXMYfz6NXAhfmJbXT+OMsY8+FVHVwyIVh/EZ6yMP?= =?us-ascii?Q?AXnMlJnWwMqzbc5YJJWzWsvS+JrZzGLCy/F+ELjZK6W2c/YfOhxZK2kb5je9?= =?us-ascii?Q?NVVdDj8ZYeE1P8jEW5UTaa2DDgzDZcLYsbE+/sQY1iOQe0kon8/D0n4TyZR2?= =?us-ascii?Q?iNiS6Anuj+79I6Y3ySP8YS6nhZkVIdVDqMhW7Vrvq8hdbTuCT/WOOEZS+ULU?= =?us-ascii?Q?DpcDWrvLEKXR6lACNXfFbcfVphl5Z+bp517hwyd7oX1X3EBNzjykD65IiHy5?= =?us-ascii?Q?h1wBt9h6B7y/fJQTRonLvYK8VVXAoFnXC1sF/PqtWv1IOHcM5UovmKofxyJq?= =?us-ascii?Q?VOg9MBueyK1fdvyP6uuolc+oeCkyKzd3B2Y5F8LqH628Vi7yUWQ/kXbcJSmV?= =?us-ascii?Q?pUywc1/pcVKL00vM8ANcXPg/RpxkqGCLCiubEez3FKNBfdghMskXZ9XEyjqL?= =?us-ascii?Q?B2sTBNO04H5YzUsYe0Vfhht0kLJavLoURkMSz2O3UgQxwiv1UuDpDSYt0oH/?= =?us-ascii?Q?LVuD41wq7/28KkgyhL1XFRqRDoeWNCZfe4cnHbaaK8sxXGENpNUXu0eHuiFH?= =?us-ascii?Q?TiLcZlMMAE32y8CnWHgaPTcrrY0l1eW1RxQPC1Ue+Mi1m3glhu/0dB0outuM?= =?us-ascii?Q?NhFIdszrc4meMGV0=3D?= X-Microsoft-Antispam-Message-Info: h8oKNiS52+G/MOO9cET4HM3l0BDbWUL1HkLCBIBwSJM0u6cvCo0aRh313n/IrAtVLd5rsanMvVRrLWw1sHfewbz1M9NXYFrn4k49+lEeZGlVPPa1TpwzTkBHy4LmAlGadC6dYmI1wrnw8SZ7KcGOFdDzSuJQbDeX+OUvIkr1N5/wPMma3hnAJYEx7SMCcEhS5Ek3+/K/9ldqH2+c7SVceuTFmd6vU91hZAqYDw59h16XuJQsrykcaoV3gotXsNL+zErLQqmUppfut8AzdoREZDzUd8CUCLwZ/4wwrO/LdA3vOygFZL6dXu4xXD7f45N/bwFwTbp4m/W+E/rQmj18N5mBO3EMm4GvIZiDxfJfYn/iNE1jIE+pCf4jHkS5/IABnoh+s3DvjECehNQ9y/zdbA== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0402MB2928; 6:i845D2CfOBc5tQoY4n+SLB+4IigB2iYzxXbOUFOx0u0FTLEn8cHBYTihkAsEjhBvPBlPij0+gbrVYNveqEX/gmTcnjKmnS57RSNYNW49wDjjVZRM4zcIjEJ9hDstJdGYTgC8GaRYxVoFMKcBQgqMIMMeH22GJBYfrpXxIUuui0BQmmosdy1BmwEZaYXPNTCi6U8WN8u/OYeKRUUxzYVNwoKvxZMzAa/ucgkwTwrfVAxsjvQzJvRsjFgnn5yQbWvrSThZU98eR40AGLUnGChwFgiKlQpWQYmF3oxMA4pKRfSoagmF09zFdCcxo1YF8QJIZJwZjtPJkAy7nIJFs7v+z7EooA31UYXix2oNQJCJkY08SkMe2BgJAKzLMk6AMjD+UU0VmD9cWknP8NXcq0SqU07psXIO+WMEz9O7prq1wNIwFQMQi8KHARjqefMkjeIshZrKu0YmC/1Vl8Ess5ho8Q==; 5:n6WFC3VzQvy+wJJTIEVr5rPFE2wx4wGdd4p/jNkDxkWz8UW+fUlb03w0Fpk+Szh4HKFjFJgAHBQWGgIC9EOn/3UCK09KYJ7d3pzOUhb6SffaBnND0Da0mtXw4/kEK/pPWC8pYGy1h6JtlOeyfp7MG7NnbiMHrZWB0zE5nEchdb4=; 7:Gz8ULCbKT6pehnlupw6fY/76nLuZSkE24s7cw33jnjWO9jHuQwH3+AHdZrUXCPOxX+xV18XHNmj5SbMedjG6vXUxK6VZGLroBflF+Yq+IGKcHJLIhvei2pGbHhCf7unjzo8F53SNQuNsjPn+7H7Y/FQMmvnhnrro17GziCE3Qrq/LzbxkpLXwdvgLGpUfjJs0OS13pOCkJfKN4m/OTIkpwAVlrwsHcpvWe4zjhyyTkrWih5kTSNVCAG81xoYy8yR SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: coriant.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Sep 2018 16:17:47.9372 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fcfc21bb-1b92-4ba5-0da2-08d614144993 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: VI1PR0402MB2928 Subject: [dpdk-dev] [PATCH v3] 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: , X-List-Received-Date: Thu, 06 Sep 2018 16:17:51 -0000 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 | 117 +++++++++++++++++++++++-- 2 files changed, 116 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..4b932291d 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,77 @@ 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 +1031,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 +1041,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 +1049,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 +1068,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 +1094,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 +1122,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 +1190,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 +1234,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) { -- 2.17.1