get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 44533,
    "url": "https://patches.dpdk.org/api/patches/44533/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180910165514.908-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": "<20180910165514.908-1-juhamatti.kuusisaari@coriant.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180910165514.908-1-juhamatti.kuusisaari@coriant.com",
    "date": "2018-09-10T16:55:14",
    "name": "[v6] net/pcap: physical interface MAC address support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "54a60cd7d0729bd1623b890e2336e93bf996e1c0",
    "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": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180910165514.908-1-juhamatti.kuusisaari@coriant.com/mbox/",
    "series": [
        {
            "id": 1259,
            "url": "https://patches.dpdk.org/api/series/1259/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1259",
            "date": "2018-09-10T16:55:14",
            "name": "[v6] net/pcap: physical interface MAC address support",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/1259/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/44533/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/44533/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 B9A674C94;\n\tMon, 10 Sep 2018 18:56:15 +0200 (CEST)",
            "from EUR03-VE1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr50074.outbound.protection.outlook.com [40.107.5.74])\n\tby dpdk.org (Postfix) with ESMTP id 64F5F4C94\n\tfor <dev@dpdk.org>; Mon, 10 Sep 2018 18:56:14 +0200 (CEST)",
            "from AM5PR0402CA0022.eurprd04.prod.outlook.com\n\t(2603:10a6:203:90::32) by HE1PR0402MB2923.eurprd04.prod.outlook.com\n\t(2603:10a6:3:da::16) with Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.15;\n\tMon, 10 Sep 2018 16:56:12 +0000",
            "from AM5EUR02FT040.eop-EUR02.prod.protection.outlook.com\n\t(2a01:111:f400:7e1e::205) by AM5PR0402CA0022.outlook.office365.com\n\t(2603:10a6:203:90::32) with Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1122.16 via\n\tFrontend Transport; Mon, 10 Sep 2018 16:56:12 +0000",
            "from usnapvlsmtp01.coriant.com (204.154.131.209) by\n\tAM5EUR02FT040.mail.protection.outlook.com (10.152.9.8) with Microsoft\n\tSMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.20.1101.10 via Frontend Transport; Mon, 10 Sep 2018 16:56:11 +0000",
            "from super-tessie-2.tellabs.fi (lb03 [172.23.229.177])\n\tby usnapvlsmtp01.coriant.com (Postfix) with ESMTP id 20CFF401FE;\n\tMon, 10 Sep 2018 11:56:09 -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=uKuoOffAmsPDKPXY4oVd9tdQrbdD85G7MXuhb1k5BUk=;\n\tb=N63H9Metkozap5L7XOEb6Aa8cFzykrjiMYV0g9JQnXkE4FlnNEKOywTybcjNnJszAHM7xqsej0Y9AtXrSyFVx/MyxfNdpu3loHEJ3glv8yP27/txyZNITesQeo3z+y0jaRJUVvs1+q0euiyZghARWVYL80uca2p2EA1YgQ/O8Jw=",
        "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": "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; \n\tEFV:NLI; SFV:NSPM;\n\tSFS:(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);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0402MB2923;\n\tH:usnapvlsmtp01.coriant.com; \n\tFPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; AM5EUR02FT040;\n\t1:eVj3AM1tH/DsxY5aT8yJV6nRKOyMPJlKrKnYobeKG5FZWuIG97tpUQdu82xBrNyLZd7QKIOFUp+sM182N64ioNwEIzznkpxfjK1RZ4dVyA9lmj/82jayrFUoLCo4hPsz",
            "1; HE1PR0402MB2923;\n\t3:SF/7ZnuZC/B+68w2qHyYCdEUunDNf7kG3x47ZCK/T7Ml4AXs+MNdvZLL9+YW9JVxrLPOntYol3ue7GwsaX15jdDogQ5J60kz/Tpnu0GjYrktZ8qQN8cyl79nAt8EQKqXaYq818a0fqsVnnXmelxCfCMaINwcxXYCK1r1Vf/x/0she5CClaPgoeLns8BaI+G24neyExK8BeyZr3trURnutkoWFUkf9oyBGb3JWJIBfr0J2L1xRuIXJX0aLwCv7C1A1art8p3mDs+/8Ys0B6ECtjq2irgpQU/lBN1iFyTq+tZhysLfCxACu30RIaAPG8vJEjXAe6qzaqXNgaSoJRWhDfOQoipG1i7htJJgNRqylp4=;\n\t25:57TQAmPqk4BVt+YtOtGKgSsKCk78phJDa4Ht1NaLJPpTRXtruNpl9XsAXTdwHqtOgqbUrQuB4o6rrJrdtyb3ISAZO6Nvmg04F9PEbEqzyvz4L0Tu5kFcBDiPHunuZCLQ3hUwGKIpdxmyy56XAHBWjEPSwj5PvpazJiFHVWs+8mp6oLH2ZoVuNF9+LU7s95NRIR4gxfva47q2rCI9C0DN5u8UF508PPCVAlMTdU/IerQH90GchxF5ltGKMQGq2orgUDF0HsR2cEUzk1uDP23UT03c4PRYJQpIlCawAscMr2DgiZZIgWZs6cHOmNvjAY60Uabb3faHDlUyl9OQWW9yzA==",
            "1; HE1PR0402MB2923;\n\t31:aoYw/BEm/8FowHKeK0J/CzbmrgVPGdlP41VOIY8poYhavtkANZJUlldf3jv8brNhFfEgWcs0d5oig9Z4Mm1EJf7VZ1PIY0J3cYFINcQRJd0bjTDSnhHuj/AbTDw1tFE0WfcSB/M/8IbmbRh8Cr8igLA+wrmo+CAIMhUFN3Xi9TOFhNIJralhvqzYjXyVAt520a5RLH7RAy/oWo108JYASc+aHl7HB6y56OnKeiwCxFM=;\n\t20:S09J/e09rXYUdRs41AnoKbqGkp44cJFwaGmsxsFgWogBMCqRawY1wIOG3O7hCUSCgCp6mHmStzbbNwqXluu28H9DCmB+kEMF5kEbVfSMlluy31ssdAKfD9GA7F5aNkFRE7ZxAv8dRm1hFEqiEyD5zsozTHQkid5pGAuaSyLh0Ks1H+XWGFhY4zg38A2dmkxO/Nt1UiTuKjR+ldGxhUnLnOyvy15Xyea2xitoPU6DZ3GZY8OC0uLAN1PFTXmcMbRvoXDKDyavkqSePeVyZi71Fy1qSY1nqZo8o2MjMnbpqSCBVAbgMSEXpb9yrWe75JRERAm2tZ+q0DIQ4CJo8eSImGPuXGPfGVxvxv+/TuMdpMUUGPPI/yshX0/vrEL/knEVmvAbI449X/GaWNnb7FUGXXC6/5uXdODnZdX4UR94OSRf8Ur/CVI2LxbZ9I8D/HRQqKu6pFMA5MqfTosBuJmPGkg3d1SwSv/+DBbktboZ+011uL969bspmCbV7y0OQfF2vyW4dBtqKylAQGqfUyOY58DGYuhsblqNm0xaYuA1Jk8qJZ1C0xrPf2YaQc2Wxo3cIkRV53Wvpt3FdPsbsKx5PRUXj8PAl1evhzGTkEVHjCA=",
            "1; HE1PR0402MB2923;\n\t4:piw9VJlTsbM5kF4bVrGSh5LQnIu788w4EN6YdmtdPHf0ZprXCp0r83Ta7qBlW1p9kSk2brBMis5rUiQ05bSQjxhJtbPDG9A1SSLo+1y/9MQ2HrpMoO8C0+uQQITDg7AD41nbX3JqKbz++9vvwmu+qVWE1o6dZKPwvKsKZW7SYnmbNpV2vNChqWNr/nalx71hAjiGqKNlRVqPWMWBXe8HMimdI9ytvU7cYreQgXLdaaj3hg6xf7Ci6mxZvWpc1iPqRSYsijk1tdDvNr9f8r8CXnc5bQdl3hpEd+H8VOjFWPIU4rKmrYt9pVfvNJpGN9Bt",
            "=?us-ascii?Q?1; HE1PR0402MB2923;\n\t23:o+QAfI2KuDcv4y5CQyQsyZimAZVmdg/UuG13uck?=\n\twq/nxZa/rpfnuA/auREilVzKzlWkQslW5FLLS5JkUatyHl4VaxQ98BEiCCKn3gY1gsOFZr3Yqf4xW2H7h9aqwUZ/LmVCsw9DDhQ8VH/RE9x9Bnhl1jAavpQprgTtTXZYYEppGyCHvYaA6OPGDl1+uRclahOQNsS2/SekUYz3OYrXkNK07QsUkUTF9YeF3//VqPnKbdX/vUgQDAmV01MCDls8PpBwh9kMhrY00WXy6uak0rWSPoQOnQquR/tjtKgcvlRZdMM4NUDOUY8ZpwrtNHzr9SN34ZrwfiFNSpIPLd6IFXsQOKP7tVJll8iXUCW83wLl1+VW1PDkK7tnRTj2hmVtGWWvhfpl8KSHrVlyyOxjTBWK5Dx6kdDiJBWlB5aBun8SWxXIPz/JhXV3Axae1z651hjjsQ3q7OtfFFzRCJv4p089ENFFvLwTQRM/MbKmjvA8JsUDF/ibX6vEc8bTfXwwU6YZJdAugJo8EEJ0YjWvJVC7/OgC1h/pGot1qvh8RqvFsYzQwYxB3Ol8RYQTs+VVsu8vY++9BlGAsZQ7iFJXpI8twRjBOiUE88fbNVRQXlKZYF7G+Roc8os7Twtp9XIScW4F7QpUXbONxXRhC9c72qRvtdIddLaJ/uVwHSCRZypYwlBFyc5X1AfW7rVrmoDEh/CM9bnNl0yhcMeS1kg4bvDzI5nwvm10yDwkI0XcJb0z5e8aoKhPfH0/zPhFK4DoFwAW1DELkVdrpilUGPXvR3dJdtVW2/ozP+0sZe5EQ0bXBbNjGLklJjsVCw+sCLS2E3FxLF9cICoy8zX+acCwMpa29sDNseSL99MAInzAUmjM4tpMf1aW6pzDs91sLtm/umR75U5qt0ERWxbpw9Q4esT/eslPm2q9ldEuHkSZhmJY8b7Y6QJAS4yMPpvD42DbkXB+a31sJ447XqRGgJAMrkPoCdm0MV8LhsdfK887i6a6+jFC3efI8KtzK9yWZdwa3I34yFk3CpJEEHJA1Dh+u/78eLFfAIv1K9dLvhvYm+4YqT5+hzRYDxHjzUivfS3Uq9Yy09unEDckl94Dan/wBbWGBUE9dvHixn30YfTdfB2r9AOaswd3wX9UkLEAWQwWJ5YYihJ988jDymmRe2/x0FZ0oIxI67jror2AhiN1l7MVzvgrHK/S0t4tOyhZZou9q4Hc1Ar6DEqCshWZ3laerCg==",
            "1; HE1PR0402MB2923;\n\t6:HBXPh53HGYqvKPCGsNaFCao8yXjz+wLrolKpMISCjdHvcE/HAuI15sHP2fdZj3pSzBrQuO/uP3exn5k6SAreUEF9mz+cm5o56mvQXilet/MhiRrysS2dyyGlvwMhQLjCC6jSJpV+a/Icl2/oy/i0OQglaiiWoZoSlrCVMvkRRJ+U4dvcZFVa5K7YedH2DlJ3FDCZoUiw3as1Xs7x6Kc25cdk3fT5KdfWVXVzpYq3jT24JMCXzgFneyCIzMKCNmTT1khRzd2QAxoommezMrwQnrR4Lc1fOkr5/rdJPq4O8+LKJh/F23qENiMjrRqvX8+cCXLpxnGQdZeuxDLwuJeIKQQRffq2t7DZ/VFmot0PblNeIqHX9bzObmx8qrX9/3drObrdl4htle28fReLO+HDNv9peegMLW7BEpyGb2HHRbYIH6OS2RUqtLIgvalsEGQ9OryjDFCGLQ7wczYGTJbk9w==;\n\t5:fFt2YSUNraHcu25gMgq2v/s0UhD+GyIe6l+6jQqxp+jmUvoL8o8ZLtDCqwXOGpI1Dgm8eMwgHw2mnBD+Z6HO71ih0mzsoQbqcQejD3WtFiiXbSYCl8W7kSmmSwn/h32x+Es05fOc5hra2lpzy47RVtWNx5ZeXyt4yQGXIdPalhs=;\n\t7:skhCgXt/qu7CKhMECEdUHOIBRavlJ/A+wPXsKrvsQQbo9GMSnMduqNGzS8Uz44r4gflW8esJJpOxtGz8lx1Iv+QnLKaaCh5K21kcCA75CX3J5xAQw69CVl7t6RRG67iMAF2vX5qZve7rnCv9DVCR//KdzKwJ+x9dSki2fwwMwfEqeBWZY38vZ8ROoC3denSyqd2onfx0ob9XnF6yVtrKCEIA37WHqWIiPC3HaFrt6f4/KlV2I/SYBoCzenbnefLD"
        ],
        "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;\n\tRULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060);\n\tSRVR:HE1PR0402MB2923; ",
        "X-MS-TrafficTypeDiagnostic": "HE1PR0402MB2923:",
        "X-Microsoft-Antispam-PRVS": "<HE1PR0402MB292386DE274E69C6FE2306029D050@HE1PR0402MB2923.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)(5005006)(8121501046)(93006095)(93004095)(3231311)(944501410)(52105095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201708071742011)(7699050);\n\tSRVR:HE1PR0402MB2923; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0402MB2923; ",
        "X-Forefront-PRVS": "07915F544A",
        "X-Microsoft-Antispam-Message-Info": "G1/B9hPELgiM9hu0oCT2iXq6MrgwxEf9YnruF06FnDWyxFHo9pTZ7PCQUz5OxUb/JCtcJyXBjiD0ZPbdHKO2FmebAMwHY5U3ytT8dUoxYI/D6aHWeQs6Gz0Tsl9DTmIDkiyU5k0lwcikJT3yqM4lBxnOfzh1FysDqTcolSAGVyUpc6pdBz/w+AP3u1QJmavlDmOy69OREbA/5Xj8szREyyt+Hp2wEcRcw1W2jv121vn5oFwGbF5Ns9zi6zqcQ4A0E9mgsShDRjjjNVjsBrM2L6nDTL9ZefBd+4PXaU4bACzCKRXt/BtICRTBwYnjuS7SF14vHK5YglkAIJFUN17u48U1vRYeRzxGXAHj0gNbUGYAXMBTLjFETnapXmKMr7lW9MDO65CQ7XgNq03Km8ud+A==",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "coriant.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "10 Sep 2018 16:56:11.9850\n\t(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;\n\tIp=[204.154.131.209]; \n\tHelo=[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\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": "At the moment, PCAP interfaces use dummy MAC by default. This change\nadds support for selecting PCAP physical interface MAC with phy_mac=1\ndevarg. This allows to setup packet flows using the physical interface\nMAC.\n\nSigned-off-by: Juhamatti Kuusisaari <juhamatti.kuusisaari@coriant.com>\n\n---\n v6:\n  * Review changes:\n    * Clarified devarg applicability (applies to iface-only)\n    * Introduced detailed documentation for the devarg\n    * More checkpatches-fixes\n v5-v3:\n  * FreeBSD related compilation and checkpatches-fixes\n v2:\n  * FreeBSD support introduced\n  * Release notes added\n v1:\n  * phy_mac=1 devarg support\n---\n doc/guides/nics/pcap_ring.rst          |   9 ++\n doc/guides/rel_notes/release_18_11.rst |   4 +\n drivers/net/pcap/rte_eth_pcap.c        | 120 +++++++++++++++++++++++--\n 3 files changed, 128 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/doc/guides/nics/pcap_ring.rst b/doc/guides/nics/pcap_ring.rst\nindex 879e5430f..604ca4300 100644\n--- a/doc/guides/nics/pcap_ring.rst\n+++ b/doc/guides/nics/pcap_ring.rst\n@@ -96,6 +96,15 @@ The different stream types are:\n \n         iface=eth0\n \n+Runtime Config Options\n+^^^^^^^^^^^^^^^^^^^^^^\n+\n+- ``Use PCAP interface physical MAC``\n+\n+ In case ``iface=`` configuration is set, user may want to use the selected interface's physical MAC\n+ address. This can be done with a ``devarg`` ``phy_mac``, for example::\n+ iface=eth0,phy_mac=1\n+\n Examples of Usage\n ^^^^^^^^^^^^^^^^^\n \ndiff --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..96ff61781 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+#if defined(__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,80 @@ pmd_init_internals(struct rte_vdev_device *vdev,\n \treturn 0;\n }\n \n+static void\n+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+\tstruct ifreq ifr;\n+\n+\tPMD_LOG(INFO, \"Setting phy MAC for %s\\n\", if_name);\n+#if !defined(__FreeBSD__)\n+\tint if_fd = socket(AF_INET, SOCK_DGRAM, 0);\n+\tif (if_fd == -1)\n+\t\treturn;\n+\n+\tstrlcpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));\n+\tif (!ioctl(if_fd, SIOCGIFHWADDR, &ifr)) {\n+\t\tmac_addrs = rte_zmalloc_socket(NULL, ETHER_ADDR_LEN,\n+\t\t\t\t0, numa_node);\n+\t\tif (mac_addrs) {\n+\t\t\t(*eth_dev)->data->mac_addrs = mac_addrs;\n+\t\t\trte_memcpy((*eth_dev)->data->mac_addrs,\n+\t\t\t\t\tifr.ifr_addr.sa_data,\n+\t\t\t\t\tETHER_ADDR_LEN);\n+\t\t}\n+\t}\n+\tclose(if_fd);\n+#elif defined(__FreeBSD__)\n+\tint mib[6];\n+\tsize_t 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\treturn;\n+\n+\tif (len > 0) {\n+\t\tstruct if_msghdr\t*ifm;\n+\t\tstruct sockaddr_dl\t*sdl;\n+\n+\t\tbuf = rte_malloc(NULL, len, 0);\n+\t\tif (buf) {\n+\t\t\tif (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {\n+\t\t\t\trte_free(buf);\n+\t\t\t\treturn;\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+\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 +1034,10 @@ 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) /* phy_mac arg is applied only to iface */\n+\t\teth_pcap_update_mac(pair->value, eth_dev,\n+\t\t\t\tvdev->device.numa_node);\n+\n \treturn 0;\n }\n \n@@ -962,7 +1045,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 +1053,8 @@ 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,\n+\t\t\t&internals, phy_mac, &eth_dev);\n \n \tif (ret < 0)\n \t\treturn ret;\n@@ -989,6 +1073,19 @@ 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) {\n+\t\tconst int phy_mac = atoi(value);\n+\t\tint *enable_phy_mac = extra_args;\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@@ -1031,6 +1129,16 @@ pmd_pcap_probe(struct rte_vdev_device *dev)\n \t * reading / writing\n \t */\n \tif (rte_kvargs_count(kvlist, ETH_PCAP_IFACE_ARG) == 1) {\n+\t\t/*\n+\t\t * We check first whether we want to use phy MAC of the PCAP\n+\t\t * interface.\n+\t\t */\n+\t\tif (rte_kvargs_count(kvlist, ETH_PCAP_PHY_MAC_ARG)) {\n+\t\t\tret = rte_kvargs_process(kvlist, ETH_PCAP_PHY_MAC_ARG,\n+\t\t\t\t\t&select_phy_mac, &phy_mac);\n+\t\t\tif (ret < 0)\n+\t\t\t\tgoto free_kvlist;\n+\t\t}\n \n \t\tret = rte_kvargs_process(kvlist, ETH_PCAP_IFACE_ARG,\n \t\t\t\t&open_rx_tx_iface, &pcaps);\n@@ -1084,7 +1192,8 @@ 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,\n+\t\t\tphy_mac, is_tx_pcap);\n \n free_kvlist:\n \trte_kvargs_free(kvlist);\n@@ -1128,7 +1237,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": [
        "v6"
    ]
}