From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50074.outbound.protection.outlook.com [40.107.5.74]) by dpdk.org (Postfix) with ESMTP id 64F5F4C94 for ; Mon, 10 Sep 2018 18:56:14 +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=uKuoOffAmsPDKPXY4oVd9tdQrbdD85G7MXuhb1k5BUk=; b=N63H9Metkozap5L7XOEb6Aa8cFzykrjiMYV0g9JQnXkE4FlnNEKOywTybcjNnJszAHM7xqsej0Y9AtXrSyFVx/MyxfNdpu3loHEJ3glv8yP27/txyZNITesQeo3z+y0jaRJUVvs1+q0euiyZghARWVYL80uca2p2EA1YgQ/O8Jw= Received: from AM5PR0402CA0022.eurprd04.prod.outlook.com (2603:10a6:203:90::32) by HE1PR0402MB2923.eurprd04.prod.outlook.com (2603:10a6:3:da::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.15; Mon, 10 Sep 2018 16:56:12 +0000 Received: from AM5EUR02FT040.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e1e::205) by AM5PR0402CA0022.outlook.office365.com (2603:10a6:203:90::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1122.16 via Frontend Transport; Mon, 10 Sep 2018 16:56:12 +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 AM5EUR02FT040.mail.protection.outlook.com (10.152.9.8) 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; Mon, 10 Sep 2018 16:56:11 +0000 Received: from super-tessie-2.tellabs.fi (lb03 [172.23.229.177]) by usnapvlsmtp01.coriant.com (Postfix) with ESMTP id 20CFF401FE; Mon, 10 Sep 2018 11:56:09 -0500 (CDT) From: Juhamatti Kuusisaari To: CC: , Juhamatti Kuusisaari Date: Mon, 10 Sep 2018 19:55:14 +0300 Message-ID: <20180910165514.908-1-juhamatti.kuusisaari@coriant.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180906165613.25848-1-juhamatti.kuusisaari@coriant.com> References: <20180906165613.25848-1-juhamatti.kuusisaari@coriant.com> 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)(346002)(136003)(376002)(39860400002)(396003)(2980300002)(438002)(189003)(199004)(36756003)(26826003)(76176011)(51416003)(6266002)(478600001)(5660300001)(107886003)(53936002)(68736007)(2906002)(486006)(86362001)(316002)(97736004)(4326008)(106002)(81156014)(1076002)(8676002)(8936002)(16586007)(81166006)(50226002)(2351001)(126002)(106466001)(54906003)(53416004)(77096007)(336012)(26005)(356003)(2616005)(47776003)(11346002)(446003)(426003)(69596002)(6666003)(6916009)(104016004)(48376002)(50466002)(14444005)(305945005)(476003); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0402MB2923; H:usnapvlsmtp01.coriant.com; FPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; AM5EUR02FT040; 1:eVj3AM1tH/DsxY5aT8yJV6nRKOyMPJlKrKnYobeKG5FZWuIG97tpUQdu82xBrNyLZd7QKIOFUp+sM182N64ioNwEIzznkpxfjK1RZ4dVyA9lmj/82jayrFUoLCo4hPsz MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 336e7790-e70f-4c1f-3c2b-08d6173e5050 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060); SRVR:HE1PR0402MB2923; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2923; 3:SF/7ZnuZC/B+68w2qHyYCdEUunDNf7kG3x47ZCK/T7Ml4AXs+MNdvZLL9+YW9JVxrLPOntYol3ue7GwsaX15jdDogQ5J60kz/Tpnu0GjYrktZ8qQN8cyl79nAt8EQKqXaYq818a0fqsVnnXmelxCfCMaINwcxXYCK1r1Vf/x/0she5CClaPgoeLns8BaI+G24neyExK8BeyZr3trURnutkoWFUkf9oyBGb3JWJIBfr0J2L1xRuIXJX0aLwCv7C1A1art8p3mDs+/8Ys0B6ECtjq2irgpQU/lBN1iFyTq+tZhysLfCxACu30RIaAPG8vJEjXAe6qzaqXNgaSoJRWhDfOQoipG1i7htJJgNRqylp4=; 25:57TQAmPqk4BVt+YtOtGKgSsKCk78phJDa4Ht1NaLJPpTRXtruNpl9XsAXTdwHqtOgqbUrQuB4o6rrJrdtyb3ISAZO6Nvmg04F9PEbEqzyvz4L0Tu5kFcBDiPHunuZCLQ3hUwGKIpdxmyy56XAHBWjEPSwj5PvpazJiFHVWs+8mp6oLH2ZoVuNF9+LU7s95NRIR4gxfva47q2rCI9C0DN5u8UF508PPCVAlMTdU/IerQH90GchxF5ltGKMQGq2orgUDF0HsR2cEUzk1uDP23UT03c4PRYJQpIlCawAscMr2DgiZZIgWZs6cHOmNvjAY60Uabb3faHDlUyl9OQWW9yzA== X-MS-TrafficTypeDiagnostic: HE1PR0402MB2923: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2923; 31:aoYw/BEm/8FowHKeK0J/CzbmrgVPGdlP41VOIY8poYhavtkANZJUlldf3jv8brNhFfEgWcs0d5oig9Z4Mm1EJf7VZ1PIY0J3cYFINcQRJd0bjTDSnhHuj/AbTDw1tFE0WfcSB/M/8IbmbRh8Cr8igLA+wrmo+CAIMhUFN3Xi9TOFhNIJralhvqzYjXyVAt520a5RLH7RAy/oWo108JYASc+aHl7HB6y56OnKeiwCxFM=; 20:S09J/e09rXYUdRs41AnoKbqGkp44cJFwaGmsxsFgWogBMCqRawY1wIOG3O7hCUSCgCp6mHmStzbbNwqXluu28H9DCmB+kEMF5kEbVfSMlluy31ssdAKfD9GA7F5aNkFRE7ZxAv8dRm1hFEqiEyD5zsozTHQkid5pGAuaSyLh0Ks1H+XWGFhY4zg38A2dmkxO/Nt1UiTuKjR+ldGxhUnLnOyvy15Xyea2xitoPU6DZ3GZY8OC0uLAN1PFTXmcMbRvoXDKDyavkqSePeVyZi71Fy1qSY1nqZo8o2MjMnbpqSCBVAbgMSEXpb9yrWe75JRERAm2tZ+q0DIQ4CJo8eSImGPuXGPfGVxvxv+/TuMdpMUUGPPI/yshX0/vrEL/knEVmvAbI449X/GaWNnb7FUGXXC6/5uXdODnZdX4UR94OSRf8Ur/CVI2LxbZ9I8D/HRQqKu6pFMA5MqfTosBuJmPGkg3d1SwSv/+DBbktboZ+011uL969bspmCbV7y0OQfF2vyW4dBtqKylAQGqfUyOY58DGYuhsblqNm0xaYuA1Jk8qJZ1C0xrPf2YaQc2Wxo3cIkRV53Wvpt3FdPsbsKx5PRUXj8PAl1evhzGTkEVHjCA= 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)(3231311)(944501410)(52105095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201708071742011)(7699050); SRVR:HE1PR0402MB2923; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0402MB2923; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2923; 4:piw9VJlTsbM5kF4bVrGSh5LQnIu788w4EN6YdmtdPHf0ZprXCp0r83Ta7qBlW1p9kSk2brBMis5rUiQ05bSQjxhJtbPDG9A1SSLo+1y/9MQ2HrpMoO8C0+uQQITDg7AD41nbX3JqKbz++9vvwmu+qVWE1o6dZKPwvKsKZW7SYnmbNpV2vNChqWNr/nalx71hAjiGqKNlRVqPWMWBXe8HMimdI9ytvU7cYreQgXLdaaj3hg6xf7Ci6mxZvWpc1iPqRSYsijk1tdDvNr9f8r8CXnc5bQdl3hpEd+H8VOjFWPIU4rKmrYt9pVfvNJpGN9Bt X-Forefront-PRVS: 07915F544A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0402MB2923; 23:o+QAfI2KuDcv4y5CQyQsyZimAZVmdg/UuG13uck?= =?us-ascii?Q?wq/nxZa/rpfnuA/auREilVzKzlWkQslW5FLLS5JkUatyHl4VaxQ98BEiCCKn?= =?us-ascii?Q?3gY1gsOFZr3Yqf4xW2H7h9aqwUZ/LmVCsw9DDhQ8VH/RE9x9Bnhl1jAavpQp?= =?us-ascii?Q?rgTtTXZYYEppGyCHvYaA6OPGDl1+uRclahOQNsS2/SekUYz3OYrXkNK07QsU?= =?us-ascii?Q?kUTF9YeF3//VqPnKbdX/vUgQDAmV01MCDls8PpBwh9kMhrY00WXy6uak0rWS?= =?us-ascii?Q?PoQOnQquR/tjtKgcvlRZdMM4NUDOUY8ZpwrtNHzr9SN34ZrwfiFNSpIPLd6I?= =?us-ascii?Q?FXsQOKP7tVJll8iXUCW83wLl1+VW1PDkK7tnRTj2hmVtGWWvhfpl8KSHrVly?= =?us-ascii?Q?yOxjTBWK5Dx6kdDiJBWlB5aBun8SWxXIPz/JhXV3Axae1z651hjjsQ3q7Otf?= =?us-ascii?Q?FFzRCJv4p089ENFFvLwTQRM/MbKmjvA8JsUDF/ibX6vEc8bTfXwwU6YZJdAu?= =?us-ascii?Q?gJo8EEJ0YjWvJVC7/OgC1h/pGot1qvh8RqvFsYzQwYxB3Ol8RYQTs+VVsu8v?= =?us-ascii?Q?Y++9BlGAsZQ7iFJXpI8twRjBOiUE88fbNVRQXlKZYF7G+Roc8os7Twtp9XIS?= =?us-ascii?Q?cW4F7QpUXbONxXRhC9c72qRvtdIddLaJ/uVwHSCRZypYwlBFyc5X1AfW7rVr?= =?us-ascii?Q?moDEh/CM9bnNl0yhcMeS1kg4bvDzI5nwvm10yDwkI0XcJb0z5e8aoKhPfH0/?= =?us-ascii?Q?zPhFK4DoFwAW1DELkVdrpilUGPXvR3dJdtVW2/ozP+0sZe5EQ0bXBbNjGLkl?= =?us-ascii?Q?JjsVCw+sCLS2E3FxLF9cICoy8zX+acCwMpa29sDNseSL99MAInzAUmjM4tpM?= =?us-ascii?Q?f1aW6pzDs91sLtm/umR75U5qt0ERWxbpw9Q4esT/eslPm2q9ldEuHkSZhmJY?= =?us-ascii?Q?8b7Y6QJAS4yMPpvD42DbkXB+a31sJ447XqRGgJAMrkPoCdm0MV8LhsdfK887?= =?us-ascii?Q?i6a6+jFC3efI8KtzK9yWZdwa3I34yFk3CpJEEHJA1Dh+u/78eLFfAIv1K9dL?= =?us-ascii?Q?vhvYm+4YqT5+hzRYDxHjzUivfS3Uq9Yy09unEDckl94Dan/wBbWGBUE9dvHi?= =?us-ascii?Q?xn30YfTdfB2r9AOaswd3wX9UkLEAWQwWJ5YYihJ988jDymmRe2/x0FZ0oIxI?= =?us-ascii?Q?67jror2AhiN1l7MVzvgrHK/S0t4tOyhZZou9q4Hc1Ar6DEqCshWZ3laerCg?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Antispam-Message-Info: G1/B9hPELgiM9hu0oCT2iXq6MrgwxEf9YnruF06FnDWyxFHo9pTZ7PCQUz5OxUb/JCtcJyXBjiD0ZPbdHKO2FmebAMwHY5U3ytT8dUoxYI/D6aHWeQs6Gz0Tsl9DTmIDkiyU5k0lwcikJT3yqM4lBxnOfzh1FysDqTcolSAGVyUpc6pdBz/w+AP3u1QJmavlDmOy69OREbA/5Xj8szREyyt+Hp2wEcRcw1W2jv121vn5oFwGbF5Ns9zi6zqcQ4A0E9mgsShDRjjjNVjsBrM2L6nDTL9ZefBd+4PXaU4bACzCKRXt/BtICRTBwYnjuS7SF14vHK5YglkAIJFUN17u48U1vRYeRzxGXAHj0gNbUGYAXMBTLjFETnapXmKMr7lW9MDO65CQ7XgNq03Km8ud+A== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0402MB2923; 6:HBXPh53HGYqvKPCGsNaFCao8yXjz+wLrolKpMISCjdHvcE/HAuI15sHP2fdZj3pSzBrQuO/uP3exn5k6SAreUEF9mz+cm5o56mvQXilet/MhiRrysS2dyyGlvwMhQLjCC6jSJpV+a/Icl2/oy/i0OQglaiiWoZoSlrCVMvkRRJ+U4dvcZFVa5K7YedH2DlJ3FDCZoUiw3as1Xs7x6Kc25cdk3fT5KdfWVXVzpYq3jT24JMCXzgFneyCIzMKCNmTT1khRzd2QAxoommezMrwQnrR4Lc1fOkr5/rdJPq4O8+LKJh/F23qENiMjrRqvX8+cCXLpxnGQdZeuxDLwuJeIKQQRffq2t7DZ/VFmot0PblNeIqHX9bzObmx8qrX9/3drObrdl4htle28fReLO+HDNv9peegMLW7BEpyGb2HHRbYIH6OS2RUqtLIgvalsEGQ9OryjDFCGLQ7wczYGTJbk9w==; 5:fFt2YSUNraHcu25gMgq2v/s0UhD+GyIe6l+6jQqxp+jmUvoL8o8ZLtDCqwXOGpI1Dgm8eMwgHw2mnBD+Z6HO71ih0mzsoQbqcQejD3WtFiiXbSYCl8W7kSmmSwn/h32x+Es05fOc5hra2lpzy47RVtWNx5ZeXyt4yQGXIdPalhs=; 7:skhCgXt/qu7CKhMECEdUHOIBRavlJ/A+wPXsKrvsQQbo9GMSnMduqNGzS8Uz44r4gflW8esJJpOxtGz8lx1Iv+QnLKaaCh5K21kcCA75CX3J5xAQw69CVl7t6RRG67iMAF2vX5qZve7rnCv9DVCR//KdzKwJ+x9dSki2fwwMwfEqeBWZY38vZ8ROoC3denSyqd2onfx0ob9XnF6yVtrKCEIA37WHqWIiPC3HaFrt6f4/KlV2I/SYBoCzenbnefLD SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: coriant.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2018 16:56:11.9850 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 336e7790-e70f-4c1f-3c2b-08d6173e5050 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: HE1PR0402MB2923 Subject: [dpdk-dev] [PATCH v6] 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: Mon, 10 Sep 2018 16:56:14 -0000 At the moment, PCAP interfaces use dummy MAC by default. This change adds support for selecting PCAP physical interface MAC with phy_mac=1 devarg. This allows to setup packet flows using the physical interface MAC. Signed-off-by: Juhamatti Kuusisaari --- v6: * Review changes: * Clarified devarg applicability (applies to iface-only) * Introduced detailed documentation for the devarg * More checkpatches-fixes v5-v3: * FreeBSD related compilation and checkpatches-fixes v2: * FreeBSD support introduced * Release notes added v1: * phy_mac=1 devarg support --- doc/guides/nics/pcap_ring.rst | 9 ++ doc/guides/rel_notes/release_18_11.rst | 4 + drivers/net/pcap/rte_eth_pcap.c | 120 +++++++++++++++++++++++-- 3 files changed, 128 insertions(+), 5 deletions(-) diff --git a/doc/guides/nics/pcap_ring.rst b/doc/guides/nics/pcap_ring.rst index 879e5430f..604ca4300 100644 --- a/doc/guides/nics/pcap_ring.rst +++ b/doc/guides/nics/pcap_ring.rst @@ -96,6 +96,15 @@ The different stream types are: iface=eth0 +Runtime Config Options +^^^^^^^^^^^^^^^^^^^^^^ + +- ``Use PCAP interface physical MAC`` + + In case ``iface=`` configuration is set, user may want to use the selected interface's physical MAC + address. This can be done with a ``devarg`` ``phy_mac``, for example:: + iface=eth0,phy_mac=1 + Examples of Usage ^^^^^^^^^^^^^^^^^ 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..96ff61781 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 + +#if defined(__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,80 @@ 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; + struct ifreq ifr; + + PMD_LOG(INFO, "Setting phy MAC for %s\n", if_name); +#if !defined(__FreeBSD__) + int if_fd = socket(AF_INET, SOCK_DGRAM, 0); + if (if_fd == -1) + return; + + 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); +#elif defined(__FreeBSD__) + 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_malloc(NULL, len, 0); + 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 +1034,10 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev, else (*internals)->if_index = if_nametoindex(pair->value); + if (phy_mac && pair) /* phy_mac arg is applied only to iface */ + eth_pcap_update_mac(pair->value, eth_dev, + vdev->device.numa_node); + return 0; } @@ -962,7 +1045,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 +1053,8 @@ 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 +1073,19 @@ 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) { + const int phy_mac = atoi(value); + int *enable_phy_mac = extra_args; + + 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); @@ -1031,6 +1129,16 @@ pmd_pcap_probe(struct rte_vdev_device *dev) * reading / writing */ if (rte_kvargs_count(kvlist, ETH_PCAP_IFACE_ARG) == 1) { + /* + * We check first whether we want to use phy MAC of the 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; + } ret = rte_kvargs_process(kvlist, ETH_PCAP_IFACE_ARG, &open_rx_tx_iface, &pcaps); @@ -1084,7 +1192,8 @@ 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 +1237,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