From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30043.outbound.protection.outlook.com [40.107.3.43]) by dpdk.org (Postfix) with ESMTP id E82534C8D for ; Thu, 6 Sep 2018 18:39:27 +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=FF2KweRZWGTiee68zgG0iiG4/7fTsj9j1ve++hDLuAs=; b=PnUMOSHL4K6jonwRL400gef7/bscPtMdU4J+aRBFTxCwWFGuPurKcP0E1AZliZwOmcm3Z3rh9qqyI3CZDL1rGmurKkpX56oobkbiMsOwxM5wRtGo/z6xs7pToUgXVmY7o2VOGMCnNanDLccqEhSQMvD9JdwLc92j4xlWJIC6YH0= Received: from AM5PR0402CA0015.eurprd04.prod.outlook.com (2603:10a6:203:90::25) by AM5PR0402MB2914.eurprd04.prod.outlook.com (2603:10a6:203:9a::16) 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:39:27 +0000 Received: from HE1EUR02FT038.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e05::203) by AM5PR0402CA0015.outlook.office365.com (2603:10a6:203:90::25) 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:39:27 +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 HE1EUR02FT038.mail.protection.outlook.com (10.152.11.30) 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:39:26 +0000 Received: from super-tessie-2.tellabs.fi (lb03 [172.23.229.177]) by usnapvlsmtp01.coriant.com (Postfix) with ESMTP id E66A24024C; Thu, 6 Sep 2018 11:39:24 -0500 (CDT) From: Juhamatti Kuusisaari To: CC: , Juhamatti Kuusisaari Date: Thu, 6 Sep 2018 19:39:21 +0300 Message-ID: <20180906163921.25671-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)(39860400002)(136003)(346002)(376002)(2980300002)(438002)(189003)(199004)(6666003)(81156014)(2906002)(305945005)(8676002)(50226002)(81166006)(97736004)(36756003)(8936002)(53416004)(2351001)(106466001)(107886003)(356003)(26826003)(478600001)(6266002)(53936002)(48376002)(68736007)(69596002)(4326008)(104016004)(316002)(47776003)(14444005)(54906003)(86362001)(106002)(336012)(51416003)(77096007)(50466002)(126002)(2616005)(476003)(426003)(26005)(486006)(16586007)(5660300001)(1076002)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0402MB2914; H:usnapvlsmtp01.coriant.com; FPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; HE1EUR02FT038; 1:JZj+zXdQaOua2oPHrIlbUbn/cbG9F333RMP4tw/j7abQ+SZpFxqIPa/I6F9OuP0llzjo0sn7Er5z1ZtORtjfNsyjuaEBKdGhAxaNMm8SYiOy5OEfMUxxyIkeVPETCgiQ MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: efaaf5e5-2e89-4c23-a375-08d614174f79 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060); SRVR:AM5PR0402MB2914; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0402MB2914; 3:OpcF9JClF7W2Z279GWZ18TiEn+H4uXU6yQsZxtb8fVrn8A7AN2esAERvshRv/ix2QeCV7aYh1iPAOnDFfhonkzeWHR5NHmVFzqVGq4Wci0AEpTWpE1ziwFBDfjBotqPwvO8Elq3QVRcym4SNvPABwBNaH2hXtrGzRuNbsVmQMSXt1/1TKunzY4F0VRsRsK4fZKQh8+OnDNjEr2lfZZ7RSDOAhmbVSKEkh9M/6sYJqRfWYlNt61cXjajCGH24qyCDHhHO4qPIxhiNkCzrCnf7BDYHrwdaWJTXSRR4DqO/mNC1QKRM4dtvBbaMl+SZl3gDGEHLONhzLnR5fNODpHWbrxH8IthK39iPhPWC10PQttU=; 25:EkWest4tamLsGs4zX5mWE1FBfKAYfB7MKHhP2eAuhh7QXxHSSjs44wDlSqTCizQIcTxs/C4VACC7NIuKweeq6TjVrZWkl3MJeESNeYsx/5OU7S6u0Emxvvsbn+ijsyBxcY4vCqxa108FowSF4s8I10sIuQf5rFQUB9HbtPuA16reYBSFwv5JqV1I630UMmhN4IYROiqiEqkfGGueuoLe+Q6DnzQBbCxDzeJwUmBP/QosAdnaz+W6FfZEn91fidRPQl4Hz8xN/dSr6ut9NSCv+8bVpo7zZRv4QFXVRXhVQKpd8yG031s7KrWEyQCp4Wm8/e4A5yEj521AyoMb7bEuig== X-MS-TrafficTypeDiagnostic: AM5PR0402MB2914: X-Microsoft-Exchange-Diagnostics: 1; AM5PR0402MB2914; 31:2b++K05bYRcTSqbZ7lZAqqt02S4ND8MPAaGNC9Cc/X7pRswZ+/nLwyz6BPqMYpI3RY9K1XQ4jgpRABbY41eJ1FY47Qe08gKUOosYOmIZWUWmGcboSt8OFGIfMqkQpfgGlvrXN8fsuyn65l0CPjhlFW6cupdzT0JyR/zbORFwNXVhz/kqj5X7w0+r1l3BbFp7GKaHQ0fzSW1XUD8IHx29rD8TJVPGC1sPygHeXLVv5Vg=; 20:A4pO69bQdn6sAZKiCeyIpBqCYlaJ+CNrSdo0l+rrZbs/aWqfE38ONRzUL4tx0wP7wRujLrZrjQ99y19P+fd92pmb1UZozgIJmBBGb7sb9LBXrjExamCv/E0Vc+Q+cbndwUTqVsdWG0Ih7/A6GH/gztGOUNLge+WQC61+JIOvJvuUvNdrQ72IovqCxXbkvj6vDOZG0d1kflah0vdC7LnSg4W4nvoqXUUv+sBinHgOBls9zq2iTTfKyc3zDt2z/hwcF1Q3AOmU8WcYuqFQy5Rt9sAStXQk4O3UhbUgx47aNuUixUGO4VQuE3kASUm3ivvBFb+/KlOL6wy5L150o+Dhm8+gpxU8RHpqLLZQlFFzD9WQIxxx57yAzN4D49VTK+BFYXtuzXsz1boDuMYRZ6a3R8EmYPQGU2dZUbW/yG2ePP3vXI2vR+A3JMNCUqXPVPQWhMsxYVwlOKya/Xqj0VoxA6TqSp6jQqRdVTADWMegmdnWAv7DxYq5UgH4ilX+RIxst0qUhxUfnZRh+IBLNmmT1D9HUugjIIL2UUjD1FeFqDUr2dTxlAxlJvcfUnaIw8ZswPV35jsAr8fwYcRFccIMnSTiteOU+fgp5TjantEE47k= 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)(3231311)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699016); SRVR:AM5PR0402MB2914; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0402MB2914; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0402MB2914; 4:CHAUVZraTZ6yNL0fCo8dM+4NwzY5fkng2e/hnBVOaqLiC2gU8zKizvhQ35gpsopksH7uRjC6BAAKAePf3fmaLPaW2XrHrVV29t5WWmhG8hvsbca9LNa1dR1h281ecOrsvnb4hzLzOXqXuSwnFEu9YX/OgnL6Ti4Ay59JyJ9IP5/tPzhgIuG9cbkRKsuag6qMwKW8KFt7pJOmWXrJVl8uzlYYl8QX3w78FvDQBTic+oFqto/j9cren2Xl8NgXECA5khxaISn8EQphiH/yKRfiSR83wjCHHNU+Qqeq/nvZvyUMz5osSJUltyjPFVtx6/O3 X-Forefront-PRVS: 0787459938 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0402MB2914; 23:0ostkwgLtFBVEVNkxwd6xeYOEewRK5JuOvIVh2Q?= =?us-ascii?Q?lyn/IDEnlmGF4hh2nT7zScXRvfCKv8d2M89M7A5kU9eRRjhT0gl9/fgTK9J8?= =?us-ascii?Q?GCDGMI7JSeMwNQP6GFXIYuAZfv0DV3W9GbOagtWVH8w8l0wsesMOL8x3b+CL?= =?us-ascii?Q?5DFDbFB8SEtPHuOXcu8eHMClLiRHhZ/xrgJLSa8lPhtBrf1irRIahWLH6Hjp?= =?us-ascii?Q?mK28VSS5Y5Z5jx5eGBP1d8n2wfh2irSyzos/lSlCSdvgD3y6QqZYtahlZgWc?= =?us-ascii?Q?3/0Yo7p6cfDPReEXn6vvwywMPlFbDqC2TU4QHFqS8lYcLvwPf5I4hJ1HU8L1?= =?us-ascii?Q?ouGXFSdeqTrf3EbOwCG1xgxJNMSyu3kZvG4iU4bTOgdfybKoK+6eSwQnuzoe?= =?us-ascii?Q?sudNxW0IuGv8QJkTKORLSGGy3fVSUr36Vmo/An6S/ap1rtk4gCmn2n5EM7Pi?= =?us-ascii?Q?BtRFFMGw/XTTtJhsJXEf+2gYErITMOc6czlG4ae9zt5lJF07cWDOjNPtpHXx?= =?us-ascii?Q?6xkk9uwOVWBt+9h/wMQCeSUDoBXAaBDdLAemQSd4FjrwMTpEtRFA4ZkfXAc1?= =?us-ascii?Q?I9BMOuqDMdgHltmf0g861jg8SFE/jtpJV1imBTc1MMkt//f4YoSKQngRJ9mU?= =?us-ascii?Q?d2Se5oXNwzbjhZeb3j5028UhDrQ2bEY8R/ABw4vlgXX46q9WEa2GvE+wWuJN?= =?us-ascii?Q?Y4gkxyl9u6ogXVkDTz+MlEfUfTCYgxbyaTPv9FwllLFAmfqpPyE2T3Q+K0DR?= =?us-ascii?Q?C/xcw3cji7dMsF0P5ax0AiN1JcerYgo+2+KUQIK5tLp+3pvayKxQgR98kbUT?= =?us-ascii?Q?XKvJ4Z2hzWnaqJ2eZ1SKYByDw7BJaLe57UY99bv+tdtt26JsDRTZD9D8E/Z4?= =?us-ascii?Q?tCvNK6CG2S3vYjiu8gbHbo0TAw2DF0bQmeKjibtgK/5YsPpoenSq/7VAbrrI?= =?us-ascii?Q?6fIbY5LlKWHPHd+t4ZxCzivERiDhCgCJYx4WU6xLukHZ1wJgfB0bBbXDS+HN?= =?us-ascii?Q?qMFuy/NQYFki9v+2PJigN2LNYOJ1jUWJjCl1WkG2jFi6TIEFyGTMkvcdOKrQ?= =?us-ascii?Q?kz5/tZzxhqOupb2r71yQA3nrFz7+ZX8mdaLAppH8bxmsPfVMZ0htPLhPXneR?= =?us-ascii?Q?K9KZdSu4zeWL97EL2jyq2x2zwmvCTlG1wvixZ2e6SkJ4rm59i8Pl69wnIQe6?= =?us-ascii?Q?0zEvvL3OjKOHYE4c=3D?= X-Microsoft-Antispam-Message-Info: yWXADwX+VZpkYyGs13ME8OIDUzPXJ3Te7Hr7LMr7/gK7neLNMsfmUSYetJH1rI9kpwDM9/8UWTiipzTU+DND1oaSGppPvp61gF/8WE+3owbFD7VQa3n2T28uuw/GsnnIXCbi729gGUg6ST9Pcuc4pRhEmcI7KOOz5K2KjySiNsHSMrER+F46xx6VMb/nzVzYWQg66eu3YSbXkvg2wOTmP5eCDY/AecJbd1RVM3LrXqwBJANTX62YUwvE3NjZ8K4/NezWJEI7AT3ce6p5DVfBF9dDrFiQ1lcOCRXieN0RZ8rW7l7W1WzYVHWjk4f47zJ8lhGtm+UrxO3HL8HMzV3abvCmAryEpA1m++a+YvgBBVZyRVILvi1qgsdlcTYLPc8kv/BhvHis4aa1TMQrx+Tj3A== X-Microsoft-Exchange-Diagnostics: 1; AM5PR0402MB2914; 6:Fo8v9DUg0L2hgcvO0gf6qJM86JeR3ALK/O8gOENzpt5Nzv2mHeo8FilFtJMCYjsq9NA+xlyMhUGsI8Zxi2mHx5ZysWhPGLTFZ/r/MOSXfCw6IkJJ9FeQ/GewoQgAKyN16tg36TrD5o4pGI0qWZNZz30nBez+G4Rog9dEhnxYNqCeFPLx/irtkc1MDhBgp6SvreT+It4+yeNKKEeNrKArmDF+77cWRfXK1+tlktkigwTnuNpgN9pmdu6T9v/qyViwqf+DpkUN+QjlDPvDtW6Ns2/eCEjFt2bgWNa41sttVIldjwEppQAwQvN9y5Oq3Z7X+deCRnylOxAWMW3lMSYXYpDgKVuPv0E9gDojDTF5Ho9otObwEs3dZiR7EP24zX01XpFKlSZHPN4ZFucSZwKfBDSufe5qcyKE6vhw8ysc9d+H9S7nIfYTsdWf+niP/OQnuvpkwuPJS1D4r2I4Ja2ovg==; 5:cZ4+hJI331ZcZQ2YL4r/5tb+OIiaPJX9yo2526BGmLUtt41nsR9Nidg0XYN97rRSQKfoqBYRAoiSlAYjVhyedzXFrDI4deK66rQIS9xaZt4VNqAiQgeuDpmkssu005upd70XcBsgA7C0UlNzonGz9LLWTgvN6rS+bJvAk/YOex0=; 7:jDcH2gOi8HQjICgZpAxRIN3ZmI+jRaihI+/cbacikSf4IggdPE6wDhfQfClT9Bv7m5NjgJ97GpYgUWIlorzNQa8L9c1+W9E6pNmQcZcnIR6sJ892T5wQsFMIbKgyUpfuXYREgZClJv3xejFdUGZc2J7I9i3yCTWQSoz6Ibq9Smb/iZALiYEaxagfhgc0pbyLGWFz5K0ACgKKORb6Fg+qDWaxlDVsoVC9b1ysN2iJbauRffzO2ykfYDNa7XbPE9tY SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: coriant.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Sep 2018 16:39:26.6553 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: efaaf5e5-2e89-4c23-a375-08d614174f79 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: AM5PR0402MB2914 Subject: [dpdk-dev] [PATCH v4] 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:39:28 -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 | 118 +++++++++++++++++++++++-- 2 files changed, 117 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..d83976628 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,78 @@ 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], size_t 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) + return; + + 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) { + rte_free(buf); + return; + } + + 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); + } + } + } + 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 +1032,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 +1042,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 +1050,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 +1069,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 +1095,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 +1123,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 +1191,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 +1235,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