get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/44329/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 44329,
    "url": "https://patches.dpdk.org/api/patches/44329/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180906160850.29231-1-juhamatti.kuusisaari@coriant.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180906160850.29231-1-juhamatti.kuusisaari@coriant.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180906160850.29231-1-juhamatti.kuusisaari@coriant.com",
    "date": "2018-09-06T16:08:50",
    "name": "[v2] net/pcap: physical interface MAC address support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "922418d1672e346879a014a82892ef3149136662",
    "submitter": {
        "id": 510,
        "url": "https://patches.dpdk.org/api/people/510/?format=api",
        "name": "Kuusisaari, Juhamatti (Infinera - FI/Espoo)",
        "email": "juhamatti.kuusisaari@coriant.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180906160850.29231-1-juhamatti.kuusisaari@coriant.com/mbox/",
    "series": [
        {
            "id": 1209,
            "url": "https://patches.dpdk.org/api/series/1209/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1209",
            "date": "2018-09-06T16:08:50",
            "name": "[v2] net/pcap: physical interface MAC address support",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/1209/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/44329/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/44329/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 38F91326D;\n\tThu,  6 Sep 2018 18:09:14 +0200 (CEST)",
            "from EUR04-HE1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr70085.outbound.protection.outlook.com [40.107.7.85])\n\tby dpdk.org (Postfix) with ESMTP id 95A093256\n\tfor <dev@dpdk.org>; Thu,  6 Sep 2018 18:09:13 +0200 (CEST)",
            "from VI1PR04CA0055.eurprd04.prod.outlook.com (2603:10a6:802:2::26)\n\tby DB6PR0402MB2918.eurprd04.prod.outlook.com (2603:10a6:4:9b::13)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.18;\n\tThu, 6 Sep 2018 16:09:11 +0000",
            "from AM5EUR02FT055.eop-EUR02.prod.protection.outlook.com\n\t(2a01:111:f400:7e1e::208) by VI1PR04CA0055.outlook.office365.com\n\t(2603:10a6:802:2::26) with Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1122.15 via\n\tFrontend Transport; Thu, 6 Sep 2018 16:09:11 +0000",
            "from usnapvlsmtp01.coriant.com (204.154.131.209) by\n\tAM5EUR02FT055.mail.protection.outlook.com (10.152.9.191) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.20.1101.10 via Frontend Transport; Thu, 6 Sep 2018 16:09:10 +0000",
            "from super-tessie-2.tellabs.fi (lb03 [172.23.229.177])\n\tby usnapvlsmtp01.coriant.com (Postfix) with ESMTP id E4A8740262;\n\tThu,  6 Sep 2018 11:09:08 -0500 (CDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=coriant.onmicrosoft.com; s=selector1-coriant-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=Ee6EKlh/NF7+x96tMXt97VnUT9v1jl9y+PMRAjegQuA=;\n\tb=SN9QR3DgTzpmZVVJTD+0X/qmZwzu4PwUyIVCdV/XcUwBI1THMvWPWEQHOKhOumxd6D4D7qWygw25CB2agmjmcGwyxggJCsWXGBdoFG1yg2Huxf/YYRMpKfzx0iOB62TU3wbqtZVyx2ifj1eBv/vSPCDCQ7C/wzdlW5swGujQDqI=",
        "Authentication-Results": "spf=pass (sender IP is 204.154.131.209)\n\tsmtp.mailfrom=coriant.com; coriant.com; dkim=none (message not signed)\n\theader.d=none;coriant.com; dmarc=bestguesspass action=none\n\theader.from=coriant.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of coriant.com designates\n\t204.154.131.209 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=204.154.131.209; helo=usnapvlsmtp01.coriant.com;",
        "From": "Juhamatti Kuusisaari <Juhamatti.Kuusisaari@coriant.com>",
        "To": "<ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>, Juhamatti Kuusisaari <juhamatti.kuusisaari@coriant.com>",
        "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; \n\tEFV:NLI; SFV:NSPM;\n\tSFS:(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);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0402MB2918;\n\tH:usnapvlsmtp01.coriant.com; \n\tFPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; AM5EUR02FT055;\n\t1:1TiHtOztaUXo/PHJnwsOoc9NkiMZw4Y2n2/rErC7f3y+dlalOR2no0F/qiWqPWwow/SF1H2CYaECz/ecoo89OtBiQW/ppsCR0zZxGBP3yuqYQLXackjVL5Cd8uCg9wAi",
            "1; DB6PR0402MB2918;\n\t3:TgNQAqFU1PnyGyxXx7Y3pQbvKssPDV5Y+nXHa1YAePcGCNDOxIioAzXF1oxK39+AJXRaq4RdNiWkADsjRTnsVVFhNcsMhC3QvuohA5j3TjFLfVD5XaSRW/8QmWqlPuE3w0x/qZIs5u0pFnTimNJ7RADSF8NEwqhKZgwrnvagR6gABtDH52uo1bFkcu+EW1beYGeEnYlWXKXwpEZyJ6E7tk5xTzpZAo+1lg8vQ6dLCkHxdwbDrZp7UN+9g/rXGccT5R3FelBFkwuBjFXVkC1I5edtOOvJGr7pTO8+OxPKNAPVRRqKYiHepiHlV4GyUIkYibtvwT9Hs0KYeChDEjzhXpR+QboK4PaTkHUMMpQLMC8=;\n\t25:r9rd4E4pClvVpoSShaz2vSiOXH4X9F6wG8bYqymVz5rYkCc2RfNfd+zL03rl5y4jNEAaOHCqSzyHAaYAMMxdL2/ccdQfZTh7lDxGY7NoQekZiyl2SiuUZubj7tYwkE4itMNKSaNa+frHkPLxs3yYsFy4lwtnXyfKbbxJ3z5sIqI3B7MZvficqyu7D1vMp/o+MSqGewBK9CXWr03+yyGbqWxe2tEW57jElIZd2r5qT1Q6mqTnIOYWLBD8JarxMI7chl5zylrd0VX3v06Fvno3PO9AKQP6SeRwmsjzFEe/SbEaMegGZe/BPOCVrW8O0uwnIRQLx8nTOWcNod/Y4t9xEw==",
            "1; DB6PR0402MB2918;\n\t31:Zy+z5AMpMNrQwOZkeI/iMBDNUw2kNxq7qMDrn8c3zVuSeEGIiE4y+bcEjJwQOi4FtnNJNEsiyviTFxDA6whrJEopdGq4G2COXsKTN9Ey1qBq/t1J39lAJIGv4Qwyn9apOC6sR27BZpvuj1SxlKZrsvP5E1Z/oIzRlMXZuLDMo5Oe1C/gRAu084Ka0oL7HvygGhz1pnv2K0rAX2T5YN1s+uQWyEWDprd6B82oxpQ0+ks=;\n\t20:M7uGMYoAj/At7HigGki5wXNcPzsG8mrYUQS5oJklSL0HzmeHGdmcG1TPIWeACxgQfI4aLjqRQmHZCV48othv7au6DDSi7wHCSQOs7h95ob1cLrLQmzd5Vuk0xokGTvLV0Ld2sP0/o3V+aIxaHTcRhxW4KtY5Jqi7rfzHq5gwfgYlKQGFpSyDqPqT5sWzAuT2Zmv+u/C64c46hYCwrMimBqb+bsqvS3KSqjYAFAo1EzhDAjP9b4+ZeSoLo7hFihxfRkyOb+fwUpMuZ9PHu0p1uCbnTT4kybC5F4If/U+0Ym1a1ZWcEXbYgHQKN+K++YreXjqwrcvOgDh5DBJJKS/uDLhSaKhpRqv2/JtUR1d7CAo9NgRoN7OrFxBC+EAPyTSQHxRX/7GuiRxCkAovxlati3ZOcMzxtqbFjgPnEC17LpVd5JpGaamR/Y1utPLwsNEqyBFUR0XhRq9NZPa/dYq+BvzIEqHpA6Wh2qZdnbLX1tBmj68HClBQybSZQGPrPE51b6oOfo9APHKelsKZSAhOewF0A7RCMQLQnWjPqMBAWJRLmheDHM1XuK0C7MtXF9heiGvsoeNmEovXj/n5Gwahc4HIVqCflcnqUCzYlTSF2VU=",
            "1; DB6PR0402MB2918;\n\t4:LtZdOlS+IkAuQiS2/YlvLkQDr+H1ztVfLG9jKkSMjg2vIq0wf8Kbpj+IQnvPyRzJEXo0neB4RuVOiwEeh4MGX4hI5fdDkDnQdv7cVNJhE0JGk8afSQUBpLDtLrLtihObvIhNuWpU9Q6lUxdrF1Q8BedR+KgJJ93T6GBWdKVKYRIv9PrAtHo96//6HmOPNYlG16WxpFmD14Z8a/ak/KBVtbqxl4aq970yDZdskzItqygR1J51DbM/8XLYK1EkcSEpCIxvg7uoca9/h6xj11WUOFFAlFSNizNfWA8X8jd2BIIPWX67EeWoGdvlhkumQhua",
            "=?us-ascii?Q?1; DB6PR0402MB2918;\n\t23:nzUs49Ohe/63UZW2I95CybOR/dqAFw0QaEILbLh?=\n\tss+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=",
            "1; DB6PR0402MB2918;\n\t6:ZKO5+2iRgU1waj9ZhXVP7vFQarAvWOzdeFNACW0zv9dhcf26Xihpyzs9uxRCWdnkQ/BdRL39Bg02cxsg8fiB+QyPVaa6FJRg//2FTR7AzXyi73BBWwg8o1p34lDTu68AWYyYaUbh2nTOKll1chSy3fs5hTYlDhjtgQsaXAexXAgkrB6t8Ep6Fv+08o4RRXh29kqZNtUD4hoIVTyZl2ciajIu+GXGdarY0eXLaBU07jeuXmX2eaKiBn7U3nVanya3VW2AhtsWK0dxlbrfdUwLGqQe77fbN/glz0Q72iyRTWuXqG1UFykeO/O6jldMXJbPWKVN71umSQ8rLj6wyYJyjm+9rn+aFUXy+mpLDY+QLgdigYOTjdZ7XXRc2tlALPc9M2Xm5+PQTCCs06yraorAohiQMz46SwF0bNlwhbFk1h4BPtmUX32kwp0/6B79UpE8VZW85dUu0Zrtanc8F52cog==;\n\t5:OTQVGnzavcLv7YorIWxcKvq2JgUp5GE01Ctf/msHhsMpv1cQkK5FDoB8mZgfe07IRNO2bm7B5xXcD4vnuIm2KOeJAtehuK+OxLhRl2uzS2OzBK1SEOdsvJT2pXqTpo89zP2O9smnie7KT5O7zelFDlw0mAyMo/SMSmpXzpQORms=;\n\t7:wnLRIp3zAYoKxL369yNISr2cvsIX+n7WPVKeKAAYq6oFpdvlWh4C8qKy2Dji3Y+ZpEU3fpEpQb+oVGG/SJgKVUwnXP78+/qIprnlMJqjSgTUzhgeGgfWvQVUiitPjANjRG/SHSEL+aiUDVd3KvAIcgnMFUwiGl0HP5VrZkjlRYuVOg1MR8CZZQPYkqu22OsLiD3mzjmtaCBpZ6xQAVg9tFv8M4HsHKvlEFjhdu+d9QI60YMua7TF7nr/5yz4mT6I"
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "c9048759-1bc0-4701-9c77-08d6141314d7",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060);\n\tSRVR:DB6PR0402MB2918; ",
        "X-MS-TrafficTypeDiagnostic": "DB6PR0402MB2918:",
        "X-Microsoft-Antispam-PRVS": "<DB6PR0402MB29180232A5E4A40BB78AF3229D010@DB6PR0402MB2918.eurprd04.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(51653755401839);",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(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);\n\tSRVR:DB6PR0402MB2918; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0402MB2918; ",
        "X-Forefront-PRVS": "0787459938",
        "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==",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "coriant.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Sep 2018 16:09:10.3612\n\t(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;\n\tIp=[204.154.131.209]; \n\tHelo=[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\n\tsupport",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Support for PCAP physical interface MAC with phy_mac=1 devarg.\n\nSigned-off-by: Juhamatti Kuusisaari <juhamatti.kuusisaari@coriant.com>\n---\n doc/guides/rel_notes/release_18_11.rst |   4 +\n drivers/net/pcap/rte_eth_pcap.c        | 119 +++++++++++++++++++++++--\n 2 files changed, 118 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst\nindex 3ae6b3f58..70966740a 100644\n--- a/doc/guides/rel_notes/release_18_11.rst\n+++ b/doc/guides/rel_notes/release_18_11.rst\n@@ -54,6 +54,10 @@ New Features\n      Also, make sure to start the actual text at the margin.\n      =========================================================\n \n+* **Added a devarg to use PCAP interface physical MAC address.**\n+  A new devarg ``phy_mac`` was introduced to allow users to use physical\n+  MAC address of the selected PCAP interface.\n+\n \n API Changes\n -----------\ndiff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c\nindex e8810a171..1c3517eea 100644\n--- a/drivers/net/pcap/rte_eth_pcap.c\n+++ b/drivers/net/pcap/rte_eth_pcap.c\n@@ -7,6 +7,14 @@\n #include <time.h>\n \n #include <net/if.h>\n+#include <sys/socket.h>\n+#include <sys/ioctl.h>\n+#include <unistd.h>\n+\n+#ifdef __FreeBSD__\n+#include <sys/sysctl.h>\n+#include <net/if_dl.h>\n+#endif\n \n #include <pcap.h>\n \n@@ -17,6 +25,7 @@\n #include <rte_malloc.h>\n #include <rte_mbuf.h>\n #include <rte_bus_vdev.h>\n+#include <rte_string_fns.h>\n \n #define RTE_ETH_PCAP_SNAPSHOT_LEN 65535\n #define RTE_ETH_PCAP_SNAPLEN ETHER_MAX_JUMBO_FRAME_LEN\n@@ -29,6 +38,7 @@\n #define ETH_PCAP_RX_IFACE_IN_ARG \"rx_iface_in\"\n #define ETH_PCAP_TX_IFACE_ARG \"tx_iface\"\n #define ETH_PCAP_IFACE_ARG    \"iface\"\n+#define ETH_PCAP_PHY_MAC_ARG  \"phy_mac\"\n \n #define ETH_PCAP_ARG_MAXLEN\t64\n \n@@ -87,6 +97,7 @@ static const char *valid_arguments[] = {\n \tETH_PCAP_RX_IFACE_IN_ARG,\n \tETH_PCAP_TX_IFACE_ARG,\n \tETH_PCAP_IFACE_ARG,\n+\tETH_PCAP_PHY_MAC_ARG,\n \tNULL\n };\n \n@@ -904,12 +915,79 @@ pmd_init_internals(struct rte_vdev_device *vdev,\n \treturn 0;\n }\n \n+static void eth_pcap_update_mac(const char *if_name, struct rte_eth_dev **eth_dev,\n+\t\tconst unsigned int numa_node)\n+{\n+\tvoid *mac_addrs;\n+\tPMD_LOG(INFO, \"Setting phy MAC for %s\\n\",\n+\t\t\tif_name);\n+#ifndef __FreeBSD__\n+\tint if_fd = socket(AF_INET, SOCK_DGRAM, 0);\n+\tif (if_fd != -1)\n+\t{\n+\t\tstruct ifreq ifr;\n+\t\tstrlcpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));\n+\t\tif (!ioctl(if_fd, SIOCGIFHWADDR, &ifr)) {\n+\t\t\tmac_addrs = rte_zmalloc_socket(NULL, ETHER_ADDR_LEN,\n+\t\t\t\t\t0, numa_node);\n+\t\t\tif(mac_addrs) {\n+\t\t\t\t(*eth_dev)->data->mac_addrs = mac_addrs;\n+\t\t\t\trte_memcpy((*eth_dev)->data->mac_addrs,\n+\t\t\t\t\t\tifr.ifr_addr.sa_data,\n+\t\t\t\t\t\tETHER_ADDR_LEN);\n+\t\t\t}\n+\t\t}\n+\t\tclose(if_fd);\n+\t}\n+#else\n+\tint mib[6], len = 0;\n+\tchar *buf = NULL;\n+\n+\tmib[0] = CTL_NET;\n+\tmib[1] = AF_ROUTE;\n+\tmib[2] = 0;\n+\tmib[3] = AF_LINK;\n+\tmib[4] = NET_RT_IFLIST;\n+\tmib[5] = if_nametoindex(if_name);\n+\n+\tif (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {\n+\t\tgoto cleanup;\n+\t}\n+\tif (len > 0) {\n+\t\tstruct if_msghdr\t*ifm;\n+\t\tstruct sockaddr_dl\t*sdl;\n+\n+\t\tbuf = rte_zmalloc_socket(NULL, len,\n+\t\t\t\t0, numa_node);\n+\t\tif (buf) {\n+\t\t\tif (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {\n+\t\t\t\tgoto cleanup;\n+\t\t\t}\n+\n+\t\t\tifm = (struct if_msghdr *)buf;\n+\t\t\tsdl = (struct sockaddr_dl *)(ifm + 1);\n+\t\t\tmac_addrs = rte_zmalloc_socket(NULL, ETHER_ADDR_LEN,\n+\t\t\t\t\t0, numa_node);\n+\t\t\tif (mac_addrs) {\n+\t\t\t\t(*eth_dev)->data->mac_addrs = mac_addrs;\n+\t\t\t\trte_memcpy((*eth_dev)->data->mac_addrs,\n+\t\t\t\t\t\tLLADDR(sdl),\n+\t\t\t\t\t\tETHER_ADDR_LEN);\n+\t\t\t}\n+\t\t}\n+\t}\n+cleanup:\n+\tif (buf)\n+\t\trte_free(buf);\n+#endif\n+}\n+\n static int\n eth_from_pcaps_common(struct rte_vdev_device *vdev,\n \t\tstruct pmd_devargs *rx_queues, const unsigned int nb_rx_queues,\n \t\tstruct pmd_devargs *tx_queues, const unsigned int nb_tx_queues,\n \t\tstruct rte_kvargs *kvlist, struct pmd_internals **internals,\n-\t\tstruct rte_eth_dev **eth_dev)\n+\t\tconst int phy_mac, struct rte_eth_dev **eth_dev)\n {\n \tstruct rte_kvargs_pair *pair = NULL;\n \tunsigned int k_idx;\n@@ -955,6 +1033,9 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev,\n \telse\n \t\t(*internals)->if_index = if_nametoindex(pair->value);\n \n+\tif (phy_mac && pair)\n+\t\teth_pcap_update_mac(pair->value, eth_dev, vdev->device.numa_node);\n+\n \treturn 0;\n }\n \n@@ -962,7 +1043,7 @@ static int\n eth_from_pcaps(struct rte_vdev_device *vdev,\n \t\tstruct pmd_devargs *rx_queues, const unsigned int nb_rx_queues,\n \t\tstruct pmd_devargs *tx_queues, const unsigned int nb_tx_queues,\n-\t\tstruct rte_kvargs *kvlist, int single_iface,\n+\t\tstruct rte_kvargs *kvlist, int single_iface, int phy_mac,\n \t\tunsigned int using_dumpers)\n {\n \tstruct pmd_internals *internals = NULL;\n@@ -970,7 +1051,7 @@ eth_from_pcaps(struct rte_vdev_device *vdev,\n \tint ret;\n \n \tret = eth_from_pcaps_common(vdev, rx_queues, nb_rx_queues,\n-\t\ttx_queues, nb_tx_queues, kvlist, &internals, &eth_dev);\n+\t\t\ttx_queues, nb_tx_queues, kvlist, &internals, phy_mac, &eth_dev);\n \n \tif (ret < 0)\n \t\treturn ret;\n@@ -989,6 +1070,22 @@ eth_from_pcaps(struct rte_vdev_device *vdev,\n \treturn 0;\n }\n \n+static int\n+select_phy_mac(const char *key, const char *value, void *extra_args)\n+{\n+\tif (extra_args && strcmp(key, ETH_PCAP_PHY_MAC_ARG) == 0) {\n+\t\tconst int phy_mac = atoi(value);\n+\t\tint *enable_phy_mac = extra_args;\n+\n+\t\tif (phy_mac != 0 && phy_mac != 1)\n+\t\t\tPMD_LOG(WARNING, \"Value should be 0 or 1, set it as 1!\");\n+\n+\t\tif (phy_mac)\n+\t\t\t*enable_phy_mac = 1;\n+\t}\n+\treturn 0;\n+}\n+\n static int\n pmd_pcap_probe(struct rte_vdev_device *dev)\n {\n@@ -999,6 +1096,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev)\n \tstruct pmd_devargs dumpers = {0};\n \tstruct rte_eth_dev *eth_dev;\n \tint single_iface = 0;\n+\tint phy_mac = 0;\n \tint ret;\n \n \tname = rte_vdev_device_name(dev);\n@@ -1026,6 +1124,16 @@ pmd_pcap_probe(struct rte_vdev_device *dev)\n \tif (kvlist == NULL)\n \t\treturn -1;\n \n+\t/*\n+\t * We check whether we want to use phy MAC of pcap interface.\n+\t */\n+\tif (rte_kvargs_count(kvlist, ETH_PCAP_PHY_MAC_ARG)) {\n+\t\tret = rte_kvargs_process(kvlist, ETH_PCAP_PHY_MAC_ARG,\n+\t\t\t\t&select_phy_mac, &phy_mac);\n+\t\tif (ret < 0)\n+\t\t\tgoto free_kvlist;\n+\t}\n+\n \t/*\n \t * If iface argument is passed we open the NICs and use them for\n \t * reading / writing\n@@ -1084,7 +1192,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev)\n \n create_eth:\n \tret = eth_from_pcaps(dev, &pcaps, pcaps.num_of_queue, &dumpers,\n-\t\tdumpers.num_of_queue, kvlist, single_iface, is_tx_pcap);\n+\t\t\tdumpers.num_of_queue, kvlist, single_iface, phy_mac, is_tx_pcap);\n \n free_kvlist:\n \trte_kvargs_free(kvlist);\n@@ -1128,7 +1236,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_pcap,\n \tETH_PCAP_RX_IFACE_ARG \"=<ifc> \"\n \tETH_PCAP_RX_IFACE_IN_ARG \"=<ifc> \"\n \tETH_PCAP_TX_IFACE_ARG \"=<ifc> \"\n-\tETH_PCAP_IFACE_ARG \"=<ifc>\");\n+\tETH_PCAP_IFACE_ARG \"=<ifc> \"\n+\tETH_PCAP_PHY_MAC_ARG \"=<int>\");\n \n RTE_INIT(eth_pcap_init_log)\n {\n",
    "prefixes": [
        "v2"
    ]
}